This is an automated email from the ASF dual-hosted git repository.

terrymanu 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 cc3ab134810 Fix No value specified for parameter exception when sql is 
'INSERT INTO tableName *** ON CONFLICT *** DO UPDATE set ** WHERE ***' (#38668)
cc3ab134810 is described below

commit cc3ab1348109451d73f978f4a4402d91205a974e
Author: Claire <[email protected]>
AuthorDate: Sun May 24 21:33:03 2026 +0800

    Fix No value specified for parameter exception when sql is 'INSERT INTO 
tableName *** ON CONFLICT *** DO UPDATE set ** WHERE ***' (#38668)
    
    * update whereclause
    
    * update release-notes
    
    * update
---
 RELEASE-NOTES.md                                   |  1 +
 .../statement/PostgreSQLStatementVisitor.java      |  6 ++++
 .../parser/src/main/resources/case/dml/insert.xml  | 32 ++++++++++++++++++++++
 .../main/resources/sql/supported/dml/insert.xml    |  1 +
 4 files changed, 40 insertions(+)

diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md
index 9c6818c23e7..038786d901d 100644
--- a/RELEASE-NOTES.md
+++ b/RELEASE-NOTES.md
@@ -10,6 +10,7 @@
 
 1. SQL Parser: Preserve unary NOT as NotExpression for scalar-subquery table 
extraction in PostgreSQL - 
[#38187](https://github.com/apache/shardingsphere/pull/38187)
 1. SQL Parser: Fix wrong parameter index parse in MySQL, Doris - 
[#38624](https://github.com/apache/shardingsphere/pull/38624)
+1. SQL Parser: Fix No value specified for parameter exception when sql is 
'INSERT INTO tableName ON CONFLICT  DO UPDATE set  WHERE ' - 
[#38668](https://github.com/apache/shardingsphere/pull/38668)
 1. SQL Binder: Add DialectFunctionOption to handle wrong skip column bind in 
ColumnSegmentBinder - 
[#38350](https://github.com/apache/shardingsphere/pull/38350)
 1. SQL Binder: Fix wrong bind info when order by refer column from with 
temporary table - [#38353](https://github.com/apache/shardingsphere/pull/38353)
 1. JDBC: Fix stale generated values leaking into prepared statement 
executeBatch calls without pending batches - 
[#38160](https://github.com/apache/shardingsphere/pull/38160)
diff --git 
a/parser/sql/engine/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/engine/postgresql/visitor/statement/PostgreSQLStatementVisitor.java
 
b/parser/sql/engine/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/engine/postgresql/visitor/statement/PostgreSQLStatementVisitor.java
index 4798df9f902..a83f3b5b8ec 100644
--- 
a/parser/sql/engine/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/engine/postgresql/visitor/statement/PostgreSQLStatementVisitor.java
+++ 
b/parser/sql/engine/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/engine/postgresql/visitor/statement/PostgreSQLStatementVisitor.java
@@ -730,9 +730,15 @@ public abstract class PostgreSQLStatementVisitor extends 
PostgreSQLStatementPars
     @Override
     public ASTNode visitOptOnConflict(final OptOnConflictContext ctx) {
         Collection<ColumnAssignmentSegment> assignments = new LinkedList<>();
+        if (null != ctx.optConfExpr()) {
+            visit(ctx.optConfExpr());
+        }
         if (null != ctx.setClauseList()) {
             assignments = ((SetAssignmentSegment) 
visit(ctx.setClauseList())).getAssignments();
         }
+        if (null != ctx.whereClause()) {
+            visit(ctx.whereClause());
+        }
         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 b1f2ed573d5..b665c657e33 100644
--- a/test/it/parser/src/main/resources/case/dml/insert.xml
+++ b/test/it/parser/src/main/resources/case/dml/insert.xml
@@ -5785,4 +5785,36 @@
             </value>
         </values>
     </insert>
+
+    <insert sql-case-id="insert_on_conflit_do_update" parameters="1,'init',1">
+        <table name="t_order" start-index="12" stop-index="18" />
+        <columns start-index="21" stop-index="32">
+            <column name="c1" start-index="22" stop-index="23" />
+            <column name="c2" start-index="26" stop-index="27" />
+            <column name="c3" start-index="30" stop-index="31" />
+        </columns>
+        <values>
+            <value>
+                <assignment-value>
+                    <parameter-marker-expression parameter-index="0" 
start-index="44" stop-index="44" />
+                    <literal-expression value="1" start-index="44" 
stop-index="44" />
+                </assignment-value>
+                <assignment-value>
+                    <function function-name="now" text="now()" 
start-index="47" stop-index="51" literal-start-index="47" 
literal-stop-index="51" />
+                </assignment-value>
+                <assignment-value>
+                    <parameter-marker-expression parameter-index="1" 
start-index="54" stop-index="54" />
+                    <literal-expression value="init" start-index="54" 
stop-index="59" />
+                </assignment-value>
+            </value>
+        </values>
+        <on-duplicate-key-columns start-index="58" stop-index="121" 
literal-start-index="63" literal-stop-index="126">
+            <assignment start-index="95" stop-index="97">
+                <column name="c2" start-index="95" stop-index="96" 
literal-start-index="100" literal-stop-index="101"/>
+                <assignment-value>
+                    <function function-name="now" text="now()" 
start-index="100" stop-index="104" literal-start-index="105" 
literal-stop-index="109" />
+                </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 1832fc7ea40..f6dd2e0c60a 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
@@ -207,4 +207,5 @@
     <sql-case id="insert_without_columns_sql92" value="INSERT INTO t_order 
VALUES (1, 'ok')" db-types="SQL92" />
     <sql-case id="insert_with_default_sql92" value="INSERT INTO 
t_order(status) VALUES (DEFAULT)" db-types="SQL92" />
     <sql-case id="insert_table_collection_oracle" value="INSERT INTO 
TABLE(SELECT t.nested_col FROM t_nested t) VALUES (1)" db-types="Oracle" />
+    <sql-case id="insert_on_conflit_do_update" value="INSERT INTO t_order ( 
c1, c2, c3 ) VALUES ( ?, now(), ? ) ON CONFLICT ( c1, c3 ) DO UPDATE set c2 = 
now() WHERE user_id= ?" db-types="PostgreSQL" />
 </sql-cases>

Reply via email to