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