[to #47096137] fix CALL statement syntax for procedures without parameter

This commit is contained in:
0xacc
2023-01-10 08:41:50 +00:00
committed by ob-robot
parent 460fdf9fc4
commit a28dcc2c8b

View File

@ -247,7 +247,7 @@ void obpl_mysql_wrap_get_user_var_into_subquery(ObParseCtx *parse_ctx, ParseNode
%type <node> sp_name sp_call_name opt_sp_param_list opt_sp_fparam_list sp_param_list sp_fparam_list %type <node> sp_name sp_call_name opt_sp_param_list opt_sp_fparam_list sp_param_list sp_fparam_list
%type <node> sp_param sp_fparam %type <node> sp_param sp_fparam
%type <node> opt_sp_definer sp_create_chistics sp_create_chistic sp_chistic opt_parentheses user opt_host_name %type <node> opt_sp_definer sp_create_chistics sp_create_chistic sp_chistic opt_parentheses user opt_host_name
%type <node> param_type opt_sp_cparams opt_sp_cparam_list opt_cexpr sp_cparam opt_sp_cparam_with_assign %type <node> param_type sp_cparams opt_sp_cparam_list cexpr sp_cparam opt_sp_cparam_with_assign
%type <ival> opt_sp_inout opt_if_exists %type <ival> opt_sp_inout opt_if_exists
%type <node> call_sp_stmt do_sp_stmt %type <node> call_sp_stmt do_sp_stmt
%type <node> sp_cond sp_hcond_list sp_hcond %type <node> sp_cond sp_hcond_list sp_hcond
@ -543,14 +543,15 @@ call_sp_stmt:
opt_sp_cparam_list: opt_sp_cparam_list:
/* Empty */ { $$ = NULL; } /* Empty */ { $$ = NULL; }
| '(' opt_sp_cparams ')' | '(' ')' { $$ =NULL; }
| '(' sp_cparams ')'
{ {
merge_nodes($$, parse_ctx->mem_pool_, T_SP_CPARAM_LIST, $2); merge_nodes($$, parse_ctx->mem_pool_, T_SP_CPARAM_LIST, $2);
} }
; ;
opt_sp_cparams: sp_cparams:
opt_sp_cparams ',' sp_cparam sp_cparams ',' sp_cparam
{ {
if ($1 == NULL || $3 == NULL) { if ($1 == NULL || $3 == NULL) {
YYERROR; YYERROR;
@ -561,7 +562,7 @@ opt_sp_cparams:
; ;
sp_cparam: sp_cparam:
opt_cexpr opt_sp_cparam_with_assign cexpr opt_sp_cparam_with_assign
{ {
if (NULL == $1 && NULL != $2) { if (NULL == $1 && NULL != $2) {
YYERROR; YYERROR;
@ -579,7 +580,7 @@ sp_cparam:
opt_sp_cparam_with_assign: opt_sp_cparam_with_assign:
/*EMPTY*/ { $$ = NULL; } /*EMPTY*/ { $$ = NULL; }
| PARAM_ASSIGN_OPERATOR opt_cexpr | PARAM_ASSIGN_OPERATOR cexpr
{ {
if (NULL == $2) YYERROR; $$ = $2; if (NULL == $2) YYERROR; $$ = $2;
if (NULL != $2) if (NULL != $2)
@ -587,10 +588,13 @@ opt_sp_cparam_with_assign:
} }
; ;
opt_cexpr: cexpr:
{ {
//same as expr in sql rule, and terminate when read ';' //same as expr in sql rule, and terminate when read ';'
do_parse_sql_expr_rule($$, parse_ctx, 3, ',', ')', PARAM_ASSIGN_OPERATOR); do_parse_sql_expr_rule($$, parse_ctx, 3, ',', ')', PARAM_ASSIGN_OPERATOR);
if (NULL == $$) {
YYERROR;
}
} }
; ;
@ -2362,7 +2366,7 @@ ParseNode *obpl_mysql_read_sql_construct(ObParseCtx *parse_ctx, const char *pref
va_list va; va_list va;
bool is_break = false; bool is_break = false;
int sql_str_len = -1; int sql_str_len = -1;
int parenlevel = 0; int parenlevel = (*(la_token->la_yychar) == '(' || *(la_token->la_yychar) == '[') ? 1 : 0;
const char *sql_str = NULL; const char *sql_str = NULL;
ParseResult parse_result; ParseResult parse_result;
ParseNode *sql_node = NULL; ParseNode *sql_node = NULL;