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>

Reply via email to