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 b910c873f4f Support PostgreSQL do nothing conflict action (#31048)
b910c873f4f is described below

commit b910c873f4fb6fbea4ac4686cdf9e400cdde88da
Author: LotusMoon <[email protected]>
AuthorDate: Mon Apr 29 09:02:51 2024 +0800

    Support PostgreSQL do nothing conflict action (#31048)
---
 .../visitor/statement/PostgreSQLStatementVisitor.java    |  6 ++++--
 test/it/parser/src/main/resources/case/dml/insert.xml    | 16 ++++++++++++++++
 .../src/main/resources/sql/supported/dml/insert.xml      |  1 +
 3 files changed, 21 insertions(+), 2 deletions(-)

diff --git 
a/parser/sql/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/PostgreSQLStatementVisitor.java
 
b/parser/sql/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/PostgreSQLStatementVisitor.java
index 9ae6e809cc3..b41878c289f 100644
--- 
a/parser/sql/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/PostgreSQLStatementVisitor.java
+++ 
b/parser/sql/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/PostgreSQLStatementVisitor.java
@@ -708,8 +708,10 @@ public abstract class PostgreSQLStatementVisitor extends 
PostgreSQLStatementPars
     
     @Override
     public ASTNode visitOptOnConflict(final OptOnConflictContext ctx) {
-        SetClauseListContext setClauseListContext = ctx.setClauseList();
-        Collection<ColumnAssignmentSegment> assignments = 
((SetAssignmentSegment) visit(setClauseListContext)).getAssignments();
+        Collection<ColumnAssignmentSegment> assignments = new LinkedList<>();
+        if (null != ctx.setClauseList()) {
+            assignments = ((SetAssignmentSegment) 
visit(ctx.setClauseList())).getAssignments();
+        }
         return new 
OnDuplicateKeyColumnsSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), assignments);
     }
     
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 08615512c2f..05a351e7718 100644
--- a/test/it/parser/src/main/resources/case/dml/insert.xml
+++ b/test/it/parser/src/main/resources/case/dml/insert.xml
@@ -4140,4 +4140,20 @@
             </value>
         </values>
     </insert>
+
+    <insert sql-case-id="insert_into_with_conflict_action_do_nothing" 
parameters="1">
+        <table name="sj_event" start-index="12" stop-index="19" />
+        <columns start-index="20" stop-index="29">
+            <column name="event_id" start-index="21" stop-index="28" />
+        </columns>
+        <values>
+            <value>
+                <assignment-value>
+                    <parameter-marker-expression parameter-index="0" 
start-index="39" stop-index="39" />
+                    <literal-expression value="1" start-index="39" 
stop-index="39" />
+                </assignment-value>
+            </value>
+        </values>
+        <on-duplicate-key-columns start-index="42" stop-index="73"/>
+    </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 962a12e3189..d5ad8384ec4 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
@@ -149,4 +149,5 @@
     <sql-case id="insert_with_output_input" value="INSERT 
Production.ScrapReason OUTPUT INSERTED.ScrapReasonID, INSERTED.Name, 
INSERTED.ModifiedDate INTO @MyTableVar VALUES (N'Operator error', GETDATE())" 
db-types="SQLServer"/>
     <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-cases>

Reply via email to