MXS-1196: Handle DECLARE

DECLARE can also begin an anonymous block in PL/SQL.
This commit is contained in:
Johan Wikman
2017-05-23 15:28:52 +03:00
parent bf54a9bf9f
commit 2a89a4de45
3 changed files with 22 additions and 0 deletions

View File

@ -2173,6 +2173,19 @@ void maxscaleComment()
} }
} }
void maxscaleDeclare(Parse* pParse)
{
QC_TRACE();
QC_SQLITE_INFO* info = this_thread.info;
ss_dassert(info);
if (this_unit.sql_mode != QC_SQL_MODE_ORACLE)
{
info->status = QC_QUERY_INVALID;
}
}
void maxscaleDeallocate(Parse* pParse, Token* pName) void maxscaleDeallocate(Parse* pParse, Token* pName)
{ {
QC_TRACE(); QC_TRACE();
@ -2506,6 +2519,7 @@ int maxscaleKeyword(int token)
break; break;
case TK_BEGIN: case TK_BEGIN:
case TK_DECLARE:
if (this_unit.sql_mode == QC_SQL_MODE_ORACLE) if (this_unit.sql_mode == QC_SQL_MODE_ORACLE)
{ {
// The beginning of a BLOCK. We'll assume it is in a single // The beginning of a BLOCK. We'll assume it is in a single

View File

@ -111,6 +111,7 @@ extern void maxscaleAlterTable(Parse*, mxs_alter_t command, SrcList*, Token*);
extern void maxscaleCall(Parse*, SrcList* pName, int uses_variables); extern void maxscaleCall(Parse*, SrcList* pName, int uses_variables);
extern void maxscaleCheckTable(Parse*, SrcList* pTables); extern void maxscaleCheckTable(Parse*, SrcList* pTables);
extern void maxscaleCreateSequence(Parse*, Token* pDatabase, Token* pTable); extern void maxscaleCreateSequence(Parse*, Token* pDatabase, Token* pTable);
extern void maxscaleDeclare(Parse* pParse);
extern void maxscaleDeallocate(Parse*, Token* pName); extern void maxscaleDeallocate(Parse*, Token* pName);
extern void maxscaleDo(Parse*, ExprList* pEList); extern void maxscaleDo(Parse*, ExprList* pEList);
extern void maxscaleDrop(Parse*, int what, Token* pDatabase, Token* pName); extern void maxscaleDrop(Parse*, int what, Token* pDatabase, Token* pName);
@ -3325,4 +3326,10 @@ cmd ::= DROP SEQUENCE nm(X) dbnm(Y).{ // CREATE SEQUENCE db
maxscaleDrop(pParse, MXS_DROP_SEQUENCE, pDatabase, pTable); maxscaleDrop(pParse, MXS_DROP_SEQUENCE, pDatabase, pTable);
} }
//////////////////////// ORACLE DECLARE ////////////////////////////////////
//
cmd ::= DECLARE. {
maxscaleDeclare(pParse);
}
%endif %endif

View File

@ -218,6 +218,7 @@ static Keyword aKeywordTable[] = {
#ifdef MAXSCALE #ifdef MAXSCALE
{ "DATABASES", "TK_DATABASES_KW", ALWAYS }, { "DATABASES", "TK_DATABASES_KW", ALWAYS },
{ "DEALLOCATE", "TK_DEALLOCATE", ALWAYS }, { "DEALLOCATE", "TK_DEALLOCATE", ALWAYS },
{ "DECLARE", "TK_DECLARE", ALWAYS },
#endif #endif
{ "DEFAULT", "TK_DEFAULT", ALWAYS }, { "DEFAULT", "TK_DEFAULT", ALWAYS },
{ "DEFERRED", "TK_DEFERRED", ALWAYS }, { "DEFERRED", "TK_DEFERRED", ALWAYS },