Drizzled Public API Documentation

user_commands.cc
1 /*
2  * Copyright (C) 2010 Joseph Daly <skinny.moey@gmail.com>
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  *
8  * * Redistributions of source code must retain the above copyright notice,
9  * this list of conditions and the following disclaimer.
10  * * Redistributions in binary form must reproduce the above copyright notice,
11  * this list of conditions and the following disclaimer in the documentation
12  * and/or other materials provided with the distribution.
13  * * Neither the name of Joseph Daly nor the names of its contributors
14  * may be used to endorse or promote products derived from this software
15  * without specific prior written permission.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
21  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
27  * THE POSSIBILITY OF SUCH DAMAGE.
28  */
29 
30 #include "user_commands.h"
31 
32 using namespace drizzled;
33 using namespace std;
34 
35 const char* UserCommands::USER_COUNTS[] =
36 {
37  "COUNT_SELECT",
38  "COUNT_DELETE",
39  "COUNT_UPDATE",
40  "COUNT_INSERT",
41  "COUNT_ROLLBACK",
42  "COUNT_COMMIT",
43  "COUNT_CREATE",
44  "COUNT_ALTER",
45  "COUNT_DROP",
46  "COUNT_ADMIN"
47 };
48 
49 const char* UserCommands::COM_STATUS_VARS[] =
50 {
51  "select",
52  "create_table",
53  "create_index",
54  "alter_table",
55  "update",
56  "insert",
57  "insert_select",
58  "delete",
59  "truncate",
60  "drop_table",
61  "drop_index",
62  "show_create",
63  "show_create_db",
64  "load",
65  "set_option",
66  "unlock_tables",
67  "change_db",
68  "create_db",
69  "drop_db",
70  "alter_db",
71  "replace",
72  "replace_select",
73  "check",
74  "flush",
75  "kill",
76  "analyze",
77  "rollback",
78  "rollback_to_savepoint",
79  "commit",
80  "savepoint",
81  "release_savepoint",
82  "begin",
83  "rename_table",
84  "show_warns",
85  "empty_query",
86  "show_errors",
87  "checksum"
88 };
89 
90 UserCommands::UserCommands()
91 {
92  init();
93 }
94 
95 void UserCommands::init()
96 {
97  vector<uint64_t>::iterator it= vector_of_command_counts.begin();
98  for (int j=0; j < SQLCOM_END; ++j)
99  {
100  it= vector_of_command_counts.insert(it, 0);
101  }
102  vector_of_command_counts.resize(SQLCOM_END);
103 }
104 
105 void UserCommands::incrementCount(uint32_t index, uint32_t i)
106 {
107  uint64_t *count= &(vector_of_command_counts.at(index));
108  *count= *count + i;
109 }
110 
111 uint64_t UserCommands::getCount(uint32_t index)
112 {
113  uint64_t *count= &(vector_of_command_counts.at(index));
114  return *count;
115 }
116 
117 uint64_t UserCommands::getUserCount(uint32_t index)
118 {
119  switch (index)
120  {
121  case COUNT_SELECT:
122  return getCount(SQLCOM_SELECT);
123  case COUNT_DELETE:
124  return getCount(SQLCOM_DELETE);
125  case COUNT_UPDATE:
126  return getCount(SQLCOM_UPDATE);
127  case COUNT_INSERT:
128  return getCount(SQLCOM_INSERT);
129  case COUNT_ROLLBACK:
130  return getCount(SQLCOM_ROLLBACK);
131  case COUNT_COMMIT:
132  return getCount(SQLCOM_COMMIT);
133  case COUNT_CREATE:
134  return getCount(SQLCOM_CREATE_TABLE);
135  case COUNT_ALTER:
136  return getCount(SQLCOM_ALTER_TABLE);
137  case COUNT_DROP:
138  return getCount(SQLCOM_DROP_TABLE);
139  default:
140  return 0;
141  }
142 }
143 
144 void UserCommands::reset()
145 {
146  for (uint32_t j= 0; j < SQLCOM_END; ++j)
147  {
148  uint64_t *count= &(vector_of_command_counts.at(j));
149  *count= 0;
150  }
151 }
152 
153 UserCommands::UserCommands(const UserCommands &user_commands)
154 {
155  init();
156 
157  for (uint32_t j= 0; j < SQLCOM_END; ++j)
158  {
159  uint64_t *my_count= &(vector_of_command_counts.at(j));
160  uint64_t other_count= user_commands.vector_of_command_counts.at(j);
161  *my_count= other_count;
162  }
163 }
164 
165 void UserCommands::merge(UserCommands *user_commands)
166 {
167  for (uint32_t j= 0; j < SQLCOM_END; ++j)
168  {
169  uint64_t *my_count= &(vector_of_command_counts.at(j));
170  uint64_t other_count= user_commands->vector_of_command_counts.at(j);
171  *my_count= *my_count + other_count;
172  }
173 }
174 
175 void UserCommands::logCommand(enum_sql_command sql_command)
176 {
177  if (sql_command < SQLCOM_END)
178  {
179  incrementCount(sql_command);
180  }
181 }
TODO: Rename this file - func.h is stupid.