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

View File

@ -64,6 +64,7 @@ enum
{ {
QUERY_TYPE_READ = 0x000002, /*< Read database data:any */ QUERY_TYPE_READ = 0x000002, /*< Read database data:any */
QUERY_TYPE_WRITE = 0x000004, /*< Master data will be modified:master */ 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 typedef enum qc_field_usage
@ -112,7 +113,8 @@ extern void maxscaleCheckTable(Parse*, SrcList* pTables);
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*, MxsDrop* pDrop); 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 maxscaleExplain(Parse*, Token* pNext);
extern void maxscaleFlush(Parse*, Token* pWhat); extern void maxscaleFlush(Parse*, Token* pWhat);
extern void maxscaleHandler(Parse*, mxs_handler_t, SrcList* pFullName, Token* pName); 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 ::= VARIABLE.
execute_variables ::= execute_variables COMMA VARIABLE. execute_variables ::= execute_variables COMMA VARIABLE.
execute_variables_opt ::= . %type execute_variables_opt {int}
execute_variables_opt ::= USING execute_variables.
execute ::= EXECUTE nm(X) execute_variables_opt. { execute_variables_opt(A) ::= . { A = 0; }
maxscaleExecute(pParse, &X); 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. dod ::= DEALLOCATE.