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>