parser: support := in assignment on UPDATE (#44756)
close pingcap/tidb#44751
This commit is contained in:
1338
parser/parser.go
1338
parser/parser.go
File diff suppressed because it is too large
Load Diff
@ -3157,7 +3157,7 @@ AnalyzeOption:
|
||||
|
||||
/*******************************************************************************************/
|
||||
Assignment:
|
||||
ColumnName eq ExprOrDefault
|
||||
ColumnName EqOrAssignmentEq ExprOrDefault
|
||||
{
|
||||
$$ = &ast.Assignment{Column: $1.(*ast.ColumnName), Expr: $3}
|
||||
}
|
||||
@ -7118,7 +7118,7 @@ ExprOrDefault:
|
||||
}
|
||||
|
||||
ColumnSetValueList:
|
||||
ColumnName eq ExprOrDefault
|
||||
ColumnName EqOrAssignmentEq ExprOrDefault
|
||||
{
|
||||
$$ = &ast.InsertStmt{
|
||||
Columns: []*ast.ColumnName{$1.(*ast.ColumnName)},
|
||||
@ -7126,7 +7126,7 @@ ColumnSetValueList:
|
||||
Setlist: true,
|
||||
}
|
||||
}
|
||||
| ColumnSetValueList ',' ColumnName eq ExprOrDefault
|
||||
| ColumnSetValueList ',' ColumnName EqOrAssignmentEq ExprOrDefault
|
||||
{
|
||||
ins := $1.(*ast.InsertStmt)
|
||||
ins.Columns = append(ins.Columns, $3.(*ast.ColumnName))
|
||||
@ -10314,11 +10314,11 @@ SetStmt:
|
||||
{
|
||||
$$ = &ast.SetStmt{Variables: $2.([]*ast.VariableAssignment)}
|
||||
}
|
||||
| "SET" "PASSWORD" eq PasswordOpt
|
||||
| "SET" "PASSWORD" EqOrAssignmentEq PasswordOpt
|
||||
{
|
||||
$$ = &ast.SetPwdStmt{Password: $4}
|
||||
}
|
||||
| "SET" "PASSWORD" "FOR" Username eq PasswordOpt
|
||||
| "SET" "PASSWORD" "FOR" Username EqOrAssignmentEq PasswordOpt
|
||||
{
|
||||
$$ = &ast.SetPwdStmt{User: $4.(*auth.UserIdentity), Password: $6}
|
||||
}
|
||||
|
||||
@ -870,7 +870,9 @@ func TestDMLStmt(t *testing.T) {
|
||||
|
||||
// for on duplicate key update
|
||||
{"INSERT INTO t (a,b,c) VALUES (1,2,3),(4,5,6) ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);", true, "INSERT INTO `t` (`a`,`b`,`c`) VALUES (1,2,3),(4,5,6) ON DUPLICATE KEY UPDATE `c`=VALUES(`a`)+VALUES(`b`)"},
|
||||
{"INSERT INTO t (a,b,c) VALUES (1,2,3),(4,5,6) ON DUPLICATE KEY UPDATE c:=VALUES(a)+VALUES(b);", true, "INSERT INTO `t` (`a`,`b`,`c`) VALUES (1,2,3),(4,5,6) ON DUPLICATE KEY UPDATE `c`=VALUES(`a`)+VALUES(`b`)"},
|
||||
{"INSERT IGNORE INTO t (a,b,c) VALUES (1,2,3),(4,5,6) ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);", true, "INSERT IGNORE INTO `t` (`a`,`b`,`c`) VALUES (1,2,3),(4,5,6) ON DUPLICATE KEY UPDATE `c`=VALUES(`a`)+VALUES(`b`)"},
|
||||
{"INSERT IGNORE INTO t (a,b,c) VALUES (1,2,3),(4,5,6) ON DUPLICATE KEY UPDATE c:=VALUES(a)+VALUES(b);", true, "INSERT IGNORE INTO `t` (`a`,`b`,`c`) VALUES (1,2,3),(4,5,6) ON DUPLICATE KEY UPDATE `c`=VALUES(`a`)+VALUES(`b`)"},
|
||||
|
||||
// for insert ... set
|
||||
{"INSERT INTO t SET a=1,b=2", true, "INSERT INTO `t` SET `a`=1,`b`=2"},
|
||||
@ -3505,6 +3507,7 @@ func TestDDL(t *testing.T) {
|
||||
|
||||
// for issue 549
|
||||
{"insert into t set a = default", true, "INSERT INTO `t` SET `a`=DEFAULT"},
|
||||
{"insert into t set a := default", true, "INSERT INTO `t` SET `a`=DEFAULT"},
|
||||
{"replace t set a = default", true, "REPLACE INTO `t` SET `a`=DEFAULT"},
|
||||
{"update t set a = default", true, "UPDATE `t` SET `a`=DEFAULT"},
|
||||
{"insert into t set a = default on duplicate key update a = default", true, "INSERT INTO `t` SET `a`=DEFAULT ON DUPLICATE KEY UPDATE `a`=DEFAULT"},
|
||||
|
||||
Reference in New Issue
Block a user