DBZ-6794 Dbz crashed on parsing MySQL DDL statement (SELECT 1 + @sum:=1 AS ss;)

This commit is contained in:
harveyyue 2023-08-12 20:17:37 +08:00 committed by Jiri Pechanec
parent b3098de0fd
commit bb579983ca
2 changed files with 16 additions and 2 deletions

View File

@ -2698,8 +2698,8 @@ predicate
| predicate SOUNDS LIKE predicate #soundsLikePredicate | predicate SOUNDS LIKE predicate #soundsLikePredicate
| predicate NOT? LIKE predicate (ESCAPE STRING_LITERAL)? #likePredicate | predicate NOT? LIKE predicate (ESCAPE STRING_LITERAL)? #likePredicate
| predicate NOT? regex=(REGEXP | RLIKE) predicate #regexpPredicate | predicate NOT? regex=(REGEXP | RLIKE) predicate #regexpPredicate
| (LOCAL_ID VAR_ASSIGN)? expressionAtom #expressionAtomPredicate
| predicate MEMBER OF '(' predicate ')' #jsonMemberOfPredicate | predicate MEMBER OF '(' predicate ')' #jsonMemberOfPredicate
| expressionAtom #expressionAtomPredicate
; ;
@ -2712,6 +2712,7 @@ expressionAtom
| mysqlVariable #mysqlVariableExpressionAtom | mysqlVariable #mysqlVariableExpressionAtom
| unaryOperator expressionAtom #unaryExpressionAtom | unaryOperator expressionAtom #unaryExpressionAtom
| BINARY expressionAtom #binaryExpressionAtom | BINARY expressionAtom #binaryExpressionAtom
| LOCAL_ID VAR_ASSIGN expressionAtom #variableAssignExpressionAtom
| '(' expression (',' expression)* ')' #nestedExpressionAtom | '(' expression (',' expression)* ')' #nestedExpressionAtom
| ROW '(' expression (',' expression)+ ')' #nestedRowExpressionAtom | ROW '(' expression (',' expression)+ ')' #nestedRowExpressionAtom
| EXISTS '(' selectStatement ')' #existsExpressionAtom | EXISTS '(' selectStatement ')' #existsExpressionAtom

View File

@ -307,4 +307,17 @@ cte2 AS (
SELECT * FROM table2 WHERE col2 = 'value' SELECT * FROM table2 WHERE col2 = 'value'
) )
SELECT cte1.col1, cte2.col2 FROM cte1 JOIN cte2 ON cte1.id = cte2.id; SELECT cte1.col1, cte2.col2 FROM cte1 JOIN cte2 ON cte1.id = cte2.id;
#end #end
SELECT !(1 + @sum:=1) AS ss;
SELECT (@sum:=1 + 1) AS ss;
SELECT 1 + @sum:=1 AS ss;
SELECT 100 >> @sum:=1 AS ss;
SELECT @sum:=1 < 100 AS ss;
SELECT 100 and @sum:=1 AS ss;
SELECT
@sum := @sum + column_name AS running_sum
FROM
your_table,
(SELECT @sum := 0) AS init
ORDER BY
some_order_column;