Adding parsing for several SQL commands

ALTER VIEW
CALL
CHANGE MASTER
CREATE DATABASE
CREATE INDEX
CREATE SCHEMA
CREATE TABLE
CREATE TEMPORARY
CREATE TRIGGER
CREATE USER
CREATE VIEW
DESCRIBE
DROP TABLE
DROP TRIGGER
DROP USER
DROP VIEW
FLUSH
GRANT
KILL
LOCK TABLE
LOAD
OPTIMIZE
RENAME TABLE
RESET MASTER
RESET SLAVE
REVOKE
SAVEPOINT
TRUNCATE TABLE
UNLOCK
pull/737/head
René Cannaò 10 years ago
parent 816a443276
commit 3380f6df48

@ -9,8 +9,10 @@ typedef std::unordered_map<std::uint64_t, void *> umap_query_digest;
enum MYSQL_COM_QUERY_command {
MYSQL_COM_QUERY_ALTER_TABLE,
MYSQL_COM_QUERY_ALTER_VIEW,
MYSQL_COM_QUERY_ANALYZE_TABLE,
MYSQL_COM_QUERY_BEGIN,
MYSQL_COM_QUERY_CALL,
MYSQL_COM_QUERY_CHANGE_MASTER,
MYSQL_COM_QUERY_COMMIT,
MYSQL_COM_QUERY_CREATE_DATABASE,
@ -19,6 +21,7 @@ enum MYSQL_COM_QUERY_command {
MYSQL_COM_QUERY_CREATE_TEMPORARY,
MYSQL_COM_QUERY_CREATE_TRIGGER,
MYSQL_COM_QUERY_CREATE_USER,
MYSQL_COM_QUERY_CREATE_VIEW,
MYSQL_COM_QUERY_DEALLOCATE,
MYSQL_COM_QUERY_DELETE,
MYSQL_COM_QUERY_DESCRIBE,
@ -27,6 +30,7 @@ enum MYSQL_COM_QUERY_command {
MYSQL_COM_QUERY_DROP_TABLE,
MYSQL_COM_QUERY_DROP_TRIGGER,
MYSQL_COM_QUERY_DROP_USER,
MYSQL_COM_QUERY_DROP_VIEW,
MYSQL_COM_QUERY_GRANT,
MYSQL_COM_QUERY_EXECUTE,
MYSQL_COM_QUERY_EXPLAIN,
@ -50,6 +54,7 @@ enum MYSQL_COM_QUERY_command {
MYSQL_COM_QUERY_SET,
MYSQL_COM_QUERY_SHOW_TABLE_STATUS,
MYSQL_COM_QUERY_START_TRANSACTION,
MYSQL_COM_QUERY_TRUNCATE_TABLE,
MYSQL_COM_QUERY_UNLOCK_TABLES,
MYSQL_COM_QUERY_UPDATE,
MYSQL_COM_QUERY_USE,

@ -298,8 +298,10 @@ Query_Processor::Query_Processor() {
for (int i=0; i<MYSQL_COM_QUERY___NONE; i++) commands_counters[i]=new Command_Counter(i);
commands_counters_desc[MYSQL_COM_QUERY_ALTER_TABLE]=(char *)"ALTER_TABLE";
commands_counters_desc[MYSQL_COM_QUERY_ALTER_VIEW]=(char *)"ALTER_VIEW";
commands_counters_desc[MYSQL_COM_QUERY_ANALYZE_TABLE]=(char *)"ANALYZE_TABLE";
commands_counters_desc[MYSQL_COM_QUERY_BEGIN]=(char *)"BEGIN";
commands_counters_desc[MYSQL_COM_QUERY_CALL]=(char *)"CALL";
commands_counters_desc[MYSQL_COM_QUERY_CHANGE_MASTER]=(char *)"CHANGE_MASTER";
commands_counters_desc[MYSQL_COM_QUERY_COMMIT]=(char *)"COMMIT";
commands_counters_desc[MYSQL_COM_QUERY_CREATE_DATABASE]=(char *)"CREATE_DATABASE";
@ -308,6 +310,7 @@ Query_Processor::Query_Processor() {
commands_counters_desc[MYSQL_COM_QUERY_CREATE_TEMPORARY]=(char *)"CREATE_TEMPORARY";
commands_counters_desc[MYSQL_COM_QUERY_CREATE_TRIGGER]=(char *)"CREATE_TRIGGER";
commands_counters_desc[MYSQL_COM_QUERY_CREATE_USER]=(char *)"CREATE_USER";
commands_counters_desc[MYSQL_COM_QUERY_CREATE_VIEW]=(char *)"CREATE_VIEW";
commands_counters_desc[MYSQL_COM_QUERY_DEALLOCATE]=(char *)"DEALLOCATE";
commands_counters_desc[MYSQL_COM_QUERY_DELETE]=(char *)"DELETE";
commands_counters_desc[MYSQL_COM_QUERY_DESCRIBE]=(char *)"DESCRIBE";
@ -316,10 +319,11 @@ Query_Processor::Query_Processor() {
commands_counters_desc[MYSQL_COM_QUERY_DROP_TABLE]=(char *)"DROP_TABLE";
commands_counters_desc[MYSQL_COM_QUERY_DROP_TRIGGER]=(char *)"DROP_TRIGGER";
commands_counters_desc[MYSQL_COM_QUERY_DROP_USER]=(char *)"DROP_USER";
commands_counters_desc[MYSQL_COM_QUERY_GRANT]=(char *)"GRANT";
commands_counters_desc[MYSQL_COM_QUERY_DROP_VIEW]=(char *)"DROP_VIEW";
commands_counters_desc[MYSQL_COM_QUERY_EXECUTE]=(char *)"EXECUTE";
commands_counters_desc[MYSQL_COM_QUERY_EXPLAIN]=(char *)"EXPLAIN";
commands_counters_desc[MYSQL_COM_QUERY_FLUSH]=(char *)"FLUSH";
commands_counters_desc[MYSQL_COM_QUERY_GRANT]=(char *)"GRANT";
commands_counters_desc[MYSQL_COM_QUERY_INSERT]=(char *)"INSERT";
commands_counters_desc[MYSQL_COM_QUERY_KILL]=(char *)"KILL";
commands_counters_desc[MYSQL_COM_QUERY_LOAD]=(char *)"LOAD";
@ -338,11 +342,12 @@ Query_Processor::Query_Processor() {
commands_counters_desc[MYSQL_COM_QUERY_SELECT_FOR_UPDATE]=(char *)"SELECT_FOR_UPDATE";
commands_counters_desc[MYSQL_COM_QUERY_SET]=(char *)"SET";
commands_counters_desc[MYSQL_COM_QUERY_SHOW_TABLE_STATUS]=(char *)"SHOW_TABLE_STATUS";
commands_counters_desc[MYSQL_COM_QUERY_SHOW]=(char *)"SHOW";
commands_counters_desc[MYSQL_COM_QUERY_START_TRANSACTION]=(char *)"START_TRANSACTION";
commands_counters_desc[MYSQL_COM_QUERY_TRUNCATE_TABLE]=(char *)"TRUNCATE_TABLE";
commands_counters_desc[MYSQL_COM_QUERY_UNLOCK_TABLES]=(char *)"UNLOCK_TABLES";
commands_counters_desc[MYSQL_COM_QUERY_UPDATE]=(char *)"UPDATE";
commands_counters_desc[MYSQL_COM_QUERY_USE]=(char *)"USE";
commands_counters_desc[MYSQL_COM_QUERY_SHOW]=(char *)"SHOW";
commands_counters_desc[MYSQL_COM_QUERY_UNKNOWN]=(char *)"UNKNOWN";
};
@ -1006,18 +1011,21 @@ enum MYSQL_COM_QUERY_command Query_Processor::__query_parser_command_type(SQP_pa
if (token==NULL) break;
if (!mystrcasecmp("TABLE",token)) {
ret=MYSQL_COM_QUERY_ALTER_TABLE;
break;
} else {
if (!mystrcasecmp("OFFLINE",token) || !mystrcasecmp("ONLINE",token)) {
token=(char *)tokenize(&tok);
if (token==NULL) break;
if (!mystrcasecmp("TABLE",token)) {
ret=MYSQL_COM_QUERY_ALTER_TABLE;
break;
} else {
if (!mystrcasecmp("IGNORE",token)) {
if (token==NULL) break;
token=(char *)tokenize(&tok);
if (!mystrcasecmp("TABLE",token))
ret=MYSQL_COM_QUERY_ALTER_TABLE;
break;
}
}
} else {
@ -1026,9 +1034,14 @@ enum MYSQL_COM_QUERY_command Query_Processor::__query_parser_command_type(SQP_pa
token=(char *)tokenize(&tok);
if (!mystrcasecmp("TABLE",token))
ret=MYSQL_COM_QUERY_ALTER_TABLE;
break;
}
}
}
if (!mystrcasecmp("VIEW",token)) {
ret=MYSQL_COM_QUERY_ALTER_VIEW;
break;
}
break;
}
if (!mystrcasecmp("ANALYZE",token)) { // ANALYZE [NO_WRITE_TO_BINLOG | LOCAL] TABLE
@ -1056,8 +1069,59 @@ enum MYSQL_COM_QUERY_command Query_Processor::__query_parser_command_type(SQP_pa
break;
case 'c':
case 'C':
if (!strcasecmp("CALL",token)) { // CALL
ret=MYSQL_COM_QUERY_CALL;
break;
}
if (!strcasecmp("CHANGE",token)) { // CHANGE
token=(char *)tokenize(&tok);
if (token==NULL) break;
if (!strcasecmp("MASTER",token)) {
ret=MYSQL_COM_QUERY_CHANGE_MASTER;
break;
}
break;
}
if (!strcasecmp("COMMIT",token)) { // COMMIT
ret=MYSQL_COM_QUERY_COMMIT;
break;
}
if (!strcasecmp("CREATE",token)) { // CREATE
token=(char *)tokenize(&tok);
if (token==NULL) break;
if (!strcasecmp("DATABASE",token)) {
ret=MYSQL_COM_QUERY_CREATE_DATABASE;
break;
}
if (!strcasecmp("INDEX",token)) {
ret=MYSQL_COM_QUERY_CREATE_INDEX;
break;
}
if (!strcasecmp("SCHEMA",token)) {
ret=MYSQL_COM_QUERY_CREATE_DATABASE;
break;
}
if (!strcasecmp("TABLE",token)) {
ret=MYSQL_COM_QUERY_CREATE_TABLE;
break;
}
if (!strcasecmp("TEMPORARY",token)) {
ret=MYSQL_COM_QUERY_CREATE_TEMPORARY;
break;
}
if (!strcasecmp("TRIGGER",token)) {
ret=MYSQL_COM_QUERY_CREATE_TRIGGER;
break;
}
if (!strcasecmp("USER",token)) {
ret=MYSQL_COM_QUERY_CREATE_USER;
break;
}
if (!strcasecmp("VIEW",token)) {
ret=MYSQL_COM_QUERY_CREATE_VIEW;
break;
}
break;
}
break;
case 'd':
@ -1074,32 +1138,129 @@ enum MYSQL_COM_QUERY_command Query_Processor::__query_parser_command_type(SQP_pa
ret=MYSQL_COM_QUERY_DELETE;
break;
}
if (!strcasecmp("DESCRIBE",token)) { // DESCRIBE
ret=MYSQL_COM_QUERY_DESCRIBE;
break;
}
if (!strcasecmp("DROP",token)) { // DROP
token=(char *)tokenize(&tok);
if (token==NULL) break;
if (!strcasecmp("TABLE",token)) {
ret=MYSQL_COM_QUERY_DROP_TABLE;
break;
}
if (!strcasecmp("TRIGGER",token)) {
ret=MYSQL_COM_QUERY_DROP_TRIGGER;
break;
}
if (!strcasecmp("USER",token)) {
ret=MYSQL_COM_QUERY_DROP_USER;
break;
}
if (!strcasecmp("VIEW",token)) {
ret=MYSQL_COM_QUERY_DROP_VIEW;
break;
}
}
break;
case 'e':
case 'E':
if (!strcasecmp("EXECUTE",token)) { // INSERT
if (!strcasecmp("EXECUTE",token)) { // EXECUTE
ret=MYSQL_COM_QUERY_EXECUTE;
}
break;
case 'f':
case 'F':
if (!strcasecmp("FLUSH",token)) { // FLUSH
ret=MYSQL_COM_QUERY_FLUSH;
break;
}
break;
case 'g':
case 'G':
if (!strcasecmp("GRANT",token)) { // GRANT
ret=MYSQL_COM_QUERY_GRANT;
break;
}
break;
case 'i':
case 'I':
if (!strcasecmp("INSERT",token)) { // INSERT
ret=MYSQL_COM_QUERY_INSERT;
break;
}
break;
case 'k':
case 'K':
if (!strcasecmp("KILL",token)) { // KILL
ret=MYSQL_COM_QUERY_KILL;
break;
}
break;
case 'l':
case 'L':
if (!strcasecmp("LOCK",token)) { // LOCK
token=(char *)tokenize(&tok);
if (token==NULL) break;
if (!strcasecmp("TABLE",token)) {
ret=MYSQL_COM_QUERY_LOCK_TABLE;
break;
}
}
if (!strcasecmp("LOAD",token)) { // LOAD
ret=MYSQL_COM_QUERY_LOAD;
break;
}
break;
case 'o':
case 'O':
if (!strcasecmp("OPTIMIZE",token)) { // OPTIMIZE
ret=MYSQL_COM_QUERY_OPTIMIZE;
break;
}
break;
case 'p':
case 'P':
if (!strcasecmp("PREPARE",token)) { // ROLLBACK
if (!strcasecmp("PREPARE",token)) { // PREPARE
ret=MYSQL_COM_QUERY_PREPARE;
break;
}
if (!strcasecmp("PURGE",token)) { // PURGE
ret=MYSQL_COM_QUERY_PURGE;
break;
}
break;
case 'r':
case 'R':
if (!strcasecmp("REPLACE",token)) { // ROLLBACK
if (!strcasecmp("RENAME",token)) { // RENAME
token=(char *)tokenize(&tok);
if (token==NULL) break;
if (!strcasecmp("TABLE",token)) {
ret=MYSQL_COM_QUERY_RENAME_TABLE;
break;
}
}
if (!strcasecmp("REPLACE",token)) { // REPLACE
ret=MYSQL_COM_QUERY_REPLACE;
break;
}
if (!strcasecmp("RESET",token)) { // RESET
token=(char *)tokenize(&tok);
if (token==NULL) break;
if (!strcasecmp("MASTER",token)) {
ret=MYSQL_COM_QUERY_RESET_MASTER;
break;
}
if (!strcasecmp("SLAVE",token)) {
ret=MYSQL_COM_QUERY_RESET_SLAVE;
break;
}
break;
}
if (!strcasecmp("REVOKE",token)) { // REVOKE
ret=MYSQL_COM_QUERY_REVOKE;
break;
}
if (!strcasecmp("ROLLBACK",token)) { // ROLLBACK
ret=MYSQL_COM_QUERY_ROLLBACK;
break;
@ -1107,9 +1268,14 @@ enum MYSQL_COM_QUERY_command Query_Processor::__query_parser_command_type(SQP_pa
break;
case 's':
case 'S':
if (!mystrcasecmp("SAVEPOINT",token)) { // SAVEPOINT
ret=MYSQL_COM_QUERY_SAVEPOINT;
break;
}
if (!mystrcasecmp("SELECT",token)) { // SELECT
ret=MYSQL_COM_QUERY_SELECT;
break;
// FIXME: SELECT FOR UPDATE is not implemented
}
if (!mystrcasecmp("SET",token)) { // SET
ret=MYSQL_COM_QUERY_SET;
@ -1137,10 +1303,25 @@ enum MYSQL_COM_QUERY_command Query_Processor::__query_parser_command_type(SQP_pa
break;
}
break;
case 't':
case 'T':
if (!strcasecmp("TRUNCATE",token)) { // TRUNCATE
if (token==NULL) break;
if (!strcasecmp("TABLE",token)) {
ret=MYSQL_COM_QUERY_TRUNCATE_TABLE;
break;
}
}
break;
case 'u':
case 'U':
if (!strcasecmp("UNLOCK",token)) { // UNLOCK
ret=MYSQL_COM_QUERY_UNLOCK_TABLES;
break;
}
if (!strcasecmp("UPDATE",token)) { // UPDATE
ret=MYSQL_COM_QUERY_UPDATE;
break;
}
break;
default:

Loading…
Cancel
Save