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 e82a5636cfd Fix sysdate class cast exception (#26821)
e82a5636cfd is described below

commit e82a5636cfd621425fa4a9f95666ba80ca346c56
Author: ZhangCheng <[email protected]>
AuthorDate: Fri Jul 7 22:07:42 2023 +0800

    Fix sysdate class cast exception (#26821)
    
    * Fix sysdate class cast exception
    
    * fix
    
    * fix
---
 .../infra/rewrite/sql/token/pojo/generic/InsertValue.java    |  7 +------
 .../rewrite/sql/token/pojo/generic/InsertValueTest.java      | 12 ++++++++++++
 .../sql/parser/sql/common/segment/dal/VariableSegment.java   |  5 +++++
 .../parser/sql/common/segment/dml/column/ColumnSegment.java  |  5 +++++
 .../sql/common/segment/dml/expr/BetweenExpression.java       |  5 +++++
 .../sql/common/segment/dml/expr/CaseWhenExpression.java      |  5 +++++
 .../sql/common/segment/dml/expr/CollateExpression.java       |  5 +++++
 .../common/segment/dml/expr/ExistsSubqueryExpression.java    |  5 +++++
 .../sql/common/segment/dml/expr/ExpressionSegment.java       |  7 +++++++
 .../sql/parser/sql/common/segment/dml/expr/InExpression.java |  5 +++++
 .../parser/sql/common/segment/dml/expr/ListExpression.java   |  9 +++++++++
 .../parser/sql/common/segment/dml/expr/NotExpression.java    |  5 +++++
 .../parser/sql/common/segment/dml/expr/ValuesExpression.java |  9 +++++++++
 .../dml/expr/complex/CommonTableExpressionSegment.java       |  5 +++++
 .../segment/dml/expr/simple/LiteralExpressionSegment.java    |  5 +++++
 .../dml/expr/simple/ParameterMarkerExpressionSegment.java    |  5 +++++
 .../segment/dml/expr/subquery/SubqueryExpressionSegment.java |  5 +++++
 .../common/segment/dml/expr/subquery/SubquerySegment.java    |  5 +++++
 .../segment/dml/item/AggregationProjectionSegment.java       |  5 +++++
 .../parser/sql/common/segment/generic/DataTypeSegment.java   |  5 +++++
 20 files changed, 113 insertions(+), 6 deletions(-)

diff --git 
a/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/pojo/generic/InsertValue.java
 
b/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/pojo/generic/InsertValue.java
index 9f28b9aa518..23bd491e853 100644
--- 
a/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/pojo/generic/InsertValue.java
+++ 
b/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/pojo/generic/InsertValue.java
@@ -20,9 +20,7 @@ package 
org.apache.shardingsphere.infra.rewrite.sql.token.pojo.generic;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import 
org.apache.shardingsphere.sql.parser.sql.common.enums.ParameterMarkerType;
-import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BinaryOperationExpression;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionSegment;
-import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.complex.ComplexExpressionSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.LiteralExpressionSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.ParameterMarkerExpressionSegment;
 
@@ -57,10 +55,7 @@ public class InsertValue {
             Object literals = ((LiteralExpressionSegment) 
expressionSegment).getLiterals();
             return getLiteralValue((LiteralExpressionSegment) 
expressionSegment, literals);
         }
-        if (expressionSegment instanceof BinaryOperationExpression) {
-            return ((BinaryOperationExpression) expressionSegment).getText();
-        }
-        return ((ComplexExpressionSegment) expressionSegment).getText();
+        return expressionSegment.getText();
     }
     
     private String getLiteralValue(final LiteralExpressionSegment 
expressionSegment, final Object literals) {
diff --git 
a/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/sql/token/pojo/generic/InsertValueTest.java
 
b/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/sql/token/pojo/generic/InsertValueTest.java
index 1146a098cdf..5dc1570f493 100644
--- 
a/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/sql/token/pojo/generic/InsertValueTest.java
+++ 
b/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/sql/token/pojo/generic/InsertValueTest.java
@@ -18,11 +18,13 @@
 package org.apache.shardingsphere.infra.rewrite.sql.token.pojo.generic;
 
 import 
org.apache.shardingsphere.sql.parser.sql.common.enums.ParameterMarkerType;
+import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.TypeCastExpression;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.complex.ComplexExpressionSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.LiteralExpressionSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.ParameterMarkerExpressionSegment;
+import 
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
 import org.junit.jupiter.api.Test;
 
 import java.util.ArrayList;
@@ -67,4 +69,14 @@ class InsertValueTest {
         String expectedToString = "(?, $1, 'literals', 
complexExpressionSegment, $2::varchar::jsonb)";
         assertThat(actualToString, is(expectedToString));
     }
+    
+    @Test
+    void assertSysdateToString() {
+        List<ExpressionSegment> expressionSegments = new ArrayList<>(1);
+        expressionSegments.add(new ColumnSegment(0, 6, new 
IdentifierValue("SYSDATE")));
+        InsertValue insertValue = new InsertValue(expressionSegments);
+        String actualToString = insertValue.toString();
+        String expectedToString = "(SYSDATE)";
+        assertThat(actualToString, is(expectedToString));
+    }
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dal/VariableSegment.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dal/VariableSegment.java
index f6edb248019..3e26bd388e9 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dal/VariableSegment.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dal/VariableSegment.java
@@ -48,4 +48,9 @@ public final class VariableSegment implements 
ExpressionSegment {
     public Optional<String> getScope() {
         return Optional.ofNullable(scope);
     }
+    
+    @Override
+    public String getText() {
+        return variable;
+    }
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/column/ColumnSegment.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/column/ColumnSegment.java
index 1bcdfdd676b..cdfe21219ce 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/column/ColumnSegment.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/column/ColumnSegment.java
@@ -66,4 +66,9 @@ public final class ColumnSegment implements 
ExpressionSegment, OwnerAvailable {
     public Optional<OwnerSegment> getOwner() {
         return Optional.ofNullable(owner);
     }
+    
+    @Override
+    public String getText() {
+        return getExpression();
+    }
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/BetweenExpression.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/BetweenExpression.java
index 94c394b60f4..aecb0aad4f4 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/BetweenExpression.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/BetweenExpression.java
@@ -37,4 +37,9 @@ public final class BetweenExpression implements 
ExpressionSegment {
     private final ExpressionSegment andExpr;
     
     private final boolean not;
+    
+    @Override
+    public String getText() {
+        return betweenExpr.getText();
+    }
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/CaseWhenExpression.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/CaseWhenExpression.java
index 54304dc0f44..23a2e832786 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/CaseWhenExpression.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/CaseWhenExpression.java
@@ -40,4 +40,9 @@ public final class CaseWhenExpression implements 
ExpressionSegment {
     private final Collection<ExpressionSegment> thenExprs;
     
     private final ExpressionSegment elseExpr;
+    
+    @Override
+    public String getText() {
+        return caseExpr.getText();
+    }
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/CollateExpression.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/CollateExpression.java
index 8c42d5b4406..0e85b4f4dde 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/CollateExpression.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/CollateExpression.java
@@ -33,4 +33,9 @@ public final class CollateExpression implements 
ExpressionSegment {
     private final int stopIndex;
     
     private final SimpleExpressionSegment collateName;
+    
+    @Override
+    public String getText() {
+        return collateName.getText();
+    }
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/ExistsSubqueryExpression.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/ExistsSubqueryExpression.java
index 5ce78557125..69ee6e21aec 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/ExistsSubqueryExpression.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/ExistsSubqueryExpression.java
@@ -34,4 +34,9 @@ public class ExistsSubqueryExpression implements 
ExpressionSegment {
     
     @Setter
     private boolean not;
+    
+    @Override
+    public String getText() {
+        return subquery.getText();
+    }
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/ExpressionSegment.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/ExpressionSegment.java
index 23619d0b39b..80963866227 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/ExpressionSegment.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/ExpressionSegment.java
@@ -23,4 +23,11 @@ import 
org.apache.shardingsphere.sql.parser.sql.common.segment.SQLSegment;
  * Expression segment.
  */
 public interface ExpressionSegment extends SQLSegment {
+    
+    /**
+     * Get text.
+     *
+     * @return text
+     */
+    String getText();
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/InExpression.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/InExpression.java
index 76936f5a6a8..97fb20bc890 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/InExpression.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/InExpression.java
@@ -53,4 +53,9 @@ public final class InExpression implements ExpressionSegment {
         }
         return result;
     }
+    
+    @Override
+    public String getText() {
+        return left.getText() + right.getText();
+    }
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/ListExpression.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/ListExpression.java
index 3523b9aa764..3c397daeb94 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/ListExpression.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/ListExpression.java
@@ -34,4 +34,13 @@ public final class ListExpression implements 
ExpressionSegment {
     private final int stopIndex;
     
     private final List<ExpressionSegment> items = new LinkedList<>();
+    
+    @Override
+    public String getText() {
+        StringBuilder result = new StringBuilder();
+        for (ExpressionSegment each : items) {
+            result.append(each.getText());
+        }
+        return result.toString();
+    }
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/NotExpression.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/NotExpression.java
index 9f9e07726e1..5b3ccf039a6 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/NotExpression.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/NotExpression.java
@@ -31,4 +31,9 @@ public final class NotExpression implements ExpressionSegment 
{
     private final ExpressionSegment expression;
     
     private final Boolean notSign;
+    
+    @Override
+    public String getText() {
+        return expression.getText();
+    }
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/ValuesExpression.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/ValuesExpression.java
index 5d9b7aeb51a..c1a9938f82a 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/ValuesExpression.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/ValuesExpression.java
@@ -36,4 +36,13 @@ public final class ValuesExpression implements 
ExpressionSegment {
     private final int stopIndex;
     
     private final Collection<InsertValuesSegment> rowConstructorList = new 
LinkedList<>();
+    
+    @Override
+    public String getText() {
+        StringBuilder result = new StringBuilder();
+        for (InsertValuesSegment each : rowConstructorList) {
+            result.append(each.getValues());
+        }
+        return result.toString();
+    }
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/complex/CommonTableExpressionSegment.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/complex/CommonTableExpressionSegment.java
index 62b8f7741ad..2a567152c94 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/complex/CommonTableExpressionSegment.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/complex/CommonTableExpressionSegment.java
@@ -43,4 +43,9 @@ public final class CommonTableExpressionSegment implements 
ExpressionSegment {
     private final SubquerySegment subquery;
     
     private final Collection<ColumnSegment> columns = new LinkedList<>();
+    
+    @Override
+    public String getText() {
+        return identifier.getValue();
+    }
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/simple/LiteralExpressionSegment.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/simple/LiteralExpressionSegment.java
index af03f0b01b0..d926550afa4 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/simple/LiteralExpressionSegment.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/simple/LiteralExpressionSegment.java
@@ -32,4 +32,9 @@ public class LiteralExpressionSegment implements 
SimpleExpressionSegment {
     private final int stopIndex;
     
     private final Object literals;
+    
+    @Override
+    public String getText() {
+        return literals.toString();
+    }
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/simple/ParameterMarkerExpressionSegment.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/simple/ParameterMarkerExpressionSegment.java
index 62401242ffb..2f153926dbc 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/simple/ParameterMarkerExpressionSegment.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/simple/ParameterMarkerExpressionSegment.java
@@ -74,4 +74,9 @@ public class ParameterMarkerExpressionSegment implements 
SimpleExpressionSegment
     public int getStopIndex() {
         return null != alias ? alias.getStopIndex() : stopIndex;
     }
+    
+    @Override
+    public String getText() {
+        return parameterMarkerType.getMarker();
+    }
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/subquery/SubqueryExpressionSegment.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/subquery/SubqueryExpressionSegment.java
index b1505e1c742..beab27566ca 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/subquery/SubqueryExpressionSegment.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/subquery/SubqueryExpressionSegment.java
@@ -39,4 +39,9 @@ public final class SubqueryExpressionSegment implements 
SimpleExpressionSegment
     public int getStopIndex() {
         return subquery.getStopIndex();
     }
+    
+    @Override
+    public String getText() {
+        return subquery.getText();
+    }
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/subquery/SubquerySegment.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/subquery/SubquerySegment.java
index 3d9a66a0d43..431b108f33f 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/subquery/SubquerySegment.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/subquery/SubquerySegment.java
@@ -39,4 +39,9 @@ public final class SubquerySegment implements 
ExpressionSegment {
     
     @Setter
     private SubqueryType subqueryType;
+    
+    @Override
+    public String getText() {
+        return select.toString();
+    }
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/item/AggregationProjectionSegment.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/item/AggregationProjectionSegment.java
index b5da1b289ac..1d2ae417e0e 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/item/AggregationProjectionSegment.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/item/AggregationProjectionSegment.java
@@ -63,4 +63,9 @@ public class AggregationProjectionSegment implements 
ProjectionSegment, AliasAva
     public final Optional<AliasSegment> getAlias() {
         return Optional.ofNullable(alias);
     }
+    
+    @Override
+    public String getText() {
+        return innerExpression;
+    }
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/DataTypeSegment.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/DataTypeSegment.java
index 9751f718998..b106cb14466 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/DataTypeSegment.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/DataTypeSegment.java
@@ -32,4 +32,9 @@ public final class DataTypeSegment implements 
ExpressionSegment {
     private String dataTypeName;
     
     private DataTypeLengthSegment dataLength;
+    
+    @Override
+    public String getText() {
+        return dataTypeName;
+    }
 }

Reply via email to