diff options
Diffstat (limited to 'databases/mysql-proxy/files/patch-lib-admin.lua')
-rw-r--r-- | databases/mysql-proxy/files/patch-lib-admin.lua | 208 |
1 files changed, 0 insertions, 208 deletions
diff --git a/databases/mysql-proxy/files/patch-lib-admin.lua b/databases/mysql-proxy/files/patch-lib-admin.lua deleted file mode 100644 index 0ab588d8e448..000000000000 --- a/databases/mysql-proxy/files/patch-lib-admin.lua +++ /dev/null @@ -1,208 +0,0 @@ ---- lib/admin.lua.orig 2009-05-05 16:55:08.000000000 +0600 -+++ lib/admin.lua 2009-05-05 16:56:11.000000000 +0600 -@@ -0,0 +1,205 @@ -+--[[ $%BEGINLICENSE%$ -+ Copyright (C) 2009 MySQL AB, 2008 Sun Microsystems, Inc -+ -+ This program is free software; you can redistribute it and/or modify -+ it under the terms of the GNU General Public License as published by -+ the Free Software Foundation; version 2 of the License. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program; if not, write to the Free Software -+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -+ -+ $%ENDLICENSE%$ --]] -+ -+-- admin-1.lua -+ -+--[[ -+ -+ See http://forge.mysql.com/tools/tool.php?id=78 -+ (Thanks to Jan Kneschke) -+ See http://www.chriscalender.com/?p=41 -+ (Thanks to Chris Calender) -+ See http://datacharmer.blogspot.com/2009/01/mysql-proxy-is-back.html -+ (Thanks Giuseppe Maxia) -+ -+--]] -+ -+ -+function set_error(errmsg) -+ proxy.response = { -+ type = proxy.MYSQLD_PACKET_ERR, -+ errmsg = errmsg or "error" -+ } -+end -+ -+function read_query(packet) -+ if packet:byte() ~= proxy.COM_QUERY then -+ set_error("[admin] we only handle text-based queries (COM_QUERY)") -+ return proxy.PROXY_SEND_RESULT -+ end -+ -+ local query = packet:sub(2) -+ local rows = { } -+ local fields = { } -+ -+ -- try to match the string up to the first non-alphanum -+ local f_s, f_e, command = string.find(packet, "^%s*(%w+)", 2) -+ local option -+ -+ if f_e then -+ -- if that match, take the next sub-string as option -+ f_s, f_e, option = string.find(packet, "^%s+(%w+)", f_e + 1) -+ end -+ -+ -- we got our commands, execute it -+ if command == "show" and option == "querycounter" then -+ --- -+ -- proxy.PROXY_SEND_RESULT requires -+ -- -+ -- proxy.response.type to be either -+ -- * proxy.MYSQLD_PACKET_OK or -+ -- * proxy.MYSQLD_PACKET_ERR -+ -- -+ -- for proxy.MYSQLD_PACKET_OK you need a resultset -+ -- * fields -+ -- * rows -+ -- -+ -- for proxy.MYSQLD_PACKET_ERR -+ -- * errmsg -+ proxy.response.type = proxy.MYSQLD_PACKET_OK -+ proxy.response.resultset = { -+ fields = { -+ { type = proxy.MYSQL_TYPE_LONG, name = "query_counter", }, -+ }, -+ rows = { -+ { proxy.global.query_counter } -+ } -+ } -+ -+ -- we have our result, send it back -+ return proxy.PROXY_SEND_RESULT -+ elseif command == "show" and option == "myerror" then -+ proxy.response.type = proxy.MYSQLD_PACKET_ERR -+ proxy.response.errmsg = "my first error" -+ -+ return proxy.PROXY_SEND_RESULT -+ -+ elseif string.sub(packet, 2):lower() == 'select help' then -+ return show_process_help() -+ -+ elseif string.sub(packet, 2):lower() == 'show proxy processlist' then -+ return show_process_table() -+ -+ elseif query == "SELECT * FROM backends" then -+ fields = { -+ { name = "backend_ndx", -+ type = proxy.MYSQL_TYPE_LONG }, -+ -+ { name = "address", -+ type = proxy.MYSQL_TYPE_STRING }, -+ { name = "state", -+ type = proxy.MYSQL_TYPE_STRING }, -+ { name = "type", -+ type = proxy.MYSQL_TYPE_STRING }, -+ } -+ -+ for i = 1, #proxy.global.backends do -+ local b = proxy.global.backends[i] -+ -+ rows[#rows + 1] = { -+ i, b.dst.name, b.state, b.type -+ } -+ end -+ else -+ set_error() -+ return proxy.PROXY_SEND_RESULT -+ end -+ -+ proxy.response = { -+ type = proxy.MYSQLD_PACKET_OK, -+ resultset = { -+ fields = fields, -+ rows = rows -+ } -+ } -+ return proxy.PROXY_SEND_RESULT -+end -+ -+ -+function make_dataset (header, dataset) -+ proxy.response.type = proxy.MYSQLD_PACKET_OK -+ -+ proxy.response.resultset = { -+ fields = {}, -+ rows = {} -+ } -+ for i,v in pairs (header) do -+ table.insert(proxy.response.resultset.fields, {type = proxy.MYSQL_TYPE_STRING, name = v}) -+ end -+ for i,v in pairs (dataset) do -+ table.insert(proxy.response.resultset.rows, v ) -+ end -+ return proxy.PROXY_SEND_RESULT -+end -+ -+function show_process_table() -+ local dataset = {} -+ local header = { 'Id', 'IP Address', 'Time' } -+ local rows = {} -+ for t_i, t_v in pairs (proxy.global.process) do -+ for s_i, s_v in pairs ( t_v ) do -+ table.insert(rows, { t_i, s_v.ip, os.date('%c',s_v.ts) }) -+ end -+ end -+ return make_dataset(header,rows) -+end -+ -+function show_process_help() -+ local dataset = {} -+ local header = { 'command', 'description' } -+ local rows = { -+ {'SELECT HELP', 'This command.'}, -+ {'SHOW PROXY PROCESSLIST', 'Show all connections and their true IP Address.'}, -+ } -+ return make_dataset(header,rows) -+end -+ -+function dump_process_table() -+ proxy.global.initialize_process_table() -+ print('current contents of process table') -+ for t_i, t_v in pairs (proxy.global.process) do -+ print ('session id: ', t_i) -+ for s_i, s_v in pairs ( t_v ) do -+ print ( '\t', s_i, s_v.ip, s_v.ts ) -+ end -+ end -+ print ('---END PROCESS TABLE---') -+end -+ -+ -+ -+ -+--[[ Help -+ -+we use a simple string-match to split commands are word-boundaries -+ -+mysql> show querycounter -+ -+is split into -+command = "show" -+option = "querycounter" -+ -+spaces are ignored, the case has to be as is. -+ -+mysql> show myerror -+ -+returns a error-packet -+ -+--]] -+ -+ |