This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new cf4a0853401 Support Mysql row and column aliases with ON DUPLICATE KEY
UPDATE (#31132)
cf4a0853401 is described below
commit cf4a0853401924082a0f7c8bdf699f4c1441e130
Author: LotusMoon <[email protected]>
AuthorDate: Mon May 6 15:26:19 2024 +0800
Support Mysql row and column aliases with ON DUPLICATE KEY UPDATE (#31132)
---
.../src/main/antlr4/imports/mysql/DMLStatement.g4 | 2 +-
.../parser/src/main/resources/case/dml/insert.xml | 34 ++++++++++++++++++++++
.../main/resources/sql/supported/dml/insert.xml | 1 +
3 files changed, 36 insertions(+), 1 deletion(-)
diff --git
a/parser/sql/dialect/mysql/src/main/antlr4/imports/mysql/DMLStatement.g4
b/parser/sql/dialect/mysql/src/main/antlr4/imports/mysql/DMLStatement.g4
index 81e81b54b1b..bfd1de1e7b5 100644
--- a/parser/sql/dialect/mysql/src/main/antlr4/imports/mysql/DMLStatement.g4
+++ b/parser/sql/dialect/mysql/src/main/antlr4/imports/mysql/DMLStatement.g4
@@ -48,7 +48,7 @@ insertSelectClause
;
onDuplicateKeyClause
- : (AS identifier)? ON DUPLICATE KEY UPDATE assignment (COMMA_ assignment)*
+ : (AS identifier derivedColumns?)? ON DUPLICATE KEY UPDATE assignment
(COMMA_ assignment)*
;
valueReference
diff --git a/test/it/parser/src/main/resources/case/dml/insert.xml
b/test/it/parser/src/main/resources/case/dml/insert.xml
index 05a351e7718..6a89c32c5a8 100644
--- a/test/it/parser/src/main/resources/case/dml/insert.xml
+++ b/test/it/parser/src/main/resources/case/dml/insert.xml
@@ -4156,4 +4156,38 @@
</values>
<on-duplicate-key-columns start-index="42" stop-index="73"/>
</insert>
+
+ <insert sql-case-id="insert_on_duplicate_key_with_column_aliases">
+ <table name="t" start-index="12" stop-index="12"/>
+ <set start-index="14" stop-index="24">
+ <assignment>
+ <column name="a" start-index="18" stop-index="18" />
+ <assignment-value>
+ <literal-expression value="9" literal-start-index="20"
literal-stop-index="20" />
+ </assignment-value>
+ </assignment>
+ <assignment>
+ <column name="b" start-index="22" stop-index="22"/>
+ <assignment-value>
+ <literal-expression value="5" start-index="24"
stop-index="24"/>
+ </assignment-value>
+ </assignment>
+ </set>
+ <on-duplicate-key-columns start-index="26" stop-index="66">
+ <assignment start-index="62" stop-index="66">
+ <column name="a" start-index="62" stop-index="62" />
+ <assignment-value>
+ <binary-operation-expression start-index="64"
stop-index="66">
+ <operator>+</operator>
+ <left>
+ <column name="m" start-index="64" stop-index="64"/>
+ </left>
+ <right>
+ <column name="n" start-index="66" stop-index="66"/>
+ </right>
+ </binary-operation-expression>
+ </assignment-value>
+ </assignment>
+ </on-duplicate-key-columns>
+ </insert>
</sql-parser-test-cases>
diff --git a/test/it/parser/src/main/resources/sql/supported/dml/insert.xml
b/test/it/parser/src/main/resources/sql/supported/dml/insert.xml
index d5ad8384ec4..e8a142a9cfe 100644
--- a/test/it/parser/src/main/resources/sql/supported/dml/insert.xml
+++ b/test/it/parser/src/main/resources/sql/supported/dml/insert.xml
@@ -150,4 +150,5 @@
<sql-case id="insert_into_with_multi_nchar" value="INSERT INTO
Production.UnitMeasure VALUES (N'FT2', N'Square Feet ', '20080923'), (N'Y',
N'Yards', '20080923'), (N'Y3', N'Cubic Yards', '20080923')"
db-types="SQLServer"/>
<sql-case id="insert_into_with_select_with_merge" value="INSERT INTO
Production.ZeroInventory (DeletedProductID, RemovedOnDate) SELECT ProductID,
GETDATE() FROM (MERGE Production.ProductInventory AS pi USING (SELECT
ProductID, SUM(OrderQty) FROM Sales.SalesOrderDetail AS sod JOIN
Sales.SalesOrderHeader AS soh ON sod.SalesOrderID = soh.SalesOrderID AND
soh.OrderDate = '20070401' GROUP BY ProductID) AS src (ProductID, OrderQty) ON
(pi.ProductID = src.ProductID) WHEN MATCHED AND pi.Quan [...]
<sql-case id="insert_into_with_conflict_action_do_nothing" value="INSERT
INTO sj_event(event_id) VALUES (?) ON CONFLICT(event_id) DO NOTHING"
db-types="PostgreSQL"/>
+ <sql-case id="insert_on_duplicate_key_with_column_aliases" value="INSERT
INTO t SET a=9,b=5 AS new(m,n) ON DUPLICATE KEY UPDATE a=m+n" db-types="MySQL"/>
</sql-cases>