This is an automated email from the ASF dual-hosted git repository.
tuichenchuxin 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 466002ccce6 Remove useless convertToSQLSegment in SQLSegmentConverter
and SQLStatementConverter (#20190)
466002ccce6 is described below
commit 466002ccce62b0cdcee2515a1cadc26d53521c2f
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Mon Aug 15 17:26:35 2022 +0800
Remove useless convertToSQLSegment in SQLSegmentConverter and
SQLStatementConverter (#20190)
---
.../table/FilterableTableScanExecutor.java | 1 -
.../optimizer/ShardingSphereOptimizer.java | 2 +-
.../converter/SQLNodeConverterEngine.java | 34 +-------
.../converter/segment/SQLSegmentConverter.java | 32 +-------
.../segment/expression/ExpressionConverter.java | 95 +++-------------------
.../impl/BetweenExpressionConverter.java | 21 +----
.../impl/BinaryOperationExpressionConverter.java | 24 +-----
.../segment/expression/impl/ColumnConverter.java | 19 +----
.../impl/ExistsSubqueryExpressionConverter.java | 20 +----
.../segment/expression/impl/FunctionConverter.java | 42 +---------
.../expression/impl/InExpressionConverter.java | 28 +------
.../expression/impl/ListExpressionConverter.java | 20 +----
.../impl/LiteralExpressionConverter.java | 12 +--
.../impl/ParameterMarkerExpressionConverter.java | 9 +-
.../impl/SubqueryExpressionConverter.java | 18 +---
.../converter/segment/from/TableConverter.java | 37 +--------
.../segment/from/impl/JoinTableConverter.java | 22 +----
.../segment/from/impl/SimpleTableConverter.java | 28 +------
.../segment/from/impl/SubqueryTableConverter.java | 20 +----
.../segment/groupby/GroupByConverter.java | 15 +---
.../converter/segment/groupby/HavingConverter.java | 13 +--
.../segment/limit/PaginationValueSQLConverter.java | 16 +---
.../segment/orderby/OrderByConverter.java | 15 +---
.../orderby/item/ColumnOrderByItemConverter.java | 25 +-----
.../item/ExpressionOrderByItemConverter.java | 7 +-
.../orderby/item/IndexOrderByItemConverter.java | 13 +--
.../orderby/item/OrderByItemConverterUtil.java | 26 +-----
.../segment/projection/DistinctConverter.java | 7 +-
.../segment/projection/ProjectionsConverter.java | 71 ++--------------
.../impl/AggregationProjectionConverter.java | 68 +---------------
.../projection/impl/ColumnProjectionConverter.java | 31 +------
.../impl/ExpressionProjectionConverter.java | 30 +------
.../impl/ShorthandProjectionConverter.java | 17 +---
.../impl/SubqueryProjectionConverter.java | 23 +-----
.../converter/segment/where/WhereConverter.java | 16 +---
.../converter/statement/SQLStatementConverter.java | 12 +--
.../statement/select/SelectStatementConverter.java | 73 +++--------------
.../converter/type/CombineOperatorConverter.java | 18 ----
.../SQLNodeConvertEngineParameterizedTest.java | 17 +---
39 files changed, 95 insertions(+), 902 deletions(-)
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-executor/src/main/java/org/apache/shardingsphere/infra/federation/executor/original/table/FilterableTableScanExecutor.java
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-executor/src/main/java/org/apache/shardingsphere/infra/federation/executor/original/table/FilterableTableScanExecutor.java
index c010c0c6ff6..53e11b0a356 100644
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-executor/src/main/java/org/apache/shardingsphere/infra/federation/executor/original/table/FilterableTableScanExecutor.java
+++
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-executor/src/main/java/org/apache/shardingsphere/infra/federation/executor/original/table/FilterableTableScanExecutor.java
@@ -114,7 +114,6 @@ public final class FilterableTableScanExecutor implements
TableScanExecutor {
String schemaName = executorContext.getSchemaName();
DatabaseType databaseType =
DatabaseTypeEngine.getTrunkDatabaseType(optimizerContext.getParserContexts().get(databaseName).getDatabaseType().getType());
SqlString sqlString = createSQLString(table, scanContext,
SQLDialectFactory.getSQLDialect(databaseType));
- // TODO replace sql parse with sql convert
FederationContext federationContext =
executorContext.getFederationContext();
LogicSQL logicSQL = createLogicSQL(federationContext.getDatabases(),
sqlString, databaseType);
ShardingSphereDatabase database =
federationContext.getDatabases().get(databaseName.toLowerCase());
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/ShardingSphereOptimizer.java
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/ShardingSphereOptimizer.java
index ae1b595981e..faec5782398 100644
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/ShardingSphereOptimizer.java
+++
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/ShardingSphereOptimizer.java
@@ -45,7 +45,7 @@ public final class ShardingSphereOptimizer {
*/
public RelNode optimize(final SQLStatement sqlStatement) {
try {
- SqlNode sqlNode =
SQLNodeConverterEngine.convertToSQLNode(sqlStatement);
+ SqlNode sqlNode = SQLNodeConverterEngine.convert(sqlStatement);
RelNode logicPlan = converter.convertQuery(sqlNode, true,
true).rel;
RelNode bestPlan = optimizeWithRBO(logicPlan, hepPlanner);
return optimizeWithCBO(bestPlan, converter);
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/SQLNodeConverterEngine.java
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/SQLNodeConverterEngine.java
index 8ab06566eae..2b7f3fceb00 100644
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/SQLNodeConverterEngine.java
+++
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/SQLNodeConverterEngine.java
@@ -20,14 +20,10 @@ package
org.apache.shardingsphere.infra.federation.optimizer.converter;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.apache.calcite.sql.SqlBasicCall;
-import org.apache.calcite.sql.SqlKind;
import org.apache.calcite.sql.SqlNode;
-import org.apache.calcite.sql.SqlOrderBy;
-import org.apache.calcite.sql.SqlSelect;
import org.apache.calcite.sql.parser.SqlParserPos;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.statement.select.SelectStatementConverter;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.type.CombineOperatorConverter;
-import org.apache.shardingsphere.sql.parser.sql.common.constant.CombineType;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.combine.CombineSegment;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
@@ -46,39 +42,15 @@ public final class SQLNodeConverterEngine {
* @param statement SQL statement to be converted
* @return sqlNode converted SQL node
*/
- public static SqlNode convertToSQLNode(final SQLStatement statement) {
+ public static SqlNode convert(final SQLStatement statement) {
if (statement instanceof SelectStatement) {
- SqlNode sqlNode = new
SelectStatementConverter().convertToSQLNode((SelectStatement) statement);
+ SqlNode sqlNode = new
SelectStatementConverter().convert((SelectStatement) statement);
for (CombineSegment each : ((SelectStatement)
statement).getCombines()) {
- SqlNode combineSqlNode =
convertToSQLNode(each.getSelectStatement());
+ SqlNode combineSqlNode = convert(each.getSelectStatement());
return new
SqlBasicCall(CombineOperatorConverter.convert(each.getCombineType()),
Arrays.asList(sqlNode, combineSqlNode), SqlParserPos.ZERO);
}
return sqlNode;
}
throw new UnsupportedOperationException("Unsupported SQL node
conversion.");
}
-
- /**
- * Convert SQL node to SQL statement.
- *
- * @param sqlNode sqlNode converted SQL node
- * @return SQL statement to be converted
- */
- public static SQLStatement convertToSQLStatement(final SqlNode sqlNode) {
- if (sqlNode instanceof SqlOrderBy || sqlNode instanceof SqlSelect) {
- return new
SelectStatementConverter().convertToSQLStatement(sqlNode);
- }
- if (sqlNode instanceof SqlBasicCall && null != ((SqlBasicCall)
sqlNode).getOperator() && SqlKind.UNION == ((SqlBasicCall)
sqlNode).getOperator().getKind()) {
- SqlNode leftSqlNode = ((SqlBasicCall)
sqlNode).getOperandList().get(0);
- SqlNode rightSqlNode = ((SqlBasicCall)
sqlNode).getOperandList().get(1);
- SelectStatement leftSelectStatement = (SelectStatement)
convertToSQLStatement(leftSqlNode);
- SelectStatement rightSelectStatement = (SelectStatement)
convertToSQLStatement(rightSqlNode);
- CombineType combineType =
CombineOperatorConverter.convert(((SqlBasicCall) sqlNode).getOperator());
- int startIndex = rightSqlNode.getParserPosition().getColumnNum() -
(((SqlBasicCall) sqlNode).getOperator().getName() + " ").length() - 1;
- int stopIndex = rightSqlNode.getParserPosition().getEndColumnNum()
- 1;
- leftSelectStatement.getCombines().add(new
CombineSegment(startIndex, stopIndex, combineType, rightSelectStatement));
- return leftSelectStatement;
- }
- throw new UnsupportedOperationException("Unsupported SQL statement
conversion.");
- }
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/SQLSegmentConverter.java
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/SQLSegmentConverter.java
index ef292004fc5..ed1ec4764dc 100644
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/SQLSegmentConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/SQLSegmentConverter.java
@@ -31,38 +31,10 @@ import java.util.Optional;
public interface SQLSegmentConverter<S extends SQLSegment, T extends SqlNode> {
/**
- * Convert SQL segment to SQL node.
+ * Convert.
*
* @param segment SQL segment be to converted
* @return converted SQL node
*/
- Optional<T> convertToSQLNode(S segment);
-
- /**
- * Convert SQL node to SQL segment.
- *
- * @param sqlNode SQL node be to converted
- * @return converted SQL segment
- */
- Optional<S> convertToSQLSegment(T sqlNode);
-
- /**
- * Get start index.
- *
- * @param sqlNode SQL node
- * @return start index
- */
- default int getStartIndex(SqlNode sqlNode) {
- return sqlNode.getParserPosition().getColumnNum() - 1;
- }
-
- /**
- * Get stop index.
- *
- * @param sqlNode SQL node
- * @return stop index
- */
- default int getStopIndex(SqlNode sqlNode) {
- return sqlNode.getParserPosition().getEndColumnNum() - 1;
- }
+ Optional<T> convert(S segment);
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/ExpressionConverter.java
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/ExpressionConverter.java
index bf96b9ea88b..59e63d93b4a 100644
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/ExpressionConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/ExpressionConverter.java
@@ -17,22 +17,7 @@
package
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.expression;
-import org.apache.calcite.sql.SqlBasicCall;
-import org.apache.calcite.sql.SqlBinaryOperator;
-import org.apache.calcite.sql.SqlDynamicParam;
-import org.apache.calcite.sql.SqlIdentifier;
-import org.apache.calcite.sql.SqlLiteral;
import org.apache.calcite.sql.SqlNode;
-import org.apache.calcite.sql.SqlNodeList;
-import org.apache.calcite.sql.SqlOperator;
-import org.apache.calcite.sql.SqlSelect;
-import org.apache.calcite.sql.SqlUnresolvedFunction;
-import org.apache.calcite.sql.fun.SqlBetweenOperator;
-import org.apache.calcite.sql.fun.SqlCastFunction;
-import org.apache.calcite.sql.fun.SqlInOperator;
-import org.apache.calcite.sql.fun.SqlLikeOperator;
-import org.apache.calcite.sql.fun.SqlPositionFunction;
-import org.apache.calcite.sql.fun.SqlStdOperatorTable;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.SQLSegmentConverter;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.expression.impl.BetweenExpressionConverter;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.expression.impl.BinaryOperationExpressionConverter;
@@ -45,7 +30,6 @@ import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.ex
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.expression.impl.ParameterMarkerExpressionConverter;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.expression.impl.SubqueryExpressionConverter;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.projection.impl.AggregationProjectionConverter;
-import
org.apache.shardingsphere.sql.parser.sql.common.constant.AggregationType;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BetweenExpression;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BinaryOperationExpression;
@@ -68,91 +52,36 @@ import java.util.Optional;
public final class ExpressionConverter implements
SQLSegmentConverter<ExpressionSegment, SqlNode> {
@Override
- public Optional<SqlNode> convertToSQLNode(final ExpressionSegment segment)
{
+ public Optional<SqlNode> convert(final ExpressionSegment segment) {
if (null == segment) {
return Optional.empty();
}
if (segment instanceof LiteralExpressionSegment) {
- return new
LiteralExpressionConverter().convertToSQLNode((LiteralExpressionSegment)
segment);
+ return new
LiteralExpressionConverter().convert((LiteralExpressionSegment) segment);
} else if (segment instanceof CommonExpressionSegment) {
// TODO
throw new UnsupportedOperationException("unsupported
CommonExpressionSegment");
} else if (segment instanceof ListExpression) {
- return new
ListExpressionConverter().convertToSQLNode((ListExpression)
segment).map(optional -> optional);
+ return new ListExpressionConverter().convert((ListExpression)
segment).map(optional -> optional);
} else if (segment instanceof BinaryOperationExpression) {
- return new
BinaryOperationExpressionConverter().convertToSQLNode((BinaryOperationExpression)
segment).map(optional -> optional);
+ return new
BinaryOperationExpressionConverter().convert((BinaryOperationExpression)
segment).map(optional -> optional);
} else if (segment instanceof ColumnSegment) {
- return new ColumnConverter().convertToSQLNode((ColumnSegment)
segment).map(optional -> optional);
+ return new ColumnConverter().convert((ColumnSegment)
segment).map(optional -> optional);
} else if (segment instanceof ExistsSubqueryExpression) {
- return new
ExistsSubqueryExpressionConverter().convertToSQLNode((ExistsSubqueryExpression)
segment).map(optional -> optional);
+ return new
ExistsSubqueryExpressionConverter().convert((ExistsSubqueryExpression)
segment).map(optional -> optional);
} else if (segment instanceof SubqueryExpressionSegment) {
- return new
SubqueryExpressionConverter().convertToSQLNode((SubqueryExpressionSegment)
segment);
+ return new
SubqueryExpressionConverter().convert((SubqueryExpressionSegment) segment);
} else if (segment instanceof InExpression) {
- return new InExpressionConverter().convertToSQLNode((InExpression)
segment).map(optional -> optional);
+ return new InExpressionConverter().convert((InExpression)
segment).map(optional -> optional);
} else if (segment instanceof BetweenExpression) {
- return new
BetweenExpressionConverter().convertToSQLNode((BetweenExpression)
segment).map(optional -> optional);
+ return new
BetweenExpressionConverter().convert((BetweenExpression) segment).map(optional
-> optional);
} else if (segment instanceof ParameterMarkerExpressionSegment) {
- return new
ParameterMarkerExpressionConverter().convertToSQLNode((ParameterMarkerExpressionSegment)
segment).map(optional -> optional);
+ return new
ParameterMarkerExpressionConverter().convert((ParameterMarkerExpressionSegment)
segment).map(optional -> optional);
} else if (segment instanceof FunctionSegment) {
- return new FunctionConverter().convertToSQLNode((FunctionSegment)
segment).map(optional -> optional);
+ return new FunctionConverter().convert((FunctionSegment)
segment).map(optional -> optional);
} else if (segment instanceof AggregationProjectionSegment) {
- return new
AggregationProjectionConverter().convertToSQLNode((AggregationProjectionSegment)
segment).map(optional -> optional);
+ return new
AggregationProjectionConverter().convert((AggregationProjectionSegment)
segment).map(optional -> optional);
}
throw new UnsupportedOperationException("unsupported TableSegment
type: " + segment.getClass());
}
-
- @Override
- public Optional<ExpressionSegment> convertToSQLSegment(final SqlNode
sqlNode) {
- if (null == sqlNode) {
- return Optional.empty();
- }
- if (sqlNode instanceof SqlIdentifier) {
- return new ColumnConverter().convertToSQLSegment((SqlIdentifier)
sqlNode).map(optional -> optional);
- }
- if (sqlNode instanceof SqlBasicCall) {
- return convertToSQLSegment((SqlBasicCall) sqlNode, false);
- }
- if (sqlNode instanceof SqlSelect) {
- return new
SubqueryExpressionConverter().convertToSQLSegment(sqlNode).map(optional ->
optional);
- }
- if (sqlNode instanceof SqlLiteral) {
- return new
LiteralExpressionConverter().convertToSQLSegment(sqlNode).map(optional ->
optional);
- }
- if (sqlNode instanceof SqlDynamicParam) {
- return new
ParameterMarkerExpressionConverter().convertToSQLSegment(sqlNode).map(optional
-> optional);
- }
- if (sqlNode instanceof SqlNodeList) {
- return new
ListExpressionConverter().convertToSQLSegment(sqlNode).map(optional ->
optional);
- }
- return Optional.empty();
- }
-
- private Optional<ExpressionSegment> convertToSQLSegment(final SqlBasicCall
sqlBasicCall, final boolean not) {
- if (null == sqlBasicCall) {
- return Optional.empty();
- }
- SqlOperator operator = sqlBasicCall.getOperator();
- if (operator.getName().equals(SqlStdOperatorTable.NOT.getName()) &&
sqlBasicCall.getOperandList().get(0) instanceof SqlBasicCall) {
- return convertToSQLSegment((SqlBasicCall)
sqlBasicCall.getOperandList().get(0), true);
- }
- if (operator instanceof SqlInOperator) {
- return new
InExpressionConverter(not).convertToSQLSegment(sqlBasicCall).map(optional ->
optional);
- }
- if (operator instanceof SqlBetweenOperator) {
- return new
BetweenExpressionConverter(not).convertToSQLSegment(sqlBasicCall).map(optional
-> optional);
- }
- if (operator.getName().equals(SqlStdOperatorTable.EXISTS.getName())) {
- return new
ExistsSubqueryExpressionConverter(not).convertToSQLSegment(sqlBasicCall).map(optional
-> optional);
- }
- if (operator instanceof SqlBinaryOperator || operator instanceof
SqlLikeOperator) {
- return new
BinaryOperationExpressionConverter().convertToSQLSegment(sqlBasicCall).map(optional
-> optional);
- }
- if (AggregationType.isAggregationType(operator.getName())) {
- return new
AggregationProjectionConverter().convertToSQLSegment(sqlBasicCall).map(optional
-> optional);
- }
- if (operator instanceof SqlPositionFunction || operator instanceof
SqlCastFunction || operator instanceof SqlUnresolvedFunction) {
- return new
FunctionConverter().convertToSQLSegment(sqlBasicCall).map(optional -> optional);
- }
- return Optional.empty();
- }
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/BetweenExpressionConverter.java
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/BetweenExpressionConverter.java
index ece631faab1..08f74780337 100644
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/BetweenExpressionConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/BetweenExpressionConverter.java
@@ -25,7 +25,6 @@ import org.apache.calcite.sql.parser.SqlParserPos;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.SQLSegmentConverter;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.expression.ExpressionConverter;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BetweenExpression;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionSegment;
import java.util.ArrayList;
import java.util.Collection;
@@ -46,28 +45,16 @@ public final class BetweenExpressionConverter implements
SQLSegmentConverter<Bet
}
@Override
- public Optional<SqlBasicCall> convertToSQLNode(final BetweenExpression
expression) {
+ public Optional<SqlBasicCall> convert(final BetweenExpression expression) {
if (null == expression) {
return Optional.empty();
}
Collection<SqlNode> sqlNodes = new LinkedList<>();
ExpressionConverter expressionConverter = new ExpressionConverter();
-
expressionConverter.convertToSQLNode(expression.getLeft()).ifPresent(sqlNodes::add);
-
expressionConverter.convertToSQLNode(expression.getBetweenExpr()).ifPresent(sqlNodes::add);
-
expressionConverter.convertToSQLNode(expression.getAndExpr()).ifPresent(sqlNodes::add);
+
expressionConverter.convert(expression.getLeft()).ifPresent(sqlNodes::add);
+
expressionConverter.convert(expression.getBetweenExpr()).ifPresent(sqlNodes::add);
+
expressionConverter.convert(expression.getAndExpr()).ifPresent(sqlNodes::add);
SqlBasicCall sqlNode = new SqlBasicCall(SqlStdOperatorTable.BETWEEN,
new ArrayList<>(sqlNodes), SqlParserPos.ZERO);
return expression.isNot() ? Optional.of(new
SqlBasicCall(SqlStdOperatorTable.NOT, Collections.singletonList(sqlNode),
SqlParserPos.ZERO)) : Optional.of(sqlNode);
}
-
- @Override
- public Optional<BetweenExpression> convertToSQLSegment(final SqlBasicCall
sqlBasicCall) {
- if (null == sqlBasicCall) {
- return Optional.empty();
- }
- ExpressionConverter expressionConverter = new ExpressionConverter();
- ExpressionSegment between =
expressionConverter.convertToSQLSegment(sqlBasicCall.getOperandList().get(1)).orElseThrow(IllegalStateException::new);
- ExpressionSegment and =
expressionConverter.convertToSQLSegment(sqlBasicCall.getOperandList().get(2)).orElseThrow(IllegalStateException::new);
- ExpressionSegment left =
expressionConverter.convertToSQLSegment(sqlBasicCall.getOperandList().get(0)).orElseThrow(IllegalStateException::new);
- return Optional.of(new BetweenExpression(left.getStartIndex(),
and.getStopIndex(), left, between, and, not));
- }
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/BinaryOperationExpressionConverter.java
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/BinaryOperationExpressionConverter.java
index a1e8c57df82..8d646f9acf4 100644
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/BinaryOperationExpressionConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/BinaryOperationExpressionConverter.java
@@ -19,7 +19,6 @@ package
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.e
import com.google.common.base.Preconditions;
import org.apache.calcite.sql.SqlBasicCall;
-import org.apache.calcite.sql.SqlKind;
import org.apache.calcite.sql.SqlNode;
import org.apache.calcite.sql.SqlOperator;
import org.apache.calcite.sql.fun.SqlStdOperatorTable;
@@ -27,8 +26,6 @@ import org.apache.calcite.sql.parser.SqlParserPos;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.SQLSegmentConverter;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.expression.ExpressionConverter;
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.ListExpression;
import java.util.Arrays;
import java.util.Map;
@@ -72,28 +69,13 @@ public final class BinaryOperationExpressionConverter
implements SQLSegmentConve
}
@Override
- public Optional<SqlBasicCall> convertToSQLNode(final
BinaryOperationExpression segment) {
+ public Optional<SqlBasicCall> convert(final BinaryOperationExpression
segment) {
SqlOperator operator = convertOperator(segment.getOperator());
- SqlNode left = new
ExpressionConverter().convertToSQLNode(segment.getLeft()).orElseThrow(IllegalStateException::new);
- SqlNode right = new
ExpressionConverter().convertToSQLNode(segment.getRight()).orElseThrow(IllegalStateException::new);
+ SqlNode left = new
ExpressionConverter().convert(segment.getLeft()).orElseThrow(IllegalStateException::new);
+ SqlNode right = new
ExpressionConverter().convert(segment.getRight()).orElseThrow(IllegalStateException::new);
return Optional.of(new SqlBasicCall(operator, Arrays.asList(left,
right), SqlParserPos.ZERO));
}
- @Override
- public Optional<BinaryOperationExpression> convertToSQLSegment(final
SqlBasicCall sqlBasicCall) {
- ExpressionConverter expressionConverter = new ExpressionConverter();
- ExpressionSegment left =
expressionConverter.convertToSQLSegment(sqlBasicCall.getOperandList().get(0)).orElseThrow(IllegalStateException::new);
- ExpressionSegment right =
expressionConverter.convertToSQLSegment(sqlBasicCall.getOperandList().get(1)).orElseThrow(IllegalStateException::new);
- String operator = sqlBasicCall.getOperator().getName();
- String text = sqlBasicCall.toString();
- if (SqlKind.LIKE == sqlBasicCall.getOperator().getKind()) {
- ListExpression listExpression = new
ListExpression(getStartIndex(sqlBasicCall.getOperandList().get(1)),
getStopIndex(sqlBasicCall.getOperandList().get(1)));
- listExpression.getItems().add(right);
- return Optional.of(new
BinaryOperationExpression(getStartIndex(sqlBasicCall),
getStopIndex(sqlBasicCall), left, listExpression, operator, text));
- }
- return Optional.of(new
BinaryOperationExpression(getStartIndex(sqlBasicCall),
getStopIndex(sqlBasicCall), left, right, operator, text));
- }
-
private SqlOperator convertOperator(final String operator) {
Preconditions.checkState(REGISTRY.containsKey(operator), "Unsupported
SQL operator: `%s`", operator);
return REGISTRY.get(operator);
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/ColumnConverter.java
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/ColumnConverter.java
index 9a665ab85d6..e57abc90bfb 100644
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/ColumnConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/ColumnConverter.java
@@ -17,13 +17,11 @@
package
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.expression.impl;
-import com.google.common.collect.ImmutableList;
import org.apache.calcite.sql.SqlIdentifier;
import org.apache.calcite.sql.parser.SqlParserPos;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.SQLSegmentConverter;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.OwnerSegment;
-import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
import java.util.Arrays;
import java.util.Optional;
@@ -34,26 +32,11 @@ import java.util.Optional;
public final class ColumnConverter implements
SQLSegmentConverter<ColumnSegment, SqlIdentifier> {
@Override
- public Optional<SqlIdentifier> convertToSQLNode(final ColumnSegment
segment) {
+ public Optional<SqlIdentifier> convert(final ColumnSegment segment) {
Optional<OwnerSegment> owner = segment.getOwner();
String columnName = segment.getIdentifier().getValue();
SqlIdentifier sqlIdentifier = owner.map(optional -> new
SqlIdentifier(Arrays.asList(optional.getIdentifier().getValue(), columnName),
SqlParserPos.ZERO))
.orElseGet(() -> new SqlIdentifier(columnName,
SqlParserPos.ZERO));
return Optional.of(sqlIdentifier);
}
-
- @Override
- public Optional<ColumnSegment> convertToSQLSegment(final SqlIdentifier
sqlIdentifier) {
- if (null == sqlIdentifier) {
- return Optional.empty();
- }
- ImmutableList<String> names = sqlIdentifier.names;
- if (1 == names.size()) {
- return Optional.of(new ColumnSegment(getStartIndex(sqlIdentifier),
getStopIndex(sqlIdentifier), new IdentifierValue(names.get(0))));
- }
- ColumnSegment result = new ColumnSegment(getStartIndex(sqlIdentifier),
getStopIndex(sqlIdentifier), new IdentifierValue(names.get(1)));
- SqlIdentifier owner = sqlIdentifier.getComponent(0);
- result.setOwner(new OwnerSegment(getStartIndex(owner),
getStopIndex(owner), new IdentifierValue(names.get(0))));
- return Optional.of(result);
- }
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/ExistsSubqueryExpressionConverter.java
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/ExistsSubqueryExpressionConverter.java
index 43165667b72..47c496d811e 100644
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/ExistsSubqueryExpressionConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/ExistsSubqueryExpressionConverter.java
@@ -19,14 +19,11 @@ package
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.e
import lombok.RequiredArgsConstructor;
import org.apache.calcite.sql.SqlBasicCall;
-import org.apache.calcite.sql.SqlNode;
import org.apache.calcite.sql.fun.SqlStdOperatorTable;
import org.apache.calcite.sql.parser.SqlParserPos;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.SQLSegmentConverter;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.statement.select.SelectStatementConverter;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExistsSubqueryExpression;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.subquery.SubquerySegment;
-import
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
import java.util.Collections;
import java.util.Optional;
@@ -44,25 +41,12 @@ public final class ExistsSubqueryExpressionConverter
implements SQLSegmentConver
}
@Override
- public Optional<SqlBasicCall> convertToSQLNode(final
ExistsSubqueryExpression expression) {
+ public Optional<SqlBasicCall> convert(final ExistsSubqueryExpression
expression) {
if (null == expression) {
return Optional.empty();
}
SqlBasicCall sqlNode = new SqlBasicCall(SqlStdOperatorTable.EXISTS,
- Collections.singletonList(new
SelectStatementConverter().convertToSQLNode(expression.getSubquery().getSelect())),
SqlParserPos.ZERO);
+ Collections.singletonList(new
SelectStatementConverter().convert(expression.getSubquery().getSelect())),
SqlParserPos.ZERO);
return expression.isNot() ? Optional.of(new
SqlBasicCall(SqlStdOperatorTable.NOT, Collections.singletonList(sqlNode),
SqlParserPos.ZERO)) : Optional.of(sqlNode);
}
-
- @Override
- public Optional<ExistsSubqueryExpression> convertToSQLSegment(final
SqlBasicCall sqlBasicCall) {
- if (null == sqlBasicCall) {
- return Optional.empty();
- }
- SqlNode subquerySqlNode = sqlBasicCall.getOperandList().get(0);
- SelectStatement selectStatement = new
SelectStatementConverter().convertToSQLStatement(subquerySqlNode);
- SubquerySegment subquery = new
SubquerySegment(getStartIndex(subquerySqlNode) - 1,
getStopIndex(subquerySqlNode) + 1, selectStatement);
- ExistsSubqueryExpression result = new
ExistsSubqueryExpression(getStartIndex(sqlBasicCall), subquery.getStopIndex(),
subquery);
- result.setNot(not);
- return Optional.of(result);
- }
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/FunctionConverter.java
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/FunctionConverter.java
index 744d3964009..386779de22b 100644
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/FunctionConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/FunctionConverter.java
@@ -18,20 +18,17 @@
package
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.expression.impl;
import org.apache.calcite.sql.SqlBasicCall;
-import org.apache.calcite.sql.SqlCharStringLiteral;
import org.apache.calcite.sql.SqlDataTypeSpec;
import org.apache.calcite.sql.SqlDynamicParam;
import org.apache.calcite.sql.SqlFunctionCategory;
import org.apache.calcite.sql.SqlIdentifier;
import org.apache.calcite.sql.SqlLiteral;
import org.apache.calcite.sql.SqlNode;
-import org.apache.calcite.sql.SqlOperator;
import org.apache.calcite.sql.SqlUnresolvedFunction;
import org.apache.calcite.sql.SqlUserDefinedTypeNameSpec;
import org.apache.calcite.sql.fun.SqlCastFunction;
import org.apache.calcite.sql.fun.SqlPositionFunction;
import org.apache.calcite.sql.parser.SqlParserPos;
-import
org.apache.shardingsphere.infra.federation.optimizer.converter.context.ConverterContextHolder;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.SQLSegmentConverter;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.FunctionSegment;
@@ -50,7 +47,7 @@ import java.util.Optional;
public final class FunctionConverter implements
SQLSegmentConverter<FunctionSegment, SqlBasicCall> {
@Override
- public Optional<SqlBasicCall> convertToSQLNode(final FunctionSegment
segment) {
+ public Optional<SqlBasicCall> convert(final FunctionSegment segment) {
if ("POSITION".equalsIgnoreCase(segment.getFunctionName())) {
return Optional.of(new SqlBasicCall(new SqlPositionFunction(),
getSqlNodes(segment.getParameters()), SqlParserPos.ZERO));
}
@@ -64,43 +61,6 @@ public final class FunctionConverter implements
SQLSegmentConverter<FunctionSegm
return Optional.empty();
}
- @Override
- public Optional<FunctionSegment> convertToSQLSegment(final SqlBasicCall
sqlBasicCall) {
- if (null == sqlBasicCall) {
- return Optional.empty();
- }
- FunctionSegment functionSegment = new
FunctionSegment(getStartIndex(sqlBasicCall), getStopIndex(sqlBasicCall),
sqlBasicCall.getOperator().getName(), getFunctionText(sqlBasicCall));
- functionSegment.getParameters().addAll(getParameters(sqlBasicCall));
- return Optional.of(functionSegment);
- }
-
- private String getFunctionText(final SqlBasicCall sqlBasicCall) {
- SqlOperator operator;
- if (null != (operator = sqlBasicCall.getOperator()) && (operator
instanceof SqlCastFunction || operator instanceof SqlUnresolvedFunction)) {
- return sqlBasicCall.toString().replace("`", "");
- }
- return sqlBasicCall.toString();
- }
-
- private List<ExpressionSegment> getParameters(final SqlBasicCall
sqlBasicCall) {
- List<ExpressionSegment> result = new ArrayList<>();
- sqlBasicCall.getOperandList().forEach(each -> {
- if (each instanceof SqlDataTypeSpec) {
- DataTypeSegment dataTypeSegment = new DataTypeSegment();
- dataTypeSegment.setStartIndex(getStartIndex(each));
- dataTypeSegment.setStopIndex(getStopIndex(each));
- dataTypeSegment.setDataTypeName(each.toString().replace("`",
""));
- result.add(dataTypeSegment);
- } else if (each instanceof SqlCharStringLiteral) {
- result.add(new LiteralExpressionSegment(getStartIndex(each),
getStopIndex(each), each.toString().replace("'", "")));
- } else if (each instanceof SqlDynamicParam) {
-
ConverterContextHolder.get().getParameterCount().getAndIncrement();
- result.add(new
ParameterMarkerExpressionSegment(getStartIndex(each), getStopIndex(each),
((SqlDynamicParam) each).getIndex()));
- }
- });
- return result;
- }
-
private List<SqlNode> getSqlNodes(final Collection<ExpressionSegment>
sqlSegments) {
List<SqlNode> sqlNodes = new ArrayList<>();
sqlSegments.forEach(each -> {
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/InExpressionConverter.java
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/InExpressionConverter.java
index c583b9e518a..963d1e7fcdc 100644
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/InExpressionConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/InExpressionConverter.java
@@ -17,16 +17,13 @@
package
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.expression.impl;
-import lombok.RequiredArgsConstructor;
import org.apache.calcite.sql.SqlBasicCall;
import org.apache.calcite.sql.SqlNode;
import org.apache.calcite.sql.SqlNodeList;
-import org.apache.calcite.sql.SqlSelect;
import org.apache.calcite.sql.fun.SqlStdOperatorTable;
import org.apache.calcite.sql.parser.SqlParserPos;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.SQLSegmentConverter;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.expression.ExpressionConverter;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.InExpression;
import java.util.ArrayList;
@@ -38,24 +35,17 @@ import java.util.Optional;
/**
* In expression converter.
*/
-@RequiredArgsConstructor
public final class InExpressionConverter implements
SQLSegmentConverter<InExpression, SqlBasicCall> {
- private final boolean not;
-
- public InExpressionConverter() {
- not = false;
- }
-
@Override
- public Optional<SqlBasicCall> convertToSQLNode(final InExpression
expression) {
+ public Optional<SqlBasicCall> convert(final InExpression expression) {
if (null == expression) {
return Optional.empty();
}
Collection<SqlNode> sqlNodes = new LinkedList<>();
ExpressionConverter expressionConverter = new ExpressionConverter();
-
expressionConverter.convertToSQLNode(expression.getLeft()).ifPresent(sqlNodes::add);
-
expressionConverter.convertToSQLNode(expression.getRight()).ifPresent(optional
-> {
+
expressionConverter.convert(expression.getLeft()).ifPresent(sqlNodes::add);
+ expressionConverter.convert(expression.getRight()).ifPresent(optional
-> {
if (optional instanceof SqlBasicCall) {
sqlNodes.add(new SqlNodeList(((SqlBasicCall)
optional).getOperandList(), SqlParserPos.ZERO));
} else {
@@ -65,16 +55,4 @@ public final class InExpressionConverter implements
SQLSegmentConverter<InExpres
SqlBasicCall sqlNode = new SqlBasicCall(SqlStdOperatorTable.IN, new
ArrayList<>(sqlNodes), SqlParserPos.ZERO);
return expression.isNot() ? Optional.of(new
SqlBasicCall(SqlStdOperatorTable.NOT, Collections.singletonList(sqlNode),
SqlParserPos.ZERO)) : Optional.of(sqlNode);
}
-
- @Override
- public Optional<InExpression> convertToSQLSegment(final SqlBasicCall
sqlBasicCall) {
- if (null == sqlBasicCall) {
- return Optional.empty();
- }
- ExpressionConverter expressionConverter = new ExpressionConverter();
- ExpressionSegment left =
expressionConverter.convertToSQLSegment(sqlBasicCall.getOperandList().get(0)).orElseThrow(IllegalStateException::new);
- ExpressionSegment right =
expressionConverter.convertToSQLSegment(sqlBasicCall.getOperandList().get(1)).orElseThrow(IllegalStateException::new);
- return Optional.of(new InExpression(getStartIndex(sqlBasicCall),
- sqlBasicCall.getOperandList().get(1) instanceof SqlSelect ?
getStopIndex(sqlBasicCall) + 1 : getStopIndex(sqlBasicCall), left, right, not));
- }
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/ListExpressionConverter.java
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/ListExpressionConverter.java
index 08c62746518..c597d6fd271 100644
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/ListExpressionConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/ListExpressionConverter.java
@@ -19,7 +19,6 @@ package
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.e
import org.apache.calcite.sql.SqlBasicCall;
import org.apache.calcite.sql.SqlNode;
-import org.apache.calcite.sql.SqlNodeList;
import org.apache.calcite.sql.fun.SqlStdOperatorTable;
import org.apache.calcite.sql.parser.SqlParserPos;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.SQLSegmentConverter;
@@ -28,7 +27,6 @@ import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.Expressi
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ListExpression;
import java.util.Arrays;
-import java.util.List;
import java.util.Optional;
/**
@@ -37,10 +35,10 @@ import java.util.Optional;
public final class ListExpressionConverter implements
SQLSegmentConverter<ListExpression, SqlNode> {
@Override
- public Optional<SqlNode> convertToSQLNode(final ListExpression segment) {
+ public Optional<SqlNode> convert(final ListExpression segment) {
SqlNode left = null;
for (ExpressionSegment each : segment.getItems()) {
- Optional<SqlNode> sqlNode = new
ExpressionConverter().convertToSQLNode(each);
+ Optional<SqlNode> sqlNode = new
ExpressionConverter().convert(each);
if (!sqlNode.isPresent()) {
continue;
}
@@ -52,18 +50,4 @@ public final class ListExpressionConverter implements
SQLSegmentConverter<ListEx
}
return Optional.ofNullable(left);
}
-
- @Override
- public Optional<ListExpression> convertToSQLSegment(final SqlNode sqlNode)
{
- if (null == sqlNode) {
- return Optional.empty();
- }
- if (sqlNode instanceof SqlNodeList) {
- List<SqlNode> items = ((SqlNodeList) sqlNode).getList();
- ListExpression result = new ListExpression(getStartIndex(sqlNode),
getStopIndex(sqlNode));
- items.forEach(each -> new
ExpressionConverter().convertToSQLSegment(each).ifPresent(result.getItems()::add));
- return Optional.of(result);
- }
- return Optional.empty();
- }
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/LiteralExpressionConverter.java
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/LiteralExpressionConverter.java
index b1555fe2fab..26c65716735 100644
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/LiteralExpressionConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/LiteralExpressionConverter.java
@@ -22,7 +22,6 @@ import org.apache.calcite.sql.SqlNode;
import org.apache.calcite.sql.parser.SqlParserPos;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.SQLSegmentConverter;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.LiteralExpressionSegment;
-import org.apache.shardingsphere.sql.parser.sql.common.util.SQLUtil;
import java.util.Optional;
@@ -32,7 +31,7 @@ import java.util.Optional;
public final class LiteralExpressionConverter implements
SQLSegmentConverter<LiteralExpressionSegment, SqlNode> {
@Override
- public Optional<SqlNode> convertToSQLNode(final LiteralExpressionSegment
segment) {
+ public Optional<SqlNode> convert(final LiteralExpressionSegment segment) {
if (Integer.class == segment.getLiterals().getClass()) {
return
Optional.of(SqlLiteral.createExactNumeric(String.valueOf(segment.getLiterals()),
SqlParserPos.ZERO));
}
@@ -41,13 +40,4 @@ public final class LiteralExpressionConverter implements
SQLSegmentConverter<Lit
}
return Optional.empty();
}
-
- @Override
- public Optional<LiteralExpressionSegment> convertToSQLSegment(final
SqlNode sqlNode) {
- if (sqlNode instanceof SqlLiteral) {
- SqlLiteral sqlLiteral = (SqlLiteral) sqlNode;
- return Optional.of(new
LiteralExpressionSegment(getStartIndex(sqlLiteral), getStopIndex(sqlLiteral),
SQLUtil.getExactlyValue(sqlLiteral.toValue())));
- }
- return Optional.empty();
- }
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/ParameterMarkerExpressionConverter.java
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/ParameterMarkerExpressionConverter.java
index d3eea124388..166cd9e9c72 100644
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/ParameterMarkerExpressionConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/ParameterMarkerExpressionConverter.java
@@ -20,7 +20,6 @@ package
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.e
import org.apache.calcite.sql.SqlDynamicParam;
import org.apache.calcite.sql.SqlNode;
import org.apache.calcite.sql.parser.SqlParserPos;
-import
org.apache.shardingsphere.infra.federation.optimizer.converter.context.ConverterContextHolder;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.SQLSegmentConverter;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.ParameterMarkerExpressionSegment;
@@ -32,13 +31,7 @@ import java.util.Optional;
public final class ParameterMarkerExpressionConverter implements
SQLSegmentConverter<ParameterMarkerExpressionSegment, SqlNode> {
@Override
- public Optional<SqlNode> convertToSQLNode(final
ParameterMarkerExpressionSegment segment) {
+ public Optional<SqlNode> convert(final ParameterMarkerExpressionSegment
segment) {
return Optional.of(new
SqlDynamicParam(segment.getParameterMarkerIndex(), SqlParserPos.ZERO));
}
-
- @Override
- public Optional<ParameterMarkerExpressionSegment>
convertToSQLSegment(final SqlNode sqlNode) {
- ConverterContextHolder.get().getParameterCount().getAndIncrement();
- return Optional.of(new
ParameterMarkerExpressionSegment(getStartIndex(sqlNode), getStopIndex(sqlNode),
((SqlDynamicParam) sqlNode).getIndex()));
- }
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/SubqueryExpressionConverter.java
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/SubqueryExpressionConverter.java
index 1aa478f1223..acf4e46d29e 100644
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/SubqueryExpressionConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/SubqueryExpressionConverter.java
@@ -21,8 +21,6 @@ import org.apache.calcite.sql.SqlNode;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.SQLSegmentConverter;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.statement.select.SelectStatementConverter;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.subquery.SubqueryExpressionSegment;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.subquery.SubquerySegment;
-import
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
import java.util.Optional;
@@ -32,22 +30,10 @@ import java.util.Optional;
public final class SubqueryExpressionConverter implements
SQLSegmentConverter<SubqueryExpressionSegment, SqlNode> {
@Override
- public Optional<SqlNode> convertToSQLNode(final SubqueryExpressionSegment
expression) {
+ public Optional<SqlNode> convert(final SubqueryExpressionSegment
expression) {
if (null == expression) {
return Optional.empty();
}
- return Optional.of(new
SelectStatementConverter().convertToSQLNode(expression.getSubquery().getSelect()));
- }
-
- @Override
- public Optional<SubqueryExpressionSegment> convertToSQLSegment(final
SqlNode sqlNode) {
- if (null == sqlNode) {
- return Optional.empty();
- }
- SelectStatement selectStatement = new
SelectStatementConverter().convertToSQLStatement(sqlNode);
- // FIXME subquery projection position returned by the CalCite parser
does not contain two brackets
- int startIndex = getStartIndex(sqlNode) - 1;
- int stopIndex = getStopIndex(sqlNode) + 1;
- return Optional.of(new SubqueryExpressionSegment(new
SubquerySegment(startIndex, stopIndex, selectStatement)));
+ return Optional.of(new
SelectStatementConverter().convert(expression.getSubquery().getSelect()));
}
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/from/TableConverter.java
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/from/TableConverter.java
index acd4c21082a..adf4d0a1828 100644
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/from/TableConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/from/TableConverter.java
@@ -17,12 +17,7 @@
package
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.from;
-import org.apache.calcite.sql.SqlBasicCall;
-import org.apache.calcite.sql.SqlIdentifier;
-import org.apache.calcite.sql.SqlJoin;
import org.apache.calcite.sql.SqlNode;
-import org.apache.calcite.sql.SqlOrderBy;
-import org.apache.calcite.sql.SqlSelect;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.SQLSegmentConverter;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.from.impl.JoinTableConverter;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.from.impl.SimpleTableConverter;
@@ -40,41 +35,17 @@ import java.util.Optional;
public final class TableConverter implements SQLSegmentConverter<TableSegment,
SqlNode> {
@Override
- public Optional<SqlNode> convertToSQLNode(final TableSegment segment) {
+ public Optional<SqlNode> convert(final TableSegment segment) {
if (null == segment) {
return Optional.empty();
}
if (segment instanceof SimpleTableSegment) {
- return new
SimpleTableConverter().convertToSQLNode((SimpleTableSegment) segment);
+ return new SimpleTableConverter().convert((SimpleTableSegment)
segment);
} else if (segment instanceof JoinTableSegment) {
- return new
JoinTableConverter().convertToSQLNode((JoinTableSegment) segment).map(optional
-> optional);
+ return new JoinTableConverter().convert((JoinTableSegment)
segment).map(optional -> optional);
} else if (segment instanceof SubqueryTableSegment) {
- return new
SubqueryTableConverter().convertToSQLNode((SubqueryTableSegment)
segment).map(optional -> optional);
+ return new SubqueryTableConverter().convert((SubqueryTableSegment)
segment).map(optional -> optional);
}
throw new UnsupportedOperationException("Unsupported segment type: " +
segment.getClass());
}
-
- @Override
- public Optional<TableSegment> convertToSQLSegment(final SqlNode sqlNode) {
- if (null == sqlNode) {
- return Optional.empty();
- }
- if (sqlNode instanceof SqlIdentifier) {
- return new
SimpleTableConverter().convertToSQLSegment(sqlNode).map(optional -> optional);
- } else if (sqlNode instanceof SqlJoin) {
- return new JoinTableConverter().convertToSQLSegment((SqlJoin)
sqlNode).map(optional -> optional);
- } else if (sqlNode instanceof SqlBasicCall) {
- Optional<SqlNode> existSubquery = ((SqlBasicCall)
sqlNode).getOperandList().stream().filter(this::containsSqlSelect).findAny();
- if (existSubquery.isPresent()) {
- return new
SubqueryTableConverter().convertToSQLSegment((SqlBasicCall)
sqlNode).map(optional -> optional);
- } else {
- return new
SimpleTableConverter().convertToSQLSegment(sqlNode).map(optional -> optional);
- }
- }
- throw new UnsupportedOperationException("Unsupported sql node type: "
+ sqlNode.getClass());
- }
-
- private boolean containsSqlSelect(final SqlNode sqlNode) {
- return sqlNode instanceof SqlSelect || sqlNode instanceof SqlOrderBy;
- }
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/from/impl/JoinTableConverter.java
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/from/impl/JoinTableConverter.java
index b7781025daa..89e81cbdfc5 100644
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/from/impl/JoinTableConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/from/impl/JoinTableConverter.java
@@ -27,7 +27,6 @@ import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.SQ
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.expression.ExpressionConverter;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.from.TableConverter;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.JoinTableSegment;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.TableSegment;
import java.util.Optional;
@@ -45,28 +44,15 @@ public final class JoinTableConverter implements
SQLSegmentConverter<JoinTableSe
private static final String JOIN_TYPE_FULL = "FULL";
@Override
- public Optional<SqlJoin> convertToSQLNode(final JoinTableSegment segment) {
- SqlNode left = new
TableConverter().convertToSQLNode(segment.getLeft()).orElseThrow(IllegalStateException::new);
- SqlNode right = new
TableConverter().convertToSQLNode(segment.getRight()).orElseThrow(IllegalStateException::new);
- Optional<SqlNode> condition = new
ExpressionConverter().convertToSQLNode(segment.getCondition());
+ public Optional<SqlJoin> convert(final JoinTableSegment segment) {
+ SqlNode left = new
TableConverter().convert(segment.getLeft()).orElseThrow(IllegalStateException::new);
+ SqlNode right = new
TableConverter().convert(segment.getRight()).orElseThrow(IllegalStateException::new);
+ Optional<SqlNode> condition = new
ExpressionConverter().convert(segment.getCondition());
SqlLiteral conditionType = condition.isPresent() ?
JoinConditionType.ON.symbol(SqlParserPos.ZERO) :
JoinConditionType.NONE.symbol(SqlParserPos.ZERO);
return Optional.of(
new SqlJoin(SqlParserPos.ZERO, left,
SqlLiteral.createBoolean(false, SqlParserPos.ZERO),
convertJoinType(segment.getJoinType()), right, conditionType,
condition.orElse(null)));
}
- @Override
- public Optional<JoinTableSegment> convertToSQLSegment(final SqlJoin
sqlJoin) {
- TableSegment left = new
TableConverter().convertToSQLSegment(sqlJoin.getLeft()).orElseThrow(IllegalStateException::new);
- TableSegment right = new
TableConverter().convertToSQLSegment(sqlJoin.getRight()).orElseThrow(IllegalStateException::new);
- JoinTableSegment result = new JoinTableSegment();
- result.setStartIndex(getStartIndex(sqlJoin));
- result.setStartIndex(getStopIndex(sqlJoin));
- result.setLeft(left);
- result.setRight(right);
- new
ExpressionConverter().convertToSQLSegment(sqlJoin.getCondition()).ifPresent(result::setCondition);
- return Optional.of(result);
- }
-
private SqlLiteral convertJoinType(final String joinType) {
if (null == joinType) {
return JoinType.COMMA.symbol(SqlParserPos.ZERO);
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/from/impl/SimpleTableConverter.java
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/from/impl/SimpleTableConverter.java
index c37928c5a23..cecde44acb4 100644
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/from/impl/SimpleTableConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/from/impl/SimpleTableConverter.java
@@ -23,11 +23,8 @@ import org.apache.calcite.sql.SqlNode;
import org.apache.calcite.sql.fun.SqlStdOperatorTable;
import org.apache.calcite.sql.parser.SqlParserPos;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.SQLSegmentConverter;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.AliasSegment;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.OwnerSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.TableNameSegment;
-import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
import java.util.ArrayList;
import java.util.Arrays;
@@ -40,7 +37,7 @@ import java.util.Optional;
public final class SimpleTableConverter implements
SQLSegmentConverter<SimpleTableSegment, SqlNode> {
@Override
- public Optional<SqlNode> convertToSQLNode(final SimpleTableSegment
segment) {
+ public Optional<SqlNode> convert(final SimpleTableSegment segment) {
TableNameSegment tableName = segment.getTableName();
List<String> names = new ArrayList<>();
if (segment.getOwner().isPresent()) {
@@ -54,27 +51,4 @@ public final class SimpleTableConverter implements
SQLSegmentConverter<SimpleTab
}
return Optional.of(tableNameSQLNode);
}
-
- @Override
- public Optional<SimpleTableSegment> convertToSQLSegment(final SqlNode
sqlNode) {
- if (sqlNode instanceof SqlBasicCall) {
- SqlBasicCall sqlBasicCall = (SqlBasicCall) sqlNode;
- if (sqlBasicCall.getOperator().equals(SqlStdOperatorTable.AS)) {
- String name = sqlBasicCall.getOperandList().get(0).toString();
- SimpleTableSegment tableSegment = new SimpleTableSegment(new
TableNameSegment(getStartIndex(sqlNode), getStopIndex(sqlNode), new
IdentifierValue(name)));
- SqlNode alias = sqlBasicCall.getOperandList().get(1);
- tableSegment.setAlias(new AliasSegment(getStartIndex(alias),
getStopIndex(alias), new IdentifierValue(alias.toString())));
- return Optional.of(tableSegment);
- }
- }
- if (sqlNode instanceof SqlIdentifier) {
- List<String> names = ((SqlIdentifier) sqlNode).names;
- SimpleTableSegment simpleTableSegment = new SimpleTableSegment(new
TableNameSegment(getStartIndex(sqlNode), getStopIndex(sqlNode), new
IdentifierValue(names.get(names.size() - 1))));
- if (2 == names.size()) {
- simpleTableSegment.setOwner(new
OwnerSegment(getStartIndex(sqlNode), getStartIndex(sqlNode) +
names.get(0).length() - 1, new IdentifierValue(names.get(0))));
- }
- return Optional.of(simpleTableSegment);
- }
- return Optional.empty();
- }
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/from/impl/SubqueryTableConverter.java
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/from/impl/SubqueryTableConverter.java
index 2342fe9db62..e224c96722f 100644
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/from/impl/SubqueryTableConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/from/impl/SubqueryTableConverter.java
@@ -24,11 +24,7 @@ import org.apache.calcite.sql.fun.SqlStdOperatorTable;
import org.apache.calcite.sql.parser.SqlParserPos;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.SQLSegmentConverter;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.statement.select.SelectStatementConverter;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.subquery.SubquerySegment;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.AliasSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SubqueryTableSegment;
-import
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
-import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
import java.util.ArrayList;
import java.util.Collection;
@@ -41,25 +37,13 @@ import java.util.Optional;
public final class SubqueryTableConverter implements
SQLSegmentConverter<SubqueryTableSegment, SqlBasicCall> {
@Override
- public Optional<SqlBasicCall> convertToSQLNode(final SubqueryTableSegment
segment) {
+ public Optional<SqlBasicCall> convert(final SubqueryTableSegment segment) {
if (null == segment) {
return Optional.empty();
}
Collection<SqlNode> sqlNodes = new LinkedList<>();
- sqlNodes.add(new
SelectStatementConverter().convertToSQLNode(segment.getSubquery().getSelect()));
+ sqlNodes.add(new
SelectStatementConverter().convert(segment.getSubquery().getSelect()));
segment.getAlias().ifPresent(optional -> sqlNodes.add(new
SqlIdentifier(optional, SqlParserPos.ZERO)));
return Optional.of(new SqlBasicCall(SqlStdOperatorTable.AS, new
ArrayList<>(sqlNodes), SqlParserPos.ZERO));
}
-
- @Override
- public Optional<SubqueryTableSegment> convertToSQLSegment(final
SqlBasicCall sqlBasicCall) {
- SqlNode select = sqlBasicCall.getOperandList().get(0);
- SelectStatement selectStatement = new
SelectStatementConverter().convertToSQLStatement(select);
- SubqueryTableSegment result = new SubqueryTableSegment(new
SubquerySegment(getStartIndex(sqlBasicCall), getStopIndex(sqlBasicCall),
selectStatement));
- if (sqlBasicCall.getOperator().equals(SqlStdOperatorTable.AS)) {
- SqlNode alias = sqlBasicCall.getOperandList().get(1);
- result.setAlias(new AliasSegment(getStartIndex(alias),
getStopIndex(alias), new IdentifierValue(alias.toString())));
- }
- return Optional.of(result);
- }
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/groupby/GroupByConverter.java
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/groupby/GroupByConverter.java
index 2712e7e7ce9..7c154d40c80 100644
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/groupby/GroupByConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/groupby/GroupByConverter.java
@@ -22,9 +22,7 @@ import org.apache.calcite.sql.parser.SqlParserPos;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.SQLSegmentConverter;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.orderby.item.OrderByItemConverterUtil;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.order.GroupBySegment;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.order.item.OrderByItemSegment;
-import java.util.Collection;
import java.util.Optional;
/**
@@ -33,18 +31,9 @@ import java.util.Optional;
public final class GroupByConverter implements
SQLSegmentConverter<GroupBySegment, SqlNodeList> {
@Override
- public Optional<SqlNodeList> convertToSQLNode(final GroupBySegment
segment) {
+ public Optional<SqlNodeList> convert(final GroupBySegment segment) {
return null == segment || segment.getGroupByItems().isEmpty()
? Optional.empty()
- : Optional.of(new
SqlNodeList(OrderByItemConverterUtil.convertToSQLNode(segment.getGroupByItems()),
SqlParserPos.ZERO));
- }
-
- @Override
- public Optional<GroupBySegment> convertToSQLSegment(final SqlNodeList
sqlNodeList) {
- if (null == sqlNodeList || 0 == sqlNodeList.size()) {
- return Optional.empty();
- }
- Collection<OrderByItemSegment> orderByItems =
OrderByItemConverterUtil.convertToSQLSegment(sqlNodeList);
- return Optional.of(new GroupBySegment(getStartIndex(sqlNodeList),
getStopIndex(sqlNodeList), orderByItems));
+ : Optional.of(new
SqlNodeList(OrderByItemConverterUtil.convert(segment.getGroupByItems()),
SqlParserPos.ZERO));
}
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/groupby/HavingConverter.java
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/groupby/HavingConverter.java
index 76644d2e796..473accca076 100644
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/groupby/HavingConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/groupby/HavingConverter.java
@@ -32,16 +32,7 @@ public final class HavingConverter implements
SQLSegmentConverter<HavingSegment,
private static final int HAVING_SEGMENT_LENGTH = 7;
@Override
- public Optional<SqlNode> convertToSQLNode(final HavingSegment segment) {
- return null == segment ? Optional.empty() : new
ExpressionConverter().convertToSQLNode(segment.getExpr());
- }
-
- @Override
- public Optional<HavingSegment> convertToSQLSegment(final SqlNode sqlNode) {
- if (null == sqlNode) {
- return Optional.empty();
- }
- // FIXME Now sqlNode position returned by the calcite parser does not
contain HAVING and requires manual calculation
- return new
ExpressionConverter().convertToSQLSegment(sqlNode).map(optional -> new
HavingSegment(getStartIndex(sqlNode) - HAVING_SEGMENT_LENGTH,
getStopIndex(sqlNode), optional));
+ public Optional<SqlNode> convert(final HavingSegment segment) {
+ return null == segment ? Optional.empty() : new
ExpressionConverter().convert(segment.getExpr());
}
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/limit/PaginationValueSQLConverter.java
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/limit/PaginationValueSQLConverter.java
index 3cd125af31b..ae17bee9435 100644
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/limit/PaginationValueSQLConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/limit/PaginationValueSQLConverter.java
@@ -21,13 +21,11 @@ import lombok.RequiredArgsConstructor;
import org.apache.calcite.sql.SqlDynamicParam;
import org.apache.calcite.sql.SqlLiteral;
import org.apache.calcite.sql.SqlNode;
-import org.apache.calcite.sql.SqlNumericLiteral;
import org.apache.calcite.sql.parser.SqlParserPos;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.context.ConverterContext;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.SQLSegmentConverter;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.pagination.NumberLiteralPaginationValueSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.pagination.PaginationValueSegment;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.pagination.limit.NumberLiteralLimitValueSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.pagination.limit.ParameterMarkerLimitValueSegment;
import java.util.Optional;
@@ -41,7 +39,7 @@ public final class PaginationValueSQLConverter implements
SQLSegmentConverter<Pa
private final ConverterContext context;
@Override
- public Optional<SqlNode> convertToSQLNode(final PaginationValueSegment
segment) {
+ public Optional<SqlNode> convert(final PaginationValueSegment segment) {
return Optional.of(segment instanceof
NumberLiteralPaginationValueSegment
? getLiteralSQLNode((NumberLiteralPaginationValueSegment)
segment)
: getParameterMarkerSQLNode((ParameterMarkerLimitValueSegment)
segment));
@@ -54,16 +52,4 @@ public final class PaginationValueSQLConverter implements
SQLSegmentConverter<Pa
private SqlNode getParameterMarkerSQLNode(final
ParameterMarkerLimitValueSegment segment) {
return new SqlDynamicParam(segment.getParameterIndex(),
SqlParserPos.ZERO);
}
-
- @Override
- public Optional<PaginationValueSegment> convertToSQLSegment(final SqlNode
sqlNode) {
- if (sqlNode instanceof SqlNumericLiteral) {
- return Optional.of(new
NumberLiteralLimitValueSegment(getStartIndex(sqlNode), getStopIndex(sqlNode),
((SqlNumericLiteral) sqlNode).getValueAs(Long.class)));
- }
- if (sqlNode instanceof SqlDynamicParam) {
- context.getParameterCount().incrementAndGet();
- return Optional.of(new
ParameterMarkerLimitValueSegment(getStartIndex(sqlNode), getStopIndex(sqlNode),
((SqlDynamicParam) sqlNode).getIndex()));
- }
- return Optional.empty();
- }
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/orderby/OrderByConverter.java
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/orderby/OrderByConverter.java
index 356848d6bcb..d4d35d03450 100644
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/orderby/OrderByConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/orderby/OrderByConverter.java
@@ -22,9 +22,7 @@ import org.apache.calcite.sql.parser.SqlParserPos;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.SQLSegmentConverter;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.orderby.item.OrderByItemConverterUtil;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.order.OrderBySegment;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.order.item.OrderByItemSegment;
-import java.util.Collection;
import java.util.Optional;
/**
@@ -33,16 +31,7 @@ import java.util.Optional;
public final class OrderByConverter implements
SQLSegmentConverter<OrderBySegment, SqlNodeList> {
@Override
- public Optional<SqlNodeList> convertToSQLNode(final OrderBySegment
segment) {
- return null == segment ? Optional.empty() : Optional.of(new
SqlNodeList(OrderByItemConverterUtil.convertToSQLNode(segment.getOrderByItems()),
SqlParserPos.ZERO));
- }
-
- @Override
- public Optional<OrderBySegment> convertToSQLSegment(final SqlNodeList
sqlNodeList) {
- if (null == sqlNodeList || 0 == sqlNodeList.size()) {
- return Optional.empty();
- }
- Collection<OrderByItemSegment> orderByItems =
OrderByItemConverterUtil.convertToSQLSegment(sqlNodeList);
- return Optional.of(new OrderBySegment(getStartIndex(sqlNodeList),
getStopIndex(sqlNodeList), orderByItems));
+ public Optional<SqlNodeList> convert(final OrderBySegment segment) {
+ return null == segment ? Optional.empty() : Optional.of(new
SqlNodeList(OrderByItemConverterUtil.convert(segment.getOrderByItems()),
SqlParserPos.ZERO));
}
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/orderby/item/ColumnOrderByItemConverter.java
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/orderby/item/ColumnOrderByItemConverter.java
index 4d3fd383574..6cc10f574e5 100644
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/orderby/item/ColumnOrderByItemConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/orderby/item/ColumnOrderByItemConverter.java
@@ -18,17 +18,13 @@
package
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.orderby.item;
import org.apache.calcite.sql.SqlBasicCall;
-import org.apache.calcite.sql.SqlIdentifier;
import org.apache.calcite.sql.SqlNode;
import org.apache.calcite.sql.fun.SqlStdOperatorTable;
import org.apache.calcite.sql.parser.SqlParserPos;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.SQLSegmentConverter;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.expression.impl.ColumnConverter;
import org.apache.shardingsphere.sql.parser.sql.common.constant.OrderDirection;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.order.item.ColumnOrderByItemSegment;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.OwnerSegment;
-import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
import java.util.Collections;
import java.util.Objects;
@@ -40,28 +36,11 @@ import java.util.Optional;
public final class ColumnOrderByItemConverter implements
SQLSegmentConverter<ColumnOrderByItemSegment, SqlNode> {
@Override
- public Optional<SqlNode> convertToSQLNode(final ColumnOrderByItemSegment
segment) {
- Optional<SqlNode> result = new
ColumnConverter().convertToSQLNode(segment.getColumn()).map(optional ->
optional);
+ public Optional<SqlNode> convert(final ColumnOrderByItemSegment segment) {
+ Optional<SqlNode> result = new
ColumnConverter().convert(segment.getColumn()).map(optional -> optional);
if (result.isPresent() && Objects.equals(OrderDirection.DESC,
segment.getOrderDirection())) {
result = Optional.of(new SqlBasicCall(SqlStdOperatorTable.DESC,
Collections.singletonList(result.get()), SqlParserPos.ZERO));
}
return result;
}
-
- @Override
- public Optional<ColumnOrderByItemSegment> convertToSQLSegment(final
SqlNode sqlNode) {
- if (!(sqlNode instanceof SqlIdentifier)) {
- return Optional.empty();
- }
- SqlIdentifier sqlIdentifier = (SqlIdentifier) sqlNode;
- if (sqlIdentifier.names.size() > 1) {
- SqlIdentifier column = sqlIdentifier.getComponent(1);
- SqlIdentifier owner = sqlIdentifier.getComponent(0);
- ColumnSegment columnSegment = new
ColumnSegment(getStartIndex(sqlIdentifier), getStopIndex(sqlIdentifier), new
IdentifierValue(column.toString()));
- columnSegment.setOwner(new OwnerSegment(getStartIndex(owner),
getStopIndex(owner), new IdentifierValue(owner.toString())));
- return Optional.of(new ColumnOrderByItemSegment(columnSegment,
OrderDirection.ASC));
- }
- ColumnSegment columnSegment = new
ColumnSegment(getStartIndex(sqlIdentifier), getStopIndex(sqlIdentifier), new
IdentifierValue(sqlIdentifier.names.get(0)));
- return Optional.of(new ColumnOrderByItemSegment(columnSegment,
OrderDirection.ASC));
- }
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/orderby/item/ExpressionOrderByItemConverter.java
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/orderby/item/ExpressionOrderByItemConverter.java
index 869cc9c7c17..2162bddbd8c 100644
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/orderby/item/ExpressionOrderByItemConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/orderby/item/ExpressionOrderByItemConverter.java
@@ -29,13 +29,8 @@ import java.util.Optional;
public final class ExpressionOrderByItemConverter implements
SQLSegmentConverter<ExpressionOrderByItemSegment, SqlNode> {
@Override
- public Optional<SqlNode> convertToSQLNode(final
ExpressionOrderByItemSegment segment) {
+ public Optional<SqlNode> convert(final ExpressionOrderByItemSegment
segment) {
// TODO
return Optional.empty();
}
-
- @Override
- public Optional<ExpressionOrderByItemSegment> convertToSQLSegment(final
SqlNode sqlNode) {
- return Optional.empty();
- }
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/orderby/item/IndexOrderByItemConverter.java
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/orderby/item/IndexOrderByItemConverter.java
index df1728be40e..bb6f76e2686 100644
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/orderby/item/IndexOrderByItemConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/orderby/item/IndexOrderByItemConverter.java
@@ -20,7 +20,6 @@ package
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.o
import org.apache.calcite.sql.SqlBasicCall;
import org.apache.calcite.sql.SqlLiteral;
import org.apache.calcite.sql.SqlNode;
-import org.apache.calcite.sql.SqlNumericLiteral;
import org.apache.calcite.sql.fun.SqlStdOperatorTable;
import org.apache.calcite.sql.parser.SqlParserPos;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.SQLSegmentConverter;
@@ -36,21 +35,11 @@ import java.util.Optional;
public final class IndexOrderByItemConverter implements
SQLSegmentConverter<IndexOrderByItemSegment, SqlNode> {
@Override
- public Optional<SqlNode> convertToSQLNode(final IndexOrderByItemSegment
segment) {
+ public Optional<SqlNode> convert(final IndexOrderByItemSegment segment) {
SqlNode sqlNode =
SqlLiteral.createExactNumeric(String.valueOf(segment.getColumnIndex()),
SqlParserPos.ZERO);
if (OrderDirection.DESC.equals(segment.getOrderDirection())) {
sqlNode = new SqlBasicCall(SqlStdOperatorTable.DESC,
Collections.singletonList(sqlNode), SqlParserPos.ZERO);
}
return Optional.of(sqlNode);
}
-
- @Override
- public Optional<IndexOrderByItemSegment> convertToSQLSegment(final SqlNode
sqlNode) {
- if (sqlNode instanceof SqlBasicCall &&
SqlStdOperatorTable.DESC.equals(((SqlBasicCall) sqlNode).getOperator())) {
- SqlNumericLiteral sqlNumericLiteral = (SqlNumericLiteral)
((SqlBasicCall) sqlNode).getOperandList().get(0);
- return Optional.of(new
IndexOrderByItemSegment(getStartIndex(sqlNumericLiteral),
- getStopIndex(sqlNumericLiteral),
sqlNumericLiteral.getValueAs(Integer.class), OrderDirection.DESC));
- }
- return Optional.empty();
- }
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/orderby/item/OrderByItemConverterUtil.java
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/orderby/item/OrderByItemConverterUtil.java
index b110f54b7b5..066b1358646 100644
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/orderby/item/OrderByItemConverterUtil.java
+++
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/orderby/item/OrderByItemConverterUtil.java
@@ -19,9 +19,7 @@ package
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.o
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
-import org.apache.calcite.sql.SqlIdentifier;
import org.apache.calcite.sql.SqlNode;
-import org.apache.calcite.sql.SqlNodeList;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.order.item.ColumnOrderByItemSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.order.item.ExpressionOrderByItemSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.order.item.IndexOrderByItemSegment;
@@ -43,37 +41,19 @@ public final class OrderByItemConverterUtil {
* @param orderByItems order by item list
* @return SQL nodes converted by order by item
*/
- public static Collection<SqlNode> convertToSQLNode(final
Collection<OrderByItemSegment> orderByItems) {
+ public static Collection<SqlNode> convert(final
Collection<OrderByItemSegment> orderByItems) {
Collection<SqlNode> result = new LinkedList<>();
for (OrderByItemSegment each : orderByItems) {
if (each instanceof ColumnOrderByItemSegment) {
- new
ColumnOrderByItemConverter().convertToSQLNode((ColumnOrderByItemSegment)
each).ifPresent(result::add);
+ new
ColumnOrderByItemConverter().convert((ColumnOrderByItemSegment)
each).ifPresent(result::add);
} else if (each instanceof ExpressionOrderByItemSegment) {
throw new UnsupportedOperationException("unsupported
ExpressionOrderByItemSegment");
} else if (each instanceof IndexOrderByItemSegment) {
- new
IndexOrderByItemConverter().convertToSQLNode((IndexOrderByItemSegment)
each).ifPresent(result::add);
+ new
IndexOrderByItemConverter().convert((IndexOrderByItemSegment)
each).ifPresent(result::add);
} else if (each instanceof TextOrderByItemSegment) {
throw new UnsupportedOperationException("unsupported
TextOrderByItemSegment");
}
}
return result;
}
-
- /**
- * Convert sql node list to order by items.
- *
- * @param sqlNodeList sql node list
- * @return order by items converted by sql node list
- */
- public static Collection<OrderByItemSegment> convertToSQLSegment(final
SqlNodeList sqlNodeList) {
- Collection<OrderByItemSegment> result = new LinkedList<>();
- for (SqlNode each : sqlNodeList) {
- if (each instanceof SqlIdentifier) {
- new
ColumnOrderByItemConverter().convertToSQLSegment(each).ifPresent(result::add);
- } else {
- new
IndexOrderByItemConverter().convertToSQLSegment(each).ifPresent(result::add);
- }
- }
- return result;
- }
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/projection/DistinctConverter.java
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/projection/DistinctConverter.java
index ec9f90016d0..ac78f9c6a64 100644
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/projection/DistinctConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/projection/DistinctConverter.java
@@ -32,12 +32,7 @@ import java.util.Optional;
public final class DistinctConverter implements
SQLSegmentConverter<ProjectionsSegment, SqlNodeList> {
@Override
- public Optional<SqlNodeList> convertToSQLNode(final ProjectionsSegment
segment) {
+ public Optional<SqlNodeList> convert(final ProjectionsSegment segment) {
return segment.isDistinctRow() ? Optional.of(new
SqlNodeList(Collections.singletonList(SqlSelectKeyword.DISTINCT.symbol(SqlParserPos.ZERO)),
SqlParserPos.ZERO)) : Optional.empty();
}
-
- @Override
- public Optional<ProjectionsSegment> convertToSQLSegment(final SqlNodeList
sqlNode) {
- return Optional.empty();
- }
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/projection/ProjectionsConverter.java
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/projection/ProjectionsConverter.java
index b52a2bfae10..91515a68a7a 100644
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/projection/ProjectionsConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/projection/ProjectionsConverter.java
@@ -17,15 +17,8 @@
package
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.projection;
-import com.google.common.collect.ImmutableList;
-import org.apache.calcite.sql.SqlBasicCall;
-import org.apache.calcite.sql.SqlIdentifier;
-import org.apache.calcite.sql.SqlKind;
import org.apache.calcite.sql.SqlNode;
import org.apache.calcite.sql.SqlNodeList;
-import org.apache.calcite.sql.SqlNumericLiteral;
-import org.apache.calcite.sql.SqlOrderBy;
-import org.apache.calcite.sql.SqlSelect;
import org.apache.calcite.sql.parser.SqlParserPos;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.SQLSegmentConverter;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.projection.impl.AggregationProjectionConverter;
@@ -33,7 +26,6 @@ import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.pr
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.projection.impl.ExpressionProjectionConverter;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.projection.impl.ShorthandProjectionConverter;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.projection.impl.SubqueryProjectionConverter;
-import
org.apache.shardingsphere.sql.parser.sql.common.constant.AggregationType;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.AggregationProjectionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ColumnProjectionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ExpressionProjectionSegment;
@@ -42,10 +34,8 @@ import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.Projecti
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ShorthandProjectionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.SubqueryProjectionSegment;
-import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
-import java.util.List;
import java.util.Optional;
/**
@@ -54,7 +44,7 @@ import java.util.Optional;
public final class ProjectionsConverter implements
SQLSegmentConverter<ProjectionsSegment, SqlNodeList> {
@Override
- public Optional<SqlNodeList> convertToSQLNode(final ProjectionsSegment
segment) {
+ public Optional<SqlNodeList> convert(final ProjectionsSegment segment) {
Collection<SqlNode> projectionSQLNodes = new LinkedList<>();
for (ProjectionSegment each : segment.getProjections()) {
getProjectionSQLNode(each).ifPresent(projectionSQLNodes::add);
@@ -64,66 +54,17 @@ public final class ProjectionsConverter implements
SQLSegmentConverter<Projectio
private Optional<SqlNode> getProjectionSQLNode(final ProjectionSegment
segment) {
if (segment instanceof ColumnProjectionSegment) {
- return new
ColumnProjectionConverter().convertToSQLNode((ColumnProjectionSegment) segment);
+ return new
ColumnProjectionConverter().convert((ColumnProjectionSegment) segment);
} else if (segment instanceof ExpressionProjectionSegment) {
- return new
ExpressionProjectionConverter().convertToSQLNode((ExpressionProjectionSegment)
segment);
+ return new
ExpressionProjectionConverter().convert((ExpressionProjectionSegment) segment);
} else if (segment instanceof ShorthandProjectionSegment) {
- return new
ShorthandProjectionConverter().convertToSQLNode((ShorthandProjectionSegment)
segment).map(optional -> optional);
+ return new
ShorthandProjectionConverter().convert((ShorthandProjectionSegment)
segment).map(optional -> optional);
} else if (segment instanceof SubqueryProjectionSegment) {
- return new
SubqueryProjectionConverter().convertToSQLNode((SubqueryProjectionSegment)
segment);
+ return new
SubqueryProjectionConverter().convert((SubqueryProjectionSegment) segment);
} else if (segment instanceof AggregationProjectionSegment) {
- return new
AggregationProjectionConverter().convertToSQLNode((AggregationProjectionSegment)
segment).map(optional -> optional);
+ return new
AggregationProjectionConverter().convert((AggregationProjectionSegment)
segment).map(optional -> optional);
}
// TODO process other projection
return Optional.empty();
}
-
- @Override
- public Optional<ProjectionsSegment> convertToSQLSegment(final SqlNodeList
sqlNodeList) {
- List<ProjectionSegment> projections = new ArrayList<>();
- for (SqlNode each : sqlNodeList) {
- getProjectionSegment(each).ifPresent(projections::add);
- }
- int startIndex = projections.get(0).getStartIndex();
- int stopIndex =
getProjectionsSegmentStopIndex(sqlNodeList.get(sqlNodeList.size() - 1),
projections.get(projections.size() - 1));
- ProjectionsSegment result = new ProjectionsSegment(startIndex,
stopIndex);
- result.getProjections().addAll(projections);
- return Optional.of(result);
- }
-
- private int getProjectionsSegmentStopIndex(final SqlNode lastSqlNode,
final ProjectionSegment projectionSegment) {
- int stopIndex = projectionSegment.getStopIndex();
- if (lastSqlNode instanceof SqlBasicCall && SqlKind.AS ==
((SqlBasicCall) lastSqlNode).getOperator().getKind()) {
- stopIndex = getStopIndex(((SqlBasicCall)
lastSqlNode).getOperandList().get(1));
- }
- return stopIndex;
- }
-
- private Optional<ProjectionSegment> getProjectionSegment(final SqlNode
sqlNode) {
- if (sqlNode instanceof SqlIdentifier) {
- SqlIdentifier sqlIdentifier = (SqlIdentifier) sqlNode;
- if (SqlIdentifier.STAR.names.equals(sqlIdentifier.names) ||
isOwnerShorthandProjection(sqlIdentifier)) {
- return new
ShorthandProjectionConverter().convertToSQLSegment(sqlIdentifier).map(optional
-> optional);
- }
- return new
ColumnProjectionConverter().convertToSQLSegment(sqlIdentifier).map(optional ->
optional);
- } else if (sqlNode instanceof SqlBasicCall) {
- SqlBasicCall sqlBasicCall = (SqlBasicCall) sqlNode;
- if
(AggregationType.isAggregationType(sqlBasicCall.getOperator().getName()) ||
AggregationProjectionConverter.isAsOperatorAggregationType(sqlBasicCall)) {
- return new
AggregationProjectionConverter().convertToSQLSegment(sqlBasicCall).map(optional
-> optional);
- }
- if (null != sqlBasicCall.getOperator() && SqlKind.AS ==
sqlBasicCall.getOperator().getKind() && !(sqlBasicCall.getOperandList().get(0)
instanceof SqlNumericLiteral)) {
- return new
ColumnProjectionConverter().convertToSQLSegment(sqlNode).map(optional ->
optional);
- }
- return new
ExpressionProjectionConverter().convertToSQLSegment(sqlNode).map(optional ->
optional);
- } else if (sqlNode instanceof SqlSelect || sqlNode instanceof
SqlOrderBy) {
- return new
SubqueryProjectionConverter().convertToSQLSegment(sqlNode).map(optional ->
optional);
- }
- // TODO process other projection
- return Optional.empty();
- }
-
- private boolean isOwnerShorthandProjection(final SqlIdentifier
sqlIdentifier) {
- return 2 == sqlIdentifier.names.size()
- &&
SqlIdentifier.STAR.names.equals(ImmutableList.of(sqlIdentifier.names.get(1)));
- }
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/projection/impl/AggregationProjectionConverter.java
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/projection/impl/AggregationProjectionConverter.java
index 0a30f1c80b3..5916f40cfb3 100644
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/projection/impl/AggregationProjectionConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/projection/impl/AggregationProjectionConverter.java
@@ -22,20 +22,15 @@ import com.google.common.base.Splitter;
import org.apache.calcite.sql.SqlAggFunction;
import org.apache.calcite.sql.SqlBasicCall;
import org.apache.calcite.sql.SqlIdentifier;
-import org.apache.calcite.sql.SqlKind;
import org.apache.calcite.sql.SqlLiteral;
import org.apache.calcite.sql.SqlNode;
import org.apache.calcite.sql.SqlSelectKeyword;
import org.apache.calcite.sql.fun.SqlStdOperatorTable;
import org.apache.calcite.sql.parser.SqlParserPos;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.SQLSegmentConverter;
-import
org.apache.shardingsphere.sql.parser.sql.common.constant.AggregationType;
-import org.apache.shardingsphere.sql.parser.sql.common.constant.QuoteCharacter;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.AggregationDistinctProjectionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.AggregationProjectionSegment;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.AliasSegment;
import org.apache.shardingsphere.sql.parser.sql.common.util.SQLUtil;
-import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
import java.util.Arrays;
import java.util.Collections;
@@ -43,7 +38,6 @@ import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.TreeMap;
-import java.util.stream.Collectors;
/**
* Aggregation projection converter.
@@ -66,7 +60,7 @@ public final class AggregationProjectionConverter implements
SQLSegmentConverter
}
@Override
- public Optional<SqlBasicCall> convertToSQLNode(final
AggregationProjectionSegment segment) {
+ public Optional<SqlBasicCall> convert(final AggregationProjectionSegment
segment) {
if (null == segment) {
return Optional.empty();
}
@@ -85,71 +79,11 @@ public final class AggregationProjectionConverter
implements SQLSegmentConverter
Collections.singletonList(createParametersSqlNode(parameters)),
SqlParserPos.ZERO, functionQuantifier).withExpanded(false));
}
- @Override
- public Optional<AggregationProjectionSegment> convertToSQLSegment(final
SqlBasicCall sqlBasicCall) {
- if (null == sqlBasicCall) {
- return Optional.empty();
- }
- if (isAsOperatorAggregationType(sqlBasicCall)) {
- SqlBasicCall subSqlBasicCall = (SqlBasicCall)
sqlBasicCall.getOperandList().get(0);
- AggregationType aggregationType =
AggregationType.valueOf(subSqlBasicCall.getOperator().getName().toUpperCase());
- String innerExpression = getInnerExpression(subSqlBasicCall);
- AliasSegment aliasSegment = new
AliasSegment(getStartIndex(sqlBasicCall.getOperandList().get(1)),
getStopIndex(sqlBasicCall.getOperandList().get(1)),
- new IdentifierValue(((SqlIdentifier)
sqlBasicCall.getOperandList().get(1)).names.get(0)));
- if (null != subSqlBasicCall.getFunctionQuantifier() &&
SqlSelectKeyword.DISTINCT ==
subSqlBasicCall.getFunctionQuantifier().getValue()) {
- return
Optional.of(getAggregationDistinctProjectionSegment(subSqlBasicCall,
aggregationType, aliasSegment));
- }
- AggregationProjectionSegment aggregationProjectionSegment = new
AggregationProjectionSegment(getStartIndex(subSqlBasicCall),
getStopIndex(subSqlBasicCall),
- aggregationType, innerExpression);
- aggregationProjectionSegment.setAlias(aliasSegment);
- return Optional.of(aggregationProjectionSegment);
- }
- AggregationType aggregationType =
AggregationType.valueOf(sqlBasicCall.getOperator().getName());
- if (null != sqlBasicCall.getFunctionQuantifier() &&
SqlSelectKeyword.DISTINCT == sqlBasicCall.getFunctionQuantifier().getValue()) {
- return
Optional.of(getAggregationDistinctProjectionSegment(sqlBasicCall,
aggregationType, null));
- }
- String innerExpression = getInnerExpression(sqlBasicCall);
- return Optional.of(new
AggregationProjectionSegment(getStartIndex(sqlBasicCall),
getStopIndex(sqlBasicCall), aggregationType, innerExpression));
- }
-
- private AggregationDistinctProjectionSegment
getAggregationDistinctProjectionSegment(final SqlBasicCall sqlBasicCall, final
AggregationType aggregationType, final AliasSegment aliasSegment) {
- String innerExpression = getInnerExpression(sqlBasicCall,
SqlSelectKeyword.DISTINCT);
- String distinctParams =
sqlBasicCall.getOperandList().stream().map(SqlNode::toString).collect(Collectors.joining(",
"));
- AggregationDistinctProjectionSegment
aggregationDistinctProjectionSegment = new
AggregationDistinctProjectionSegment(getStartIndex(sqlBasicCall),
getStopIndex(sqlBasicCall),
- aggregationType, innerExpression, distinctParams);
- aggregationDistinctProjectionSegment.setAlias(aliasSegment);
- return aggregationDistinctProjectionSegment;
- }
-
- private String getInnerExpression(final SqlBasicCall sqlBasicCall, final
SqlSelectKeyword selectKeyword) {
- if (selectKeyword == null) {
- return getInnerExpression(sqlBasicCall);
- }
- String params =
sqlBasicCall.getOperandList().stream().map(SqlNode::toString).collect(Collectors.joining(",
"));
- return QuoteCharacter.PARENTHESES.wrap(selectKeyword + " " + params);
- }
-
- private String getInnerExpression(final SqlBasicCall sqlBasicCall) {
- String params =
sqlBasicCall.getOperandList().stream().map(SqlNode::toString).collect(Collectors.joining(",
"));
- return QuoteCharacter.PARENTHESES.wrap(params);
- }
-
private SqlAggFunction convertOperator(final String operator) {
Preconditions.checkState(REGISTRY.containsKey(operator), "Unsupported
SQL operator: `%s`", operator);
return REGISTRY.get(operator);
}
- /**
- * Judge whether sqlBasicCall is as operator aggregation type or not.
- * @param sqlBasicCall sqlBasicCall
- * @return whether sqlBasicCall is as operator aggregation type or not
- */
- public static boolean isAsOperatorAggregationType(final SqlBasicCall
sqlBasicCall) {
- return null != sqlBasicCall.getOperator() && SqlKind.AS ==
sqlBasicCall.getOperator().getKind()
- && sqlBasicCall.getOperandList().get(0) instanceof SqlBasicCall
- && AggregationType.isAggregationType(((SqlBasicCall)
sqlBasicCall.getOperandList().get(0)).getOperator().getName());
- }
-
private SqlNode createParametersSqlNode(final List<String> parameters) {
if (1 == parameters.size()) {
try {
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/projection/impl/ColumnProjectionConverter.java
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/projection/impl/ColumnProjectionConverter.java
index 925331bc21b..a8d4b6bf2c3 100644
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/projection/impl/ColumnProjectionConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/projection/impl/ColumnProjectionConverter.java
@@ -24,13 +24,9 @@ import org.apache.calcite.sql.SqlNode;
import org.apache.calcite.sql.parser.SqlParserPos;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.SQLSegmentConverter;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.expression.impl.ColumnConverter;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ColumnProjectionSegment;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.AliasSegment;
-import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
import java.util.Arrays;
-import java.util.List;
import java.util.Optional;
/**
@@ -39,33 +35,12 @@ import java.util.Optional;
public final class ColumnProjectionConverter implements
SQLSegmentConverter<ColumnProjectionSegment, SqlNode> {
@Override
- public Optional<SqlNode> convertToSQLNode(final ColumnProjectionSegment
segment) {
+ public Optional<SqlNode> convert(final ColumnProjectionSegment segment) {
if (segment.getAlias().isPresent()) {
- Optional<SqlIdentifier> columnSqlIdentifier = new
ColumnConverter().convertToSQLNode(segment.getColumn());
+ Optional<SqlIdentifier> columnSqlIdentifier = new
ColumnConverter().convert(segment.getColumn());
SqlIdentifier aliasSqlIdentifier = new
SqlIdentifier(segment.getAlias().get(), SqlParserPos.ZERO);
return Optional.of(new SqlBasicCall(new SqlAsOperator(),
Arrays.asList(columnSqlIdentifier.get(), aliasSqlIdentifier),
SqlParserPos.ZERO));
}
- return new
ColumnConverter().convertToSQLNode(segment.getColumn()).map(optional ->
optional);
- }
-
- @Override
- public Optional<ColumnProjectionSegment> convertToSQLSegment(final SqlNode
sqlNode) {
- if (sqlNode instanceof SqlBasicCall) {
- List<SqlNode> operands = ((SqlBasicCall) sqlNode).getOperandList();
- Optional<ColumnSegment> columnSegment = new
ColumnConverter().convertToSQLSegment((SqlIdentifier) operands.get(0));
- if (!columnSegment.isPresent()) {
- return Optional.empty();
- }
- ColumnProjectionSegment columnProjectionSegment = new
ColumnProjectionSegment(columnSegment.get());
- if (2 == operands.size()) {
- SqlIdentifier aliasSqlNode = (SqlIdentifier) operands.get(1);
- columnProjectionSegment.setAlias(new
AliasSegment(getStartIndex(aliasSqlNode), getStopIndex(aliasSqlNode), new
IdentifierValue(aliasSqlNode.names.get(0))));
- }
- return Optional.of(columnProjectionSegment);
- }
- if (sqlNode instanceof SqlIdentifier) {
- return new ColumnConverter().convertToSQLSegment((SqlIdentifier)
sqlNode).map(ColumnProjectionSegment::new);
- }
- return Optional.empty();
+ return new ColumnConverter().convert(segment.getColumn()).map(optional
-> optional);
}
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/projection/impl/ExpressionProjectionConverter.java
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/projection/impl/ExpressionProjectionConverter.java
index 913cf628dab..72b92cc7ed5 100644
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/projection/impl/ExpressionProjectionConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/projection/impl/ExpressionProjectionConverter.java
@@ -19,18 +19,12 @@ package
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.p
import org.apache.calcite.sql.SqlBasicCall;
import org.apache.calcite.sql.SqlIdentifier;
-import org.apache.calcite.sql.SqlKind;
import org.apache.calcite.sql.SqlNode;
-import org.apache.calcite.sql.SqlNumericLiteral;
import org.apache.calcite.sql.fun.SqlStdOperatorTable;
import org.apache.calcite.sql.parser.SqlParserPos;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.SQLSegmentConverter;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.expression.ExpressionConverter;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionSegment;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.FunctionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ExpressionProjectionSegment;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.AliasSegment;
-import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
import java.util.Arrays;
import java.util.Collections;
@@ -42,35 +36,15 @@ import java.util.Optional;
public final class ExpressionProjectionConverter implements
SQLSegmentConverter<ExpressionProjectionSegment, SqlNode> {
@Override
- public Optional<SqlNode> convertToSQLNode(final
ExpressionProjectionSegment segment) {
+ public Optional<SqlNode> convert(final ExpressionProjectionSegment
segment) {
if (null == segment) {
return Optional.empty();
}
- Optional<SqlNode> result = new
ExpressionConverter().convertToSQLNode(segment.getExpr());
+ Optional<SqlNode> result = new
ExpressionConverter().convert(segment.getExpr());
if (result.isPresent() && segment.getAlias().isPresent()) {
return Optional.of(new SqlBasicCall(SqlStdOperatorTable.AS,
Arrays.asList(result.get(),
SqlIdentifier.star(Collections.singletonList(segment.getAlias().get()),
SqlParserPos.ZERO, Collections.singletonList(SqlParserPos.ZERO))),
SqlParserPos.ZERO));
}
return result;
}
-
- @Override
- public Optional<ExpressionProjectionSegment> convertToSQLSegment(final
SqlNode sqlNode) {
- if (sqlNode instanceof SqlBasicCall) {
- SqlBasicCall sqlBasicCall = (SqlBasicCall) sqlNode;
- if (SqlKind.AS == sqlBasicCall.getOperator().getKind() &&
sqlBasicCall.getOperandList().get(0) instanceof SqlNumericLiteral) {
- SqlNode exprSqlNode = sqlBasicCall.getOperandList().get(0);
- SqlNode aliasSqlNode = sqlBasicCall.getOperandList().get(1);
- ExpressionSegment expressionSegment = new
ExpressionConverter().convertToSQLSegment(exprSqlNode).orElse(null);
- ExpressionProjectionSegment expressionProjectionSegment = new
ExpressionProjectionSegment(getStartIndex(sqlBasicCall),
- getStopIndex(sqlBasicCall), exprSqlNode.toString(),
expressionSegment);
- expressionProjectionSegment.setAlias(new
AliasSegment(getStartIndex(aliasSqlNode), getStopIndex(aliasSqlNode), new
IdentifierValue(aliasSqlNode.toString())));
- return Optional.of(expressionProjectionSegment);
- }
- ExpressionSegment expressionSegment = new
ExpressionConverter().convertToSQLSegment(sqlNode).orElse(null);
- String text = expressionSegment instanceof FunctionSegment ?
((FunctionSegment) expressionSegment).getText() : sqlNode.toString();
- return Optional.of(new
ExpressionProjectionSegment(getStartIndex(sqlNode), getStopIndex(sqlNode),
text, expressionSegment));
- }
- return Optional.empty();
- }
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/projection/impl/ShorthandProjectionConverter.java
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/projection/impl/ShorthandProjectionConverter.java
index 3931a5887c5..dd9d448691b 100644
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/projection/impl/ShorthandProjectionConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/projection/impl/ShorthandProjectionConverter.java
@@ -22,8 +22,6 @@ import org.apache.calcite.sql.SqlIdentifier;
import org.apache.calcite.sql.parser.SqlParserPos;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.SQLSegmentConverter;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ShorthandProjectionSegment;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.OwnerSegment;
-import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
import java.util.Arrays;
import java.util.Optional;
@@ -34,24 +32,11 @@ import java.util.Optional;
public final class ShorthandProjectionConverter implements
SQLSegmentConverter<ShorthandProjectionSegment, SqlIdentifier> {
@Override
- public Optional<SqlIdentifier> convertToSQLNode(final
ShorthandProjectionSegment segment) {
+ public Optional<SqlIdentifier> convert(final ShorthandProjectionSegment
segment) {
if (null == segment) {
return Optional.empty();
}
return segment.getOwner().map(optional ->
Optional.of(SqlIdentifier.star(Arrays.asList(optional.getIdentifier().getValue(),
""),
SqlParserPos.ZERO,
ImmutableList.of(SqlParserPos.ZERO)))).orElseGet(() ->
Optional.of(SqlIdentifier.star(SqlParserPos.ZERO)));
}
-
- @Override
- public Optional<ShorthandProjectionSegment> convertToSQLSegment(final
SqlIdentifier sqlIdentifier) {
- if (null == sqlIdentifier) {
- return Optional.empty();
- }
- ShorthandProjectionSegment result = new
ShorthandProjectionSegment(getStartIndex(sqlIdentifier),
getStopIndex(sqlIdentifier));
- if (sqlIdentifier.names.size() > 1) {
- SqlIdentifier owner = sqlIdentifier.getComponent(0);
- result.setOwner(new OwnerSegment(getStartIndex(owner),
getStopIndex(owner), new IdentifierValue(sqlIdentifier.names.get(0))));
- }
- return Optional.of(result);
- }
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/projection/impl/SubqueryProjectionConverter.java
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/projection/impl/SubqueryProjectionConverter.java
index 642956326f1..1ec5e90f7f8 100644
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/projection/impl/SubqueryProjectionConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/projection/impl/SubqueryProjectionConverter.java
@@ -17,19 +17,14 @@
package
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.projection.impl;
-import org.apache.calcite.avatica.util.Quoting;
import org.apache.calcite.sql.SqlBasicCall;
import org.apache.calcite.sql.SqlIdentifier;
import org.apache.calcite.sql.SqlNode;
-import org.apache.calcite.sql.SqlOrderBy;
-import org.apache.calcite.sql.SqlSelect;
import org.apache.calcite.sql.fun.SqlStdOperatorTable;
import org.apache.calcite.sql.parser.SqlParserPos;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.SQLSegmentConverter;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.statement.select.SelectStatementConverter;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.subquery.SubquerySegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.SubqueryProjectionSegment;
-import
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
import java.util.ArrayList;
import java.util.Collection;
@@ -42,11 +37,11 @@ import java.util.Optional;
public final class SubqueryProjectionConverter implements
SQLSegmentConverter<SubqueryProjectionSegment, SqlNode> {
@Override
- public Optional<SqlNode> convertToSQLNode(final SubqueryProjectionSegment
segment) {
+ public Optional<SqlNode> convert(final SubqueryProjectionSegment segment) {
if (null == segment) {
return Optional.empty();
}
- SqlNode sqlNode = new
SelectStatementConverter().convertToSQLNode(segment.getSubquery().getSelect());
+ SqlNode sqlNode = new
SelectStatementConverter().convert(segment.getSubquery().getSelect());
return segment.getAlias().isPresent() ? convertToSQLStatement(sqlNode,
segment.getAlias().get()) : Optional.of(sqlNode);
}
@@ -56,18 +51,4 @@ public final class SubqueryProjectionConverter implements
SQLSegmentConverter<Su
sqlNodes.add(new SqlIdentifier(alias, SqlParserPos.ZERO));
return Optional.of(new SqlBasicCall(SqlStdOperatorTable.AS, new
ArrayList<>(sqlNodes), SqlParserPos.ZERO));
}
-
- @Override
- public Optional<SubqueryProjectionSegment> convertToSQLSegment(final
SqlNode sqlNode) {
- if (sqlNode instanceof SqlSelect || sqlNode instanceof SqlOrderBy) {
- SelectStatement selectStatement = new
SelectStatementConverter().convertToSQLStatement(sqlNode);
- // FIXME subquery projection position returned by the CalCite
parser does not contain two brackets
- int startIndex = getStartIndex(sqlNode) - 1;
- int stopIndex = getStopIndex(sqlNode) + 1;
- String text = "(" + sqlNode + ")";
- String originalText = text.replace(System.lineSeparator(), "
").replace(Quoting.BACK_TICK.string, "");
- return Optional.of(new SubqueryProjectionSegment(new
SubquerySegment(startIndex, stopIndex, selectStatement), originalText));
- }
- return Optional.empty();
- }
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/where/WhereConverter.java
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/where/WhereConverter.java
index 73f99ef39c7..7363ea8aadc 100644
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/where/WhereConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/where/WhereConverter.java
@@ -29,20 +29,8 @@ import java.util.Optional;
*/
public final class WhereConverter implements SQLSegmentConverter<WhereSegment,
SqlNode> {
- private static final int WHERE_SEGMENT_LENGTH = 6;
-
- @Override
- public Optional<SqlNode> convertToSQLNode(final WhereSegment segment) {
- return null == segment ? Optional.empty() : new
ExpressionConverter().convertToSQLNode(segment.getExpr());
- }
-
@Override
- public Optional<WhereSegment> convertToSQLSegment(final SqlNode sqlNode) {
- if (null == sqlNode) {
- return Optional.empty();
- }
- // FIXME Now sqlNode position returned by the CalCite parser does not
contain WHERE and requires manual calculation
- int startIndex = getStartIndex(sqlNode) - WHERE_SEGMENT_LENGTH;
- return new
ExpressionConverter().convertToSQLSegment(sqlNode).map(optional -> new
WhereSegment(startIndex, optional.getStopIndex(), optional));
+ public Optional<SqlNode> convert(final WhereSegment segment) {
+ return null == segment ? Optional.empty() : new
ExpressionConverter().convert(segment.getExpr());
}
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/statement/SQLStatementConverter.java
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/statement/SQLStatementConverter.java
index 3159bde2a7e..0bc6bd4c033 100644
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/statement/SQLStatementConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/statement/SQLStatementConverter.java
@@ -28,18 +28,10 @@ import
org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
public interface SQLStatementConverter<S extends SQLStatement, T extends
SqlNode> {
/**
- * Convert SQL statement to SQL node.
+ * Convert.
*
* @param sqlStatement SQL statement be to converted
* @return converted SQL node
*/
- T convertToSQLNode(S sqlStatement);
-
- /**
- * Convert SQL node to SQL statement.
- *
- * @param sqlNode SQL node be to converted
- * @return converted SQL statement
- */
- S convertToSQLStatement(T sqlNode);
+ T convert(S sqlStatement);
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/statement/select/SelectStatementConverter.java
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/statement/select/SelectStatementConverter.java
index 38333fb8e67..cd367c20bf7 100644
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/statement/select/SelectStatementConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/statement/select/SelectStatementConverter.java
@@ -23,7 +23,6 @@ import org.apache.calcite.sql.SqlOrderBy;
import org.apache.calcite.sql.SqlSelect;
import org.apache.calcite.sql.parser.SqlParserPos;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.context.ConverterContext;
-import
org.apache.shardingsphere.infra.federation.optimizer.converter.context.ConverterContextHolder;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.from.TableConverter;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.groupby.GroupByConverter;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.groupby.HavingConverter;
@@ -33,17 +32,10 @@ import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.pr
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.projection.ProjectionsConverter;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.where.WhereConverter;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.statement.SQLStatementConverter;
-import org.apache.shardingsphere.sql.parser.sql.common.segment.SQLSegment;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ProjectionsSegment;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.pagination.PaginationValueSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.pagination.limit.LimitSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
import
org.apache.shardingsphere.sql.parser.sql.dialect.handler.dml.SelectStatementHandler;
-import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dml.MySQLSelectStatement;
-import java.util.Comparator;
-import java.util.LinkedList;
-import java.util.List;
import java.util.Optional;
/**
@@ -54,67 +46,22 @@ public final class SelectStatementConverter implements
SQLStatementConverter<Sel
private static final int LIMIT_SEGMENT_LENGTH = 6;
@Override
- public SqlNode convertToSQLNode(final SelectStatement selectStatement) {
- SqlNodeList distinct = new
DistinctConverter().convertToSQLNode(selectStatement.getProjections()).orElse(null);
- SqlNodeList projection = new
ProjectionsConverter().convertToSQLNode(selectStatement.getProjections()).orElseThrow(IllegalStateException::new);
- SqlNode from = new
TableConverter().convertToSQLNode(selectStatement.getFrom()).orElse(null);
- SqlNode where = selectStatement.getWhere().flatMap(optional -> new
WhereConverter().convertToSQLNode(optional)).orElse(null);
- SqlNodeList groupBy = selectStatement.getGroupBy().flatMap(optional ->
new GroupByConverter().convertToSQLNode(optional)).orElse(null);
- SqlNode having = selectStatement.getHaving().flatMap(optional -> new
HavingConverter().convertToSQLNode(optional)).orElse(null);
- SqlNodeList orderBy = selectStatement.getOrderBy().flatMap(optional ->
new OrderByConverter().convertToSQLNode(optional)).orElse(SqlNodeList.EMPTY);
+ public SqlNode convert(final SelectStatement selectStatement) {
+ SqlNodeList distinct = new
DistinctConverter().convert(selectStatement.getProjections()).orElse(null);
+ SqlNodeList projection = new
ProjectionsConverter().convert(selectStatement.getProjections()).orElseThrow(IllegalStateException::new);
+ SqlNode from = new
TableConverter().convert(selectStatement.getFrom()).orElse(null);
+ SqlNode where = selectStatement.getWhere().flatMap(optional -> new
WhereConverter().convert(optional)).orElse(null);
+ SqlNodeList groupBy = selectStatement.getGroupBy().flatMap(optional ->
new GroupByConverter().convert(optional)).orElse(null);
+ SqlNode having = selectStatement.getHaving().flatMap(optional -> new
HavingConverter().convert(optional)).orElse(null);
+ SqlNodeList orderBy = selectStatement.getOrderBy().flatMap(optional ->
new OrderByConverter().convert(optional)).orElse(SqlNodeList.EMPTY);
Optional<LimitSegment> limit =
SelectStatementHandler.getLimitSegment(selectStatement);
ConverterContext context = new ConverterContext();
SqlSelect sqlSelect = new SqlSelect(SqlParserPos.ZERO, distinct,
projection, from, where, groupBy, having, SqlNodeList.EMPTY, null, null, null,
SqlNodeList.EMPTY);
if (limit.isPresent()) {
- SqlNode offset = limit.get().getOffset().flatMap(optional -> new
PaginationValueSQLConverter(context).convertToSQLNode(optional)).orElse(null);
- SqlNode rowCount = limit.get().getRowCount().flatMap(optional ->
new
PaginationValueSQLConverter(context).convertToSQLNode(optional)).orElse(null);
+ SqlNode offset = limit.get().getOffset().flatMap(optional -> new
PaginationValueSQLConverter(context).convert(optional)).orElse(null);
+ SqlNode rowCount = limit.get().getRowCount().flatMap(optional ->
new PaginationValueSQLConverter(context).convert(optional)).orElse(null);
return new SqlOrderBy(SqlParserPos.ZERO, sqlSelect, orderBy,
offset, rowCount);
}
return !orderBy.isEmpty() ? new SqlOrderBy(SqlParserPos.ZERO,
sqlSelect, orderBy, null, null) : sqlSelect;
}
-
- @Override
- public SelectStatement convertToSQLStatement(final SqlNode sqlNode) {
- MySQLSelectStatement result = new MySQLSelectStatement();
- try {
- SqlSelect sqlSelect = sqlNode instanceof SqlOrderBy ? (SqlSelect)
((SqlOrderBy) sqlNode).query : (SqlSelect) sqlNode;
- ConverterContext context = new ConverterContext();
- ConverterContextHolder.set(context);
- ProjectionsSegment projections = new
ProjectionsConverter().convertToSQLSegment(sqlSelect.getSelectList()).orElseThrow(IllegalStateException::new);
- projections.setDistinctRow(sqlSelect.isDistinct());
- // TODO create select statement for different dialect
- result.setProjections(projections);
- new
TableConverter().convertToSQLSegment(sqlSelect.getFrom()).ifPresent(result::setFrom);
- new
WhereConverter().convertToSQLSegment(sqlSelect.getWhere()).ifPresent(result::setWhere);
- new
GroupByConverter().convertToSQLSegment(sqlSelect.getGroup()).ifPresent(result::setGroupBy);
- new
HavingConverter().convertToSQLSegment(sqlSelect.getHaving()).ifPresent(result::setHaving);
- if (sqlNode instanceof SqlOrderBy) {
- SqlOrderBy sqlOrderBy = (SqlOrderBy) sqlNode;
- new
OrderByConverter().convertToSQLSegment(sqlOrderBy.orderList).ifPresent(result::setOrderBy);
- createLimitSegment(sqlOrderBy,
context).ifPresent(result::setLimit);
- }
- result.setParameterCount(context.getParameterCount().get());
- } finally {
- ConverterContextHolder.remove();
- }
- return result;
- }
-
- private Optional<LimitSegment> createLimitSegment(final SqlOrderBy
sqlOrderBy, final ConverterContext context) {
- if (null == sqlOrderBy.offset && null == sqlOrderBy.fetch) {
- return Optional.empty();
- }
- Optional<PaginationValueSegment> offset =
Optional.ofNullable(sqlOrderBy.offset).flatMap(optional -> new
PaginationValueSQLConverter(context).convertToSQLSegment(optional));
- Optional<PaginationValueSegment> rowCount =
Optional.ofNullable(sqlOrderBy.fetch).flatMap(optional -> new
PaginationValueSQLConverter(context).convertToSQLSegment(optional));
- List<Integer> startIndexes = new LinkedList<>();
- List<Integer> stopIndexes = new LinkedList<>();
- offset.map(SQLSegment::getStartIndex).ifPresent(startIndexes::add);
- rowCount.map(SQLSegment::getStartIndex).ifPresent(startIndexes::add);
- offset.map(SQLSegment::getStopIndex).ifPresent(stopIndexes::add);
- rowCount.map(SQLSegment::getStopIndex).ifPresent(stopIndexes::add);
- // FIXME Now sqlNode position returned by the CalCite parser does not
contain LIMIT and requires manual calculation
- int startIndex =
startIndexes.stream().min(Comparator.naturalOrder()).orElse(0) -
LIMIT_SEGMENT_LENGTH;
- int stopIndex =
stopIndexes.stream().max(Comparator.naturalOrder()).orElse(0);
- return Optional.of(new LimitSegment(startIndex, stopIndex,
offset.orElse(null), rowCount.orElse(null)));
- }
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/type/CombineOperatorConverter.java
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/type/CombineOperatorConverter.java
index 37ad8f93d56..13610f0d362 100644
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/type/CombineOperatorConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/type/CombineOperatorConverter.java
@@ -54,22 +54,4 @@ public final class CombineOperatorConverter {
Preconditions.checkState(REGISTRY.containsKey(combineType),
"Unsupported combine type: `%s`", combineType);
return REGISTRY.get(combineType);
}
-
- /**
- * Convert to combine type.
- * @param sqlOperator SQL operator to be converted
- * @return converted combine type
- */
- public static CombineType convert(final SqlOperator sqlOperator) {
- CombineType result = null;
- for (CombineType each : REGISTRY.keySet()) {
- SqlOperator currentOperator = REGISTRY.get(each);
- if (currentOperator == sqlOperator) {
- result = each;
- break;
- }
- }
- Preconditions.checkState(result != null, "Unsupported sql operator:
`%s`", sqlOperator);
- return result;
- }
}
diff --git
a/shardingsphere-test/shardingsphere-optimize-test/src/test/java/org/apache/shardingsphere/infra/federation/converter/parameterized/engine/SQLNodeConvertEngineParameterizedTest.java
b/shardingsphere-test/shardingsphere-optimize-test/src/test/java/org/apache/shardingsphere/infra/federation/converter/parameterized/engine/SQLNodeConvertEngineParameterizedTest.java
index 1644bbb0a98..f441aff0b8e 100644
---
a/shardingsphere-test/shardingsphere-optimize-test/src/test/java/org/apache/shardingsphere/infra/federation/converter/parameterized/engine/SQLNodeConvertEngineParameterizedTest.java
+++
b/shardingsphere-test/shardingsphere-optimize-test/src/test/java/org/apache/shardingsphere/infra/federation/converter/parameterized/engine/SQLNodeConvertEngineParameterizedTest.java
@@ -37,12 +37,9 @@ import org.apache.shardingsphere.sql.parser.api.CacheOption;
import org.apache.shardingsphere.sql.parser.api.SQLParserEngine;
import org.apache.shardingsphere.sql.parser.api.SQLVisitorEngine;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
-import
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.SQLCaseAssertContext;
-import
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.SQLStatementAssert;
import
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.CasesRegistry;
import
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.SQLParserTestCasesRegistry;
import
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.SQLParserTestCasesRegistryFactory;
-import
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.SQLParserTestCase;
import
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.sql.SQLCaseType;
import
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.sql.loader.SQLCasesLoader;
import org.junit.Test;
@@ -131,25 +128,15 @@ public final class SQLNodeConvertEngineParameterizedTest {
}
@Test
- public void assertConvertToSQLNode() {
+ public void assertConvert() {
String databaseType = "H2".equals(this.databaseType) ? "MySQL" :
this.databaseType;
String sql = SQL_CASES_LOADER.getCaseValue(sqlCaseId, sqlCaseType,
SQL_PARSER_TEST_CASES_REGISTRY.get(sqlCaseId).getParameters(), databaseType);
SQLStatement sqlStatement = parseSQLStatement(databaseType, sql);
- SqlNode actual = SQLNodeConverterEngine.convertToSQLNode(sqlStatement);
+ SqlNode actual = SQLNodeConverterEngine.convert(sqlStatement);
SqlNode expected = parseSqlNode(databaseType, sql);
assertTrue(actual.equalsDeep(expected, Litmus.THROW));
}
- @Test
- public void assertConvertToSQLStatement() {
- SQLParserTestCase expected =
SQL_PARSER_TEST_CASES_REGISTRY.get(sqlCaseId);
- String databaseType = "H2".equals(this.databaseType) ? "MySQL" :
this.databaseType;
- String sql = SQL_CASES_LOADER.getCaseValue(sqlCaseId, sqlCaseType,
SQL_PARSER_TEST_CASES_REGISTRY.get(sqlCaseId).getParameters(), databaseType);
- SqlNode sqlNode = parseSqlNode(databaseType, sql);
- SQLStatement actual =
SQLNodeConverterEngine.convertToSQLStatement(sqlNode);
- SQLStatementAssert.assertIs(new SQLCaseAssertContext(SQL_CASES_LOADER,
sqlCaseId, sqlCaseType, databaseType), actual, expected);
- }
-
@SneakyThrows(SqlParseException.class)
private SqlNode parseSqlNode(final String databaseType, final String sql) {
return SqlParser.create(sql,
createConfig(DatabaseTypeFactory.getInstance(databaseType))).parseQuery();