You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by pa...@apache.org on 2020/08/10 02:54:35 UTC
[shardingsphere] branch master updated: fix visit subquery in
projection (#6639)
This is an automated email from the ASF dual-hosted git repository.
panjuan 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 4729835 fix visit subquery in projection (#6639)
4729835 is described below
commit 47298356098a1677f18e8397d05e45e4508e175e
Author: JingShang Lu <ji...@gmail.com>
AuthorDate: Mon Aug 10 10:54:23 2020 +0800
fix visit subquery in projection (#6639)
* change result of visit subquery in projection from ExpressionProjectionSegment to SubqueryProjectionSegment
* format code
* fix
* fix
---
.../rewrite/condition/EncryptConditionEngine.java | 2 +-
.../impl/SimpleShadowDataSourceRouterTest.java | 4 +--
...ConditionValueBetweenOperatorGeneratorTest.java | 10 +++---
...ConditionValueCompareOperatorGeneratorTest.java | 16 ++++-----
.../ConditionValueInOperatorGeneratorTest.java | 6 +---
.../impl/ShardingUpdateStatementValidatorTest.java | 3 +-
.../RowNumberPaginationContextEngineTest.java | 6 ++--
.../engine/TopPaginationContextEngineTest.java | 6 ++--
.../src/main/antlr4/imports/mysql/BaseRule.g4 | 2 +-
.../src/main/antlr4/imports/mysql/DMLStatement.g4 | 2 +-
.../sql/parser/mysql/visitor/MySQLVisitor.java | 32 ++++++++----------
.../parser/mysql/visitor/impl/MySQLDMLVisitor.java | 16 +++++----
.../sql/parser/oracle/visitor/OracleVisitor.java | 26 +++++----------
.../oracle/visitor/impl/OracleDMLVisitor.java | 2 +-
.../src/main/antlr4/imports/postgresql/BaseRule.g4 | 2 +-
.../postgresql/visitor/PostgreSQLVisitor.java | 39 ++++++----------------
.../visitor/impl/PostgreSQLDMLVisitor.java | 11 +++---
.../sql/parser/sql92/visitor/SQL92Visitor.java | 33 ++++++------------
.../parser/sqlserver/visitor/SQLServerVisitor.java | 30 ++++++-----------
.../visitor/impl/SQLServerDMLVisitor.java | 2 +-
.../value/PredicateBetweenRightValue.java | 4 +++
.../dml/predicate/value/PredicateBracketValue.java | 33 ------------------
.../value/PredicateCompareRightValue.java | 4 +++
.../dml/predicate/value/PredicateInRightValue.java | 4 ++-
.../dml/predicate/value/PredicateRightValue.java | 4 +--
.../src/test/resources/case/dml/select.xml | 2 +-
26 files changed, 115 insertions(+), 186 deletions(-)
diff --git a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-rewrite/src/main/java/org/apache/shardingsphere/encrypt/rewrite/condition/EncryptConditionEngine.java b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-rewrite/src/main/java/org/apache/shardingsphere/encrypt/rewrite/condition/EncryptConditionEngine.java
index 3bbae80..8736684 100644
--- a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-rewrite/src/main/java/org/apache/shardingsphere/encrypt/rewrite/condition/EncryptConditionEngine.java
+++ b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-rewrite/src/main/java/org/apache/shardingsphere/encrypt/rewrite/condition/EncryptConditionEngine.java
@@ -125,7 +125,7 @@ public final class EncryptConditionEngine {
}
return expressionSegments.isEmpty() ? Optional.empty()
: Optional.of(new EncryptInCondition(predicateSegment.getColumn().getIdentifier().getValue(),
- tableName, inRightValue.getPredicateBracketValue().getPredicateLeftBracketValue().getStartIndex(), predicateSegment.getStopIndex(), expressionSegments));
+ tableName, inRightValue.getStartIndex(), inRightValue.getStopIndex(), expressionSegments));
}
private boolean isSupportedOperator(final String operator) {
diff --git a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-route/src/test/java/org/apache/shardingsphere/shadow/route/engine/impl/SimpleShadowDataSourceRouterTest.java b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-route/src/test/java/org/apache/shardingsphere/shadow/route/engine/impl/SimpleShadowDataSourceRouterTest.java
index f9747bd..faa0f86 100644
--- a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-route/src/test/java/org/apache/shardingsphere/shadow/route/engine/impl/SimpleShadowDataSourceRouterTest.java
+++ b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-route/src/test/java/org/apache/shardingsphere/shadow/route/engine/impl/SimpleShadowDataSourceRouterTest.java
@@ -87,7 +87,7 @@ public final class SimpleShadowDataSourceRouterTest {
WhereSegment whereSegment = new WhereSegment(0, 0);
AndPredicate andPredicate = new AndPredicate();
andPredicate.getPredicates().addAll(Collections.singletonList(
- new PredicateSegment(0, 0, new ColumnSegment(0, 0, new IdentifierValue("shadow")), new PredicateCompareRightValue("=", new LiteralExpressionSegment(0, 0, true)))));
+ new PredicateSegment(0, 0, new ColumnSegment(0, 0, new IdentifierValue("shadow")), new PredicateCompareRightValue(0, 0, "=", new LiteralExpressionSegment(0, 0, true)))));
whereSegment.getAndPredicates().addAll(Collections.singletonList(andPredicate));
selectStatement.setWhere(whereSegment);
ProjectionsSegment projectionsSegment = new ProjectionsSegment(0, 0);
@@ -99,7 +99,7 @@ public final class SimpleShadowDataSourceRouterTest {
assertTrue("should be shadow", simpleShadowDataSourceRouter.isShadowSQL());
andPredicate.getPredicates().clear();
andPredicate.getPredicates().addAll(Collections.singletonList(
- new PredicateSegment(0, 0, new ColumnSegment(0, 0, new IdentifierValue("shadow")), new PredicateCompareRightValue("=", new LiteralExpressionSegment(0, 0, false)))));
+ new PredicateSegment(0, 0, new ColumnSegment(0, 0, new IdentifierValue("shadow")), new PredicateCompareRightValue(0, 0, "=", new LiteralExpressionSegment(0, 0, false)))));
projectionsSegment.getProjections().clear();
projectionsSegment.getProjections().addAll(Collections.singletonList(new ExpressionProjectionSegment(0, 0, "false")));
assertFalse("should not be shadow", simpleShadowDataSourceRouter.isShadowSQL());
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/condition/generator/impl/ConditionValueBetweenOperatorGeneratorTest.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/condition/generator/impl/ConditionValueBetweenOperatorGeneratorTest.java
index 3f4cf30..940e8ca 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/condition/generator/impl/ConditionValueBetweenOperatorGeneratorTest.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/condition/generator/impl/ConditionValueBetweenOperatorGeneratorTest.java
@@ -49,7 +49,7 @@ public final class ConditionValueBetweenOperatorGeneratorTest {
int and = 2;
ExpressionSegment betweenSegment = new LiteralExpressionSegment(0, 0, between);
ExpressionSegment andSegment = new LiteralExpressionSegment(0, 0, and);
- PredicateBetweenRightValue value = new PredicateBetweenRightValue(betweenSegment, andSegment);
+ PredicateBetweenRightValue value = new PredicateBetweenRightValue(betweenSegment.getStartIndex(), andSegment.getStopIndex(), betweenSegment, andSegment);
Optional<RouteValue> routeValue = generator.generate(value, column, new LinkedList<>());
assertTrue(routeValue.isPresent());
RangeRouteValue<Integer> rangeRouteValue = (RangeRouteValue<Integer>) routeValue.get();
@@ -66,7 +66,7 @@ public final class ConditionValueBetweenOperatorGeneratorTest {
long and = 3147483647L;
ExpressionSegment betweenSegment = new LiteralExpressionSegment(0, 0, between);
ExpressionSegment andSegment = new LiteralExpressionSegment(0, 0, and);
- PredicateBetweenRightValue value = new PredicateBetweenRightValue(betweenSegment, andSegment);
+ PredicateBetweenRightValue value = new PredicateBetweenRightValue(betweenSegment.getStartIndex(), andSegment.getStopIndex(), betweenSegment, andSegment);
Optional<RouteValue> routeValue = generator.generate(value, column, new LinkedList<>());
assertTrue(routeValue.isPresent());
RangeRouteValue<Comparable<?>> rangeRouteValue = (RangeRouteValue<Comparable<?>>) routeValue.get();
@@ -81,7 +81,7 @@ public final class ConditionValueBetweenOperatorGeneratorTest {
int between = 1;
ExpressionSegment betweenSegment = new LiteralExpressionSegment(0, 0, between);
ExpressionSegment andSegment = new CommonExpressionSegment(0, 0, "now()");
- PredicateBetweenRightValue value = new PredicateBetweenRightValue(betweenSegment, andSegment);
+ PredicateBetweenRightValue value = new PredicateBetweenRightValue(betweenSegment.getStartIndex(), andSegment.getStopIndex(), betweenSegment, andSegment);
generator.generate(value, column, new LinkedList<>());
}
@@ -91,7 +91,7 @@ public final class ConditionValueBetweenOperatorGeneratorTest {
Date date = new Date();
ExpressionSegment betweenSegment = new LiteralExpressionSegment(0, 0, date);
ExpressionSegment andSegment = new CommonExpressionSegment(0, 0, "now()");
- PredicateBetweenRightValue value = new PredicateBetweenRightValue(betweenSegment, andSegment);
+ PredicateBetweenRightValue value = new PredicateBetweenRightValue(betweenSegment.getStartIndex(), andSegment.getStopIndex(), betweenSegment, andSegment);
Optional<RouteValue> routeValue = generator.generate(value, column, new LinkedList<>());
assertTrue(routeValue.isPresent());
RangeRouteValue<Date> rangeRouteValue = (RangeRouteValue<Date>) routeValue.get();
@@ -108,7 +108,7 @@ public final class ConditionValueBetweenOperatorGeneratorTest {
final Date after = calendar.getTime();
ExpressionSegment betweenSegment = new CommonExpressionSegment(0, 0, "now()");
ExpressionSegment andSegment = new CommonExpressionSegment(0, 0, "now()");
- PredicateBetweenRightValue value = new PredicateBetweenRightValue(betweenSegment, andSegment);
+ PredicateBetweenRightValue value = new PredicateBetweenRightValue(betweenSegment.getStartIndex(), andSegment.getStopIndex(), betweenSegment, andSegment);
Optional<RouteValue> routeValue = generator.generate(value, column, new LinkedList<>());
assertTrue(routeValue.isPresent());
RangeRouteValue<Date> rangeRouteValue = (RangeRouteValue<Date>) routeValue.get();
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/condition/generator/impl/ConditionValueCompareOperatorGeneratorTest.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/condition/generator/impl/ConditionValueCompareOperatorGeneratorTest.java
index 0b9baac..4628a7c 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/condition/generator/impl/ConditionValueCompareOperatorGeneratorTest.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/condition/generator/impl/ConditionValueCompareOperatorGeneratorTest.java
@@ -43,7 +43,7 @@ public final class ConditionValueCompareOperatorGeneratorTest {
@Test
public void assertGenerateConditionValue() {
int value = 1;
- PredicateCompareRightValue rightValue = new PredicateCompareRightValue("=", new LiteralExpressionSegment(0, 0, value));
+ PredicateCompareRightValue rightValue = new PredicateCompareRightValue(0, 0, "=", new LiteralExpressionSegment(0, 0, value));
Optional<RouteValue> routeValue = generator.generate(rightValue, column, new LinkedList<>());
assertTrue(routeValue.isPresent());
assertTrue(((ListRouteValue<Integer>) routeValue.get()).getValues().contains(value));
@@ -52,7 +52,7 @@ public final class ConditionValueCompareOperatorGeneratorTest {
@SuppressWarnings("unchecked")
@Test
public void assertGenerateConditionValueWithLessThanOperator() {
- PredicateCompareRightValue rightValue = new PredicateCompareRightValue("<", new LiteralExpressionSegment(0, 0, 1));
+ PredicateCompareRightValue rightValue = new PredicateCompareRightValue(0, 0, "<", new LiteralExpressionSegment(0, 0, 1));
Optional<RouteValue> routeValue = generator.generate(rightValue, column, new LinkedList<>());
assertTrue(routeValue.isPresent());
assertTrue(Range.lessThan(1).encloses(((RangeRouteValue<Integer>) routeValue.get()).getValueRange()));
@@ -61,7 +61,7 @@ public final class ConditionValueCompareOperatorGeneratorTest {
@SuppressWarnings("unchecked")
@Test
public void assertGenerateConditionValueWithGreaterThanOperator() {
- PredicateCompareRightValue rightValue = new PredicateCompareRightValue(">", new LiteralExpressionSegment(0, 0, 1));
+ PredicateCompareRightValue rightValue = new PredicateCompareRightValue(0, 0, ">", new LiteralExpressionSegment(0, 0, 1));
Optional<RouteValue> routeValue = generator.generate(rightValue, column, new LinkedList<>());
assertTrue(routeValue.isPresent());
assertTrue(Range.greaterThan(1).encloses(((RangeRouteValue<Integer>) routeValue.get()).getValueRange()));
@@ -70,7 +70,7 @@ public final class ConditionValueCompareOperatorGeneratorTest {
@SuppressWarnings("unchecked")
@Test
public void assertGenerateConditionValueWithAtMostOperator() {
- PredicateCompareRightValue rightValue = new PredicateCompareRightValue("<=", new LiteralExpressionSegment(0, 0, 1));
+ PredicateCompareRightValue rightValue = new PredicateCompareRightValue(0, 0, "<=", new LiteralExpressionSegment(0, 0, 1));
Optional<RouteValue> routeValue = generator.generate(rightValue, column, new LinkedList<>());
assertTrue(routeValue.isPresent());
assertTrue(Range.atMost(1).encloses(((RangeRouteValue<Integer>) routeValue.get()).getValueRange()));
@@ -79,7 +79,7 @@ public final class ConditionValueCompareOperatorGeneratorTest {
@SuppressWarnings("unchecked")
@Test
public void assertGenerateConditionValueWithAtLeastOperator() {
- PredicateCompareRightValue rightValue = new PredicateCompareRightValue(">=", new LiteralExpressionSegment(0, 0, 1));
+ PredicateCompareRightValue rightValue = new PredicateCompareRightValue(0, 0, ">=", new LiteralExpressionSegment(0, 0, 1));
Optional<RouteValue> routeValue = generator.generate(rightValue, column, new LinkedList<>());
assertTrue(routeValue.isPresent());
assertTrue(Range.atLeast(1).encloses(((RangeRouteValue<Integer>) routeValue.get()).getValueRange()));
@@ -87,20 +87,20 @@ public final class ConditionValueCompareOperatorGeneratorTest {
@Test
public void assertGenerateConditionValueWithErrorOperator() {
- PredicateCompareRightValue rightValue = new PredicateCompareRightValue("!=", new LiteralExpressionSegment(0, 0, 1));
+ PredicateCompareRightValue rightValue = new PredicateCompareRightValue(0, 0, "!=", new LiteralExpressionSegment(0, 0, 1));
assertFalse(generator.generate(rightValue, column, new LinkedList<>()).isPresent());
}
@Test
public void assertGenerateConditionValueWithoutNowExpression() {
- PredicateCompareRightValue rightValue = new PredicateCompareRightValue("=", new CommonExpressionSegment(0, 0, "value"));
+ PredicateCompareRightValue rightValue = new PredicateCompareRightValue(0, 0, "=", new CommonExpressionSegment(0, 0, "value"));
assertFalse(generator.generate(rightValue, column, new LinkedList<>()).isPresent());
}
@SuppressWarnings("unchecked")
@Test
public void assertGenerateConditionValueWithNowExpression() {
- PredicateCompareRightValue rightValue = new PredicateCompareRightValue("=", new CommonExpressionSegment(0, 0, "now()"));
+ PredicateCompareRightValue rightValue = new PredicateCompareRightValue(0, 0, "=", new CommonExpressionSegment(0, 0, "now()"));
Optional<RouteValue> routeValue = generator.generate(rightValue, column, new LinkedList<>());
assertTrue(routeValue.isPresent());
assertFalse(((ListRouteValue<Integer>) routeValue.get()).getValues().isEmpty());
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/condition/generator/impl/ConditionValueInOperatorGeneratorTest.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/condition/generator/impl/ConditionValueInOperatorGeneratorTest.java
index aee3f49..c32cb10 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/condition/generator/impl/ConditionValueInOperatorGeneratorTest.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/condition/generator/impl/ConditionValueInOperatorGeneratorTest.java
@@ -21,10 +21,7 @@ import org.apache.shardingsphere.sharding.strategy.value.ListRouteValue;
import org.apache.shardingsphere.sharding.strategy.value.RouteValue;
import org.apache.shardingsphere.sharding.route.engine.condition.Column;
import org.apache.shardingsphere.sql.parser.sql.segment.dml.expr.complex.CommonExpressionSegment;
-import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.value.PredicateBracketValue;
import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.value.PredicateInRightValue;
-import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.value.PredicateLeftBracketValue;
-import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.value.PredicateRightBracketValue;
import org.junit.Test;
import java.util.Collections;
@@ -44,8 +41,7 @@ public final class ConditionValueInOperatorGeneratorTest {
@Test
public void assertNowExpression() {
- PredicateBracketValue predicateBracketValue = new PredicateBracketValue(new PredicateLeftBracketValue(0, 1), new PredicateRightBracketValue(0, 1));
- PredicateInRightValue inRightValue = new PredicateInRightValue(predicateBracketValue, Collections.singletonList(new CommonExpressionSegment(0, 0, "now()")));
+ PredicateInRightValue inRightValue = new PredicateInRightValue(0, 1, Collections.singletonList(new CommonExpressionSegment(0, 0, "now()")));
Optional<RouteValue> routeValue = generator.generate(inRightValue, column, new LinkedList<>());
assertTrue(routeValue.isPresent());
assertThat(((ListRouteValue) routeValue.get()).getValues().iterator().next(), instanceOf(Date.class));
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/validator/impl/ShardingUpdateStatementValidatorTest.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/validator/impl/ShardingUpdateStatementValidatorTest.java
index 92beecd..516964c 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/validator/impl/ShardingUpdateStatementValidatorTest.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/validator/impl/ShardingUpdateStatementValidatorTest.java
@@ -112,7 +112,8 @@ public final class ShardingUpdateStatementValidatorTest {
result.setSetAssignment(setAssignmentSegment);
WhereSegment where = new WhereSegment(0, 0);
AndPredicate andPre = new AndPredicate();
- andPre.getPredicates().add(new PredicateSegment(0, 1, new ColumnSegment(0, 0, new IdentifierValue("id")), new PredicateCompareRightValue("=", new ParameterMarkerExpressionSegment(0, 0, 0))));
+ andPre.getPredicates().add(new PredicateSegment(0, 1,
+ new ColumnSegment(0, 0, new IdentifierValue("id")), new PredicateCompareRightValue(0, 0, "=", new ParameterMarkerExpressionSegment(0, 0, 0))));
where.getAndPredicates().add(andPre);
result.setWhere(where);
return result;
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-binder/src/test/java/org/apache/shardingsphere/sql/parser/binder/segment/select/pagination/engine/RowNumberPaginationContextEngineTest.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-binder/src/test/java/org/apache/shardingsphere/sql/parser/binder/segment/select/pagination/engine/RowNumberPaginationContextEngineTest.java
index 6df8aa8..aa75afd 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-binder/src/test/java/org/apache/shardingsphere/sql/parser/binder/segment/select/pagination/engine/RowNumberPaginationContextEngineTest.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-binder/src/test/java/org/apache/shardingsphere/sql/parser/binder/segment/select/pagination/engine/RowNumberPaginationContextEngineTest.java
@@ -99,7 +99,7 @@ public final class RowNumberPaginationContextEngineTest {
@Test
public void assertCreatePaginationContextWhenParameterMarkerRowNumberValueSegment() {
- PredicateCompareRightValue predicateCompareRightValue = new PredicateCompareRightValue(">", new ParameterMarkerExpressionSegment(0, 10, 0));
+ PredicateCompareRightValue predicateCompareRightValue = new PredicateCompareRightValue(0, 10, ">", new ParameterMarkerExpressionSegment(0, 10, 0));
AndPredicate andPredicate = new AndPredicate();
andPredicate.getPredicates().add(new PredicateSegment(0, 10, new ColumnSegment(0, 10, new IdentifierValue(ROW_NUMBER_COLUMN_NAME)), predicateCompareRightValue));
Projection projectionWithRowNumberAlias = new ColumnProjection(null, ROW_NUMBER_COLUMN_NAME, ROW_NUMBER_COLUMN_ALIAS);
@@ -114,7 +114,7 @@ public final class RowNumberPaginationContextEngineTest {
}
private void assertCreatePaginationContextWhenRowNumberAliasPresentAndRowNumberPredicatedNotEmptyWithGivenOperator(final String operator) {
- PredicateCompareRightValue predicateCompareRightValue = new PredicateCompareRightValue(operator, new LiteralExpressionSegment(0, 10, 100));
+ PredicateCompareRightValue predicateCompareRightValue = new PredicateCompareRightValue(0, 10, operator, new LiteralExpressionSegment(0, 10, 100));
AndPredicate andPredicate = new AndPredicate();
andPredicate.getPredicates().add(new PredicateSegment(0, 10, new ColumnSegment(0, 10, new IdentifierValue(ROW_NUMBER_COLUMN_NAME)), predicateCompareRightValue));
Projection projectionWithRowNumberAlias = new ColumnProjection(null, ROW_NUMBER_COLUMN_NAME, ROW_NUMBER_COLUMN_ALIAS);
@@ -133,7 +133,7 @@ public final class RowNumberPaginationContextEngineTest {
}
private void assertCreatePaginationContextWhenOffsetSegmentInstanceOfNumberLiteralRowNumberValueSegmentWithGivenOperator(final String operator) {
- PredicateCompareRightValue predicateCompareRightValue = new PredicateCompareRightValue(operator, new LiteralExpressionSegment(0, 10, 100));
+ PredicateCompareRightValue predicateCompareRightValue = new PredicateCompareRightValue(0, 10, operator, new LiteralExpressionSegment(0, 10, 100));
AndPredicate andPredicate = new AndPredicate();
andPredicate.getPredicates().add(new PredicateSegment(0, 10, new ColumnSegment(0, 10, new IdentifierValue(ROW_NUMBER_COLUMN_NAME)), predicateCompareRightValue));
Projection projectionWithRowNumberAlias = new ColumnProjection(null, ROW_NUMBER_COLUMN_NAME, ROW_NUMBER_COLUMN_ALIAS);
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-binder/src/test/java/org/apache/shardingsphere/sql/parser/binder/segment/select/pagination/engine/TopPaginationContextEngineTest.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-binder/src/test/java/org/apache/shardingsphere/sql/parser/binder/segment/select/pagination/engine/TopPaginationContextEngineTest.java
index 1b579a1..7606f8f 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-binder/src/test/java/org/apache/shardingsphere/sql/parser/binder/segment/select/pagination/engine/TopPaginationContextEngineTest.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-binder/src/test/java/org/apache/shardingsphere/sql/parser/binder/segment/select/pagination/engine/TopPaginationContextEngineTest.java
@@ -76,7 +76,7 @@ public final class TopPaginationContextEngineTest {
public void assertCreatePaginationContextWhenPredicateInRightValue() {
String name = "rowNumberAlias";
ColumnSegment columnSegment = new ColumnSegment(0, 10, new IdentifierValue(name));
- PredicateSegment predicateSegment = new PredicateSegment(0, 10, columnSegment, new PredicateInRightValue(null, Collections.emptyList()));
+ PredicateSegment predicateSegment = new PredicateSegment(0, 10, columnSegment, new PredicateInRightValue(0, 10, Collections.emptyList()));
AndPredicate andPredicate = new AndPredicate();
andPredicate.getPredicates().add(predicateSegment);
Collection<AndPredicate> andPredicates = Collections.singleton(andPredicate);
@@ -89,7 +89,7 @@ public final class TopPaginationContextEngineTest {
public void assertCreatePaginationContextWhenParameterMarkerRowNumberValueSegment() {
String name = "rowNumberAlias";
ColumnSegment columnSegment = new ColumnSegment(0, 10, new IdentifierValue(name));
- PredicateCompareRightValue predicateCompareRightValue = new PredicateCompareRightValue(">", new ParameterMarkerExpressionSegment(0, 10, 0));
+ PredicateCompareRightValue predicateCompareRightValue = new PredicateCompareRightValue(0, 10, ">", new ParameterMarkerExpressionSegment(0, 10, 0));
PredicateSegment predicateSegment = new PredicateSegment(0, 10, columnSegment, predicateCompareRightValue);
AndPredicate andPredicate = new AndPredicate();
andPredicate.getPredicates().add(predicateSegment);
@@ -108,7 +108,7 @@ public final class TopPaginationContextEngineTest {
private void assertCreatePaginationContextWhenRowNumberPredicatePresentAndWithGivenOperator(final String operator) {
String name = "rowNumberAlias";
ColumnSegment columnSegment = new ColumnSegment(0, 10, new IdentifierValue(name));
- PredicateCompareRightValue predicateCompareRightValue = new PredicateCompareRightValue(operator, new LiteralExpressionSegment(0, 10, 100));
+ PredicateCompareRightValue predicateCompareRightValue = new PredicateCompareRightValue(0, 10, operator, new LiteralExpressionSegment(0, 10, 100));
PredicateSegment predicateSegment = new PredicateSegment(0, 10, columnSegment, predicateCompareRightValue);
AndPredicate andPredicate = new AndPredicate();
andPredicate.getPredicates().add(predicateSegment);
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/BaseRule.g4 b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/BaseRule.g4
index 1180464..6b0122b 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/BaseRule.g4
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/BaseRule.g4
@@ -549,7 +549,7 @@ intervalUnit_
;
subquery
- : 'Default does not match anything'
+ : 'refer subquery in DMStement.g4'
;
orderByClause
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/DMLStatement.g4 b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/DMLStatement.g4
index de9960b..4547b2f 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/DMLStatement.g4
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/DMLStatement.g4
@@ -222,7 +222,7 @@ projections
;
projection
- : (columnName | expr) (AS? alias)? | qualifiedShorthand
+ : expr (AS? alias)? | qualifiedShorthand
;
unqualifiedShorthand
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/MySQLVisitor.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/MySQLVisitor.java
index bc713e3..18ddcb3 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/MySQLVisitor.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/MySQLVisitor.java
@@ -90,11 +90,8 @@ import org.apache.shardingsphere.sql.parser.sql.segment.dml.order.item.IndexOrde
import org.apache.shardingsphere.sql.parser.sql.segment.dml.order.item.OrderByItemSegment;
import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.PredicateSegment;
import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.value.PredicateBetweenRightValue;
-import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.value.PredicateBracketValue;
import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.value.PredicateCompareRightValue;
import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.value.PredicateInRightValue;
-import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.value.PredicateLeftBracketValue;
-import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.value.PredicateRightBracketValue;
import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.value.PredicateRightValue;
import org.apache.shardingsphere.sql.parser.sql.segment.generic.DataTypeLengthSegment;
import org.apache.shardingsphere.sql.parser.sql.segment.generic.DataTypeSegment;
@@ -303,8 +300,10 @@ public abstract class MySQLVisitor extends MySQLStatementBaseVisitor<ASTNode> {
if (rightValue instanceof ColumnSegment) {
return rightValue;
}
- return rightValue instanceof SubquerySegment ? new PredicateCompareRightValue(ctx.comparisonOperator().getText(), new SubqueryExpressionSegment((SubquerySegment) rightValue))
- : new PredicateCompareRightValue(ctx.comparisonOperator().getText(), (ExpressionSegment) rightValue);
+ return rightValue instanceof SubquerySegment ? new PredicateCompareRightValue(ctx.subquery().start.getStartIndex(), ctx.subquery().stop.getStopIndex(),
+ ctx.comparisonOperator().getText(), new SubqueryExpressionSegment((SubquerySegment) rightValue))
+ : new PredicateCompareRightValue(ctx.predicate().start.getStartIndex(), ctx.predicate().stop.getStopIndex(), ctx.comparisonOperator().getText(),
+ (ExpressionSegment) rightValue);
}
@Override
@@ -323,8 +322,10 @@ public abstract class MySQLVisitor extends MySQLStatementBaseVisitor<ASTNode> {
private PredicateSegment createInSegment(final PredicateContext ctx) {
ColumnSegment column = (ColumnSegment) visit(ctx.bitExpr(0));
- PredicateBracketValue predicateBracketValue = createBracketValue(ctx);
- return new PredicateSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), column, new PredicateInRightValue(predicateBracketValue, getExpressionSegments(ctx)));
+ PredicateInRightValue predicateInRightValue = null != ctx.subquery() ? new PredicateInRightValue(ctx.subquery().start.getStartIndex(), ctx.subquery().stop.getStopIndex(),
+ getExpressionSegments(ctx))
+ : new PredicateInRightValue(ctx.LP_().getSymbol().getStartIndex(), ctx.RP_().getSymbol().getStopIndex(), getExpressionSegments(ctx));
+ return new PredicateSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), column, predicateInRightValue);
}
private Collection<ExpressionSegment> getExpressionSegments(final PredicateContext ctx) {
@@ -340,21 +341,11 @@ public abstract class MySQLVisitor extends MySQLStatementBaseVisitor<ASTNode> {
return result;
}
- private PredicateBracketValue createBracketValue(final PredicateContext ctx) {
- PredicateLeftBracketValue predicateLeftBracketValue = null != ctx.subquery()
- ? new PredicateLeftBracketValue(ctx.subquery().LP_().getSymbol().getStartIndex(), ctx.subquery().LP_().getSymbol().getStopIndex())
- : new PredicateLeftBracketValue(ctx.LP_().getSymbol().getStartIndex(), ctx.LP_().getSymbol().getStopIndex());
- PredicateRightBracketValue predicateRightBracketValue = null != ctx.subquery()
- ? new PredicateRightBracketValue(ctx.subquery().RP_().getSymbol().getStartIndex(), ctx.subquery().RP_().getSymbol().getStopIndex())
- : new PredicateRightBracketValue(ctx.RP_().getSymbol().getStartIndex(), ctx.RP_().getSymbol().getStopIndex());
- return new PredicateBracketValue(predicateLeftBracketValue, predicateRightBracketValue);
- }
-
private PredicateSegment createBetweenSegment(final PredicateContext ctx) {
ColumnSegment column = (ColumnSegment) visit(ctx.bitExpr(0));
ExpressionSegment between = (ExpressionSegment) visit(ctx.bitExpr(1));
ExpressionSegment and = (ExpressionSegment) visit(ctx.predicate());
- return new PredicateSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), column, new PredicateBetweenRightValue(between, and));
+ return new PredicateSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), column, new PredicateBetweenRightValue(between.getStartIndex(), and.getStopIndex(), between, and));
}
private ASTNode visitRemainPredicate(final PredicateContext ctx) {
@@ -440,6 +431,11 @@ public abstract class MySQLVisitor extends MySQLStatementBaseVisitor<ASTNode> {
}
@Override
+ public ASTNode visitSubquery(final SubqueryContext ctx) {
+ return visit(ctx.unionClause());
+ }
+
+ @Override
public final ASTNode visitIntervalExpression(final IntervalExpressionContext ctx) {
calculateParameterCount(Collections.singleton(ctx.expr()));
return new ExpressionProjectionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), ctx.getText());
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/impl/MySQLDMLVisitor.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/impl/MySQLDMLVisitor.java
index 2eaec92..a2f1371 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/impl/MySQLDMLVisitor.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/impl/MySQLDMLVisitor.java
@@ -456,13 +456,18 @@ public final class MySQLDMLVisitor extends MySQLVisitor implements DMLVisitor {
return result;
}
AliasSegment alias = null == ctx.alias() ? null : (AliasSegment) visit(ctx.alias());
- if (null != ctx.columnName()) {
- ColumnSegment column = (ColumnSegment) visit(ctx.columnName());
- ColumnProjectionSegment result = new ColumnProjectionSegment(column);
+ ASTNode exprProjection = visit(ctx.expr());
+ if (exprProjection instanceof ColumnSegment) {
+ ColumnProjectionSegment result = new ColumnProjectionSegment((ColumnSegment) exprProjection);
result.setAlias(alias);
return result;
}
- return createProjection(ctx, alias);
+ if (exprProjection instanceof SubquerySegment) {
+ SubqueryProjectionSegment result = new SubqueryProjectionSegment((SubquerySegment) exprProjection);
+ result.setAlias(alias);
+ return result;
+ }
+ return createProjection(ctx, alias, exprProjection);
}
@Override
@@ -473,8 +478,7 @@ public final class MySQLDMLVisitor extends MySQLVisitor implements DMLVisitor {
return new AliasSegment(ctx.start.getStartIndex(), ctx.stop.getStopIndex(), new IdentifierValue(ctx.STRING_().getText()));
}
- private ASTNode createProjection(final ProjectionContext ctx, final AliasSegment alias) {
- ASTNode projection = visit(ctx.expr());
+ private ASTNode createProjection(final ProjectionContext ctx, final AliasSegment alias, final ASTNode projection) {
if (projection instanceof AggregationProjectionSegment) {
((AggregationProjectionSegment) projection).setAlias(alias);
return projection;
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/OracleVisitor.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/OracleVisitor.java
index a32f5bd..16e1413 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/OracleVisitor.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/OracleVisitor.java
@@ -79,11 +79,8 @@ import org.apache.shardingsphere.sql.parser.sql.segment.dml.order.item.IndexOrde
import org.apache.shardingsphere.sql.parser.sql.segment.dml.order.item.OrderByItemSegment;
import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.PredicateSegment;
import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.value.PredicateBetweenRightValue;
-import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.value.PredicateBracketValue;
import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.value.PredicateCompareRightValue;
import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.value.PredicateInRightValue;
-import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.value.PredicateLeftBracketValue;
-import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.value.PredicateRightBracketValue;
import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.value.PredicateRightValue;
import org.apache.shardingsphere.sql.parser.sql.segment.generic.DataTypeLengthSegment;
import org.apache.shardingsphere.sql.parser.sql.segment.generic.DataTypeSegment;
@@ -282,8 +279,9 @@ public abstract class OracleVisitor extends OracleStatementBaseVisitor<ASTNode>
if (rightValue instanceof ColumnSegment) {
return rightValue;
}
- return rightValue instanceof SubquerySegment ? new PredicateCompareRightValue(ctx.comparisonOperator().getText(), new SubqueryExpressionSegment((SubquerySegment) rightValue))
- : new PredicateCompareRightValue(ctx.comparisonOperator().getText(), (ExpressionSegment) rightValue);
+ return rightValue instanceof SubquerySegment ? new PredicateCompareRightValue(ctx.subquery().start.getStartIndex(), ctx.subquery().stop.getStopIndex(), ctx.comparisonOperator().getText(),
+ new SubqueryExpressionSegment((SubquerySegment) rightValue))
+ : new PredicateCompareRightValue(ctx.predicate().start.getStartIndex(), ctx.predicate().stop.getStopIndex(), ctx.comparisonOperator().getText(), (ExpressionSegment) rightValue);
}
@Override
@@ -302,8 +300,10 @@ public abstract class OracleVisitor extends OracleStatementBaseVisitor<ASTNode>
private PredicateSegment createInSegment(final PredicateContext ctx) {
ColumnSegment column = (ColumnSegment) visit(ctx.bitExpr(0));
- PredicateBracketValue predicateBracketValue = createBracketValue(ctx);
- return new PredicateSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), column, new PredicateInRightValue(predicateBracketValue, getExpressionSegments(ctx)));
+ PredicateInRightValue predicateInRightValue = null != ctx.subquery() ? new PredicateInRightValue(ctx.subquery().start.getStartIndex(), ctx.subquery().stop.getStopIndex(),
+ getExpressionSegments(ctx))
+ : new PredicateInRightValue(ctx.LP_().getSymbol().getStartIndex(), ctx.RP_().getSymbol().getStopIndex(), getExpressionSegments(ctx));
+ return new PredicateSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), column, predicateInRightValue);
}
private Collection<ExpressionSegment> getExpressionSegments(final PredicateContext ctx) {
@@ -319,21 +319,11 @@ public abstract class OracleVisitor extends OracleStatementBaseVisitor<ASTNode>
return result;
}
- private PredicateBracketValue createBracketValue(final PredicateContext ctx) {
- PredicateLeftBracketValue predicateLeftBracketValue = null != ctx.subquery()
- ? new PredicateLeftBracketValue(ctx.subquery().LP_().getSymbol().getStartIndex(), ctx.subquery().LP_().getSymbol().getStopIndex())
- : new PredicateLeftBracketValue(ctx.LP_().getSymbol().getStartIndex(), ctx.LP_().getSymbol().getStopIndex());
- PredicateRightBracketValue predicateRightBracketValue = null != ctx.subquery()
- ? new PredicateRightBracketValue(ctx.subquery().RP_().getSymbol().getStartIndex(), ctx.subquery().RP_().getSymbol().getStopIndex())
- : new PredicateRightBracketValue(ctx.RP_().getSymbol().getStartIndex(), ctx.RP_().getSymbol().getStopIndex());
- return new PredicateBracketValue(predicateLeftBracketValue, predicateRightBracketValue);
- }
-
private PredicateSegment createBetweenSegment(final PredicateContext ctx) {
ColumnSegment column = (ColumnSegment) visit(ctx.bitExpr(0));
ExpressionSegment between = (ExpressionSegment) visit(ctx.bitExpr(1));
ExpressionSegment and = (ExpressionSegment) visit(ctx.predicate());
- return new PredicateSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), column, new PredicateBetweenRightValue(between, and));
+ return new PredicateSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), column, new PredicateBetweenRightValue(between.getStartIndex(), and.getStopIndex(), between, and));
}
private ASTNode visitRemainPredicate(final PredicateContext ctx) {
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/impl/OracleDMLVisitor.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/impl/OracleDMLVisitor.java
index ce29bee..d4370fb 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/impl/OracleDMLVisitor.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/impl/OracleDMLVisitor.java
@@ -348,7 +348,7 @@ public final class OracleDMLVisitor extends OracleVisitor implements DMLVisitor
}
// FIXME :For DISTINCT()
if (projection instanceof ColumnSegment) {
- ExpressionProjectionSegment result = new ExpressionProjectionSegment(ctx.start.getStartIndex(), ctx.stop.getStopIndex(), ctx.getText());
+ ColumnProjectionSegment result = new ColumnProjectionSegment((ColumnSegment) projection);
result.setAlias(alias);
return result;
}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/antlr4/imports/postgresql/BaseRule.g4 b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/antlr4/imports/postgresql/BaseRule.g4
index 23e960f..24cc585 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/antlr4/imports/postgresql/BaseRule.g4
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/antlr4/imports/postgresql/BaseRule.g4
@@ -522,7 +522,6 @@ aExpr
| aExpr MOD_ aExpr
| aExpr CARET_ aExpr
| aExpr comparisonOperator aExpr
- | LP_ aExpr RP_ optIndirection
| aExpr qualOp aExpr
| qualOp aExpr
| aExpr qualOp
@@ -594,6 +593,7 @@ cExpr
| columnref
| aexprConst
| PARAM indirectionEl?
+ | LP_ aExpr RP_ optIndirection
| caseExpr
| funcExpr
| selectWithParens
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/PostgreSQLVisitor.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/PostgreSQLVisitor.java
index 26d9804..57d41cd 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/PostgreSQLVisitor.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/PostgreSQLVisitor.java
@@ -40,7 +40,6 @@ import org.apache.shardingsphere.sql.parser.autogen.PostgreSQLStatementParser.Fu
import org.apache.shardingsphere.sql.parser.autogen.PostgreSQLStatementParser.FuncExprContext;
import org.apache.shardingsphere.sql.parser.autogen.PostgreSQLStatementParser.FunctionExprCommonSubexprContext;
import org.apache.shardingsphere.sql.parser.autogen.PostgreSQLStatementParser.IdentifierContext;
-import org.apache.shardingsphere.sql.parser.autogen.PostgreSQLStatementParser.InExprContext;
import org.apache.shardingsphere.sql.parser.autogen.PostgreSQLStatementParser.IndexNameContext;
import org.apache.shardingsphere.sql.parser.autogen.PostgreSQLStatementParser.NumberLiteralsContext;
import org.apache.shardingsphere.sql.parser.autogen.PostgreSQLStatementParser.OwnerContext;
@@ -54,6 +53,7 @@ import org.apache.shardingsphere.sql.parser.autogen.PostgreSQLStatementParser.Un
import org.apache.shardingsphere.sql.parser.sql.constant.AggregationType;
import org.apache.shardingsphere.sql.parser.sql.constant.OrderDirection;
import org.apache.shardingsphere.sql.parser.sql.predicate.PredicateBuilder;
+import org.apache.shardingsphere.sql.parser.sql.segment.SQLSegment;
import org.apache.shardingsphere.sql.parser.sql.segment.ddl.index.IndexSegment;
import org.apache.shardingsphere.sql.parser.sql.segment.dml.column.ColumnSegment;
import org.apache.shardingsphere.sql.parser.sql.segment.dml.expr.ExpressionSegment;
@@ -71,11 +71,7 @@ import org.apache.shardingsphere.sql.parser.sql.segment.dml.order.item.IndexOrde
import org.apache.shardingsphere.sql.parser.sql.segment.dml.order.item.OrderByItemSegment;
import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.PredicateSegment;
import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.value.PredicateBetweenRightValue;
-import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.value.PredicateBracketValue;
import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.value.PredicateCompareRightValue;
-import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.value.PredicateInRightValue;
-import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.value.PredicateLeftBracketValue;
-import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.value.PredicateRightBracketValue;
import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.value.PredicateRightValue;
import org.apache.shardingsphere.sql.parser.sql.segment.generic.DataTypeLengthSegment;
import org.apache.shardingsphere.sql.parser.sql.segment.generic.DataTypeSegment;
@@ -187,9 +183,9 @@ public abstract class PostgreSQLVisitor extends PostgreSQLStatementBaseVisitor<A
ASTNode left = visit(ctx.aExpr(0));
if (left instanceof ColumnSegment) {
ColumnSegment columnSegment = (ColumnSegment) left;
- ASTNode right = visit(ctx.aExpr(1));
+ SQLSegment right = (SQLSegment) visit(ctx.aExpr(1));
PredicateRightValue value = right instanceof ColumnSegment
- ? (PredicateRightValue) right : new PredicateCompareRightValue(ctx.comparisonOperator().getText(), (ExpressionSegment) right);
+ ? (PredicateRightValue) right : new PredicateCompareRightValue(right.getStartIndex(), right.getStopIndex(), ctx.comparisonOperator().getText(), (ExpressionSegment) right);
return new PredicateSegment(ctx.start.getStartIndex(), ctx.stop.getStopIndex(), columnSegment, value);
}
visit(ctx.aExpr(1));
@@ -198,10 +194,6 @@ public abstract class PostgreSQLVisitor extends PostgreSQLStatementBaseVisitor<A
if (null != ctx.logicalOperator()) {
return new PredicateBuilder(visit(ctx.aExpr(0)), visit(ctx.aExpr(1)), ctx.logicalOperator().getText()).mergePredicate();
}
-
- if (null != ctx.optIndirection()) {
- return visit(ctx.aExpr(0));
- }
super.visitAExpr(ctx);
String text = ctx.start.getInputStream().getText(new Interval(ctx.start.getStartIndex(), ctx.stop.getStopIndex()));
return new CommonExpressionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), text);
@@ -222,6 +214,9 @@ public abstract class PostgreSQLVisitor extends PostgreSQLStatementBaseVisitor<A
}
return astNode;
}
+ if (null != ctx.aExpr()) {
+ return visit(ctx.aExpr());
+ }
super.visitCExpr(ctx);
return new CommonExpressionSegment(ctx.start.getStartIndex(), ctx.stop.getStopIndex(), ctx.getText());
}
@@ -257,27 +252,15 @@ public abstract class PostgreSQLVisitor extends PostgreSQLStatementBaseVisitor<A
private PredicateSegment createInSegment(final AExprContext ctx) {
ColumnSegment column = (ColumnSegment) visit(ctx.aExpr(0).cExpr().columnref());
- PredicateBracketValue predicateBracketValue = createBracketValue(ctx.inExpr());
- return new PredicateSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), column, new PredicateInRightValue(predicateBracketValue, getExpressionSegments(ctx)));
+ ASTNode predicateInRightValue = visit(ctx.inExpr());
+ return new PredicateSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), column, (PredicateRightValue) predicateInRightValue);
}
- private Collection<ExpressionSegment> getExpressionSegments(final AExprContext ctx) {
- Collection<ExpressionSegment> result = new LinkedList<>();
-// TODO deal with sqlExpressions in PredicateInRightValue
- return result;
- }
-
- private PredicateBracketValue createBracketValue(final InExprContext ctx) {
- PredicateLeftBracketValue predicateLeftBracketValue = new PredicateLeftBracketValue(ctx.LP_().getSymbol().getStartIndex(), ctx.LP_().getSymbol().getStopIndex());
- PredicateRightBracketValue predicateRightBracketValue = new PredicateRightBracketValue(ctx.RP_().getSymbol().getStartIndex(), ctx.RP_().getSymbol().getStopIndex());
- visit(ctx);
- return new PredicateBracketValue(predicateLeftBracketValue, predicateRightBracketValue);
- }
-
private PredicateSegment createBetweenSegment(final AExprContext ctx) {
ColumnSegment column = (ColumnSegment) visit(ctx.aExpr().get(0));
- return new PredicateSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), column, new PredicateBetweenRightValue((ExpressionSegment) visit(ctx.bExpr()),
- (ExpressionSegment) visit(ctx.aExpr(1))));
+ SQLSegment value = (SQLSegment) visit(ctx.bExpr());
+ return new PredicateSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), column, new PredicateBetweenRightValue(value.getStartIndex(), value.getStopIndex(),
+ (ExpressionSegment) value, (ExpressionSegment) visit(ctx.aExpr(1))));
}
@Override
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/impl/PostgreSQLDMLVisitor.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/impl/PostgreSQLDMLVisitor.java
index f029daf..74b9b9a 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/impl/PostgreSQLDMLVisitor.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/impl/PostgreSQLDMLVisitor.java
@@ -416,12 +416,15 @@ public final class PostgreSQLDMLVisitor extends PostgreSQLVisitor implements DML
return shorthandProjection;
}
AExprContext expr = ctx.aExpr();
- if (null != expr.cExpr() && null != expr.cExpr().columnref()) {
- ColumnProjectionSegment projection = generateColumnProjection(expr.cExpr().columnref());
+ if (1 == expr.getChildCount() && null != expr.cExpr()) {
+ ASTNode projection = visit(expr.cExpr());
AliasSegment alias = null != ctx.identifier()
? new AliasSegment(ctx.identifier().start.getStartIndex(), ctx.identifier().stop.getStopIndex(), new IdentifierValue(ctx.identifier().getText())) : null;
- projection.setAlias(alias);
- return projection;
+ if (projection instanceof ColumnSegment) {
+ ColumnProjectionSegment result = new ColumnProjectionSegment((ColumnSegment) projection);
+ result.setAlias(alias);
+ return result;
+ }
}
if (null != expr.cExpr() && null != expr.cExpr().funcExpr()) {
visit(expr.cExpr().funcExpr());
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/visitor/SQL92Visitor.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/visitor/SQL92Visitor.java
index 665f936..3fadcf4 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/visitor/SQL92Visitor.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/visitor/SQL92Visitor.java
@@ -25,8 +25,6 @@ import org.antlr.v4.runtime.misc.Interval;
import org.antlr.v4.runtime.tree.TerminalNode;
import org.apache.shardingsphere.sql.parser.api.ASTNode;
import org.apache.shardingsphere.sql.parser.autogen.SQL92StatementBaseVisitor;
-import org.apache.shardingsphere.sql.parser.autogen.SQL92StatementParser.DataTypeContext;
-import org.apache.shardingsphere.sql.parser.autogen.SQL92StatementParser.DataTypeLengthContext;
import org.apache.shardingsphere.sql.parser.autogen.SQL92StatementParser.AggregationFunctionContext;
import org.apache.shardingsphere.sql.parser.autogen.SQL92StatementParser.BitExprContext;
import org.apache.shardingsphere.sql.parser.autogen.SQL92StatementParser.BitValueLiteralsContext;
@@ -35,6 +33,8 @@ import org.apache.shardingsphere.sql.parser.autogen.SQL92StatementParser.Boolean
import org.apache.shardingsphere.sql.parser.autogen.SQL92StatementParser.CastFunctionContext;
import org.apache.shardingsphere.sql.parser.autogen.SQL92StatementParser.ColumnNameContext;
import org.apache.shardingsphere.sql.parser.autogen.SQL92StatementParser.ColumnNamesContext;
+import org.apache.shardingsphere.sql.parser.autogen.SQL92StatementParser.DataTypeContext;
+import org.apache.shardingsphere.sql.parser.autogen.SQL92StatementParser.DataTypeLengthContext;
import org.apache.shardingsphere.sql.parser.autogen.SQL92StatementParser.DataTypeNameContext;
import org.apache.shardingsphere.sql.parser.autogen.SQL92StatementParser.ExprContext;
import org.apache.shardingsphere.sql.parser.autogen.SQL92StatementParser.FunctionCallContext;
@@ -60,6 +60,7 @@ import org.apache.shardingsphere.sql.parser.autogen.SQL92StatementParser.Unreser
import org.apache.shardingsphere.sql.parser.sql.constant.AggregationType;
import org.apache.shardingsphere.sql.parser.sql.constant.OrderDirection;
import org.apache.shardingsphere.sql.parser.sql.predicate.PredicateBuilder;
+import org.apache.shardingsphere.sql.parser.sql.segment.SQLSegment;
import org.apache.shardingsphere.sql.parser.sql.segment.dml.column.ColumnSegment;
import org.apache.shardingsphere.sql.parser.sql.segment.dml.expr.ExpressionSegment;
import org.apache.shardingsphere.sql.parser.sql.segment.dml.expr.complex.CommonExpressionSegment;
@@ -76,11 +77,8 @@ import org.apache.shardingsphere.sql.parser.sql.segment.dml.order.item.IndexOrde
import org.apache.shardingsphere.sql.parser.sql.segment.dml.order.item.OrderByItemSegment;
import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.PredicateSegment;
import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.value.PredicateBetweenRightValue;
-import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.value.PredicateBracketValue;
import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.value.PredicateCompareRightValue;
import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.value.PredicateInRightValue;
-import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.value.PredicateLeftBracketValue;
-import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.value.PredicateRightBracketValue;
import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.value.PredicateRightValue;
import org.apache.shardingsphere.sql.parser.sql.segment.generic.DataTypeLengthSegment;
import org.apache.shardingsphere.sql.parser.sql.segment.generic.DataTypeSegment;
@@ -266,16 +264,17 @@ public abstract class SQL92Visitor extends SQL92StatementBaseVisitor<ASTNode> {
if (null != ctx.subquery()) {
new SubquerySegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), (SelectStatement) visit(ctx.subquery()));
}
- ASTNode rightValue = visit(ctx.predicate());
+ SQLSegment rightValue = (SQLSegment) visit(ctx.predicate());
return createPredicateRightValue(ctx, rightValue);
}
- private ASTNode createPredicateRightValue(final BooleanPrimaryContext ctx, final ASTNode rightValue) {
+ private ASTNode createPredicateRightValue(final BooleanPrimaryContext ctx, final SQLSegment rightValue) {
if (rightValue instanceof ColumnSegment) {
return rightValue;
}
- return rightValue instanceof SubquerySegment ? new PredicateCompareRightValue(ctx.comparisonOperator().getText(), new SubqueryExpressionSegment((SubquerySegment) rightValue))
- : new PredicateCompareRightValue(ctx.comparisonOperator().getText(), (ExpressionSegment) rightValue);
+ return rightValue instanceof SubquerySegment ? new PredicateCompareRightValue(((SubquerySegment) rightValue).getStartIndex(), ((SubquerySegment) rightValue).getStopIndex(),
+ ctx.comparisonOperator().getText(), new SubqueryExpressionSegment((SubquerySegment) rightValue))
+ : new PredicateCompareRightValue(rightValue.getStartIndex(), rightValue.getStopIndex(), ctx.comparisonOperator().getText(), (ExpressionSegment) rightValue);
}
@Override
@@ -294,8 +293,8 @@ public abstract class SQL92Visitor extends SQL92StatementBaseVisitor<ASTNode> {
private PredicateSegment createInSegment(final PredicateContext ctx) {
ColumnSegment column = (ColumnSegment) visit(ctx.bitExpr(0));
- PredicateBracketValue predicateBracketValue = createBracketValue(ctx);
- return new PredicateSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), column, new PredicateInRightValue(predicateBracketValue, getExpressionSegments(ctx)));
+ return new PredicateSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), column, new PredicateInRightValue(ctx.LP_().getSymbol().getStartIndex(),
+ ctx.RP_().getSymbol().getStopIndex(), getExpressionSegments(ctx)));
}
private Collection<ExpressionSegment> getExpressionSegments(final PredicateContext ctx) {
@@ -311,21 +310,11 @@ public abstract class SQL92Visitor extends SQL92StatementBaseVisitor<ASTNode> {
return result;
}
- private PredicateBracketValue createBracketValue(final PredicateContext ctx) {
- PredicateLeftBracketValue predicateLeftBracketValue = null != ctx.subquery()
- ? new PredicateLeftBracketValue(ctx.subquery().LP_().getSymbol().getStartIndex(), ctx.subquery().LP_().getSymbol().getStopIndex())
- : new PredicateLeftBracketValue(ctx.LP_().getSymbol().getStartIndex(), ctx.LP_().getSymbol().getStopIndex());
- PredicateRightBracketValue predicateRightBracketValue = null != ctx.subquery()
- ? new PredicateRightBracketValue(ctx.subquery().RP_().getSymbol().getStartIndex(), ctx.subquery().RP_().getSymbol().getStopIndex())
- : new PredicateRightBracketValue(ctx.RP_().getSymbol().getStartIndex(), ctx.RP_().getSymbol().getStopIndex());
- return new PredicateBracketValue(predicateLeftBracketValue, predicateRightBracketValue);
- }
-
private PredicateSegment createBetweenSegment(final PredicateContext ctx) {
ColumnSegment column = (ColumnSegment) visit(ctx.bitExpr(0));
ExpressionSegment between = (ExpressionSegment) visit(ctx.bitExpr(1));
ExpressionSegment and = (ExpressionSegment) visit(ctx.predicate());
- return new PredicateSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), column, new PredicateBetweenRightValue(between, and));
+ return new PredicateSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), column, new PredicateBetweenRightValue(between.getStartIndex(), and.getStopIndex(), between, and));
}
private ASTNode visitRemainPredicate(final PredicateContext ctx) {
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/SQLServerVisitor.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/SQLServerVisitor.java
index 2719c8d..01dced6 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/SQLServerVisitor.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/SQLServerVisitor.java
@@ -24,8 +24,6 @@ import org.antlr.v4.runtime.misc.Interval;
import org.antlr.v4.runtime.tree.TerminalNode;
import org.apache.shardingsphere.sql.parser.api.ASTNode;
import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementBaseVisitor;
-import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.DataTypeContext;
-import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.DataTypeLengthContext;
import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.AggregationFunctionContext;
import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.BitExprContext;
import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.BitValueLiteralsContext;
@@ -36,6 +34,8 @@ import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.Cha
import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.ColumnNameContext;
import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.ColumnNameWithSortContext;
import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.ColumnNamesContext;
+import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.DataTypeContext;
+import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.DataTypeLengthContext;
import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.DataTypeNameContext;
import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.ExprContext;
import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.FunctionCallContext;
@@ -80,11 +80,8 @@ import org.apache.shardingsphere.sql.parser.sql.segment.dml.order.item.IndexOrde
import org.apache.shardingsphere.sql.parser.sql.segment.dml.order.item.OrderByItemSegment;
import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.PredicateSegment;
import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.value.PredicateBetweenRightValue;
-import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.value.PredicateBracketValue;
import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.value.PredicateCompareRightValue;
import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.value.PredicateInRightValue;
-import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.value.PredicateLeftBracketValue;
-import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.value.PredicateRightBracketValue;
import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.value.PredicateRightValue;
import org.apache.shardingsphere.sql.parser.sql.segment.generic.DataTypeLengthSegment;
import org.apache.shardingsphere.sql.parser.sql.segment.generic.DataTypeSegment;
@@ -283,8 +280,9 @@ public abstract class SQLServerVisitor extends SQLServerStatementBaseVisitor<AST
if (rightValue instanceof ColumnSegment) {
return rightValue;
}
- return rightValue instanceof SubquerySegment ? new PredicateCompareRightValue(ctx.comparisonOperator().getText(), new SubqueryExpressionSegment((SubquerySegment) rightValue))
- : new PredicateCompareRightValue(ctx.comparisonOperator().getText(), (ExpressionSegment) rightValue);
+ return rightValue instanceof SubquerySegment ? new PredicateCompareRightValue(ctx.subquery().start.getStartIndex(), ctx.subquery().stop.getStopIndex(), ctx.comparisonOperator().getText(),
+ new SubqueryExpressionSegment((SubquerySegment) rightValue))
+ : new PredicateCompareRightValue(ctx.predicate().start.getStartIndex(), ctx.predicate().stop.getStopIndex(), ctx.comparisonOperator().getText(), (ExpressionSegment) rightValue);
}
@Override
@@ -303,8 +301,10 @@ public abstract class SQLServerVisitor extends SQLServerStatementBaseVisitor<AST
private PredicateSegment createInSegment(final PredicateContext ctx) {
ColumnSegment column = (ColumnSegment) visit(ctx.bitExpr(0));
- PredicateBracketValue predicateBracketValue = createBracketValue(ctx);
- return new PredicateSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), column, new PredicateInRightValue(predicateBracketValue, getExpressionSegments(ctx)));
+ PredicateInRightValue predicateInRightValue = null != ctx.subquery() ? new PredicateInRightValue(ctx.subquery().start.getStartIndex(), ctx.subquery().stop.getStopIndex(),
+ getExpressionSegments(ctx))
+ : new PredicateInRightValue(ctx.LP_().getSymbol().getStartIndex(), ctx.RP_().getSymbol().getStopIndex(), getExpressionSegments(ctx));
+ return new PredicateSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), column, predicateInRightValue);
}
private Collection<ExpressionSegment> getExpressionSegments(final PredicateContext ctx) {
@@ -320,21 +320,11 @@ public abstract class SQLServerVisitor extends SQLServerStatementBaseVisitor<AST
return result;
}
- private PredicateBracketValue createBracketValue(final PredicateContext ctx) {
- PredicateLeftBracketValue predicateLeftBracketValue = null != ctx.subquery()
- ? new PredicateLeftBracketValue(ctx.subquery().LP_().getSymbol().getStartIndex(), ctx.subquery().LP_().getSymbol().getStopIndex())
- : new PredicateLeftBracketValue(ctx.LP_().getSymbol().getStartIndex(), ctx.LP_().getSymbol().getStopIndex());
- PredicateRightBracketValue predicateRightBracketValue = null != ctx.subquery()
- ? new PredicateRightBracketValue(ctx.subquery().RP_().getSymbol().getStartIndex(), ctx.subquery().RP_().getSymbol().getStopIndex())
- : new PredicateRightBracketValue(ctx.RP_().getSymbol().getStartIndex(), ctx.RP_().getSymbol().getStopIndex());
- return new PredicateBracketValue(predicateLeftBracketValue, predicateRightBracketValue);
- }
-
private PredicateSegment createBetweenSegment(final PredicateContext ctx) {
ColumnSegment column = (ColumnSegment) visit(ctx.bitExpr(0));
ExpressionSegment between = (ExpressionSegment) visit(ctx.bitExpr(1));
ExpressionSegment and = (ExpressionSegment) visit(ctx.predicate());
- return new PredicateSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), column, new PredicateBetweenRightValue(between, and));
+ return new PredicateSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), column, new PredicateBetweenRightValue(between.getStartIndex(), and.getStopIndex(), between, and));
}
private ASTNode visitRemainPredicate(final PredicateContext ctx) {
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/impl/SQLServerDMLVisitor.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/impl/SQLServerDMLVisitor.java
index 73f3d11..9349d5f 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/impl/SQLServerDMLVisitor.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/impl/SQLServerDMLVisitor.java
@@ -362,7 +362,7 @@ public final class SQLServerDMLVisitor extends SQLServerVisitor implements DMLVi
}
// FIXME :For DISTINCT()
if (projection instanceof ColumnSegment) {
- ExpressionProjectionSegment result = new ExpressionProjectionSegment(ctx.start.getStartIndex(), ctx.stop.getStopIndex(), ctx.getText());
+ ColumnProjectionSegment result = new ColumnProjectionSegment((ColumnSegment) projection);
result.setAlias(alias);
return result;
}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/segment/dml/predicate/value/PredicateBetweenRightValue.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/segment/dml/predicate/value/PredicateBetweenRightValue.java
index 44d83d7..88acc4e 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/segment/dml/predicate/value/PredicateBetweenRightValue.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/segment/dml/predicate/value/PredicateBetweenRightValue.java
@@ -28,6 +28,10 @@ import org.apache.shardingsphere.sql.parser.sql.segment.dml.expr.ExpressionSegme
@Getter
public final class PredicateBetweenRightValue implements PredicateRightValue {
+ private final int startIndex;
+
+ private final int stopIndex;
+
private final ExpressionSegment betweenExpression;
private final ExpressionSegment andExpression;
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/segment/dml/predicate/value/PredicateBracketValue.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/segment/dml/predicate/value/PredicateBracketValue.java
deleted file mode 100644
index 65a3d61..0000000
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/segment/dml/predicate/value/PredicateBracketValue.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.value;
-
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-
-/**
- * Predicate bracket value for in.
- */
-@RequiredArgsConstructor
-@Getter
-public final class PredicateBracketValue implements PredicateRightValue {
-
- private final PredicateLeftBracketValue predicateLeftBracketValue;
-
- private final PredicateRightBracketValue predicateRightBracketValue;
-}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/segment/dml/predicate/value/PredicateCompareRightValue.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/segment/dml/predicate/value/PredicateCompareRightValue.java
index 27d9acb..56ca22a 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/segment/dml/predicate/value/PredicateCompareRightValue.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/segment/dml/predicate/value/PredicateCompareRightValue.java
@@ -28,6 +28,10 @@ import org.apache.shardingsphere.sql.parser.sql.segment.dml.expr.ExpressionSegme
@Getter
public final class PredicateCompareRightValue implements PredicateRightValue {
+ private final int startIndex;
+
+ private final int stopIndex;
+
private final String operator;
private final ExpressionSegment expression;
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/segment/dml/predicate/value/PredicateInRightValue.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/segment/dml/predicate/value/PredicateInRightValue.java
index b9d9ebf..1f85cc7 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/segment/dml/predicate/value/PredicateInRightValue.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/segment/dml/predicate/value/PredicateInRightValue.java
@@ -30,7 +30,9 @@ import java.util.Collection;
@Getter
public final class PredicateInRightValue implements PredicateRightValue {
- private final PredicateBracketValue predicateBracketValue;
+ private final int startIndex;
+
+ private final int stopIndex;
private final Collection<ExpressionSegment> sqlExpressions;
}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/segment/dml/predicate/value/PredicateRightValue.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/segment/dml/predicate/value/PredicateRightValue.java
index f520a5c..2689d6b 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/segment/dml/predicate/value/PredicateRightValue.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/segment/dml/predicate/value/PredicateRightValue.java
@@ -17,10 +17,10 @@
package org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.value;
-import org.apache.shardingsphere.sql.parser.api.ASTNode;
+import org.apache.shardingsphere.sql.parser.sql.segment.SQLSegment;
/**
* Predicate right value.
*/
-public interface PredicateRightValue extends ASTNode {
+public interface PredicateRightValue extends SQLSegment {
}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/test/resources/case/dml/select.xml b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/test/resources/case/dml/select.xml
index ea844e8..a96e394 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/test/resources/case/dml/select.xml
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/test/resources/case/dml/select.xml
@@ -1522,7 +1522,7 @@
</table-factor>
</table-reference>
<projections distinct-row="true" start-index="15" stop-index="23">
- <expression-projection start-index="15" stop-index="23" />
+ <column-projection start-index="16" stop-index="22" name="item_id"/>
</projections>
<order-by>
<column-item name="item_id" start-index="52" stop-index="58" />