Changeset: 9e10077ca026 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/9e10077ca026
Modified Files:
sql/server/sql_parser.y
Branch: Jan2022
Log Message:
For ANY/ALL quantifiers make sure right side of comparison is under
parenthesis, so no ambiguity is created on the parser. This fixes sqlancer18
crash
diffs (73 lines):
diff --git a/sql/server/sql_parser.y b/sql/server/sql_parser.y
--- a/sql/server/sql_parser.y
+++ b/sql/server/sql_parser.y
@@ -525,6 +525,7 @@ int yydebug=1;
%type <i_val>
_transaction_mode_list
+ any_all_some
check_identity
datetime_field
dealloc_ref
@@ -539,7 +540,6 @@ int yydebug=1;
join_type
non_second_datetime_field
nonzero
- opt_any_all_some
opt_bounds
opt_column
opt_encrypted
@@ -3579,31 +3579,42 @@ pred_exp:
| predicate { $$ = $1; }
;
-opt_any_all_some:
- { $$ = -1; }
- | ANY { $$ = 0; }
+any_all_some:
+ ANY { $$ = 0; }
| SOME { $$ = 0; }
| ALL { $$ = 1; }
;
comparison_predicate:
- pred_exp COMPARISON opt_any_all_some pred_exp
+ pred_exp COMPARISON pred_exp
{ dlist *l = L();
append_symbol(l, $1);
append_string(l, $2);
- append_symbol(l, $4);
- if ($3 > -1)
- append_int(l, $3);
+ append_symbol(l, $3);
$$ = _symbol_create_list(SQL_COMPARE, l ); }
- | pred_exp '=' opt_any_all_some pred_exp
+ | pred_exp '=' pred_exp
{ dlist *l = L();
append_symbol(l, $1);
append_string(l, sa_strdup(SA, "="));
- append_symbol(l, $4);
- if ($3 > -1)
- append_int(l, $3);
+ append_symbol(l, $3);
+ $$ = _symbol_create_list(SQL_COMPARE, l ); }
+ | pred_exp COMPARISON any_all_some '(' value ')'
+ { dlist *l = L();
+
+ append_symbol(l, $1);
+ append_string(l, $2);
+ append_symbol(l, $5);
+ append_int(l, $3);
+ $$ = _symbol_create_list(SQL_COMPARE, l ); }
+ | pred_exp '=' any_all_some '(' value ')'
+ { dlist *l = L();
+
+ append_symbol(l, $1);
+ append_string(l, sa_strdup(SA, "="));
+ append_symbol(l, $5);
+ append_int(l, $3);
$$ = _symbol_create_list(SQL_COMPARE, l ); }
;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list