MXS-2413 Parse 'DROP DATABASE [IF EXISTS] db' completely
This commit is contained in:
@ -2239,24 +2239,44 @@ public:
|
|||||||
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT);
|
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT);
|
||||||
m_operation = QUERY_OP_DROP;
|
m_operation = QUERY_OP_DROP;
|
||||||
|
|
||||||
if (what == MXS_DROP_SEQUENCE)
|
switch (what)
|
||||||
{
|
{
|
||||||
const char* zDatabase = NULL;
|
case MXS_DROP_DATABASE:
|
||||||
char database[pDatabase ? pDatabase->n + 1 : 1];
|
|
||||||
|
|
||||||
if (pDatabase)
|
|
||||||
{
|
{
|
||||||
|
#ifdef TODO_SPECIFIC_OP_FOR_DROP_DATABASE_ADDED
|
||||||
|
// TODO: As there is only QUERY_OP_DROP, you can't be fully
|
||||||
|
// TODO: certain what a returned database actually refers to
|
||||||
|
// TODO: so better not to provide a name until there is a
|
||||||
|
// TODO: specific op.
|
||||||
|
char database[pDatabase->n + 1];
|
||||||
strncpy(database, pDatabase->z, pDatabase->n);
|
strncpy(database, pDatabase->z, pDatabase->n);
|
||||||
database[pDatabase->n] = 0;
|
database[pDatabase->n] = 0;
|
||||||
|
|
||||||
zDatabase = database;
|
update_database_names(database);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
char table[pName->n + 1];
|
case MXS_DROP_SEQUENCE:
|
||||||
strncpy(table, pName->z, pName->n);
|
{
|
||||||
table[pName->n] = 0;
|
const char* zDatabase = NULL;
|
||||||
|
char database[pDatabase ? pDatabase->n + 1 : 1];
|
||||||
|
|
||||||
update_names(zDatabase, table, NULL, NULL);
|
if (pDatabase)
|
||||||
|
{
|
||||||
|
strncpy(database, pDatabase->z, pDatabase->n);
|
||||||
|
database[pDatabase->n] = 0;
|
||||||
|
|
||||||
|
zDatabase = database;
|
||||||
|
}
|
||||||
|
|
||||||
|
char table[pName->n + 1];
|
||||||
|
strncpy(table, pName->z, pName->n);
|
||||||
|
table[pName->n] = 0;
|
||||||
|
|
||||||
|
update_names(zDatabase, table, NULL, NULL);
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -615,7 +615,7 @@ columnid(A) ::= nm(X). {
|
|||||||
// TODO: However, if not here then rules such as CAST need to be modified.
|
// TODO: However, if not here then rules such as CAST need to be modified.
|
||||||
BINARY
|
BINARY
|
||||||
/*CASCADE*/ CAST CLOSE COLUMNKW COLUMNS COMMENT CONCURRENT /*CONFLICT*/
|
/*CASCADE*/ CAST CLOSE COLUMNKW COLUMNS COMMENT CONCURRENT /*CONFLICT*/
|
||||||
DATA /*DATABASE*/ DEALLOCATE DEFERRED /*DESC*/ /*DETACH*/ DUMPFILE
|
DATA DATABASE DEALLOCATE DEFERRED /*DESC*/ /*DETACH*/ DUMPFILE
|
||||||
/*EACH*/ END ENGINE ENUM EXCLUSIVE /*EXPLAIN*/
|
/*EACH*/ END ENGINE ENUM EXCLUSIVE /*EXPLAIN*/
|
||||||
FIRST FLUSH /*FOR*/ FORMAT
|
FIRST FLUSH /*FOR*/ FORMAT
|
||||||
GLOBAL
|
GLOBAL
|
||||||
@ -2861,6 +2861,12 @@ eq_opt ::= EQ.
|
|||||||
default_opt ::= .
|
default_opt ::= .
|
||||||
default_opt ::= DEFAULT.
|
default_opt ::= DEFAULT.
|
||||||
|
|
||||||
|
////////////////////////// DROP DATABASE statement /////////////////////////////////////
|
||||||
|
//
|
||||||
|
cmd ::= DROP DATABASE ifexists id(X). {
|
||||||
|
maxscaleDrop(pParse, MXS_DROP_DATABASE, &X, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
//////////////////////// CALL statement ////////////////////////////////////
|
//////////////////////// CALL statement ////////////////////////////////////
|
||||||
//
|
//
|
||||||
cmd ::= call.
|
cmd ::= call.
|
||||||
|
|||||||
@ -4094,6 +4094,7 @@ int sqlite3DbstatRegister(sqlite3*);
|
|||||||
|
|
||||||
typedef enum mxs_drop
|
typedef enum mxs_drop
|
||||||
{
|
{
|
||||||
|
MXS_DROP_DATABASE,
|
||||||
MXS_DROP_FUNCTION,
|
MXS_DROP_FUNCTION,
|
||||||
MXS_DROP_SEQUENCE,
|
MXS_DROP_SEQUENCE,
|
||||||
} mxs_drop_t;
|
} mxs_drop_t;
|
||||||
|
|||||||
@ -216,8 +216,10 @@ static Keyword aKeywordTable[] = {
|
|||||||
{ "CURRENT_TIMESTAMP","TK_CTIME_KW", ALWAYS },
|
{ "CURRENT_TIMESTAMP","TK_CTIME_KW", ALWAYS },
|
||||||
#ifdef MAXSCALE
|
#ifdef MAXSCALE
|
||||||
{ "DATA", "TK_DATA", ALWAYS },
|
{ "DATA", "TK_DATA", ALWAYS },
|
||||||
#endif
|
{ "DATABASE", "TK_DATABASE", ALWAYS },
|
||||||
|
#else
|
||||||
{ "DATABASE", "TK_DATABASE", ATTACH },
|
{ "DATABASE", "TK_DATABASE", ATTACH },
|
||||||
|
#endif
|
||||||
#ifdef MAXSCALE
|
#ifdef MAXSCALE
|
||||||
{ "DATABASES", "TK_DATABASES_KW", ALWAYS },
|
{ "DATABASES", "TK_DATABASES_KW", ALWAYS },
|
||||||
{ "DEALLOCATE", "TK_DEALLOCATE", ALWAYS },
|
{ "DEALLOCATE", "TK_DEALLOCATE", ALWAYS },
|
||||||
|
|||||||
Reference in New Issue
Block a user