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)
{
QC_TRACE();
@ -2506,6 +2519,7 @@ int maxscaleKeyword(int token)
break;
case TK_BEGIN:
case TK_DECLARE:
if (this_unit.sql_mode == QC_SQL_MODE_ORACLE)
{
// 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 maxscaleCheckTable(Parse*, SrcList* pTables);
extern void maxscaleCreateSequence(Parse*, Token* pDatabase, Token* pTable);
extern void maxscaleDeclare(Parse* pParse);
extern void maxscaleDeallocate(Parse*, Token* pName);
extern void maxscaleDo(Parse*, ExprList* pEList);
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);
}
//////////////////////// ORACLE DECLARE ////////////////////////////////////
//
cmd ::= DECLARE. {
maxscaleDeclare(pParse);
}
%endif

View File

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