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

strongduanmu 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 fbedc105410 fix(rewrite): preserve temporal insert value text (#38897)
fbedc105410 is described below

commit fbedc105410370d9016821a94cd817db0dc29142
Author: Cong Hu <[email protected]>
AuthorDate: Tue Jun 23 19:18:09 2026 +0800

    fix(rewrite): preserve temporal insert value text (#38897)
    
    WHAT: Preserve TemporalLiteralExpressionSegment text when InsertValue 
renders INSERT VALUES SQL and add a focused unit test.
    
    WHY: Temporal literals such as DATE '2017-08-08' must not be rendered as 
ordinary string literals when rebuilding SQL.
    
    HOW: Return the segment text before generic LiteralExpressionSegment 
formatting so raw values remain available without losing SQL literal syntax.
---
 .../rewrite/sql/token/common/pojo/generic/InsertValue.java    |  4 ++++
 .../sql/token/common/pojo/generic/InsertValueTest.java        | 11 +++++++++++
 2 files changed, 15 insertions(+)

diff --git 
a/infra/rewrite/core/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/common/pojo/generic/InsertValue.java
 
b/infra/rewrite/core/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/common/pojo/generic/InsertValue.java
index e55f88636f9..3ab8e453061 100644
--- 
a/infra/rewrite/core/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/common/pojo/generic/InsertValue.java
+++ 
b/infra/rewrite/core/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/common/pojo/generic/InsertValue.java
@@ -25,6 +25,7 @@ import 
org.apache.shardingsphere.sql.parser.statement.core.enums.ParameterMarker
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.ExpressionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.simple.LiteralExpressionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.simple.ParameterMarkerExpressionSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.simple.TemporalLiteralExpressionSegment;
 
 import java.util.Collection;
 import java.util.HashMap;
@@ -116,6 +117,9 @@ public class InsertValue {
             ParameterMarkerExpressionSegment segment = 
(ParameterMarkerExpressionSegment) expressionSegment;
             return ParameterMarkerType.QUESTION == 
segment.getParameterMarkerType() ? "?" : "$" + 
(segment.getParameterMarkerIndex() + 1);
         }
+        if (expressionSegment instanceof TemporalLiteralExpressionSegment) {
+            return expressionSegment.getText();
+        }
         if (expressionSegment instanceof LiteralExpressionSegment) {
             Object literals = ((LiteralExpressionSegment) 
expressionSegment).getLiterals();
             return getLiteralValue((LiteralExpressionSegment) 
expressionSegment, literals);
diff --git 
a/infra/rewrite/core/src/test/java/org/apache/shardingsphere/infra/rewrite/sql/token/common/pojo/generic/InsertValueTest.java
 
b/infra/rewrite/core/src/test/java/org/apache/shardingsphere/infra/rewrite/sql/token/common/pojo/generic/InsertValueTest.java
index ad0a15e775c..5dbb6d5a5bb 100644
--- 
a/infra/rewrite/core/src/test/java/org/apache/shardingsphere/infra/rewrite/sql/token/common/pojo/generic/InsertValueTest.java
+++ 
b/infra/rewrite/core/src/test/java/org/apache/shardingsphere/infra/rewrite/sql/token/common/pojo/generic/InsertValueTest.java
@@ -24,6 +24,7 @@ import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.Type
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.complex.ComplexExpressionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.simple.LiteralExpressionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.simple.ParameterMarkerExpressionSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.simple.TemporalLiteralExpressionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
 import org.junit.jupiter.api.Test;
 
@@ -79,4 +80,14 @@ class InsertValueTest {
         String expectedToString = "(SYSDATE)";
         assertThat(actualToString, is(expectedToString));
     }
+    
+    @Test
+    void assertTemporalLiteralToString() {
+        List<ExpressionSegment> expressionSegments = new ArrayList<>(1);
+        expressionSegments.add(new TemporalLiteralExpressionSegment(0, 16, 
"2017-08-08", "DATE '2017-08-08'"));
+        InsertValue insertValue = new InsertValue(expressionSegments);
+        String actualToString = insertValue.toString();
+        String expectedToString = "(DATE '2017-08-08')";
+        assertThat(actualToString, is(expectedToString));
+    }
 }

Reply via email to