Merge lp:~linuxjedi/drizzle/drizzle-bug-621603 into lp:~drizzle-trunk/drizzle/development
- drizzle-bug-621603
- Merge into development
Status: | Merged | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Merged at revision: | 1751 | ||||||||||||
Proposed branch: | lp:~linuxjedi/drizzle/drizzle-bug-621603 | ||||||||||||
Merge into: | lp:~drizzle-trunk/drizzle/development | ||||||||||||
Diff against target: |
851 lines (+391/-15) 18 files modified
drizzled/session.cc (+2/-0) drizzled/statistics_variables.h (+1/-0) drizzled/status_helper.cc (+1/-1) plugin/drizzle_protocol/drizzle_protocol.cc (+113/-0) plugin/drizzle_protocol/drizzle_protocol.h (+6/-0) plugin/drizzle_protocol/plugin.ini (+1/-1) plugin/drizzle_protocol/table_function.h (+57/-0) plugin/information_schema_dictionary/tests/r/tables.result (+8/-0) plugin/mysql_protocol/mysql_protocol.cc (+111/-1) plugin/mysql_protocol/mysql_protocol.h (+7/-0) plugin/mysql_protocol/plugin.ini (+1/-1) plugin/mysql_protocol/table_function.h (+52/-0) plugin/schema_dictionary/tests/r/data_dictionary.result (+17/-1) plugin/session_dictionary/processlist.cc (+2/-2) plugin/session_dictionary/tests/r/data_dictionary.result (+2/-2) tests/r/create.result (+4/-4) tests/r/data_dictionary_like_info.result (+1/-1) tests/r/information_schema.result (+5/-1) |
||||||||||||
To merge this branch: | bzr merge lp:~linuxjedi/drizzle/drizzle-bug-621603 | ||||||||||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Andrew Hutchings | Needs Fixing | ||
Drizzle Merge Team | Pending | ||
Review via email: mp+33308@code.launchpad.net |
Commit message
Description of the change
Fixes for:
Bug#621603: Connections status variable very wrong
Bug#621947: show processlist filldown
Brian Aker (brianaker) wrote : | # |
Andrew Hutchings (linuxjedi) wrote : | # |
Interesting question. Well, I guess the obvious thing to do would be to have each protocol plugin have a sysvar. Unfortunately to me it looks like plugin specific sysvars are broken. So...
Andrew Hutchings (linuxjedi) wrote : | # |
(sorry, I meant status variables)
Monty Taylor (mordred) wrote : | # |
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
On 08/23/2010 12:12 AM, Andrew Hutchings wrote:
> Interesting question. Well, I guess the obvious thing to do would be
> to have each protocol plugin have a sysvar. Unfortunately to me it
> looks like plugin specific sysvars are broken. So...
Aroo???
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://
iEYEARECAAYFAkx
yx8AnAh3suPZN8a
=FnG8
-----END PGP SIGNATURE-----
Monty Taylor (mordred) wrote : | # |
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
On 08/23/2010 12:12 AM, Andrew Hutchings wrote:
> (sorry, I meant status variables)
Aroo???
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://
iEYEARECAAYFAkx
xL4An3kZPwtsISh
=kj+G
-----END PGP SIGNATURE-----
Andrew Hutchings (linuxjedi) wrote : | # |
Monty: see bug#622576
Andrew Hutchings (linuxjedi) wrote : | # |
ok, so I like Brian's plan. I will put this merge request on hold and put the new bug as a blocker to the connections counter.
Andrew Hutchings (linuxjedi) wrote : | # |
OK, so, in this branch to be reviewed:
1. Bug#621947: show processlist filldown
* The processlist table now accepts null values so when null is provided it doesn't use the previous value.
2. Bug#628284: --mysql option broken
* drizzle client can now use the drizzle protocol (when using --mysql=0)
3. Bug#621603: Connections status variable off by one
* the global status counter is now fixed
* the mysql protocol now has data_dictionary
* the drizzle protocol now has data_dictionary
- 1733. By Andrew Hutchings
-
Merge trunk into branch
- 1734. By Andrew Hutchings
-
Fix tests
Lee Bieber (kalebral-deactivatedaccount) wrote : | # |
Latest branch is failing to build on many platforms:
../plugin/
../plugin/
python ../extra/cpplint.py --filter=
Done processing ../plugin/
Preview Diff
1 | === modified file 'drizzled/session.cc' | |||
2 | --- drizzled/session.cc 2010-08-24 16:45:09 +0000 | |||
3 | +++ drizzled/session.cc 2010-09-09 06:18:43 +0000 | |||
4 | @@ -538,6 +538,7 @@ | |||
5 | 538 | current_global_counters.max_used_connections= connection_count; | 538 | current_global_counters.max_used_connections= connection_count; |
6 | 539 | } | 539 | } |
7 | 540 | 540 | ||
8 | 541 | current_global_counters.connections++; | ||
9 | 541 | thread_id= variables.pseudo_thread_id= global_thread_id++; | 542 | thread_id= variables.pseudo_thread_id= global_thread_id++; |
10 | 542 | 543 | ||
11 | 543 | LOCK_thread_count.lock(); | 544 | LOCK_thread_count.lock(); |
12 | @@ -1730,6 +1731,7 @@ | |||
13 | 1730 | 1731 | ||
14 | 1731 | flush_status_time= time((time_t*) 0); | 1732 | flush_status_time= time((time_t*) 0); |
15 | 1732 | current_global_counters.max_used_connections= 1; /* We set it to one, because we know we exist */ | 1733 | current_global_counters.max_used_connections= 1; /* We set it to one, because we know we exist */ |
16 | 1734 | current_global_counters.connections= 0; | ||
17 | 1733 | } | 1735 | } |
18 | 1734 | 1736 | ||
19 | 1735 | user_var_entry *Session::getVariable(LEX_STRING &name, bool create_if_not_exists) | 1737 | user_var_entry *Session::getVariable(LEX_STRING &name, bool create_if_not_exists) |
20 | 1736 | 1738 | ||
21 | === modified file 'drizzled/statistics_variables.h' | |||
22 | --- drizzled/statistics_variables.h 2010-08-09 18:29:06 +0000 | |||
23 | +++ drizzled/statistics_variables.h 2010-09-09 06:18:43 +0000 | |||
24 | @@ -33,6 +33,7 @@ | |||
25 | 33 | typedef struct global_counters | 33 | typedef struct global_counters |
26 | 34 | { | 34 | { |
27 | 35 | uint64_t max_used_connections; | 35 | uint64_t max_used_connections; |
28 | 36 | uint64_t connections; | ||
29 | 36 | uint64_t locks_immediate; | 37 | uint64_t locks_immediate; |
30 | 37 | uint64_t locks_waited; | 38 | uint64_t locks_waited; |
31 | 38 | } global_counters; | 39 | } global_counters; |
32 | 39 | 40 | ||
33 | === modified file 'drizzled/status_helper.cc' | |||
34 | --- drizzled/status_helper.cc 2010-08-09 18:29:06 +0000 | |||
35 | +++ drizzled/status_helper.cc 2010-09-09 06:18:43 +0000 | |||
36 | @@ -134,7 +134,7 @@ | |||
37 | 134 | {"Aborted_connects", (char*) offsetof(system_status_var, aborted_connects), SHOW_LONGLONG_STATUS}, | 134 | {"Aborted_connects", (char*) offsetof(system_status_var, aborted_connects), SHOW_LONGLONG_STATUS}, |
38 | 135 | {"Bytes_received", (char*) offsetof(system_status_var, bytes_received), SHOW_LONGLONG_STATUS}, | 135 | {"Bytes_received", (char*) offsetof(system_status_var, bytes_received), SHOW_LONGLONG_STATUS}, |
39 | 136 | {"Bytes_sent", (char*) offsetof(system_status_var, bytes_sent), SHOW_LONGLONG_STATUS}, | 136 | {"Bytes_sent", (char*) offsetof(system_status_var, bytes_sent), SHOW_LONGLONG_STATUS}, |
41 | 137 | {"Connections", (char*) &global_thread_id, SHOW_INT_NOFLUSH}, | 137 | {"Connections", (char*) ¤t_global_counters.connections, SHOW_LONGLONG}, |
42 | 138 | {"Created_tmp_disk_tables", (char*) offsetof(system_status_var, created_tmp_disk_tables), SHOW_LONGLONG_STATUS}, | 138 | {"Created_tmp_disk_tables", (char*) offsetof(system_status_var, created_tmp_disk_tables), SHOW_LONGLONG_STATUS}, |
43 | 139 | {"Created_tmp_tables", (char*) offsetof(system_status_var, created_tmp_tables), SHOW_LONGLONG_STATUS}, | 139 | {"Created_tmp_tables", (char*) offsetof(system_status_var, created_tmp_tables), SHOW_LONGLONG_STATUS}, |
44 | 140 | {"Flush_commands", (char*) &refresh_version, SHOW_INT_NOFLUSH}, | 140 | {"Flush_commands", (char*) &refresh_version, SHOW_INT_NOFLUSH}, |
45 | 141 | 141 | ||
46 | === modified file 'plugin/drizzle_protocol/drizzle_protocol.cc' | |||
47 | --- plugin/drizzle_protocol/drizzle_protocol.cc 2010-08-21 07:08:08 +0000 | |||
48 | +++ plugin/drizzle_protocol/drizzle_protocol.cc 2010-09-09 06:18:43 +0000 | |||
49 | @@ -33,6 +33,7 @@ | |||
50 | 33 | #include "errmsg.h" | 33 | #include "errmsg.h" |
51 | 34 | #include "drizzle_protocol.h" | 34 | #include "drizzle_protocol.h" |
52 | 35 | #include "options.h" | 35 | #include "options.h" |
53 | 36 | #include "table_function.h" | ||
54 | 36 | 37 | ||
55 | 37 | #define PROTOCOL_VERSION 10 | 38 | #define PROTOCOL_VERSION 10 |
56 | 38 | 39 | ||
57 | @@ -54,6 +55,8 @@ | |||
58 | 54 | static uint32_t buffer_length; | 55 | static uint32_t buffer_length; |
59 | 55 | static char* bind_address= NULL; | 56 | static char* bind_address= NULL; |
60 | 56 | 57 | ||
61 | 58 | static plugin::TableFunction* drizzle_status_table_function_ptr= NULL; | ||
62 | 59 | |||
63 | 57 | ListenDrizzleProtocol::~ListenDrizzleProtocol() | 60 | ListenDrizzleProtocol::~ListenDrizzleProtocol() |
64 | 58 | { | 61 | { |
65 | 59 | /* This is strdup'd from the options */ | 62 | /* This is strdup'd from the options */ |
66 | @@ -92,6 +95,10 @@ | |||
67 | 92 | return new (nothrow) ClientDrizzleProtocol(new_fd, using_mysql41_protocol); | 95 | return new (nothrow) ClientDrizzleProtocol(new_fd, using_mysql41_protocol); |
68 | 93 | } | 96 | } |
69 | 94 | 97 | ||
70 | 98 | drizzled::atomic<uint64_t> ClientDrizzleProtocol::connectionCount; | ||
71 | 99 | drizzled::atomic<uint64_t> ClientDrizzleProtocol::failedConnections; | ||
72 | 100 | drizzled::atomic<uint64_t> ClientDrizzleProtocol::connected; | ||
73 | 101 | |||
74 | 95 | ClientDrizzleProtocol::ClientDrizzleProtocol(int fd, bool using_mysql41_protocol_arg): | 102 | ClientDrizzleProtocol::ClientDrizzleProtocol(int fd, bool using_mysql41_protocol_arg): |
75 | 96 | using_mysql41_protocol(using_mysql41_protocol_arg) | 103 | using_mysql41_protocol(using_mysql41_protocol_arg) |
76 | 97 | { | 104 | { |
77 | @@ -150,6 +157,7 @@ | |||
78 | 150 | { | 157 | { |
79 | 151 | drizzleclient_net_close(&net); | 158 | drizzleclient_net_close(&net); |
80 | 152 | drizzleclient_net_end(&net); | 159 | drizzleclient_net_end(&net); |
81 | 160 | connected.decrement(); | ||
82 | 153 | } | 161 | } |
83 | 154 | } | 162 | } |
84 | 155 | 163 | ||
85 | @@ -157,6 +165,9 @@ | |||
86 | 157 | { | 165 | { |
87 | 158 | bool connection_is_valid; | 166 | bool connection_is_valid; |
88 | 159 | 167 | ||
89 | 168 | connectionCount.increment(); | ||
90 | 169 | connected.increment(); | ||
91 | 170 | |||
92 | 160 | /* Use "connect_timeout" value during connection phase */ | 171 | /* Use "connect_timeout" value during connection phase */ |
93 | 161 | drizzleclient_net_set_read_timeout(&net, connect_timeout); | 172 | drizzleclient_net_set_read_timeout(&net, connect_timeout); |
94 | 162 | drizzleclient_net_set_write_timeout(&net, connect_timeout); | 173 | drizzleclient_net_set_write_timeout(&net, connect_timeout); |
95 | @@ -168,6 +179,7 @@ | |||
96 | 168 | else | 179 | else |
97 | 169 | { | 180 | { |
98 | 170 | sendError(session->main_da.sql_errno(), session->main_da.message()); | 181 | sendError(session->main_da.sql_errno(), session->main_da.message()); |
99 | 182 | failedConnections.increment(); | ||
100 | 171 | return false; | 183 | return false; |
101 | 172 | } | 184 | } |
102 | 173 | 185 | ||
103 | @@ -818,6 +830,10 @@ | |||
104 | 818 | 830 | ||
105 | 819 | static int init(module::Context &context) | 831 | static int init(module::Context &context) |
106 | 820 | { | 832 | { |
107 | 833 | drizzle_status_table_function_ptr= new DrizzleProtocolStatus; | ||
108 | 834 | |||
109 | 835 | context.add(drizzle_status_table_function_ptr); | ||
110 | 836 | |||
111 | 821 | const module::option_map &vm= context.getOptions(); | 837 | const module::option_map &vm= context.getOptions(); |
112 | 822 | if (vm.count("port")) | 838 | if (vm.count("port")) |
113 | 823 | { | 839 | { |
114 | @@ -947,6 +963,103 @@ | |||
115 | 947 | NULL | 963 | NULL |
116 | 948 | }; | 964 | }; |
117 | 949 | 965 | ||
118 | 966 | static int drizzle_protocol_connection_count_func(drizzle_show_var *var, char *buff) | ||
119 | 967 | { | ||
120 | 968 | var->type= SHOW_LONGLONG; | ||
121 | 969 | var->value= buff; | ||
122 | 970 | *((uint64_t *)buff)= ClientDrizzleProtocol::connectionCount; | ||
123 | 971 | return 0; | ||
124 | 972 | } | ||
125 | 973 | |||
126 | 974 | static int drizzle_protocol_connected_count_func(drizzle_show_var *var, char *buff) | ||
127 | 975 | { | ||
128 | 976 | var->type= SHOW_LONGLONG; | ||
129 | 977 | var->value= buff; | ||
130 | 978 | *((uint64_t *)buff)= ClientDrizzleProtocol::connected; | ||
131 | 979 | return 0; | ||
132 | 980 | } | ||
133 | 981 | |||
134 | 982 | static int drizzle_protocol_failed_count_func(drizzle_show_var *var, char *buff) | ||
135 | 983 | { | ||
136 | 984 | var->type= SHOW_LONGLONG; | ||
137 | 985 | var->value= buff; | ||
138 | 986 | *((uint64_t *)buff)= ClientDrizzleProtocol::failedConnections; | ||
139 | 987 | return 0; | ||
140 | 988 | } | ||
141 | 989 | |||
142 | 990 | static st_show_var_func_container drizzle_protocol_connection_count= | ||
143 | 991 | { &drizzle_protocol_connection_count_func }; | ||
144 | 992 | |||
145 | 993 | static st_show_var_func_container drizzle_protocol_connected_count= | ||
146 | 994 | { &drizzle_protocol_connected_count_func }; | ||
147 | 995 | |||
148 | 996 | static st_show_var_func_container drizzle_protocol_failed_count= | ||
149 | 997 | { &drizzle_protocol_failed_count_func }; | ||
150 | 998 | |||
151 | 999 | static drizzle_show_var drizzle_protocol_status_variables[]= { | ||
152 | 1000 | {"Connections", | ||
153 | 1001 | (char*) &drizzle_protocol_connection_count, SHOW_FUNC}, | ||
154 | 1002 | {"Connected", | ||
155 | 1003 | (char*) &drizzle_protocol_connected_count, SHOW_FUNC}, | ||
156 | 1004 | {"Failed_connections", | ||
157 | 1005 | (char*) &drizzle_protocol_failed_count, SHOW_FUNC}, | ||
158 | 1006 | {NULL, NULL, SHOW_LONGLONG} | ||
159 | 1007 | }; | ||
160 | 1008 | |||
161 | 1009 | DrizzleProtocolStatus::Generator::Generator(drizzled::Field **fields) : | ||
162 | 1010 | plugin::TableFunction::Generator(fields) | ||
163 | 1011 | { | ||
164 | 1012 | status_var_ptr= drizzle_protocol_status_variables; | ||
165 | 1013 | } | ||
166 | 1014 | |||
167 | 1015 | bool DrizzleProtocolStatus::Generator::populate() | ||
168 | 1016 | { | ||
169 | 1017 | MY_ALIGNED_BYTE_ARRAY(buff_data, SHOW_VAR_FUNC_BUFF_SIZE, int64_t); | ||
170 | 1018 | char * const buff= (char *) &buff_data; | ||
171 | 1019 | drizzle_show_var tmp; | ||
172 | 1020 | |||
173 | 1021 | if (status_var_ptr->name) | ||
174 | 1022 | { | ||
175 | 1023 | std::ostringstream oss; | ||
176 | 1024 | string return_value; | ||
177 | 1025 | const char *value; | ||
178 | 1026 | int type; | ||
179 | 1027 | |||
180 | 1028 | push(status_var_ptr->name); | ||
181 | 1029 | |||
182 | 1030 | if (status_var_ptr->type == SHOW_FUNC) | ||
183 | 1031 | { | ||
184 | 1032 | ((mysql_show_var_func)((st_show_var_func_container *)status_var_ptr->value)->func)(&tmp, buff); | ||
185 | 1033 | value= buff; | ||
186 | 1034 | type= tmp.type; | ||
187 | 1035 | } | ||
188 | 1036 | else | ||
189 | 1037 | { | ||
190 | 1038 | value= status_var_ptr->value; | ||
191 | 1039 | type= status_var_ptr->type; | ||
192 | 1040 | } | ||
193 | 1041 | |||
194 | 1042 | switch(type) | ||
195 | 1043 | { | ||
196 | 1044 | case SHOW_LONGLONG: | ||
197 | 1045 | oss << *(uint64_t*) value; | ||
198 | 1046 | return_value= oss.str(); | ||
199 | 1047 | break; | ||
200 | 1048 | default: | ||
201 | 1049 | assert(0); | ||
202 | 1050 | } | ||
203 | 1051 | if (return_value.length()) | ||
204 | 1052 | push(return_value); | ||
205 | 1053 | else | ||
206 | 1054 | push(" "); | ||
207 | 1055 | |||
208 | 1056 | status_var_ptr++; | ||
209 | 1057 | |||
210 | 1058 | return true; | ||
211 | 1059 | } | ||
212 | 1060 | return false; | ||
213 | 1061 | } | ||
214 | 1062 | |||
215 | 950 | } /* namespace drizzle_protocol */ | 1063 | } /* namespace drizzle_protocol */ |
216 | 951 | 1064 | ||
217 | 952 | DRIZZLE_PLUGIN(drizzle_protocol::init, drizzle_protocol::sys_variables, drizzle_protocol::init_options); | 1065 | DRIZZLE_PLUGIN(drizzle_protocol::init, drizzle_protocol::sys_variables, drizzle_protocol::init_options); |
218 | 953 | 1066 | ||
219 | === modified file 'plugin/drizzle_protocol/drizzle_protocol.h' | |||
220 | --- plugin/drizzle_protocol/drizzle_protocol.h 2010-08-12 06:10:25 +0000 | |||
221 | +++ plugin/drizzle_protocol/drizzle_protocol.h 2010-09-09 06:18:43 +0000 | |||
222 | @@ -22,6 +22,8 @@ | |||
223 | 22 | 22 | ||
224 | 23 | #include <drizzled/plugin/listen_tcp.h> | 23 | #include <drizzled/plugin/listen_tcp.h> |
225 | 24 | #include <drizzled/plugin/client.h> | 24 | #include <drizzled/plugin/client.h> |
226 | 25 | #include <drizzled/atomics.h> | ||
227 | 26 | #include "drizzled/plugin/table_function.h" | ||
228 | 25 | 27 | ||
229 | 26 | #include "net_serv.h" | 28 | #include "net_serv.h" |
230 | 27 | 29 | ||
231 | @@ -60,6 +62,10 @@ | |||
232 | 60 | ClientDrizzleProtocol(int fd, bool using_mysql41_protocol_arg); | 62 | ClientDrizzleProtocol(int fd, bool using_mysql41_protocol_arg); |
233 | 61 | virtual ~ClientDrizzleProtocol(); | 63 | virtual ~ClientDrizzleProtocol(); |
234 | 62 | 64 | ||
235 | 65 | static drizzled::atomic<uint64_t> connectionCount; | ||
236 | 66 | static drizzled::atomic<uint64_t> failedConnections; | ||
237 | 67 | static drizzled::atomic<uint64_t> connected; | ||
238 | 68 | |||
239 | 63 | virtual int getFileDescriptor(void); | 69 | virtual int getFileDescriptor(void); |
240 | 64 | virtual bool isConnected(); | 70 | virtual bool isConnected(); |
241 | 65 | virtual bool isReading(void); | 71 | virtual bool isReading(void); |
242 | 66 | 72 | ||
243 | === modified file 'plugin/drizzle_protocol/plugin.ini' | |||
244 | --- plugin/drizzle_protocol/plugin.ini 2010-04-27 21:03:13 +0000 | |||
245 | +++ plugin/drizzle_protocol/plugin.ini 2010-09-09 06:18:43 +0000 | |||
246 | @@ -7,6 +7,6 @@ | |||
247 | 7 | libs=drizzled/algorithm/libhash.la | 7 | libs=drizzled/algorithm/libhash.la |
248 | 8 | load_by_default=yes | 8 | load_by_default=yes |
249 | 9 | ldlfags=$(LIBZ) | 9 | ldlfags=$(LIBZ) |
251 | 10 | headers=drizzle_protocol.h errmsg.h net_serv.h options.h pack.h vio.h | 10 | headers=drizzle_protocol.h errmsg.h net_serv.h options.h pack.h vio.h table_function.h |
252 | 11 | sources=drizzle_protocol.cc errmsg.cc net_serv.cc pack.cc vio.cc viosocket.cc | 11 | sources=drizzle_protocol.cc errmsg.cc net_serv.cc pack.cc vio.cc viosocket.cc |
253 | 12 | static=yes | 12 | static=yes |
254 | 13 | 13 | ||
255 | === added file 'plugin/drizzle_protocol/table_function.h' | |||
256 | --- plugin/drizzle_protocol/table_function.h 1970-01-01 00:00:00 +0000 | |||
257 | +++ plugin/drizzle_protocol/table_function.h 2010-09-09 06:18:43 +0000 | |||
258 | @@ -0,0 +1,57 @@ | |||
259 | 1 | /* - mode: c; c-basic-offset: 2; indent-tabs-mode: nil; -*- | ||
260 | 2 | * vim:expandtab:shiftwidth=2:tabstop=2:smarttab: | ||
261 | 3 | * | ||
262 | 4 | * Copyright (C) 2010 Andrew Hutchings | ||
263 | 5 | * | ||
264 | 6 | * This program is free software; you can redistribute it and/or modify | ||
265 | 7 | * it under the terms of the GNU General Public License as published by | ||
266 | 8 | * the Free Software Foundation; either version 2 of the License, or | ||
267 | 9 | * (at your option) any later version. | ||
268 | 10 | * | ||
269 | 11 | * This program is distributed in the hope that it will be useful, | ||
270 | 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
271 | 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
272 | 14 | * GNU General Public License for more details. | ||
273 | 15 | * | ||
274 | 16 | * You should have received a copy of the GNU General Public License | ||
275 | 17 | * along with this program; if not, write to the Free Software | ||
276 | 18 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
277 | 19 | */ | ||
278 | 20 | |||
279 | 21 | #ifndef PLUGIN_DRIZZLE_PROTOCOL_TABLE_FUNCTION_H | ||
280 | 22 | #define PLUGIN_DRIZZLE_PROTOCOL_TABLE_FUNCTION_H | ||
281 | 23 | |||
282 | 24 | #include "drizzled/plugin/table_function.h" | ||
283 | 25 | namespace drizzle_protocol | ||
284 | 26 | { | ||
285 | 27 | |||
286 | 28 | |||
287 | 29 | class DrizzleProtocolStatus : public drizzled::plugin::TableFunction | ||
288 | 30 | { | ||
289 | 31 | public: | ||
290 | 32 | DrizzleProtocolStatus() : | ||
291 | 33 | drizzled::plugin::TableFunction("DATA_DICTIONARY","DRIZZLE_PROTOCOL_STATUS") | ||
292 | 34 | { | ||
293 | 35 | add_field("VARIABLE_NAME"); | ||
294 | 36 | add_field("VARIABLE_VALUE"); | ||
295 | 37 | } | ||
296 | 38 | |||
297 | 39 | class Generator : public drizzled::plugin::TableFunction::Generator | ||
298 | 40 | { | ||
299 | 41 | drizzled::drizzle_show_var *status_var_ptr; | ||
300 | 42 | |||
301 | 43 | public: | ||
302 | 44 | Generator(drizzled::Field **fields); | ||
303 | 45 | |||
304 | 46 | bool populate(); | ||
305 | 47 | }; | ||
306 | 48 | |||
307 | 49 | Generator *generator(drizzled::Field **arg) | ||
308 | 50 | { | ||
309 | 51 | return new Generator(arg); | ||
310 | 52 | } | ||
311 | 53 | }; | ||
312 | 54 | |||
313 | 55 | } | ||
314 | 56 | |||
315 | 57 | #endif /* PLUGIN_DRIZZLE_PROTOCOL_TABLE_FUNCTION_H */ | ||
316 | 0 | 58 | ||
317 | === modified file 'plugin/information_schema_dictionary/tests/r/tables.result' | |||
318 | --- plugin/information_schema_dictionary/tests/r/tables.result 2010-08-19 00:32:20 +0000 | |||
319 | +++ plugin/information_schema_dictionary/tests/r/tables.result 2010-09-09 06:18:43 +0000 | |||
320 | @@ -12,6 +12,7 @@ | |||
321 | 12 | DATA_DICTIONARY CUMULATIVE_SQL_COMMANDS VIEW | 12 | DATA_DICTIONARY CUMULATIVE_SQL_COMMANDS VIEW |
322 | 13 | DATA_DICTIONARY CUMULATIVE_USER_STATS VIEW | 13 | DATA_DICTIONARY CUMULATIVE_USER_STATS VIEW |
323 | 14 | DATA_DICTIONARY CURRENT_SQL_COMMANDS VIEW | 14 | DATA_DICTIONARY CURRENT_SQL_COMMANDS VIEW |
324 | 15 | DATA_DICTIONARY DRIZZLE_PROTOCOL_STATUS VIEW | ||
325 | 15 | DATA_DICTIONARY GLOBAL_STATEMENTS VIEW | 16 | DATA_DICTIONARY GLOBAL_STATEMENTS VIEW |
326 | 16 | DATA_DICTIONARY GLOBAL_STATUS VIEW | 17 | DATA_DICTIONARY GLOBAL_STATUS VIEW |
327 | 17 | DATA_DICTIONARY GLOBAL_VARIABLES VIEW | 18 | DATA_DICTIONARY GLOBAL_VARIABLES VIEW |
328 | @@ -27,6 +28,7 @@ | |||
329 | 27 | DATA_DICTIONARY INNODB_STATUS VIEW | 28 | DATA_DICTIONARY INNODB_STATUS VIEW |
330 | 28 | DATA_DICTIONARY INNODB_TRX VIEW | 29 | DATA_DICTIONARY INNODB_TRX VIEW |
331 | 29 | DATA_DICTIONARY MODULES VIEW | 30 | DATA_DICTIONARY MODULES VIEW |
332 | 31 | DATA_DICTIONARY MYSQL_PROTOCOL_STATUS VIEW | ||
333 | 30 | DATA_DICTIONARY PLUGINS VIEW | 32 | DATA_DICTIONARY PLUGINS VIEW |
334 | 31 | DATA_DICTIONARY PROCESSLIST VIEW | 33 | DATA_DICTIONARY PROCESSLIST VIEW |
335 | 32 | DATA_DICTIONARY REFERENTIAL_CONSTRAINTS VIEW | 34 | DATA_DICTIONARY REFERENTIAL_CONSTRAINTS VIEW |
336 | @@ -81,6 +83,7 @@ | |||
337 | 81 | DATA_DICTIONARY CUMULATIVE_SQL_COMMANDS VIEW | 83 | DATA_DICTIONARY CUMULATIVE_SQL_COMMANDS VIEW |
338 | 82 | DATA_DICTIONARY CUMULATIVE_USER_STATS VIEW | 84 | DATA_DICTIONARY CUMULATIVE_USER_STATS VIEW |
339 | 83 | DATA_DICTIONARY CURRENT_SQL_COMMANDS VIEW | 85 | DATA_DICTIONARY CURRENT_SQL_COMMANDS VIEW |
340 | 86 | DATA_DICTIONARY DRIZZLE_PROTOCOL_STATUS VIEW | ||
341 | 84 | DATA_DICTIONARY GLOBAL_STATEMENTS VIEW | 87 | DATA_DICTIONARY GLOBAL_STATEMENTS VIEW |
342 | 85 | DATA_DICTIONARY GLOBAL_STATUS VIEW | 88 | DATA_DICTIONARY GLOBAL_STATUS VIEW |
343 | 86 | DATA_DICTIONARY GLOBAL_VARIABLES VIEW | 89 | DATA_DICTIONARY GLOBAL_VARIABLES VIEW |
344 | @@ -96,6 +99,7 @@ | |||
345 | 96 | DATA_DICTIONARY INNODB_STATUS VIEW | 99 | DATA_DICTIONARY INNODB_STATUS VIEW |
346 | 97 | DATA_DICTIONARY INNODB_TRX VIEW | 100 | DATA_DICTIONARY INNODB_TRX VIEW |
347 | 98 | DATA_DICTIONARY MODULES VIEW | 101 | DATA_DICTIONARY MODULES VIEW |
348 | 102 | DATA_DICTIONARY MYSQL_PROTOCOL_STATUS VIEW | ||
349 | 99 | DATA_DICTIONARY PLUGINS VIEW | 103 | DATA_DICTIONARY PLUGINS VIEW |
350 | 100 | DATA_DICTIONARY PROCESSLIST VIEW | 104 | DATA_DICTIONARY PROCESSLIST VIEW |
351 | 101 | DATA_DICTIONARY REFERENTIAL_CONSTRAINTS VIEW | 105 | DATA_DICTIONARY REFERENTIAL_CONSTRAINTS VIEW |
352 | @@ -173,6 +177,7 @@ | |||
353 | 173 | DATA_DICTIONARY CUMULATIVE_SQL_COMMANDS VIEW | 177 | DATA_DICTIONARY CUMULATIVE_SQL_COMMANDS VIEW |
354 | 174 | DATA_DICTIONARY CUMULATIVE_USER_STATS VIEW | 178 | DATA_DICTIONARY CUMULATIVE_USER_STATS VIEW |
355 | 175 | DATA_DICTIONARY CURRENT_SQL_COMMANDS VIEW | 179 | DATA_DICTIONARY CURRENT_SQL_COMMANDS VIEW |
356 | 180 | DATA_DICTIONARY DRIZZLE_PROTOCOL_STATUS VIEW | ||
357 | 176 | DATA_DICTIONARY GLOBAL_STATEMENTS VIEW | 181 | DATA_DICTIONARY GLOBAL_STATEMENTS VIEW |
358 | 177 | DATA_DICTIONARY GLOBAL_STATUS VIEW | 182 | DATA_DICTIONARY GLOBAL_STATUS VIEW |
359 | 178 | DATA_DICTIONARY GLOBAL_VARIABLES VIEW | 183 | DATA_DICTIONARY GLOBAL_VARIABLES VIEW |
360 | @@ -188,6 +193,7 @@ | |||
361 | 188 | DATA_DICTIONARY INNODB_STATUS VIEW | 193 | DATA_DICTIONARY INNODB_STATUS VIEW |
362 | 189 | DATA_DICTIONARY INNODB_TRX VIEW | 194 | DATA_DICTIONARY INNODB_TRX VIEW |
363 | 190 | DATA_DICTIONARY MODULES VIEW | 195 | DATA_DICTIONARY MODULES VIEW |
364 | 196 | DATA_DICTIONARY MYSQL_PROTOCOL_STATUS VIEW | ||
365 | 191 | DATA_DICTIONARY PLUGINS VIEW | 197 | DATA_DICTIONARY PLUGINS VIEW |
366 | 192 | DATA_DICTIONARY PROCESSLIST VIEW | 198 | DATA_DICTIONARY PROCESSLIST VIEW |
367 | 193 | DATA_DICTIONARY REFERENTIAL_CONSTRAINTS VIEW | 199 | DATA_DICTIONARY REFERENTIAL_CONSTRAINTS VIEW |
368 | @@ -265,6 +271,7 @@ | |||
369 | 265 | DATA_DICTIONARY CUMULATIVE_SQL_COMMANDS VIEW | 271 | DATA_DICTIONARY CUMULATIVE_SQL_COMMANDS VIEW |
370 | 266 | DATA_DICTIONARY CUMULATIVE_USER_STATS VIEW | 272 | DATA_DICTIONARY CUMULATIVE_USER_STATS VIEW |
371 | 267 | DATA_DICTIONARY CURRENT_SQL_COMMANDS VIEW | 273 | DATA_DICTIONARY CURRENT_SQL_COMMANDS VIEW |
372 | 274 | DATA_DICTIONARY DRIZZLE_PROTOCOL_STATUS VIEW | ||
373 | 268 | DATA_DICTIONARY GLOBAL_STATEMENTS VIEW | 275 | DATA_DICTIONARY GLOBAL_STATEMENTS VIEW |
374 | 269 | DATA_DICTIONARY GLOBAL_STATUS VIEW | 276 | DATA_DICTIONARY GLOBAL_STATUS VIEW |
375 | 270 | DATA_DICTIONARY GLOBAL_VARIABLES VIEW | 277 | DATA_DICTIONARY GLOBAL_VARIABLES VIEW |
376 | @@ -275,6 +282,7 @@ | |||
377 | 275 | DATA_DICTIONARY INNODB_LOCK_WAITS VIEW | 282 | DATA_DICTIONARY INNODB_LOCK_WAITS VIEW |
378 | 276 | DATA_DICTIONARY INNODB_STATUS VIEW | 283 | DATA_DICTIONARY INNODB_STATUS VIEW |
379 | 277 | DATA_DICTIONARY MODULES VIEW | 284 | DATA_DICTIONARY MODULES VIEW |
380 | 285 | DATA_DICTIONARY MYSQL_PROTOCOL_STATUS VIEW | ||
381 | 278 | DATA_DICTIONARY PLUGINS VIEW | 286 | DATA_DICTIONARY PLUGINS VIEW |
382 | 279 | DATA_DICTIONARY REFERENTIAL_CONSTRAINTS VIEW | 287 | DATA_DICTIONARY REFERENTIAL_CONSTRAINTS VIEW |
383 | 280 | DATA_DICTIONARY REPLICATION_STREAMS VIEW | 288 | DATA_DICTIONARY REPLICATION_STREAMS VIEW |
384 | 281 | 289 | ||
385 | === modified file 'plugin/mysql_protocol/mysql_protocol.cc' | |||
386 | --- plugin/mysql_protocol/mysql_protocol.cc 2010-08-21 07:08:08 +0000 | |||
387 | +++ plugin/mysql_protocol/mysql_protocol.cc 2010-09-09 06:18:43 +0000 | |||
388 | @@ -31,6 +31,7 @@ | |||
389 | 31 | #include "mysql_protocol.h" | 31 | #include "mysql_protocol.h" |
390 | 32 | #include "mysql_password.h" | 32 | #include "mysql_password.h" |
391 | 33 | #include "options.h" | 33 | #include "options.h" |
392 | 34 | #include "table_function.h" | ||
393 | 34 | 35 | ||
394 | 35 | namespace po= boost::program_options; | 36 | namespace po= boost::program_options; |
395 | 36 | using namespace std; | 37 | using namespace std; |
396 | @@ -51,6 +52,8 @@ | |||
397 | 51 | static const uint32_t random_max= 0x3FFFFFFF; | 52 | static const uint32_t random_max= 0x3FFFFFFF; |
398 | 52 | static const double random_max_double= (double)0x3FFFFFFF; | 53 | static const double random_max_double= (double)0x3FFFFFFF; |
399 | 53 | 54 | ||
400 | 55 | static plugin::TableFunction* mysql_status_table_function_ptr= NULL; | ||
401 | 56 | |||
402 | 54 | ListenMySQLProtocol::~ListenMySQLProtocol() | 57 | ListenMySQLProtocol::~ListenMySQLProtocol() |
403 | 55 | { | 58 | { |
404 | 56 | /* This is strdup'd from the options */ | 59 | /* This is strdup'd from the options */ |
405 | @@ -77,6 +80,10 @@ | |||
406 | 77 | return new (nothrow) ClientMySQLProtocol(new_fd, using_mysql41_protocol); | 80 | return new (nothrow) ClientMySQLProtocol(new_fd, using_mysql41_protocol); |
407 | 78 | } | 81 | } |
408 | 79 | 82 | ||
409 | 83 | drizzled::atomic<uint64_t> ClientMySQLProtocol::connectionCount; | ||
410 | 84 | drizzled::atomic<uint64_t> ClientMySQLProtocol::failedConnections; | ||
411 | 85 | drizzled::atomic<uint64_t> ClientMySQLProtocol::connected; | ||
412 | 86 | |||
413 | 80 | ClientMySQLProtocol::ClientMySQLProtocol(int fd, bool using_mysql41_protocol_arg): | 87 | ClientMySQLProtocol::ClientMySQLProtocol(int fd, bool using_mysql41_protocol_arg): |
414 | 81 | using_mysql41_protocol(using_mysql41_protocol_arg) | 88 | using_mysql41_protocol(using_mysql41_protocol_arg) |
415 | 82 | { | 89 | { |
416 | @@ -135,6 +142,7 @@ | |||
417 | 135 | { | 142 | { |
418 | 136 | drizzleclient_net_close(&net); | 143 | drizzleclient_net_close(&net); |
419 | 137 | drizzleclient_net_end(&net); | 144 | drizzleclient_net_end(&net); |
420 | 145 | connected.decrement(); | ||
421 | 138 | } | 146 | } |
422 | 139 | } | 147 | } |
423 | 140 | 148 | ||
424 | @@ -142,6 +150,9 @@ | |||
425 | 142 | { | 150 | { |
426 | 143 | bool connection_is_valid; | 151 | bool connection_is_valid; |
427 | 144 | 152 | ||
428 | 153 | connectionCount.increment(); | ||
429 | 154 | connected.increment(); | ||
430 | 155 | |||
431 | 145 | /* Use "connect_timeout" value during connection phase */ | 156 | /* Use "connect_timeout" value during connection phase */ |
432 | 146 | drizzleclient_net_set_read_timeout(&net, connect_timeout); | 157 | drizzleclient_net_set_read_timeout(&net, connect_timeout); |
433 | 147 | drizzleclient_net_set_write_timeout(&net, connect_timeout); | 158 | drizzleclient_net_set_write_timeout(&net, connect_timeout); |
434 | @@ -153,9 +164,9 @@ | |||
435 | 153 | else | 164 | else |
436 | 154 | { | 165 | { |
437 | 155 | sendError(session->main_da.sql_errno(), session->main_da.message()); | 166 | sendError(session->main_da.sql_errno(), session->main_da.message()); |
438 | 167 | failedConnections.increment(); | ||
439 | 156 | return false; | 168 | return false; |
440 | 157 | } | 169 | } |
441 | 158 | |||
442 | 159 | /* Connect completed, set read/write timeouts back to default */ | 170 | /* Connect completed, set read/write timeouts back to default */ |
443 | 160 | drizzleclient_net_set_read_timeout(&net, read_timeout); | 171 | drizzleclient_net_set_read_timeout(&net, read_timeout); |
444 | 161 | drizzleclient_net_set_write_timeout(&net, write_timeout); | 172 | drizzleclient_net_set_write_timeout(&net, write_timeout); |
445 | @@ -886,7 +897,9 @@ | |||
446 | 886 | 897 | ||
447 | 887 | static int init(drizzled::module::Context &context) | 898 | static int init(drizzled::module::Context &context) |
448 | 888 | { | 899 | { |
449 | 900 | mysql_status_table_function_ptr= new MysqlProtocolStatus; | ||
450 | 889 | 901 | ||
451 | 902 | context.add(mysql_status_table_function_ptr); | ||
452 | 890 | /* Initialize random seeds for the MySQL algorithm with minimal changes. */ | 903 | /* Initialize random seeds for the MySQL algorithm with minimal changes. */ |
453 | 891 | time_t seed_time= time(NULL); | 904 | time_t seed_time= time(NULL); |
454 | 892 | random_seed1= seed_time % random_max; | 905 | random_seed1= seed_time % random_max; |
455 | @@ -1022,6 +1035,103 @@ | |||
456 | 1022 | NULL | 1035 | NULL |
457 | 1023 | }; | 1036 | }; |
458 | 1024 | 1037 | ||
459 | 1038 | static int mysql_protocol_connection_count_func(drizzle_show_var *var, char *buff) | ||
460 | 1039 | { | ||
461 | 1040 | var->type= SHOW_LONGLONG; | ||
462 | 1041 | var->value= buff; | ||
463 | 1042 | *((uint64_t *)buff)= ClientMySQLProtocol::connectionCount; | ||
464 | 1043 | return 0; | ||
465 | 1044 | } | ||
466 | 1045 | |||
467 | 1046 | static int mysql_protocol_connected_count_func(drizzle_show_var *var, char *buff) | ||
468 | 1047 | { | ||
469 | 1048 | var->type= SHOW_LONGLONG; | ||
470 | 1049 | var->value= buff; | ||
471 | 1050 | *((uint64_t *)buff)= ClientMySQLProtocol::connected; | ||
472 | 1051 | return 0; | ||
473 | 1052 | } | ||
474 | 1053 | |||
475 | 1054 | static int mysql_protocol_failed_count_func(drizzle_show_var *var, char *buff) | ||
476 | 1055 | { | ||
477 | 1056 | var->type= SHOW_LONGLONG; | ||
478 | 1057 | var->value= buff; | ||
479 | 1058 | *((uint64_t *)buff)= ClientMySQLProtocol::failedConnections; | ||
480 | 1059 | return 0; | ||
481 | 1060 | } | ||
482 | 1061 | |||
483 | 1062 | static st_show_var_func_container mysql_protocol_connection_count= | ||
484 | 1063 | { &mysql_protocol_connection_count_func }; | ||
485 | 1064 | |||
486 | 1065 | static st_show_var_func_container mysql_protocol_connected_count= | ||
487 | 1066 | { &mysql_protocol_connected_count_func }; | ||
488 | 1067 | |||
489 | 1068 | static st_show_var_func_container mysql_protocol_failed_count= | ||
490 | 1069 | { &mysql_protocol_failed_count_func }; | ||
491 | 1070 | |||
492 | 1071 | static drizzle_show_var mysql_protocol_status_variables[]= { | ||
493 | 1072 | {"Connections", | ||
494 | 1073 | (char*) &mysql_protocol_connection_count, SHOW_FUNC}, | ||
495 | 1074 | {"Connected", | ||
496 | 1075 | (char*) &mysql_protocol_connected_count, SHOW_FUNC}, | ||
497 | 1076 | {"Failed_connections", | ||
498 | 1077 | (char*) &mysql_protocol_failed_count, SHOW_FUNC}, | ||
499 | 1078 | {NULL, NULL, SHOW_LONGLONG} | ||
500 | 1079 | }; | ||
501 | 1080 | |||
502 | 1081 | MysqlProtocolStatus::Generator::Generator(drizzled::Field **fields) : | ||
503 | 1082 | plugin::TableFunction::Generator(fields) | ||
504 | 1083 | { | ||
505 | 1084 | status_var_ptr= mysql_protocol_status_variables; | ||
506 | 1085 | } | ||
507 | 1086 | |||
508 | 1087 | bool MysqlProtocolStatus::Generator::populate() | ||
509 | 1088 | { | ||
510 | 1089 | MY_ALIGNED_BYTE_ARRAY(buff_data, SHOW_VAR_FUNC_BUFF_SIZE, int64_t); | ||
511 | 1090 | char * const buff= (char *) &buff_data; | ||
512 | 1091 | drizzle_show_var tmp; | ||
513 | 1092 | |||
514 | 1093 | if (status_var_ptr->name) | ||
515 | 1094 | { | ||
516 | 1095 | std::ostringstream oss; | ||
517 | 1096 | string return_value; | ||
518 | 1097 | const char *value; | ||
519 | 1098 | int type; | ||
520 | 1099 | |||
521 | 1100 | push(status_var_ptr->name); | ||
522 | 1101 | |||
523 | 1102 | if (status_var_ptr->type == SHOW_FUNC) | ||
524 | 1103 | { | ||
525 | 1104 | ((mysql_show_var_func)((st_show_var_func_container *)status_var_ptr->value)->func)(&tmp, buff); | ||
526 | 1105 | value= buff; | ||
527 | 1106 | type= tmp.type; | ||
528 | 1107 | } | ||
529 | 1108 | else | ||
530 | 1109 | { | ||
531 | 1110 | value= status_var_ptr->value; | ||
532 | 1111 | type= status_var_ptr->type; | ||
533 | 1112 | } | ||
534 | 1113 | |||
535 | 1114 | switch(type) | ||
536 | 1115 | { | ||
537 | 1116 | case SHOW_LONGLONG: | ||
538 | 1117 | oss << *(uint64_t*) value; | ||
539 | 1118 | return_value= oss.str(); | ||
540 | 1119 | break; | ||
541 | 1120 | default: | ||
542 | 1121 | assert(0); | ||
543 | 1122 | } | ||
544 | 1123 | if (return_value.length()) | ||
545 | 1124 | push(return_value); | ||
546 | 1125 | else | ||
547 | 1126 | push(" "); | ||
548 | 1127 | |||
549 | 1128 | status_var_ptr++; | ||
550 | 1129 | |||
551 | 1130 | return true; | ||
552 | 1131 | } | ||
553 | 1132 | return false; | ||
554 | 1133 | } | ||
555 | 1134 | |||
556 | 1025 | DRIZZLE_DECLARE_PLUGIN | 1135 | DRIZZLE_DECLARE_PLUGIN |
557 | 1026 | { | 1136 | { |
558 | 1027 | DRIZZLE_VERSION_ID, | 1137 | DRIZZLE_VERSION_ID, |
559 | 1028 | 1138 | ||
560 | === modified file 'plugin/mysql_protocol/mysql_protocol.h' | |||
561 | --- plugin/mysql_protocol/mysql_protocol.h 2010-08-12 06:10:25 +0000 | |||
562 | +++ plugin/mysql_protocol/mysql_protocol.h 2010-09-09 06:18:43 +0000 | |||
563 | @@ -22,6 +22,8 @@ | |||
564 | 22 | 22 | ||
565 | 23 | #include <drizzled/plugin/listen_tcp.h> | 23 | #include <drizzled/plugin/listen_tcp.h> |
566 | 24 | #include <drizzled/plugin/client.h> | 24 | #include <drizzled/plugin/client.h> |
567 | 25 | #include <drizzled/atomics.h> | ||
568 | 26 | #include "drizzled/plugin/table_function.h" | ||
569 | 25 | 27 | ||
570 | 26 | #include "net_serv.h" | 28 | #include "net_serv.h" |
571 | 27 | 29 | ||
572 | @@ -29,6 +31,7 @@ | |||
573 | 29 | { | 31 | { |
574 | 30 | private: | 32 | private: |
575 | 31 | bool using_mysql41_protocol; | 33 | bool using_mysql41_protocol; |
576 | 34 | static drizzled::plugin::TableFunction* status_table_function_ptr; | ||
577 | 32 | 35 | ||
578 | 33 | public: | 36 | public: |
579 | 34 | ListenMySQLProtocol(std::string name_arg, bool using_mysql41_protocol_arg): | 37 | ListenMySQLProtocol(std::string name_arg, bool using_mysql41_protocol_arg): |
580 | @@ -59,6 +62,10 @@ | |||
581 | 59 | ClientMySQLProtocol(int fd, bool using_mysql41_protocol_arg); | 62 | ClientMySQLProtocol(int fd, bool using_mysql41_protocol_arg); |
582 | 60 | virtual ~ClientMySQLProtocol(); | 63 | virtual ~ClientMySQLProtocol(); |
583 | 61 | 64 | ||
584 | 65 | static drizzled::atomic<uint64_t> connectionCount; | ||
585 | 66 | static drizzled::atomic<uint64_t> failedConnections; | ||
586 | 67 | static drizzled::atomic<uint64_t> connected; | ||
587 | 68 | |||
588 | 62 | virtual int getFileDescriptor(void); | 69 | virtual int getFileDescriptor(void); |
589 | 63 | virtual bool isConnected(); | 70 | virtual bool isConnected(); |
590 | 64 | virtual bool isReading(void); | 71 | virtual bool isReading(void); |
591 | 65 | 72 | ||
592 | === modified file 'plugin/mysql_protocol/plugin.ini' | |||
593 | --- plugin/mysql_protocol/plugin.ini 2010-04-27 21:03:13 +0000 | |||
594 | +++ plugin/mysql_protocol/plugin.ini 2010-09-09 06:18:43 +0000 | |||
595 | @@ -4,6 +4,6 @@ | |||
596 | 4 | load_by_default=yes | 4 | load_by_default=yes |
597 | 5 | ldlfags=$(LIBZ) | 5 | ldlfags=$(LIBZ) |
598 | 6 | libs=drizzled/algorithm/libhash.la | 6 | libs=drizzled/algorithm/libhash.la |
600 | 7 | headers=mysql_protocol.h errmsg.h net_serv.h options.h vio.h mysql_password.h | 7 | headers=mysql_protocol.h errmsg.h net_serv.h options.h vio.h mysql_password.h table_function.h |
601 | 8 | sources=mysql_protocol.cc net_serv.cc vio.cc mysql_password.cc | 8 | sources=mysql_protocol.cc net_serv.cc vio.cc mysql_password.cc |
602 | 9 | static=yes | 9 | static=yes |
603 | 10 | 10 | ||
604 | === added file 'plugin/mysql_protocol/table_function.h' | |||
605 | --- plugin/mysql_protocol/table_function.h 1970-01-01 00:00:00 +0000 | |||
606 | +++ plugin/mysql_protocol/table_function.h 2010-09-09 06:18:43 +0000 | |||
607 | @@ -0,0 +1,52 @@ | |||
608 | 1 | /* - mode: c; c-basic-offset: 2; indent-tabs-mode: nil; -*- | ||
609 | 2 | * vim:expandtab:shiftwidth=2:tabstop=2:smarttab: | ||
610 | 3 | * | ||
611 | 4 | * Copyright (C) 2010 Andrew Hutchings | ||
612 | 5 | * | ||
613 | 6 | * This program is free software; you can redistribute it and/or modify | ||
614 | 7 | * it under the terms of the GNU General Public License as published by | ||
615 | 8 | * the Free Software Foundation; either version 2 of the License, or | ||
616 | 9 | * (at your option) any later version. | ||
617 | 10 | * | ||
618 | 11 | * This program is distributed in the hope that it will be useful, | ||
619 | 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
620 | 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
621 | 14 | * GNU General Public License for more details. | ||
622 | 15 | * | ||
623 | 16 | * You should have received a copy of the GNU General Public License | ||
624 | 17 | * along with this program; if not, write to the Free Software | ||
625 | 18 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
626 | 19 | */ | ||
627 | 20 | |||
628 | 21 | #ifndef PLUGIN_MYSQL_PROTOCOL_TABLE_FUNCTION_H | ||
629 | 22 | #define PLUGIN_MYSQL_PROTOCOL_TABLE_FUNCTION_H | ||
630 | 23 | |||
631 | 24 | #include "drizzled/plugin/table_function.h" | ||
632 | 25 | |||
633 | 26 | class MysqlProtocolStatus : public drizzled::plugin::TableFunction | ||
634 | 27 | { | ||
635 | 28 | public: | ||
636 | 29 | MysqlProtocolStatus() : | ||
637 | 30 | drizzled::plugin::TableFunction("DATA_DICTIONARY","MYSQL_PROTOCOL_STATUS") | ||
638 | 31 | { | ||
639 | 32 | add_field("VARIABLE_NAME"); | ||
640 | 33 | add_field("VARIABLE_VALUE"); | ||
641 | 34 | } | ||
642 | 35 | |||
643 | 36 | class Generator : public drizzled::plugin::TableFunction::Generator | ||
644 | 37 | { | ||
645 | 38 | drizzled::drizzle_show_var *status_var_ptr; | ||
646 | 39 | |||
647 | 40 | public: | ||
648 | 41 | Generator(drizzled::Field **fields); | ||
649 | 42 | |||
650 | 43 | bool populate(); | ||
651 | 44 | }; | ||
652 | 45 | |||
653 | 46 | Generator *generator(drizzled::Field **arg) | ||
654 | 47 | { | ||
655 | 48 | return new Generator(arg); | ||
656 | 49 | } | ||
657 | 50 | }; | ||
658 | 51 | |||
659 | 52 | #endif /* PLUGIN_MYSQL_PROTOCOL_TABLE_FUNCTION_H */ | ||
660 | 0 | 53 | ||
661 | === modified file 'plugin/schema_dictionary/tests/r/data_dictionary.result' | |||
662 | --- plugin/schema_dictionary/tests/r/data_dictionary.result 2010-09-02 18:35:05 +0000 | |||
663 | +++ plugin/schema_dictionary/tests/r/data_dictionary.result 2010-09-09 06:18:43 +0000 | |||
664 | @@ -1,7 +1,7 @@ | |||
665 | 1 | use data_dictionary; | 1 | use data_dictionary; |
666 | 2 | SELECT count(*) FROM columns; | 2 | SELECT count(*) FROM columns; |
667 | 3 | count(*) | 3 | count(*) |
669 | 4 | 490 | 4 | 494 |
670 | 5 | SELECT count(*) FROM indexes; | 5 | SELECT count(*) FROM indexes; |
671 | 6 | count(*) | 6 | count(*) |
672 | 7 | 0 | 7 | 0 |
673 | @@ -489,6 +489,10 @@ | |||
674 | 489 | VARIABLE_NAME | 489 | VARIABLE_NAME |
675 | 490 | VARIABLE_NAME | 490 | VARIABLE_NAME |
676 | 491 | VARIABLE_NAME | 491 | VARIABLE_NAME |
677 | 492 | VARIABLE_NAME | ||
678 | 493 | VARIABLE_NAME | ||
679 | 494 | VARIABLE_VALUE | ||
680 | 495 | VARIABLE_VALUE | ||
681 | 492 | VARIABLE_VALUE | 496 | VARIABLE_VALUE |
682 | 493 | VARIABLE_VALUE | 497 | VARIABLE_VALUE |
683 | 494 | VARIABLE_VALUE | 498 | VARIABLE_VALUE |
684 | @@ -687,6 +691,8 @@ | |||
685 | 687 | DATA_DICTIONARY CURRENT_SQL_COMMANDS COUNT_UPDATE | 691 | DATA_DICTIONARY CURRENT_SQL_COMMANDS COUNT_UPDATE |
686 | 688 | DATA_DICTIONARY CURRENT_SQL_COMMANDS IP | 692 | DATA_DICTIONARY CURRENT_SQL_COMMANDS IP |
687 | 689 | DATA_DICTIONARY CURRENT_SQL_COMMANDS USER | 693 | DATA_DICTIONARY CURRENT_SQL_COMMANDS USER |
688 | 694 | DATA_DICTIONARY DRIZZLE_PROTOCOL_STATUS VARIABLE_NAME | ||
689 | 695 | DATA_DICTIONARY DRIZZLE_PROTOCOL_STATUS VARIABLE_VALUE | ||
690 | 690 | DATA_DICTIONARY GLOBAL_STATEMENTS VARIABLE_NAME | 696 | DATA_DICTIONARY GLOBAL_STATEMENTS VARIABLE_NAME |
691 | 691 | DATA_DICTIONARY GLOBAL_STATEMENTS VARIABLE_VALUE | 697 | DATA_DICTIONARY GLOBAL_STATEMENTS VARIABLE_VALUE |
692 | 692 | DATA_DICTIONARY GLOBAL_STATUS VARIABLE_NAME | 698 | DATA_DICTIONARY GLOBAL_STATUS VARIABLE_NAME |
693 | @@ -767,6 +773,8 @@ | |||
694 | 767 | DATA_DICTIONARY MODULES MODULE_LICENSE | 773 | DATA_DICTIONARY MODULES MODULE_LICENSE |
695 | 768 | DATA_DICTIONARY MODULES MODULE_NAME | 774 | DATA_DICTIONARY MODULES MODULE_NAME |
696 | 769 | DATA_DICTIONARY MODULES MODULE_VERSION | 775 | DATA_DICTIONARY MODULES MODULE_VERSION |
697 | 776 | DATA_DICTIONARY MYSQL_PROTOCOL_STATUS VARIABLE_NAME | ||
698 | 777 | DATA_DICTIONARY MYSQL_PROTOCOL_STATUS VARIABLE_VALUE | ||
699 | 770 | DATA_DICTIONARY PLUGINS IS_ACTIVE | 778 | DATA_DICTIONARY PLUGINS IS_ACTIVE |
700 | 771 | DATA_DICTIONARY PLUGINS MODULE_NAME | 779 | DATA_DICTIONARY PLUGINS MODULE_NAME |
701 | 772 | DATA_DICTIONARY PLUGINS PLUGIN_NAME | 780 | DATA_DICTIONARY PLUGINS PLUGIN_NAME |
702 | @@ -1259,6 +1267,8 @@ | |||
703 | 1259 | DOMAIN_CONSTRAINTS INFORMATION_SCHEMA DOMAIN_SCHEMA | 1267 | DOMAIN_CONSTRAINTS INFORMATION_SCHEMA DOMAIN_SCHEMA |
704 | 1260 | DOMAIN_CONSTRAINTS INFORMATION_SCHEMA INITIALLY_DEFERRED | 1268 | DOMAIN_CONSTRAINTS INFORMATION_SCHEMA INITIALLY_DEFERRED |
705 | 1261 | DOMAIN_CONSTRAINTS INFORMATION_SCHEMA IS_DEFERRABLE | 1269 | DOMAIN_CONSTRAINTS INFORMATION_SCHEMA IS_DEFERRABLE |
706 | 1270 | DRIZZLE_PROTOCOL_STATUS DATA_DICTIONARY VARIABLE_NAME | ||
707 | 1271 | DRIZZLE_PROTOCOL_STATUS DATA_DICTIONARY VARIABLE_VALUE | ||
708 | 1262 | GLOBAL_STATEMENTS DATA_DICTIONARY VARIABLE_NAME | 1272 | GLOBAL_STATEMENTS DATA_DICTIONARY VARIABLE_NAME |
709 | 1263 | GLOBAL_STATEMENTS DATA_DICTIONARY VARIABLE_VALUE | 1273 | GLOBAL_STATEMENTS DATA_DICTIONARY VARIABLE_VALUE |
710 | 1264 | GLOBAL_STATUS DATA_DICTIONARY VARIABLE_NAME | 1274 | GLOBAL_STATUS DATA_DICTIONARY VARIABLE_NAME |
711 | @@ -1347,6 +1357,8 @@ | |||
712 | 1347 | MODULES DATA_DICTIONARY MODULE_LICENSE | 1357 | MODULES DATA_DICTIONARY MODULE_LICENSE |
713 | 1348 | MODULES DATA_DICTIONARY MODULE_NAME | 1358 | MODULES DATA_DICTIONARY MODULE_NAME |
714 | 1349 | MODULES DATA_DICTIONARY MODULE_VERSION | 1359 | MODULES DATA_DICTIONARY MODULE_VERSION |
715 | 1360 | MYSQL_PROTOCOL_STATUS DATA_DICTIONARY VARIABLE_NAME | ||
716 | 1361 | MYSQL_PROTOCOL_STATUS DATA_DICTIONARY VARIABLE_VALUE | ||
717 | 1350 | PARAMETERS INFORMATION_SCHEMA AS_LOCATOR | 1362 | PARAMETERS INFORMATION_SCHEMA AS_LOCATOR |
718 | 1351 | PARAMETERS INFORMATION_SCHEMA CHARACTER_MAXIMUM_LENGTH | 1363 | PARAMETERS INFORMATION_SCHEMA CHARACTER_MAXIMUM_LENGTH |
719 | 1352 | PARAMETERS INFORMATION_SCHEMA CHARACTER_OCTET_LENGTH | 1364 | PARAMETERS INFORMATION_SCHEMA CHARACTER_OCTET_LENGTH |
720 | @@ -1752,6 +1764,8 @@ | |||
721 | 1752 | DOMAIN_CONSTRAINTS INFORMATION_SCHEMA DOMAIN_SCHEMA | 1764 | DOMAIN_CONSTRAINTS INFORMATION_SCHEMA DOMAIN_SCHEMA |
722 | 1753 | DOMAIN_CONSTRAINTS INFORMATION_SCHEMA INITIALLY_DEFERRED | 1765 | DOMAIN_CONSTRAINTS INFORMATION_SCHEMA INITIALLY_DEFERRED |
723 | 1754 | DOMAIN_CONSTRAINTS INFORMATION_SCHEMA IS_DEFERRABLE | 1766 | DOMAIN_CONSTRAINTS INFORMATION_SCHEMA IS_DEFERRABLE |
724 | 1767 | DRIZZLE_PROTOCOL_STATUS DATA_DICTIONARY VARIABLE_NAME | ||
725 | 1768 | DRIZZLE_PROTOCOL_STATUS DATA_DICTIONARY VARIABLE_VALUE | ||
726 | 1755 | GLOBAL_STATEMENTS DATA_DICTIONARY VARIABLE_NAME | 1769 | GLOBAL_STATEMENTS DATA_DICTIONARY VARIABLE_NAME |
727 | 1756 | GLOBAL_STATEMENTS DATA_DICTIONARY VARIABLE_VALUE | 1770 | GLOBAL_STATEMENTS DATA_DICTIONARY VARIABLE_VALUE |
728 | 1757 | GLOBAL_STATUS DATA_DICTIONARY VARIABLE_NAME | 1771 | GLOBAL_STATUS DATA_DICTIONARY VARIABLE_NAME |
729 | @@ -1840,6 +1854,8 @@ | |||
730 | 1840 | MODULES DATA_DICTIONARY MODULE_LICENSE | 1854 | MODULES DATA_DICTIONARY MODULE_LICENSE |
731 | 1841 | MODULES DATA_DICTIONARY MODULE_NAME | 1855 | MODULES DATA_DICTIONARY MODULE_NAME |
732 | 1842 | MODULES DATA_DICTIONARY MODULE_VERSION | 1856 | MODULES DATA_DICTIONARY MODULE_VERSION |
733 | 1857 | MYSQL_PROTOCOL_STATUS DATA_DICTIONARY VARIABLE_NAME | ||
734 | 1858 | MYSQL_PROTOCOL_STATUS DATA_DICTIONARY VARIABLE_VALUE | ||
735 | 1843 | PARAMETERS INFORMATION_SCHEMA AS_LOCATOR | 1859 | PARAMETERS INFORMATION_SCHEMA AS_LOCATOR |
736 | 1844 | PARAMETERS INFORMATION_SCHEMA CHARACTER_MAXIMUM_LENGTH | 1860 | PARAMETERS INFORMATION_SCHEMA CHARACTER_MAXIMUM_LENGTH |
737 | 1845 | PARAMETERS INFORMATION_SCHEMA CHARACTER_OCTET_LENGTH | 1861 | PARAMETERS INFORMATION_SCHEMA CHARACTER_OCTET_LENGTH |
738 | 1846 | 1862 | ||
739 | === modified file 'plugin/session_dictionary/processlist.cc' | |||
740 | --- plugin/session_dictionary/processlist.cc 2010-08-13 23:46:13 +0000 | |||
741 | +++ plugin/session_dictionary/processlist.cc 2010-09-09 06:18:43 +0000 | |||
742 | @@ -44,8 +44,8 @@ | |||
743 | 44 | add_field("DB"); | 44 | add_field("DB"); |
744 | 45 | add_field("COMMAND", 16); | 45 | add_field("COMMAND", 16); |
745 | 46 | add_field("TIME", plugin::TableFunction::NUMBER, 0, false); | 46 | add_field("TIME", plugin::TableFunction::NUMBER, 0, false); |
748 | 47 | add_field("STATE"); | 47 | add_field("STATE", plugin::TableFunction::STRING, 256, true); |
749 | 48 | add_field("INFO", PROCESS_LIST_WIDTH); | 48 | add_field("INFO", plugin::TableFunction::STRING, PROCESS_LIST_WIDTH, true); |
750 | 49 | } | 49 | } |
751 | 50 | 50 | ||
752 | 51 | ProcesslistTool::Generator::Generator(Field **arg) : | 51 | ProcesslistTool::Generator::Generator(Field **arg) : |
753 | 52 | 52 | ||
754 | === modified file 'plugin/session_dictionary/tests/r/data_dictionary.result' | |||
755 | --- plugin/session_dictionary/tests/r/data_dictionary.result 2010-09-02 18:35:05 +0000 | |||
756 | +++ plugin/session_dictionary/tests/r/data_dictionary.result 2010-09-09 06:18:43 +0000 | |||
757 | @@ -8,8 +8,8 @@ | |||
758 | 8 | `DB` VARCHAR(256) NOT NULL, | 8 | `DB` VARCHAR(256) NOT NULL, |
759 | 9 | `COMMAND` VARCHAR(16) NOT NULL, | 9 | `COMMAND` VARCHAR(16) NOT NULL, |
760 | 10 | `TIME` BIGINT NOT NULL, | 10 | `TIME` BIGINT NOT NULL, |
763 | 11 | `STATE` VARCHAR(256) NOT NULL, | 11 | `STATE` VARCHAR(256) DEFAULT NULL, |
764 | 12 | `INFO` VARCHAR(100) NOT NULL | 12 | `INFO` VARCHAR(100) DEFAULT NULL |
765 | 13 | ) ENGINE=FunctionEngine COLLATE = utf8_general_ci | 13 | ) ENGINE=FunctionEngine COLLATE = utf8_general_ci |
766 | 14 | SELECT ID FROM processlist; | 14 | SELECT ID FROM processlist; |
767 | 15 | ID | 15 | ID |
768 | 16 | 16 | ||
769 | === modified file 'tests/r/create.result' | |||
770 | --- tests/r/create.result 2010-09-02 18:35:05 +0000 | |||
771 | +++ tests/r/create.result 2010-09-09 06:18:43 +0000 | |||
772 | @@ -1455,8 +1455,8 @@ | |||
773 | 1455 | `DB` VARCHAR(256) NOT NULL, | 1455 | `DB` VARCHAR(256) NOT NULL, |
774 | 1456 | `COMMAND` VARCHAR(16) NOT NULL, | 1456 | `COMMAND` VARCHAR(16) NOT NULL, |
775 | 1457 | `TIME` BIGINT NOT NULL, | 1457 | `TIME` BIGINT NOT NULL, |
778 | 1458 | `STATE` VARCHAR(256) NOT NULL, | 1458 | `STATE` VARCHAR(256) DEFAULT NULL, |
779 | 1459 | `INFO` VARCHAR(100) NOT NULL | 1459 | `INFO` VARCHAR(100) DEFAULT NULL |
780 | 1460 | ) ENGINE=InnoDB COLLATE = utf8_general_ci | 1460 | ) ENGINE=InnoDB COLLATE = utf8_general_ci |
781 | 1461 | drop table t1; | 1461 | drop table t1; |
782 | 1462 | create temporary table t1 like data_dictionary.processlist; | 1462 | create temporary table t1 like data_dictionary.processlist; |
783 | @@ -1471,8 +1471,8 @@ | |||
784 | 1471 | `DB` VARCHAR(256) NOT NULL, | 1471 | `DB` VARCHAR(256) NOT NULL, |
785 | 1472 | `COMMAND` VARCHAR(16) NOT NULL, | 1472 | `COMMAND` VARCHAR(16) NOT NULL, |
786 | 1473 | `TIME` BIGINT NOT NULL, | 1473 | `TIME` BIGINT NOT NULL, |
789 | 1474 | `STATE` VARCHAR(256) NOT NULL, | 1474 | `STATE` VARCHAR(256) DEFAULT NULL, |
790 | 1475 | `INFO` VARCHAR(100) NOT NULL | 1475 | `INFO` VARCHAR(100) DEFAULT NULL |
791 | 1476 | ) ENGINE=MyISAM COLLATE = utf8_general_ci | 1476 | ) ENGINE=MyISAM COLLATE = utf8_general_ci |
792 | 1477 | drop table t1; | 1477 | drop table t1; |
793 | 1478 | 1478 | ||
794 | 1479 | 1479 | ||
795 | === modified file 'tests/r/data_dictionary_like_info.result' | |||
796 | --- tests/r/data_dictionary_like_info.result 2010-07-29 00:34:46 +0000 | |||
797 | +++ tests/r/data_dictionary_like_info.result 2010-09-09 06:18:43 +0000 | |||
798 | @@ -191,7 +191,7 @@ | |||
799 | 191 | or DATA_TYPE = 'varchar') | 191 | or DATA_TYPE = 'varchar') |
800 | 192 | group by DATA_TYPE order by DATA_TYPE, num; | 192 | group by DATA_TYPE order by DATA_TYPE, num; |
801 | 193 | DATA_TYPE a num | 193 | DATA_TYPE a num |
803 | 194 | VARCHAR # 161 | 194 | VARCHAR # 165 |
804 | 195 | Warnings: | 195 | Warnings: |
805 | 196 | Warning # 1 line(s) were cut by GROUP_CONCAT() | 196 | Warning # 1 line(s) were cut by GROUP_CONCAT() |
806 | 197 | create table t1(f1 char(1) not null, f2 char(9) not null); | 197 | create table t1(f1 char(1) not null, f2 char(9) not null); |
807 | 198 | 198 | ||
808 | === modified file 'tests/r/information_schema.result' | |||
809 | --- tests/r/information_schema.result 2010-08-27 00:24:53 +0000 | |||
810 | +++ tests/r/information_schema.result 2010-09-09 06:18:43 +0000 | |||
811 | @@ -91,7 +91,7 @@ | |||
812 | 91 | table_name NOT LIKE 'falcon%' | 91 | table_name NOT LIKE 'falcon%' |
813 | 92 | GROUP BY TABLE_SCHEMA ORDER BY table_schema; | 92 | GROUP BY TABLE_SCHEMA ORDER BY table_schema; |
814 | 93 | table_schema count(*) | 93 | table_schema count(*) |
816 | 94 | DATA_DICTIONARY 40 | 94 | DATA_DICTIONARY 42 |
817 | 95 | INFORMATION_SCHEMA 20 | 95 | INFORMATION_SCHEMA 20 |
818 | 96 | create table t1(f1 LONGBLOB, f2 LONGTEXT); | 96 | create table t1(f1 LONGBLOB, f2 LONGTEXT); |
819 | 97 | select column_name,data_type,CHARACTER_OCTET_LENGTH, | 97 | select column_name,data_type,CHARACTER_OCTET_LENGTH, |
820 | @@ -193,6 +193,7 @@ | |||
821 | 193 | CUMULATIVE_SQL_COMMANDS COUNT_SELECT | 193 | CUMULATIVE_SQL_COMMANDS COUNT_SELECT |
822 | 194 | CUMULATIVE_USER_STATS BYTES_RECEIVED | 194 | CUMULATIVE_USER_STATS BYTES_RECEIVED |
823 | 195 | CURRENT_SQL_COMMANDS IP | 195 | CURRENT_SQL_COMMANDS IP |
824 | 196 | DRIZZLE_PROTOCOL_STATUS VARIABLE_VALUE | ||
825 | 196 | GLOBAL_STATEMENTS VARIABLE_VALUE | 197 | GLOBAL_STATEMENTS VARIABLE_VALUE |
826 | 197 | GLOBAL_STATUS VARIABLE_VALUE | 198 | GLOBAL_STATUS VARIABLE_VALUE |
827 | 198 | GLOBAL_VARIABLES VARIABLE_VALUE | 199 | GLOBAL_VARIABLES VARIABLE_VALUE |
828 | @@ -207,6 +208,7 @@ | |||
829 | 207 | INNODB_STATUS VARIABLE_VALUE | 208 | INNODB_STATUS VARIABLE_VALUE |
830 | 208 | INNODB_TRX TRX_STATE | 209 | INNODB_TRX TRX_STATE |
831 | 209 | MODULES MODULE_VERSION | 210 | MODULES MODULE_VERSION |
832 | 211 | MYSQL_PROTOCOL_STATUS VARIABLE_VALUE | ||
833 | 210 | PLUGINS PLUGIN_TYPE | 212 | PLUGINS PLUGIN_TYPE |
834 | 211 | PROCESSLIST USER | 213 | PROCESSLIST USER |
835 | 212 | REFERENTIAL_CONSTRAINTS CONSTRAINT_SCHEMA | 214 | REFERENTIAL_CONSTRAINTS CONSTRAINT_SCHEMA |
836 | @@ -248,6 +250,7 @@ | |||
837 | 248 | CUMULATIVE_SQL_COMMANDS COUNT_SELECT | 250 | CUMULATIVE_SQL_COMMANDS COUNT_SELECT |
838 | 249 | CUMULATIVE_USER_STATS BYTES_RECEIVED | 251 | CUMULATIVE_USER_STATS BYTES_RECEIVED |
839 | 250 | CURRENT_SQL_COMMANDS IP | 252 | CURRENT_SQL_COMMANDS IP |
840 | 253 | DRIZZLE_PROTOCOL_STATUS VARIABLE_VALUE | ||
841 | 251 | GLOBAL_STATEMENTS VARIABLE_VALUE | 254 | GLOBAL_STATEMENTS VARIABLE_VALUE |
842 | 252 | GLOBAL_STATUS VARIABLE_VALUE | 255 | GLOBAL_STATUS VARIABLE_VALUE |
843 | 253 | GLOBAL_VARIABLES VARIABLE_VALUE | 256 | GLOBAL_VARIABLES VARIABLE_VALUE |
844 | @@ -262,6 +265,7 @@ | |||
845 | 262 | INNODB_STATUS VARIABLE_VALUE | 265 | INNODB_STATUS VARIABLE_VALUE |
846 | 263 | INNODB_TRX TRX_STATE | 266 | INNODB_TRX TRX_STATE |
847 | 264 | MODULES MODULE_VERSION | 267 | MODULES MODULE_VERSION |
848 | 268 | MYSQL_PROTOCOL_STATUS VARIABLE_VALUE | ||
849 | 265 | PLUGINS PLUGIN_TYPE | 269 | PLUGINS PLUGIN_TYPE |
850 | 266 | PROCESSLIST USER | 270 | PROCESSLIST USER |
851 | 267 | REFERENTIAL_CONSTRAINTS CONSTRAINT_SCHEMA | 271 | REFERENTIAL_CONSTRAINTS CONSTRAINT_SCHEMA |
How can we make "connections" be protocol specific?