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));
+ }
}