MXS-1196: Report user var read when prepared statements

This commit is contained in:
Johan Wikman 2017-05-02 15:59:43 +03:00
parent da0900786a
commit 62a64cba31
2 changed files with 11 additions and 7 deletions

View File

@ -2038,7 +2038,7 @@ void maxscaleDrop(Parse* pParse, MxsDrop* pDrop)
info->operation = QUERY_OP_DROP;
}
void maxscaleExecute(Parse* pParse, Token* pName)
void maxscaleExecute(Parse* pParse, Token* pName, int type_mask)
{
QC_TRACE();
@ -2046,7 +2046,7 @@ void maxscaleExecute(Parse* pParse, Token* pName)
ss_dassert(info);
info->status = QC_QUERY_PARSED;
info->type_mask = QUERY_TYPE_WRITE;
info->type_mask = (QUERY_TYPE_WRITE | type_mask);
// If information is collected in several passes, then we may
// this information already.

View File

@ -64,6 +64,7 @@ enum
{
QUERY_TYPE_READ = 0x000002, /*< Read database data:any */
QUERY_TYPE_WRITE = 0x000004, /*< Master data will be modified:master */
QUERY_TYPE_USERVAR_READ = 0x000040, /*< Read a user variable:master or any */
};
typedef enum qc_field_usage
@ -112,7 +113,8 @@ extern void maxscaleCheckTable(Parse*, SrcList* pTables);
extern void maxscaleDeallocate(Parse*, Token* pName);
extern void maxscaleDo(Parse*, ExprList* pEList);
extern void maxscaleDrop(Parse*, MxsDrop* pDrop);
extern void maxscaleExecute(Parse*, Token* pName);
extern void maxscaleExecute(Parse*, Token* pName, int type_mask);
extern void maxscaleExplain(Parse*, SrcList* pName);
extern void maxscaleExplain(Parse*, Token* pNext);
extern void maxscaleFlush(Parse*, Token* pWhat);
extern void maxscaleHandler(Parse*, mxs_handler_t, SrcList* pFullName, Token* pName);
@ -2848,11 +2850,13 @@ prepare ::= PREPARE nm(X) FROM STRING(Y).
execute_variables ::= VARIABLE.
execute_variables ::= execute_variables COMMA VARIABLE.
execute_variables_opt ::= .
execute_variables_opt ::= USING execute_variables.
%type execute_variables_opt {int}
execute ::= EXECUTE nm(X) execute_variables_opt. {
maxscaleExecute(pParse, &X);
execute_variables_opt(A) ::= . { A = 0; }
execute_variables_opt(A) ::= USING execute_variables. { A = QUERY_TYPE_USERVAR_READ; }
execute ::= EXECUTE nm(X) execute_variables_opt(Y). {
maxscaleExecute(pParse, &X, Y);
}
dod ::= DEALLOCATE.