diff --git a/query_classifier/qc_sqlite/qc_sqlite.c b/query_classifier/qc_sqlite/qc_sqlite.c index b51b29c13..99d5363e7 100644 --- a/query_classifier/qc_sqlite/qc_sqlite.c +++ b/query_classifier/qc_sqlite/qc_sqlite.c @@ -2100,7 +2100,7 @@ void maxscaleAlterTable(Parse *pParse, /* Parser context. */ exposed_sqlite3SrcListDelete(pParse->db, pSrc); } -void maxscaleCall(Parse* pParse, SrcList* pName, int uses_variables) +void maxscaleCall(Parse* pParse, SrcList* pName, ExprList* pExprList) { QC_TRACE(); @@ -2109,12 +2109,14 @@ void maxscaleCall(Parse* pParse, SrcList* pName, int uses_variables) info->status = QC_QUERY_PARSED; info->type_mask = QUERY_TYPE_WRITE; - if (uses_variables) + + if (pExprList) { - info->type_mask |= QUERY_TYPE_USERVAR_READ; + update_field_infos_from_exprlist(info, pExprList, 0, NULL); } exposed_sqlite3SrcListDelete(pParse->db, pName); + exposed_sqlite3ExprListDelete(pParse->db, pExprList); } void maxscaleCheckTable(Parse* pParse, SrcList* pTables) diff --git a/query_classifier/qc_sqlite/sqlite-src-3110100/src/parse.y b/query_classifier/qc_sqlite/sqlite-src-3110100/src/parse.y index 87ea93da5..28b331bd4 100644 --- a/query_classifier/qc_sqlite/sqlite-src-3110100/src/parse.y +++ b/query_classifier/qc_sqlite/sqlite-src-3110100/src/parse.y @@ -108,7 +108,7 @@ extern void mxs_sqlite3Update(Parse*, SrcList*, ExprList*, Expr*, int); extern void maxscaleCollectInfoFromSelect(Parse*, Select*, int); 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, ExprList* pExprList); extern void maxscaleCheckTable(Parse*, SrcList* pTables); extern void maxscaleCreateSequence(Parse*, Token* pDatabase, Token* pTable); extern void maxscaleDeclare(Parse* pParse); @@ -2697,27 +2697,9 @@ default_opt ::= DEFAULT. // cmd ::= call. -%type call_arg {int} -call_arg(A) ::= INTEGER. {A=0;} -call_arg(A) ::= FLOAT. {A=0;} -call_arg(A) ::= STRING. {A=0;} -call_arg(A) ::= id. {A=0;} -call_arg(A) ::= VARIABLE(X). { - if (X.n == 1 && strncmp(X.z, "?", 1) == 0) { - A=0; - } else { - A=1; - } -} - -%type call_args {int} -call_args(A) ::= call_arg(X). {A=X;} -call_args(A) ::= call_args(X) COMMA call_arg(Y). {A=X|Y;} - -%type call_args_opt {int} +%type call_args_opt {ExprList*} call_args_opt(A) ::= . {A=0;} -call_args_opt(A) ::= LP RP. {A=0;} -call_args_opt(A) ::= LP call_args(X) RP. {A=X;} +call_args_opt(A) ::= LP exprlist(X) RP. {A=X;} call ::= CALL fullname(X) call_args_opt(Y). { maxscaleCall(pParse, X, Y);