This is an automated email from the ASF dual-hosted git repository.
menghaoran 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 11a7e6c Polish package structure of optimizer.convert (#12704)
11a7e6c is described below
commit 11a7e6cb87185465bd5b2131ab2f4684091d9c12
Author: Liang Zhang <[email protected]>
AuthorDate: Sat Sep 25 07:01:39 2021 +0800
Polish package structure of optimizer.convert (#12704)
* Rename SQLNodeConverterUtil
* Refactor SQLNodeConverterUtil
* Add limit and projection package
* Add groupby package
* Add orderby package
* Add orderby package
* Move projection package
* Add from package
* Move orderby package
* Add where package
* Add subquery package
* Add expression package
* Add SQLStatementToSQLNodeConverter
* Refactor SelectStatementConverterTest
* Rename SQLSegmentToSQLNodeConverter
* Refactor SQLSegmentToSQLNodeConverter
* Polish package of optimizer.convert
* Refactor SelectStatementConverter
* Refactor SimpleTableConverter
* Refactor TableConverter
* Refactor TableConverter
* Refactor TableConverter
* Refactor ProjectionsConverter
* Refactor ExpressionConverter
* refactor BinaryOperationExpressionConverter
* Refactor SelectStatementConverter
---
.../infra/optimize/ShardingSphereOptimizer.java | 2 +-
.../converter/impl/GroupBySQLNodeConverter.java | 45 --------------
.../impl/SelectStatementSQLNodeConverter.java | 61 ------------------
.../SQLNodeConvertEngine.java | 15 ++---
.../segment/SQLSegmentConverter.java} | 19 +++---
.../segment/expression/ExpressionConverter.java} | 36 ++++++-----
.../impl/BinaryOperationExpressionConverter.java} | 30 +++++----
.../segment/expression/impl/ColumnConverter.java} | 12 ++--
.../expression/impl/ListExpressionConverter.java} | 17 +++--
.../impl/LiteralExpressionConverter.java} | 21 ++++---
.../segment/from/TableConverter.java} | 27 ++++----
.../segment/from/impl/JoinTableConverter.java} | 53 +++++++++-------
.../segment/from/impl/SimpleTableConverter.java} | 23 +++----
.../segment/from/impl/SubqueryTableConverter.java} | 8 +--
.../segment/groupby/GroupByConverter.java} | 20 +++---
.../segment/groupby/HavingConverter.java} | 14 ++---
.../segment/limit/AbstractLimitConverter.java} | 20 +++---
.../segment/limit/OffsetConverter.java} | 8 +--
.../limit}/PaginationValueSQLConverter.java | 25 ++++----
.../segment/limit/RowCountConverter.java} | 8 +--
.../segment/orderby/OrderByConverter.java} | 18 ++----
.../orderby/item/ColumnOrderByItemConverter.java} | 19 +++---
.../item/ExpressionOrderByItemConverter.java} | 11 ++--
.../orderby/item/OrderByItemConverterUtil.java} | 19 +++---
.../segment/projection/DistinctConverter.java} | 15 ++---
.../segment/projection/ProjectionsConverter.java} | 39 ++++++------
.../impl/ColumnProjectionConverter.java} | 13 ++--
.../impl/ExpressionProjectionConverter.java} | 13 ++--
.../segment/where/WhereConverter.java} | 16 ++---
.../statement/SQLStatementConverter.java} | 20 +++---
.../statement/SelectStatementConverter.java | 71 +++++++++++++++++++++
...narySqlOperator.java => BinarySQLOperator.java} | 56 ++++++++---------
.../statement/SelectStatementConverterTest.java} | 40 +++++++-----
.../core/convert/BaseSqlNodeConverterTest.java | 72 ----------------------
.../loader/CommonFixtureTableMetaDataBuilder.java | 4 +-
.../AlterTableFederationMetaDataRefresherTest.java | 5 +-
...CreateTableFederationMetaDataRefresherTest.java | 3 +-
.../DropTableFederationMetaDataRefresherTest.java | 3 +-
.../metadata/rule/CommonFixtureRule.java | 2 +-
...chema.builder.spi.RuleBasedTableMetaDataBuilder | 2 +-
.../src/test/resources/logback-test.xml | 33 ++++++++++
41 files changed, 435 insertions(+), 503 deletions(-)
diff --git
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/ShardingSphereOptimizer.java
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/ShardingSphereOptimizer.java
index 7144345..3928ec7 100644
---
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/ShardingSphereOptimizer.java
+++
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/ShardingSphereOptimizer.java
@@ -39,7 +39,7 @@ import
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties
import org.apache.shardingsphere.infra.database.type.DatabaseTypeRegistry;
import org.apache.shardingsphere.infra.exception.ShardingSphereException;
import
org.apache.shardingsphere.infra.optimize.context.translatable.TranslatableOptimizerContext;
-import org.apache.shardingsphere.infra.optimize.convert.SQLNodeConvertEngine;
+import org.apache.shardingsphere.infra.optimize.converter.SQLNodeConvertEngine;
import org.apache.shardingsphere.infra.parser.ShardingSphereSQLParserEngine;
import org.apache.shardingsphere.sql.parser.exception.SQLParsingException;
diff --git
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/GroupBySQLNodeConverter.java
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/GroupBySQLNodeConverter.java
deleted file mode 100644
index c485ced..0000000
---
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/GroupBySQLNodeConverter.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.infra.optimize.convert.converter.impl;
-
-import org.apache.calcite.sql.SqlNode;
-import org.apache.calcite.sql.SqlNodeList;
-import org.apache.calcite.sql.parser.SqlParserPos;
-import
org.apache.shardingsphere.infra.optimize.convert.converter.SQLNodeConverter;
-import
org.apache.shardingsphere.infra.optimize.convert.converter.SqlNodeConverterUtil;
-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;
-
-/**
- * Group by converter.
- */
-public final class GroupBySQLNodeConverter implements
SQLNodeConverter<GroupBySegment, SqlNodeList> {
-
- @Override
- public Optional<SqlNodeList> convert(final GroupBySegment groupBy) {
- if (groupBy == null || groupBy.getGroupByItems() == null ||
groupBy.getGroupByItems().isEmpty()) {
- return Optional.empty();
- }
- Collection<OrderByItemSegment> groupByItems =
groupBy.getGroupByItems();
- Collection<SqlNode> groupBySqlNodes =
SqlNodeConverterUtil.convertOrderByItems(groupByItems);
- return Optional.of(new SqlNodeList(groupBySqlNodes,
SqlParserPos.ZERO));
- }
-}
diff --git
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/SelectStatementSQLNodeConverter.java
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/SelectStatementSQLNodeConverter.java
deleted file mode 100644
index 8386264..0000000
---
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/SelectStatementSQLNodeConverter.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.infra.optimize.convert.converter.impl;
-
-import org.apache.calcite.sql.SqlNode;
-import org.apache.calcite.sql.SqlNodeList;
-import org.apache.calcite.sql.SqlSelect;
-import org.apache.calcite.sql.parser.SqlParserPos;
-import
org.apache.shardingsphere.infra.optimize.convert.converter.SQLNodeConverter;
-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 java.util.Optional;
-
-/**
- * Converter of select statement to SQL node.
- */
-public final class SelectStatementSQLNodeConverter implements
SQLNodeConverter<SelectStatement, SqlNode> {
-
- @Override
- public Optional<SqlNode> convert(final SelectStatement selectStatement) {
- Optional<SqlNodeList> distinct = new
DistinctSQLNodeConverter().convert(selectStatement.getProjections());
- Optional<SqlNodeList> projections = new
ProjectionsSQLNodeConverter().convert(selectStatement.getProjections());
- Optional<SqlNode> from = new
TableSQLNodeConverter().convert(selectStatement.getFrom());
- Optional<SqlNode> where = new
WhereSQLNodeConverter().convert(selectStatement.getWhere().orElse(null));
- Optional<SqlNodeList> groupBy = new
GroupBySQLNodeConverter().convert(selectStatement.getGroupBy().orElse(null));
- Optional<SqlNode> having = new
HavingSQLNodeConverter().convert(selectStatement.getHaving().orElse(null));
- Optional<SqlNodeList> orderBy = new
OrderBySQLNodeConverter().convert(selectStatement.getOrderBy().orElse(null));
- Optional<LimitSegment> limit =
SelectStatementHandler.getLimitSegment(selectStatement);
- Optional<SqlNode> offset = new
OffsetSQLNodeConverter().convert(limit.orElse(null));
- Optional<SqlNode> rowCount = new
RowCountSQLNodeConverter().convert(limit.orElse(null));
- return Optional.of(new SqlSelect(SqlParserPos.ZERO,
- distinct.orElse(null),
- projections.orElse(null),
- from.orElse(null),
- where.orElse(null),
- groupBy.orElse(null),
- having.orElse(null),
- null,
- orderBy.orElse(null),
- offset.orElse(null),
- rowCount.orElse(null),
- null));
- }
-}
diff --git
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/SQLNodeConvertEngine.java
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/SQLNodeConvertEngine.java
similarity index 76%
rename from
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/SQLNodeConvertEngine.java
rename to
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/SQLNodeConvertEngine.java
index df22e1e..7003206 100644
---
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/SQLNodeConvertEngine.java
+++
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/SQLNodeConvertEngine.java
@@ -15,17 +15,15 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.infra.optimize.convert;
+package org.apache.shardingsphere.infra.optimize.converter;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.apache.calcite.sql.SqlNode;
-import
org.apache.shardingsphere.infra.optimize.convert.converter.impl.SelectStatementSQLNodeConverter;
+import
org.apache.shardingsphere.infra.optimize.converter.statement.SelectStatementConverter;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
-import java.util.Optional;
-
/**
* SQL node convert engine.
*/
@@ -33,17 +31,14 @@ import java.util.Optional;
public final class SQLNodeConvertEngine {
/**
- * Convert.
+ * Convert SQL statement to SQL node.
*
- * @param statement SQL statement
+ * @param statement SQL statement to be converted
* @return sqlNode converted SQL node
*/
public static SqlNode convert(final SQLStatement statement) {
if (statement instanceof SelectStatement) {
- Optional<SqlNode> selectSQLNode = new
SelectStatementSQLNodeConverter().convert((SelectStatement) statement);
- if (selectSQLNode.isPresent()) {
- return selectSQLNode.get();
- }
+ return new SelectStatementConverter().convert((SelectStatement)
statement);
}
throw new UnsupportedOperationException("Unsupported SQL node
conversion.");
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/SQLNodeConverter.java
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/SQLSegmentConverter.java
similarity index 65%
copy from
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/SQLNodeConverter.java
copy to
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/SQLSegmentConverter.java
index f8e07e0..d8c7ff7 100644
---
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/SQLNodeConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/SQLSegmentConverter.java
@@ -15,23 +15,26 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.infra.optimize.convert.converter;
+package org.apache.shardingsphere.infra.optimize.converter.segment;
import org.apache.calcite.sql.SqlNode;
-import org.apache.shardingsphere.sql.parser.api.visitor.ASTNode;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.SQLSegment;
import java.util.Optional;
/**
- * SQL node converter.
+ * SQL segment converter.
+ *
+ * @param <T> type of SQL segment
+ * @param <S> type of SQL node
*/
-public interface SQLNodeConverter<T extends ASTNode, R extends SqlNode> {
+public interface SQLSegmentConverter<T extends SQLSegment, S extends SqlNode> {
/**
- * Convert.
+ * Convert SQL segment to SQL node.
*
- * @param astNode AST node
- * @return sqlNode converted SQL node
+ * @param segment SQL segment be to converted
+ * @return converted SQL node
*/
- Optional<R> convert(T astNode);
+ Optional<S> convert(T segment);
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/ExpressionSQLNodeConverter.java
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/expression/ExpressionConverter.java
similarity index 52%
rename from
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/ExpressionSQLNodeConverter.java
rename to
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/expression/ExpressionConverter.java
index 8443cd1..3e1fc92 100644
---
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/ExpressionSQLNodeConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/expression/ExpressionConverter.java
@@ -15,10 +15,14 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.infra.optimize.convert.converter.impl;
+package org.apache.shardingsphere.infra.optimize.converter.segment.expression;
import org.apache.calcite.sql.SqlNode;
-import
org.apache.shardingsphere.infra.optimize.convert.converter.SQLNodeConverter;
+import
org.apache.shardingsphere.infra.optimize.converter.segment.SQLSegmentConverter;
+import
org.apache.shardingsphere.infra.optimize.converter.segment.expression.impl.BinaryOperationExpressionConverter;
+import
org.apache.shardingsphere.infra.optimize.converter.segment.expression.impl.ColumnConverter;
+import
org.apache.shardingsphere.infra.optimize.converter.segment.expression.impl.ListExpressionConverter;
+import
org.apache.shardingsphere.infra.optimize.converter.segment.expression.impl.LiteralExpressionConverter;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BinaryOperationExpression;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionSegment;
@@ -29,27 +33,27 @@ import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.L
import java.util.Optional;
/**
- * Expression converter entry.
+ * Expression converter.
*/
-public final class ExpressionSQLNodeConverter implements
SQLNodeConverter<ExpressionSegment, SqlNode> {
+public final class ExpressionConverter implements
SQLSegmentConverter<ExpressionSegment, SqlNode> {
@Override
- public Optional<SqlNode> convert(final ExpressionSegment expression) {
- if (null == expression) {
+ public Optional<SqlNode> convert(final ExpressionSegment segment) {
+ if (null == segment) {
return Optional.empty();
}
- if (expression instanceof LiteralExpressionSegment) {
- return new
LiteralExpressionSQLNodeConverter().convert((LiteralExpressionSegment)
expression);
- } else if (expression instanceof CommonExpressionSegment) {
+ if (segment instanceof LiteralExpressionSegment) {
+ return new
LiteralExpressionConverter().convert((LiteralExpressionSegment) segment);
+ } else if (segment instanceof CommonExpressionSegment) {
// TODO
throw new UnsupportedOperationException("unsupported
CommonExpressionSegment");
- } else if (expression instanceof ListExpression) {
- return new
ListExpressionSQLNodeConverter().convert((ListExpression) expression);
- } else if (expression instanceof BinaryOperationExpression) {
- return new
BinaryOperationExpressionSQLNodeConverter().convert((BinaryOperationExpression)
expression);
- } else if (expression instanceof ColumnSegment) {
- return new ColumnSQLNodeConverter().convert((ColumnSegment)
expression);
+ } else if (segment instanceof ListExpression) {
+ return new ListExpressionConverter().convert((ListExpression)
segment);
+ } else if (segment instanceof BinaryOperationExpression) {
+ return new
BinaryOperationExpressionConverter().convert((BinaryOperationExpression)
segment);
+ } else if (segment instanceof ColumnSegment) {
+ return new ColumnConverter().convert((ColumnSegment) segment);
}
- throw new UnsupportedOperationException("unsupported TableSegment
type: " + expression.getClass());
+ throw new UnsupportedOperationException("unsupported TableSegment
type: " + segment.getClass());
}
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/BinaryOperationExpressionSQLNodeConverter.java
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/expression/impl/BinaryOperationExpressionConverter.java
similarity index 52%
rename from
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/BinaryOperationExpressionSQLNodeConverter.java
rename to
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/expression/impl/BinaryOperationExpressionConverter.java
index a36027a..f68de30 100644
---
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/BinaryOperationExpressionSQLNodeConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/expression/impl/BinaryOperationExpressionConverter.java
@@ -15,30 +15,36 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.infra.optimize.convert.converter.impl;
+package
org.apache.shardingsphere.infra.optimize.converter.segment.expression.impl;
+import com.google.common.base.Preconditions;
import org.apache.calcite.sql.SqlBasicCall;
import org.apache.calcite.sql.SqlNode;
import org.apache.calcite.sql.parser.SqlParserPos;
-import
org.apache.shardingsphere.infra.optimize.convert.converter.SQLNodeConverter;
-import org.apache.shardingsphere.infra.optimize.operator.BinarySqlOperator;
+import
org.apache.shardingsphere.infra.optimize.converter.segment.SQLSegmentConverter;
+import
org.apache.shardingsphere.infra.optimize.converter.segment.expression.ExpressionConverter;
+import org.apache.shardingsphere.infra.optimize.operator.BinarySQLOperator;
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 java.util.Optional;
/**
* Binary operation expression converter.
*/
-public final class BinaryOperationExpressionSQLNodeConverter implements
SQLNodeConverter<BinaryOperationExpression, SqlNode> {
+public final class BinaryOperationExpressionConverter implements
SQLSegmentConverter<BinaryOperationExpression, SqlNode> {
@Override
- public Optional<SqlNode> convert(final BinaryOperationExpression
binaryOperationExpression) {
- SqlNode left = new
ExpressionSQLNodeConverter().convert(binaryOperationExpression.getLeft()).get();
- SqlNode right = new
ExpressionSQLNodeConverter().convert(binaryOperationExpression.getRight()).get();
- String operator = binaryOperationExpression.getOperator();
- BinarySqlOperator binarySqlOperator =
BinarySqlOperator.value(operator);
- SqlNode sqlNode = new
SqlBasicCall(binarySqlOperator.getSqlBinaryOperator(), new SqlNode[] {left,
right},
- SqlParserPos.ZERO);
- return Optional.of(sqlNode);
+ public Optional<SqlNode> convert(final BinaryOperationExpression segment) {
+ BinarySQLOperator operator =
BinarySQLOperator.value(segment.getOperator());
+ SqlNode left = convertExpression(segment.getLeft());
+ SqlNode right = convertExpression(segment.getRight());
+ return Optional.of(new SqlBasicCall(operator.getSqlBinaryOperator(),
new SqlNode[] {left, right}, SqlParserPos.ZERO));
+ }
+
+ private SqlNode convertExpression(final ExpressionSegment segment) {
+ Optional<SqlNode> result = new ExpressionConverter().convert(segment);
+ Preconditions.checkState(result.isPresent());
+ return result.get();
}
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/ColumnSQLNodeConverter.java
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/expression/impl/ColumnConverter.java
similarity index 76%
rename from
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/ColumnSQLNodeConverter.java
rename to
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/expression/impl/ColumnConverter.java
index f36c6b7..2065885 100644
---
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/ColumnSQLNodeConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/expression/impl/ColumnConverter.java
@@ -15,13 +15,13 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.infra.optimize.convert.converter.impl;
+package
org.apache.shardingsphere.infra.optimize.converter.segment.expression.impl;
import com.google.common.collect.ImmutableList;
import org.apache.calcite.sql.SqlIdentifier;
import org.apache.calcite.sql.SqlNode;
import org.apache.calcite.sql.parser.SqlParserPos;
-import
org.apache.shardingsphere.infra.optimize.convert.converter.SQLNodeConverter;
+import
org.apache.shardingsphere.infra.optimize.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;
@@ -30,12 +30,12 @@ import java.util.Optional;
/**
* Column converter.
*/
-public final class ColumnSQLNodeConverter implements
SQLNodeConverter<ColumnSegment, SqlNode> {
+public final class ColumnConverter implements
SQLSegmentConverter<ColumnSegment, SqlNode> {
@Override
- public Optional<SqlNode> convert(final ColumnSegment columnSegment) {
- Optional<OwnerSegment> owner = columnSegment.getOwner();
- String columnName = columnSegment.getIdentifier().getValue();
+ public Optional<SqlNode> convert(final ColumnSegment segment) {
+ Optional<OwnerSegment> owner = segment.getOwner();
+ String columnName = segment.getIdentifier().getValue();
if (owner.isPresent()) {
return Optional.of(new
SqlIdentifier(ImmutableList.of(owner.get().getIdentifier().getValue(),
columnName), SqlParserPos.ZERO));
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/ListExpressionSQLNodeConverter.java
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/expression/impl/ListExpressionConverter.java
similarity index 72%
rename from
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/ListExpressionSQLNodeConverter.java
rename to
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/expression/impl/ListExpressionConverter.java
index 326ca75..13e5586 100644
---
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/ListExpressionSQLNodeConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/expression/impl/ListExpressionConverter.java
@@ -15,30 +15,29 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.infra.optimize.convert.converter.impl;
+package
org.apache.shardingsphere.infra.optimize.converter.segment.expression.impl;
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.optimize.convert.converter.SQLNodeConverter;
+import
org.apache.shardingsphere.infra.optimize.converter.segment.SQLSegmentConverter;
+import
org.apache.shardingsphere.infra.optimize.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.ListExpression;
-import java.util.List;
import java.util.Optional;
/**
* List expression converter.
*/
-public final class ListExpressionSQLNodeConverter implements
SQLNodeConverter<ListExpression, SqlNode> {
+public final class ListExpressionConverter implements
SQLSegmentConverter<ListExpression, SqlNode> {
@Override
- public Optional<SqlNode> convert(final ListExpression expression) {
- List<ExpressionSegment> items = expression.getItems();
+ public Optional<SqlNode> convert(final ListExpression segment) {
SqlNode left = null;
- for (ExpressionSegment item : items) {
- Optional<SqlNode> optional = new
ExpressionSQLNodeConverter().convert(item);
+ for (ExpressionSegment item : segment.getItems()) {
+ Optional<SqlNode> optional = new
ExpressionConverter().convert(item);
if (!optional.isPresent()) {
continue;
}
@@ -48,6 +47,6 @@ public final class ListExpressionSQLNodeConverter implements
SQLNodeConverter<Li
}
left = new SqlBasicCall(SqlStdOperatorTable.OR, new SqlNode[]
{left, optional.get()}, SqlParserPos.ZERO);
}
- return Optional.of(left);
+ return Optional.ofNullable(left);
}
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/LiteralExpressionSQLNodeConverter.java
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/expression/impl/LiteralExpressionConverter.java
similarity index 69%
rename from
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/LiteralExpressionSQLNodeConverter.java
rename to
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/expression/impl/LiteralExpressionConverter.java
index f82fa63..01a87c3 100644
---
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/LiteralExpressionSQLNodeConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/expression/impl/LiteralExpressionConverter.java
@@ -15,25 +15,28 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.infra.optimize.convert.converter.impl;
+package
org.apache.shardingsphere.infra.optimize.converter.segment.expression.impl;
import org.apache.calcite.sql.SqlLiteral;
import org.apache.calcite.sql.SqlNode;
import org.apache.calcite.sql.parser.SqlParserPos;
-import
org.apache.shardingsphere.infra.optimize.convert.converter.SQLNodeConverter;
+import
org.apache.shardingsphere.infra.optimize.converter.segment.SQLSegmentConverter;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.LiteralExpressionSegment;
import java.util.Optional;
-public final class LiteralExpressionSQLNodeConverter implements
SQLNodeConverter<LiteralExpressionSegment, SqlNode> {
+/**
+ * Literal expression converter.
+ */
+public final class LiteralExpressionConverter implements
SQLSegmentConverter<LiteralExpressionSegment, SqlNode> {
@Override
- public Optional<SqlNode> convert(final LiteralExpressionSegment
literalExpression) {
- Object literals = literalExpression.getLiterals();
- if (literals.getClass() == Integer.class) {
- return
Optional.of(SqlLiteral.createExactNumeric(String.valueOf(literalExpression.getLiterals()),
SqlParserPos.ZERO));
- } else if (literals.getClass() == String.class) {
- return Optional.of(SqlLiteral.createCharString((String)
literalExpression.getLiterals(), SqlParserPos.ZERO));
+ public Optional<SqlNode> convert(final LiteralExpressionSegment segment) {
+ if (Integer.class == segment.getLiterals().getClass()) {
+ return
Optional.of(SqlLiteral.createExactNumeric(String.valueOf(segment.getLiterals()),
SqlParserPos.ZERO));
+ }
+ if (String.class == segment.getLiterals().getClass()) {
+ return Optional.of(SqlLiteral.createCharString((String)
segment.getLiterals(), SqlParserPos.ZERO));
}
return Optional.empty();
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/TableSQLNodeConverter.java
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/from/TableConverter.java
similarity index 52%
rename from
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/TableSQLNodeConverter.java
rename to
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/from/TableConverter.java
index d9548b5..c74ed50 100644
---
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/TableSQLNodeConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/from/TableConverter.java
@@ -15,10 +15,13 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.infra.optimize.convert.converter.impl;
+package org.apache.shardingsphere.infra.optimize.converter.segment.from;
import org.apache.calcite.sql.SqlNode;
-import
org.apache.shardingsphere.infra.optimize.convert.converter.SQLNodeConverter;
+import
org.apache.shardingsphere.infra.optimize.converter.segment.SQLSegmentConverter;
+import
org.apache.shardingsphere.infra.optimize.converter.segment.from.impl.JoinTableConverter;
+import
org.apache.shardingsphere.infra.optimize.converter.segment.from.impl.SimpleTableConverter;
+import
org.apache.shardingsphere.infra.optimize.converter.segment.from.impl.SubqueryTableConverter;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.JoinTableSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SubqueryTableSegment;
@@ -27,19 +30,19 @@ import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.Tab
import java.util.Optional;
/**
- * convert from clause.
+ * Table converter.
*/
-public final class TableSQLNodeConverter implements
SQLNodeConverter<TableSegment, SqlNode> {
+public final class TableConverter implements SQLSegmentConverter<TableSegment,
SqlNode> {
@Override
- public Optional<SqlNode> convert(final TableSegment table) {
- if (table instanceof SimpleTableSegment) {
- return new
SimpleTableSQLNodeConverter().convert((SimpleTableSegment) table);
- } else if (table instanceof JoinTableSegment) {
- return new JoinTableSQLNodeConverter().convert((JoinTableSegment)
table);
- } else if (table instanceof SubqueryTableSegment) {
- return new
SubqueryTableSQLNodeConverter().convert((SubqueryTableSegment) table);
+ public Optional<SqlNode> convert(final TableSegment segment) {
+ if (segment instanceof SimpleTableSegment) {
+ return new SimpleTableConverter().convert((SimpleTableSegment)
segment);
+ } else if (segment instanceof JoinTableSegment) {
+ return new JoinTableConverter().convert((JoinTableSegment)
segment);
+ } else if (segment instanceof SubqueryTableSegment) {
+ return new SubqueryTableConverter().convert((SubqueryTableSegment)
segment);
}
- throw new UnsupportedOperationException("Unsupported table segment
type: " + table.getClass());
+ throw new UnsupportedOperationException("Unsupported segment segment
type: " + segment.getClass());
}
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/JoinTableSQLNodeConverter.java
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/from/impl/JoinTableConverter.java
similarity index 52%
rename from
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/JoinTableSQLNodeConverter.java
rename to
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/from/impl/JoinTableConverter.java
index ccf2125..cca2316 100644
---
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/JoinTableSQLNodeConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/from/impl/JoinTableConverter.java
@@ -15,24 +15,27 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.infra.optimize.convert.converter.impl;
+package org.apache.shardingsphere.infra.optimize.converter.segment.from.impl;
+import com.google.common.base.Preconditions;
import org.apache.calcite.sql.JoinConditionType;
import org.apache.calcite.sql.JoinType;
import org.apache.calcite.sql.SqlJoin;
import org.apache.calcite.sql.SqlLiteral;
import org.apache.calcite.sql.SqlNode;
import org.apache.calcite.sql.parser.SqlParserPos;
-import
org.apache.shardingsphere.infra.optimize.convert.converter.SQLNodeConverter;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionSegment;
+import
org.apache.shardingsphere.infra.optimize.converter.segment.SQLSegmentConverter;
+import
org.apache.shardingsphere.infra.optimize.converter.segment.expression.ExpressionConverter;
+import
org.apache.shardingsphere.infra.optimize.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;
/**
* Join converter.
*/
-public final class JoinTableSQLNodeConverter implements
SQLNodeConverter<JoinTableSegment, SqlNode> {
+public final class JoinTableConverter implements
SQLSegmentConverter<JoinTableSegment, SqlNode> {
private static final String JOIN_TYPE_INNER = "INNER";
@@ -43,33 +46,37 @@ public final class JoinTableSQLNodeConverter implements
SQLNodeConverter<JoinTab
private static final String JOIN_TYPE_FULL = "FULL";
@Override
- public Optional<SqlNode> convert(final JoinTableSegment join) {
- SqlNode left = new
TableSQLNodeConverter().convert(join.getLeft()).get();
- SqlNode right = new
TableSQLNodeConverter().convert(join.getRight()).get();
- ExpressionSegment expressionSegment = join.getCondition();
- Optional<SqlNode> condition = new
ExpressionSQLNodeConverter().convert(expressionSegment);
- SqlLiteral conditionType = condition.isPresent() ?
JoinConditionType.ON.symbol(SqlParserPos.ZERO)
- : JoinConditionType.NONE.symbol(SqlParserPos.ZERO);
- SqlLiteral joinTypeSqlNode = convertJoinType(join.getJoinType());
- SqlNode sqlNode = new SqlJoin(SqlParserPos.ZERO, left,
- SqlLiteral.createBoolean(false, SqlParserPos.ZERO),
- joinTypeSqlNode, right, conditionType, condition.orElse(null));
- return Optional.of(sqlNode);
+ public Optional<SqlNode> convert(final JoinTableSegment segment) {
+ SqlNode left = convertJoinedTable(segment.getLeft());
+ SqlNode right = convertJoinedTable(segment.getRight());
+ 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)));
+ }
+
+ private SqlNode convertJoinedTable(final TableSegment segment) {
+ Optional<SqlNode> result = new TableConverter().convert(segment);
+ Preconditions.checkState(result.isPresent());
+ return result.get();
}
private SqlLiteral convertJoinType(final String joinType) {
- if (joinType == null) {
+ if (null == joinType) {
return JoinType.COMMA.symbol(SqlParserPos.ZERO);
- } else if (JOIN_TYPE_INNER.equals(joinType)) {
+ }
+ if (JOIN_TYPE_INNER.equals(joinType)) {
return JoinType.INNER.symbol(SqlParserPos.ZERO);
- } else if (JOIN_TYPE_LEFT.equals(joinType)) {
+ }
+ if (JOIN_TYPE_LEFT.equals(joinType)) {
return JoinType.LEFT.symbol(SqlParserPos.ZERO);
- } else if (JOIN_TYPE_RIGHT.equals(joinType)) {
+ }
+ if (JOIN_TYPE_RIGHT.equals(joinType)) {
return JoinType.RIGHT.symbol(SqlParserPos.ZERO);
- } else if (JOIN_TYPE_FULL.equals(joinType)) {
+ }
+ if (JOIN_TYPE_FULL.equals(joinType)) {
return JoinType.FULL.symbol(SqlParserPos.ZERO);
- } else {
- throw new UnsupportedOperationException("unsupported join type " +
joinType);
}
+ throw new UnsupportedOperationException("unsupported join type " +
joinType);
}
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/SimpleTableSQLNodeConverter.java
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/from/impl/SimpleTableConverter.java
similarity index 61%
rename from
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/SimpleTableSQLNodeConverter.java
rename to
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/from/impl/SimpleTableConverter.java
index 61ef9c0..82adee5 100644
---
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/SimpleTableSQLNodeConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/from/impl/SimpleTableConverter.java
@@ -15,14 +15,14 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.infra.optimize.convert.converter.impl;
+package org.apache.shardingsphere.infra.optimize.converter.segment.from.impl;
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.optimize.convert.converter.SQLNodeConverter;
+import
org.apache.shardingsphere.infra.optimize.converter.segment.SQLSegmentConverter;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.TableNameSegment;
@@ -31,19 +31,16 @@ import java.util.Optional;
/**
* Simple table converter.
*/
-public final class SimpleTableSQLNodeConverter implements
SQLNodeConverter<SimpleTableSegment, SqlNode> {
+public final class SimpleTableConverter implements
SQLSegmentConverter<SimpleTableSegment, SqlNode> {
@Override
- public Optional<SqlNode> convert(final SimpleTableSegment simpleTable) {
- TableNameSegment tableName = simpleTable.getTableName();
- SqlNode tableNameSqlNode = new
SqlIdentifier(tableName.getIdentifier().getValue(), SqlParserPos.ZERO);
- SqlNode sqlNode;
- if (simpleTable.getAlias().isPresent()) {
- SqlNode aliasIdentifier = new
SqlIdentifier(simpleTable.getAlias().get(), SqlParserPos.ZERO);
- sqlNode = new SqlBasicCall(SqlStdOperatorTable.AS, new SqlNode[]
{tableNameSqlNode, aliasIdentifier}, SqlParserPos.ZERO);
- } else {
- sqlNode = tableNameSqlNode;
+ public Optional<SqlNode> convert(final SimpleTableSegment segment) {
+ TableNameSegment tableName = segment.getTableName();
+ SqlNode tableNameSQLNode = new
SqlIdentifier(tableName.getIdentifier().getValue(), SqlParserPos.ZERO);
+ if (segment.getAlias().isPresent()) {
+ SqlNode aliasSQLNode = new SqlIdentifier(segment.getAlias().get(),
SqlParserPos.ZERO);
+ return Optional.of(new SqlBasicCall(SqlStdOperatorTable.AS, new
SqlNode[] {tableNameSQLNode, aliasSQLNode}, SqlParserPos.ZERO));
}
- return Optional.of(sqlNode);
+ return Optional.of(tableNameSQLNode);
}
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/SubqueryTableSQLNodeConverter.java
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/from/impl/SubqueryTableConverter.java
similarity index 80%
rename from
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/SubqueryTableSQLNodeConverter.java
rename to
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/from/impl/SubqueryTableConverter.java
index b0fcb55..2439145 100644
---
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/SubqueryTableSQLNodeConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/from/impl/SubqueryTableConverter.java
@@ -15,10 +15,10 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.infra.optimize.convert.converter.impl;
+package org.apache.shardingsphere.infra.optimize.converter.segment.from.impl;
import org.apache.calcite.sql.SqlNode;
-import
org.apache.shardingsphere.infra.optimize.convert.converter.SQLNodeConverter;
+import
org.apache.shardingsphere.infra.optimize.converter.segment.SQLSegmentConverter;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SubqueryTableSegment;
import java.util.Optional;
@@ -26,10 +26,10 @@ import java.util.Optional;
/**
* Subquery converter.
*/
-public final class SubqueryTableSQLNodeConverter implements
SQLNodeConverter<SubqueryTableSegment, SqlNode> {
+public final class SubqueryTableConverter implements
SQLSegmentConverter<SubqueryTableSegment, SqlNode> {
@Override
- public Optional<SqlNode> convert(final SubqueryTableSegment astNode) {
+ public Optional<SqlNode> convert(final SubqueryTableSegment segment) {
// TODO
return Optional.empty();
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/DistinctSQLNodeConverter.java
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/groupby/GroupByConverter.java
similarity index 58%
copy from
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/DistinctSQLNodeConverter.java
copy to
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/groupby/GroupByConverter.java
index 8fd861d..730f588 100644
---
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/DistinctSQLNodeConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/groupby/GroupByConverter.java
@@ -15,27 +15,23 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.infra.optimize.convert.converter.impl;
+package org.apache.shardingsphere.infra.optimize.converter.segment.groupby;
import org.apache.calcite.sql.SqlNodeList;
-import org.apache.calcite.sql.SqlSelectKeyword;
import org.apache.calcite.sql.parser.SqlParserPos;
-import
org.apache.shardingsphere.infra.optimize.convert.converter.SQLNodeConverter;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ProjectionsSegment;
+import
org.apache.shardingsphere.infra.optimize.converter.segment.SQLSegmentConverter;
+import
org.apache.shardingsphere.infra.optimize.converter.segment.orderby.item.OrderByItemConverterUtil;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.order.GroupBySegment;
-import java.util.Collections;
import java.util.Optional;
/**
- * Distinct sql node converter.
+ * Group by converter.
*/
-public final class DistinctSQLNodeConverter implements
SQLNodeConverter<ProjectionsSegment, SqlNodeList> {
+public final class GroupByConverter implements
SQLSegmentConverter<GroupBySegment, SqlNodeList> {
@Override
- public Optional<SqlNodeList> convert(final ProjectionsSegment
projectionsSegment) {
- if (projectionsSegment.isDistinctRow()) {
- return Optional.of(new
SqlNodeList(Collections.singletonList(SqlSelectKeyword.DISTINCT.symbol(SqlParserPos.ZERO)),
SqlParserPos.ZERO));
- }
- return Optional.empty();
+ public Optional<SqlNodeList> convert(final GroupBySegment segment) {
+ return null == segment || segment.getGroupByItems().isEmpty() ?
Optional.empty() : Optional.of(new
SqlNodeList(OrderByItemConverterUtil.convert(segment.getGroupByItems()),
SqlParserPos.ZERO));
}
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/HavingSQLNodeConverter.java
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/groupby/HavingConverter.java
similarity index 65%
rename from
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/HavingSQLNodeConverter.java
rename to
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/groupby/HavingConverter.java
index cdf4245..329dafd 100644
---
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/HavingSQLNodeConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/groupby/HavingConverter.java
@@ -15,10 +15,11 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.infra.optimize.convert.converter.impl;
+package org.apache.shardingsphere.infra.optimize.converter.segment.groupby;
import org.apache.calcite.sql.SqlNode;
-import
org.apache.shardingsphere.infra.optimize.convert.converter.SQLNodeConverter;
+import
org.apache.shardingsphere.infra.optimize.converter.segment.SQLSegmentConverter;
+import
org.apache.shardingsphere.infra.optimize.converter.segment.expression.ExpressionConverter;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.HavingSegment;
import java.util.Optional;
@@ -26,13 +27,10 @@ import java.util.Optional;
/**
* Having converter.
*/
-public final class HavingSQLNodeConverter implements
SQLNodeConverter<HavingSegment, SqlNode> {
+public final class HavingConverter implements
SQLSegmentConverter<HavingSegment, SqlNode> {
@Override
- public Optional<SqlNode> convert(final HavingSegment having) {
- if (having == null) {
- return Optional.empty();
- }
- return new ExpressionSQLNodeConverter().convert(having.getExpr());
+ public Optional<SqlNode> convert(final HavingSegment segment) {
+ return null == segment ? Optional.empty() : new
ExpressionConverter().convert(segment.getExpr());
}
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/AbstractLimitSQLNodeConverter.java
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/limit/AbstractLimitConverter.java
similarity index 65%
rename from
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/AbstractLimitSQLNodeConverter.java
rename to
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/limit/AbstractLimitConverter.java
index 4b86b22..abfc5d3 100644
---
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/AbstractLimitSQLNodeConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/limit/AbstractLimitConverter.java
@@ -15,10 +15,11 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.infra.optimize.convert.converter.impl;
+package org.apache.shardingsphere.infra.optimize.converter.segment.limit;
+import lombok.RequiredArgsConstructor;
import org.apache.calcite.sql.SqlNode;
-import
org.apache.shardingsphere.infra.optimize.convert.converter.SQLNodeConverter;
+import
org.apache.shardingsphere.infra.optimize.converter.segment.SQLSegmentConverter;
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;
@@ -26,21 +27,18 @@ import java.util.Optional;
import java.util.function.Function;
/**
- * Abstract limit sql node converter.
+ * Abstract limit converter.
*/
-public abstract class AbstractLimitSQLNodeConverter implements
SQLNodeConverter<LimitSegment, SqlNode> {
+@RequiredArgsConstructor
+public abstract class AbstractLimitConverter implements
SQLSegmentConverter<LimitSegment, SqlNode> {
private final Function<LimitSegment, Optional<PaginationValueSegment>>
function;
- protected AbstractLimitSQLNodeConverter(final Function<LimitSegment,
Optional<PaginationValueSegment>> function) {
- this.function = function;
- }
-
@Override
- public final Optional<SqlNode> convert(final LimitSegment limit) {
- if (null == limit) {
+ public final Optional<SqlNode> convert(final LimitSegment segment) {
+ if (null == segment) {
return Optional.empty();
}
- return function.apply(limit).flatMap(optional -> new
PaginationValueSQLConverter().convert(optional));
+ return function.apply(segment).flatMap(optional -> new
PaginationValueSQLConverter().convert(optional));
}
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/OffsetSQLNodeConverter.java
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/limit/OffsetConverter.java
similarity index 81%
rename from
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/OffsetSQLNodeConverter.java
rename to
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/limit/OffsetConverter.java
index e53c3a2..8eb77ab 100644
---
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/OffsetSQLNodeConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/limit/OffsetConverter.java
@@ -15,16 +15,16 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.infra.optimize.convert.converter.impl;
+package org.apache.shardingsphere.infra.optimize.converter.segment.limit;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.pagination.limit.LimitSegment;
/**
- * Offset sql node converter.
+ * Offset converter.
*/
-public final class OffsetSQLNodeConverter extends
AbstractLimitSQLNodeConverter {
+public final class OffsetConverter extends AbstractLimitConverter {
- public OffsetSQLNodeConverter() {
+ public OffsetConverter() {
super(LimitSegment::getOffset);
}
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/PaginationValueSQLConverter.java
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/limit/PaginationValueSQLConverter.java
similarity index 61%
rename from
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/PaginationValueSQLConverter.java
rename to
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/limit/PaginationValueSQLConverter.java
index 8f5e59e..f6c843e 100644
---
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/PaginationValueSQLConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/limit/PaginationValueSQLConverter.java
@@ -15,13 +15,13 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.infra.optimize.convert.converter.impl;
+package org.apache.shardingsphere.infra.optimize.converter.segment.limit;
import org.apache.calcite.sql.SqlDynamicParam;
import org.apache.calcite.sql.SqlLiteral;
import org.apache.calcite.sql.SqlNode;
import org.apache.calcite.sql.parser.SqlParserPos;
-import
org.apache.shardingsphere.infra.optimize.convert.converter.SQLNodeConverter;
+import
org.apache.shardingsphere.infra.optimize.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.ParameterMarkerLimitValueSegment;
@@ -31,16 +31,19 @@ import java.util.Optional;
/**
* Pagination value converter.
*/
-public final class PaginationValueSQLConverter implements
SQLNodeConverter<PaginationValueSegment, SqlNode> {
+public final class PaginationValueSQLConverter implements
SQLSegmentConverter<PaginationValueSegment, SqlNode> {
@Override
- public Optional<SqlNode> convert(final PaginationValueSegment
paginationValue) {
- if (paginationValue instanceof NumberLiteralPaginationValueSegment) {
- NumberLiteralPaginationValueSegment offsetValue =
(NumberLiteralPaginationValueSegment) paginationValue;
- return
Optional.of(SqlLiteral.createExactNumeric(String.valueOf(offsetValue.getValue()),
SqlParserPos.ZERO));
- } else {
- ParameterMarkerLimitValueSegment offsetParam =
(ParameterMarkerLimitValueSegment) paginationValue;
- return Optional.of(new
SqlDynamicParam(offsetParam.getParameterIndex(), SqlParserPos.ZERO));
- }
+ public Optional<SqlNode> convert(final PaginationValueSegment segment) {
+ return Optional.of(segment instanceof
NumberLiteralPaginationValueSegment
+ ? getLiteralSQLNode((NumberLiteralPaginationValueSegment)
segment) : getParameterMarkerSQLNode((ParameterMarkerLimitValueSegment)
segment));
+ }
+
+ private SqlNode getLiteralSQLNode(final
NumberLiteralPaginationValueSegment segment) {
+ return
SqlLiteral.createExactNumeric(String.valueOf(segment.getValue()),
SqlParserPos.ZERO);
+ }
+
+ private SqlNode getParameterMarkerSQLNode(final
ParameterMarkerLimitValueSegment segment) {
+ return new SqlDynamicParam(segment.getParameterIndex(),
SqlParserPos.ZERO);
}
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/RowCountSQLNodeConverter.java
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/limit/RowCountConverter.java
similarity index 80%
rename from
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/RowCountSQLNodeConverter.java
rename to
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/limit/RowCountConverter.java
index e83b5f2..98f677a 100644
---
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/RowCountSQLNodeConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/limit/RowCountConverter.java
@@ -15,16 +15,16 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.infra.optimize.convert.converter.impl;
+package org.apache.shardingsphere.infra.optimize.converter.segment.limit;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.pagination.limit.LimitSegment;
/**
- * Row count sql node converter.
+ * Row count converter.
*/
-public final class RowCountSQLNodeConverter extends
AbstractLimitSQLNodeConverter {
+public final class RowCountConverter extends AbstractLimitConverter {
- public RowCountSQLNodeConverter() {
+ public RowCountConverter() {
super(LimitSegment::getRowCount);
}
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/OrderBySQLNodeConverter.java
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/orderby/OrderByConverter.java
similarity index 58%
rename from
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/OrderBySQLNodeConverter.java
rename to
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/orderby/OrderByConverter.java
index 3891727..7ca9552 100644
---
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/OrderBySQLNodeConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/orderby/OrderByConverter.java
@@ -15,29 +15,23 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.infra.optimize.convert.converter.impl;
+package org.apache.shardingsphere.infra.optimize.converter.segment.orderby;
-import org.apache.calcite.sql.SqlNode;
import org.apache.calcite.sql.SqlNodeList;
import org.apache.calcite.sql.parser.SqlParserPos;
-import
org.apache.shardingsphere.infra.optimize.convert.converter.SqlNodeConverterUtil;
-import
org.apache.shardingsphere.infra.optimize.convert.converter.SQLNodeConverter;
+import
org.apache.shardingsphere.infra.optimize.converter.segment.SQLSegmentConverter;
+import
org.apache.shardingsphere.infra.optimize.converter.segment.orderby.item.OrderByItemConverterUtil;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.order.OrderBySegment;
-import java.util.Collection;
import java.util.Optional;
/**
* Order by converter.
*/
-public final class OrderBySQLNodeConverter implements
SQLNodeConverter<OrderBySegment, SqlNodeList> {
+public final class OrderByConverter implements
SQLSegmentConverter<OrderBySegment, SqlNodeList> {
@Override
- public Optional<SqlNodeList> convert(final OrderBySegment orderBy) {
- if (orderBy == null) {
- return Optional.empty();
- }
- Collection<SqlNode> orderBySqlNodes =
SqlNodeConverterUtil.convertOrderByItems(orderBy.getOrderByItems());
- return Optional.of(new SqlNodeList(orderBySqlNodes,
SqlParserPos.ZERO));
+ 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-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/ColumnOrderByItemSQLNodeConverter.java
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/orderby/item/ColumnOrderByItemConverter.java
similarity index 63%
rename from
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/ColumnOrderByItemSQLNodeConverter.java
rename to
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/orderby/item/ColumnOrderByItemConverter.java
index 620fadf..f707b02 100644
---
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/ColumnOrderByItemSQLNodeConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/orderby/item/ColumnOrderByItemConverter.java
@@ -15,13 +15,14 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.infra.optimize.convert.converter.impl;
+package
org.apache.shardingsphere.infra.optimize.converter.segment.orderby.item;
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.optimize.convert.converter.SQLNodeConverter;
+import
org.apache.shardingsphere.infra.optimize.converter.segment.SQLSegmentConverter;
+import
org.apache.shardingsphere.infra.optimize.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.order.item.ColumnOrderByItemSegment;
@@ -29,16 +30,16 @@ import java.util.Objects;
import java.util.Optional;
/**
- * Column of order by converter.
+ * Column of order by item converter.
*/
-public final class ColumnOrderByItemSQLNodeConverter implements
SQLNodeConverter<ColumnOrderByItemSegment, SqlNode> {
+public final class ColumnOrderByItemConverter implements
SQLSegmentConverter<ColumnOrderByItemSegment, SqlNode> {
@Override
- public Optional<SqlNode> convert(final ColumnOrderByItemSegment
columnOrderBy) {
- Optional<SqlNode> optional = new
ColumnSQLNodeConverter().convert(columnOrderBy.getColumn());
- if (optional.isPresent() && Objects.equals(OrderDirection.DESC,
columnOrderBy.getOrderDirection())) {
- optional = Optional.of(new SqlBasicCall(SqlStdOperatorTable.DESC,
new SqlNode[] {optional.get()}, SqlParserPos.ZERO));
+ public Optional<SqlNode> convert(final ColumnOrderByItemSegment segment) {
+ Optional<SqlNode> result = new
ColumnConverter().convert(segment.getColumn());
+ if (result.isPresent() && Objects.equals(OrderDirection.DESC,
segment.getOrderDirection())) {
+ result = Optional.of(new SqlBasicCall(SqlStdOperatorTable.DESC,
new SqlNode[] {result.get()}, SqlParserPos.ZERO));
}
- return optional;
+ return result;
}
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/ExpressionOrderByItemSQLNodeConverter.java
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/orderby/item/ExpressionOrderByItemConverter.java
similarity index 75%
rename from
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/ExpressionOrderByItemSQLNodeConverter.java
rename to
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/orderby/item/ExpressionOrderByItemConverter.java
index 90fbed9..1d756e6 100644
---
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/ExpressionOrderByItemSQLNodeConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/orderby/item/ExpressionOrderByItemConverter.java
@@ -15,18 +15,21 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.infra.optimize.convert.converter.impl;
+package
org.apache.shardingsphere.infra.optimize.converter.segment.orderby.item;
import org.apache.calcite.sql.SqlNode;
-import
org.apache.shardingsphere.infra.optimize.convert.converter.SQLNodeConverter;
+import
org.apache.shardingsphere.infra.optimize.converter.segment.SQLSegmentConverter;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.order.item.ExpressionOrderByItemSegment;
import java.util.Optional;
-public final class ExpressionOrderByItemSQLNodeConverter implements
SQLNodeConverter<ExpressionOrderByItemSegment, SqlNode> {
+/**
+ * Expression of order by item converter.
+ */
+public final class ExpressionOrderByItemConverter implements
SQLSegmentConverter<ExpressionOrderByItemSegment, SqlNode> {
@Override
- public Optional<SqlNode> convert(final ExpressionOrderByItemSegment
astNode) {
+ public Optional<SqlNode> convert(final ExpressionOrderByItemSegment
segment) {
// TODO
return Optional.empty();
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/SqlNodeConverterUtil.java
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/orderby/item/OrderByItemConverterUtil.java
similarity index 78%
rename from
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/SqlNodeConverterUtil.java
rename to
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/orderby/item/OrderByItemConverterUtil.java
index dc900fcb..bced900 100644
---
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/SqlNodeConverterUtil.java
+++
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/orderby/item/OrderByItemConverterUtil.java
@@ -15,10 +15,11 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.infra.optimize.convert.converter;
+package
org.apache.shardingsphere.infra.optimize.converter.segment.orderby.item;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
import org.apache.calcite.sql.SqlNode;
-import
org.apache.shardingsphere.infra.optimize.convert.converter.impl.ColumnOrderByItemSQLNodeConverter;
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;
@@ -29,20 +30,22 @@ import java.util.ArrayList;
import java.util.Collection;
/**
- * Utility for sql node converter.
+ * Order by item converter utility.
*/
-public final class SqlNodeConverterUtil {
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class OrderByItemConverterUtil {
/**
* Convert order by items.
- * @param orderByItems order by item list.
- * @return a collection of order by item <code>SqlNode</code>
+ *
+ * @param orderByItems order by item list
+ * @return SQL nodes converted by order by item
*/
- public static Collection<SqlNode> convertOrderByItems(final
Collection<OrderByItemSegment> orderByItems) {
+ public static Collection<SqlNode> convert(final
Collection<OrderByItemSegment> orderByItems) {
Collection<SqlNode> result = new ArrayList<>(orderByItems.size());
for (OrderByItemSegment each : orderByItems) {
if (each instanceof ColumnOrderByItemSegment) {
- new
ColumnOrderByItemSQLNodeConverter().convert((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) {
diff --git
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/DistinctSQLNodeConverter.java
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/projection/DistinctConverter.java
similarity index 68%
rename from
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/DistinctSQLNodeConverter.java
rename to
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/projection/DistinctConverter.java
index 8fd861d..0a600d7 100644
---
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/DistinctSQLNodeConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/projection/DistinctConverter.java
@@ -15,27 +15,24 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.infra.optimize.convert.converter.impl;
+package org.apache.shardingsphere.infra.optimize.converter.segment.projection;
import org.apache.calcite.sql.SqlNodeList;
import org.apache.calcite.sql.SqlSelectKeyword;
import org.apache.calcite.sql.parser.SqlParserPos;
-import
org.apache.shardingsphere.infra.optimize.convert.converter.SQLNodeConverter;
+import
org.apache.shardingsphere.infra.optimize.converter.segment.SQLSegmentConverter;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ProjectionsSegment;
import java.util.Collections;
import java.util.Optional;
/**
- * Distinct sql node converter.
+ * Distinct converter.
*/
-public final class DistinctSQLNodeConverter implements
SQLNodeConverter<ProjectionsSegment, SqlNodeList> {
+public final class DistinctConverter implements
SQLSegmentConverter<ProjectionsSegment, SqlNodeList> {
@Override
- public Optional<SqlNodeList> convert(final ProjectionsSegment
projectionsSegment) {
- if (projectionsSegment.isDistinctRow()) {
- return Optional.of(new
SqlNodeList(Collections.singletonList(SqlSelectKeyword.DISTINCT.symbol(SqlParserPos.ZERO)),
SqlParserPos.ZERO));
- }
- return Optional.empty();
+ 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();
}
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/ProjectionsSQLNodeConverter.java
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/projection/ProjectionsConverter.java
similarity index 53%
rename from
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/ProjectionsSQLNodeConverter.java
rename to
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/projection/ProjectionsConverter.java
index 5c677f6..cbe17d1 100644
---
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/ProjectionsSQLNodeConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/projection/ProjectionsConverter.java
@@ -15,12 +15,14 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.infra.optimize.convert.converter.impl;
+package org.apache.shardingsphere.infra.optimize.converter.segment.projection;
import org.apache.calcite.sql.SqlNode;
import org.apache.calcite.sql.SqlNodeList;
import org.apache.calcite.sql.parser.SqlParserPos;
-import
org.apache.shardingsphere.infra.optimize.convert.converter.SQLNodeConverter;
+import
org.apache.shardingsphere.infra.optimize.converter.segment.SQLSegmentConverter;
+import
org.apache.shardingsphere.infra.optimize.converter.segment.projection.impl.ColumnProjectionConverter;
+import
org.apache.shardingsphere.infra.optimize.converter.segment.projection.impl.ExpressionProjectionConverter;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ColumnProjectionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ExpressionProjectionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ProjectionSegment;
@@ -28,30 +30,29 @@ import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.Projecti
import java.util.ArrayList;
import java.util.Collection;
-import java.util.List;
import java.util.Optional;
/**
* Projection converter.
*/
-public final class ProjectionsSQLNodeConverter implements
SQLNodeConverter<ProjectionsSegment, SqlNodeList> {
+public final class ProjectionsConverter implements
SQLSegmentConverter<ProjectionsSegment, SqlNodeList> {
@Override
- public Optional<SqlNodeList> convert(final ProjectionsSegment
projectionsSegment) {
- Collection<ProjectionSegment> projections =
projectionsSegment.getProjections();
- List<SqlNode> columnNodes = new ArrayList<>(projections.size());
- for (ProjectionSegment projection : projections) {
- Optional<SqlNode> optional = Optional.empty();
- if (projection instanceof ColumnProjectionSegment) {
- optional = new
ColumnProjectionSQLNodeConverter().convert((ColumnProjectionSegment)
projection);
- } else if (projection instanceof ExpressionProjectionSegment) {
- optional = new
ExpressionProjectionSQLNodeConverter().convert((ExpressionProjectionSegment)
projection);
- }
- // TODO other Projection
- if (optional.isPresent()) {
- columnNodes.add(optional.get());
- }
+ public Optional<SqlNodeList> convert(final ProjectionsSegment segment) {
+ Collection<SqlNode> projectionSQLNodes = new
ArrayList<>(segment.getProjections().size());
+ for (ProjectionSegment each : segment.getProjections()) {
+ getProjectionSQLNode(each).ifPresent(projectionSQLNodes::add);
}
- return Optional.of(new SqlNodeList(columnNodes, SqlParserPos.ZERO));
+ return Optional.of(new SqlNodeList(projectionSQLNodes,
SqlParserPos.ZERO));
+ }
+
+ private Optional<SqlNode> getProjectionSQLNode(final ProjectionSegment
segment) {
+ if (segment instanceof ColumnProjectionSegment) {
+ return new
ColumnProjectionConverter().convert((ColumnProjectionSegment) segment);
+ } else if (segment instanceof ExpressionProjectionSegment) {
+ return new
ExpressionProjectionConverter().convert((ExpressionProjectionSegment) segment);
+ }
+ // TODO process other projection
+ return Optional.empty();
}
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/ColumnProjectionSQLNodeConverter.java
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/projection/impl/ColumnProjectionConverter.java
similarity index 68%
rename from
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/ColumnProjectionSQLNodeConverter.java
rename to
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/projection/impl/ColumnProjectionConverter.java
index 1628126..b07a657 100644
---
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/ColumnProjectionSQLNodeConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/projection/impl/ColumnProjectionConverter.java
@@ -15,11 +15,11 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.infra.optimize.convert.converter.impl;
+package
org.apache.shardingsphere.infra.optimize.converter.segment.projection.impl;
import org.apache.calcite.sql.SqlNode;
-import
org.apache.shardingsphere.infra.optimize.convert.converter.SQLNodeConverter;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment;
+import
org.apache.shardingsphere.infra.optimize.converter.segment.SQLSegmentConverter;
+import
org.apache.shardingsphere.infra.optimize.converter.segment.expression.impl.ColumnConverter;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ColumnProjectionSegment;
import java.util.Optional;
@@ -27,11 +27,10 @@ import java.util.Optional;
/**
* Column projection converter.
*/
-public final class ColumnProjectionSQLNodeConverter implements
SQLNodeConverter<ColumnProjectionSegment, SqlNode> {
+public final class ColumnProjectionConverter implements
SQLSegmentConverter<ColumnProjectionSegment, SqlNode> {
@Override
- public Optional<SqlNode> convert(final ColumnProjectionSegment
columnProjection) {
- ColumnSegment column = columnProjection.getColumn();
- return new ColumnSQLNodeConverter().convert(column);
+ public Optional<SqlNode> convert(final ColumnProjectionSegment segment) {
+ return new ColumnConverter().convert(segment.getColumn());
}
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/ExpressionProjectionSQLNodeConverter.java
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/projection/impl/ExpressionProjectionConverter.java
similarity index 76%
rename from
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/ExpressionProjectionSQLNodeConverter.java
rename to
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/projection/impl/ExpressionProjectionConverter.java
index 2f2943b..3c986ab 100644
---
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/ExpressionProjectionSQLNodeConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/projection/impl/ExpressionProjectionConverter.java
@@ -15,22 +15,25 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.infra.optimize.convert.converter.impl;
+package
org.apache.shardingsphere.infra.optimize.converter.segment.projection.impl;
import org.apache.calcite.sql.SqlCharStringLiteral;
import org.apache.calcite.sql.SqlNode;
import org.apache.calcite.sql.parser.SqlParserPos;
-import
org.apache.shardingsphere.infra.optimize.convert.converter.SQLNodeConverter;
+import
org.apache.shardingsphere.infra.optimize.converter.segment.SQLSegmentConverter;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ExpressionProjectionSegment;
import java.util.Optional;
-public final class ExpressionProjectionSQLNodeConverter implements
SQLNodeConverter<ExpressionProjectionSegment, SqlNode> {
+/**
+ * Expression projection converter.
+ */
+public final class ExpressionProjectionConverter implements
SQLSegmentConverter<ExpressionProjectionSegment, SqlNode> {
@Override
- public Optional<SqlNode> convert(final ExpressionProjectionSegment
expressionProjection) {
+ public Optional<SqlNode> convert(final ExpressionProjectionSegment
segment) {
// TODO expression has not been parsed now.
- String expression = expressionProjection.getText();
+ String expression = segment.getText();
return Optional.of(SqlCharStringLiteral.createCharString(expression,
SqlParserPos.ZERO));
}
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/WhereSQLNodeConverter.java
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/where/WhereConverter.java
similarity index 62%
rename from
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/WhereSQLNodeConverter.java
rename to
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/where/WhereConverter.java
index 4ba54e4..e4f9dde 100644
---
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/impl/WhereSQLNodeConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/where/WhereConverter.java
@@ -15,11 +15,11 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.infra.optimize.convert.converter.impl;
+package org.apache.shardingsphere.infra.optimize.converter.segment.where;
import org.apache.calcite.sql.SqlNode;
-import
org.apache.shardingsphere.infra.optimize.convert.converter.SQLNodeConverter;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionSegment;
+import
org.apache.shardingsphere.infra.optimize.converter.segment.SQLSegmentConverter;
+import
org.apache.shardingsphere.infra.optimize.converter.segment.expression.ExpressionConverter;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.WhereSegment;
import java.util.Optional;
@@ -27,14 +27,10 @@ import java.util.Optional;
/**
* Where converter.
*/
-public final class WhereSQLNodeConverter implements
SQLNodeConverter<WhereSegment, SqlNode> {
+public final class WhereConverter implements SQLSegmentConverter<WhereSegment,
SqlNode> {
@Override
- public Optional<SqlNode> convert(final WhereSegment where) {
- if (where == null) {
- return Optional.empty();
- }
- ExpressionSegment whereExpr = where.getExpr();
- return new ExpressionSQLNodeConverter().convert(whereExpr);
+ public Optional<SqlNode> convert(final WhereSegment segment) {
+ return null == segment ? Optional.empty() : new
ExpressionConverter().convert(segment.getExpr());
}
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/SQLNodeConverter.java
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/statement/SQLStatementConverter.java
similarity index 66%
rename from
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/SQLNodeConverter.java
rename to
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/statement/SQLStatementConverter.java
index f8e07e0..58aba22 100644
---
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/convert/converter/SQLNodeConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/statement/SQLStatementConverter.java
@@ -15,23 +15,23 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.infra.optimize.convert.converter;
+package org.apache.shardingsphere.infra.optimize.converter.statement;
import org.apache.calcite.sql.SqlNode;
-import org.apache.shardingsphere.sql.parser.api.visitor.ASTNode;
-
-import java.util.Optional;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
/**
- * SQL node converter.
+ * SQL Statement converter.
+ *
+ * @param <T> type of SQL statement
*/
-public interface SQLNodeConverter<T extends ASTNode, R extends SqlNode> {
+public interface SQLStatementConverter<T extends SQLStatement> {
/**
- * Convert.
+ * Convert SQL statement to SQL node.
*
- * @param astNode AST node
- * @return sqlNode converted SQL node
+ * @param sqlStatement SQL statement be to converted
+ * @return converted SQL node
*/
- Optional<R> convert(T astNode);
+ SqlNode convert(T sqlStatement);
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/statement/SelectStatementConverter.java
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/statement/SelectStatementConverter.java
new file mode 100644
index 0000000..dff2707
--- /dev/null
+++
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/statement/SelectStatementConverter.java
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.infra.optimize.converter.statement;
+
+import com.google.common.base.Preconditions;
+import org.apache.calcite.sql.SqlNode;
+import org.apache.calcite.sql.SqlNodeList;
+import org.apache.calcite.sql.SqlSelect;
+import org.apache.calcite.sql.parser.SqlParserPos;
+import
org.apache.shardingsphere.infra.optimize.converter.segment.from.TableConverter;
+import
org.apache.shardingsphere.infra.optimize.converter.segment.groupby.GroupByConverter;
+import
org.apache.shardingsphere.infra.optimize.converter.segment.groupby.HavingConverter;
+import
org.apache.shardingsphere.infra.optimize.converter.segment.limit.OffsetConverter;
+import
org.apache.shardingsphere.infra.optimize.converter.segment.limit.RowCountConverter;
+import
org.apache.shardingsphere.infra.optimize.converter.segment.orderby.OrderByConverter;
+import
org.apache.shardingsphere.infra.optimize.converter.segment.projection.DistinctConverter;
+import
org.apache.shardingsphere.infra.optimize.converter.segment.projection.ProjectionsConverter;
+import
org.apache.shardingsphere.infra.optimize.converter.segment.where.WhereConverter;
+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 java.util.Optional;
+
+/**
+ * Converter of select statement to SQL node.
+ */
+public final class SelectStatementConverter implements
SQLStatementConverter<SelectStatement> {
+
+ @Override
+ public SqlNode convert(final SelectStatement selectStatement) {
+ Optional<SqlNodeList> distinct = new
DistinctConverter().convert(selectStatement.getProjections());
+ Optional<SqlNodeList> projections = new
ProjectionsConverter().convert(selectStatement.getProjections());
+ Preconditions.checkState(projections.isPresent());
+ Optional<SqlNode> from = new
TableConverter().convert(selectStatement.getFrom());
+ Optional<SqlNode> where = new
WhereConverter().convert(selectStatement.getWhere().orElse(null));
+ Optional<SqlNodeList> groupBy = new
GroupByConverter().convert(selectStatement.getGroupBy().orElse(null));
+ Optional<SqlNode> having = new
HavingConverter().convert(selectStatement.getHaving().orElse(null));
+ Optional<SqlNodeList> orderBy = new
OrderByConverter().convert(selectStatement.getOrderBy().orElse(null));
+ Optional<LimitSegment> limit =
SelectStatementHandler.getLimitSegment(selectStatement);
+ Optional<SqlNode> offset = new
OffsetConverter().convert(limit.orElse(null));
+ Optional<SqlNode> rowCount = new
RowCountConverter().convert(limit.orElse(null));
+ return new SqlSelect(SqlParserPos.ZERO,
+ distinct.orElse(null),
+ projections.get(),
+ from.orElse(null),
+ where.orElse(null),
+ groupBy.orElse(null),
+ having.orElse(null),
+ null,
+ orderBy.orElse(null),
+ offset.orElse(null),
+ rowCount.orElse(null),
+ null);
+ }
+}
diff --git
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/operator/BinarySqlOperator.java
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/operator/BinarySQLOperator.java
similarity index 67%
rename from
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/operator/BinarySqlOperator.java
rename to
shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/operator/BinarySQLOperator.java
index 4acb56c..04bf0bf 100644
---
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/operator/BinarySqlOperator.java
+++
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/operator/BinarySQLOperator.java
@@ -17,54 +17,46 @@
package org.apache.shardingsphere.infra.optimize.operator;
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
import org.apache.calcite.sql.SqlBinaryOperator;
import org.apache.calcite.sql.fun.SqlStdOperatorTable;
/**
- * binary sql operator.
+ * Binary SQL operator.
*/
-public enum BinarySqlOperator {
-
+@RequiredArgsConstructor
+public enum BinarySQLOperator {
+
EQUALS("=", SqlStdOperatorTable.EQUALS),
-
+
GREATER_THAN(">", SqlStdOperatorTable.GREATER_THAN),
-
+
GREATER_EQUALS_THAN(">=", SqlStdOperatorTable.GREATER_THAN_OR_EQUAL),
-
+
LESS_THAN("<", SqlStdOperatorTable.LESS_THAN),
-
+
LESS_EQUALS_THAN("<=", SqlStdOperatorTable.LESS_THAN_OR_EQUAL),
-
+
AND("AND", SqlStdOperatorTable.AND),
-
+
NONE("", null);
-
+
private final String operator;
-
+
+ @Getter
private final SqlBinaryOperator sqlBinaryOperator;
-
- BinarySqlOperator(final String operator, final SqlBinaryOperator
sqlBinaryOperator) {
- this.operator = operator;
- this.sqlBinaryOperator = sqlBinaryOperator;
- }
-
- /**
- * Get binary operator.
- * @return sql binary operator
- */
- public SqlBinaryOperator getSqlBinaryOperator() {
- return sqlBinaryOperator;
- }
-
+
/**
- * convert string to BinarySqlOperator.
- * @param sqlOperator string type of sqlOperator
- * @return <code>BinarySqlOperator</code>
+ * Convert string to binary SQL operator.
+ *
+ * @param sqlOperator SQL operator type
+ * @return converted binary SQL operator
*/
- public static BinarySqlOperator value(final String sqlOperator) {
- for (BinarySqlOperator val : values()) {
- if (val.operator.equalsIgnoreCase(sqlOperator)) {
- return val;
+ public static BinarySQLOperator value(final String sqlOperator) {
+ for (BinarySQLOperator each : values()) {
+ if (each.operator.equalsIgnoreCase(sqlOperator)) {
+ return each;
}
}
throw new UnsupportedOperationException("unsupported sql operator: " +
sqlOperator);
diff --git
a/shardingsphere-infra/shardingsphere-infra-optimize/src/test/java/org/apache/shardingsphere/infra/optimize/core/convert/SelectStatementSQLNodeConverterTest.java
b/shardingsphere-infra/shardingsphere-infra-optimize/src/test/java/org/apache/shardingsphere/infra/optimize/converter/statement/SelectStatementConverterTest.java
similarity index 86%
rename from
shardingsphere-infra/shardingsphere-infra-optimize/src/test/java/org/apache/shardingsphere/infra/optimize/core/convert/SelectStatementSQLNodeConverterTest.java
rename to
shardingsphere-infra/shardingsphere-infra-optimize/src/test/java/org/apache/shardingsphere/infra/optimize/converter/statement/SelectStatementConverterTest.java
index e6ad081..ab0b1bf 100644
---
a/shardingsphere-infra/shardingsphere-infra-optimize/src/test/java/org/apache/shardingsphere/infra/optimize/core/convert/SelectStatementSQLNodeConverterTest.java
+++
b/shardingsphere-infra/shardingsphere-infra-optimize/src/test/java/org/apache/shardingsphere/infra/optimize/converter/statement/SelectStatementConverterTest.java
@@ -15,15 +15,21 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.infra.optimize.core.convert;
+package org.apache.shardingsphere.infra.optimize.converter.statement;
+import lombok.SneakyThrows;
import org.apache.calcite.sql.SqlJoin;
import org.apache.calcite.sql.SqlNode;
import org.apache.calcite.sql.SqlSelect;
+import org.apache.calcite.sql.parser.SqlParseException;
+import org.apache.calcite.sql.parser.SqlParser;
+import org.apache.calcite.sql.parser.SqlParser.Config;
+import org.apache.calcite.sql.validate.SqlConformanceEnum;
import
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.infra.database.type.DatabaseTypeRegistry;
import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
-import org.apache.shardingsphere.infra.optimize.convert.SQLNodeConvertEngine;
+import org.apache.shardingsphere.infra.optimize.converter.SQLNodeConvertEngine;
import org.apache.shardingsphere.infra.parser.ShardingSphereSQLParserEngine;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.JoinTableSegment;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
@@ -39,14 +45,7 @@ import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThat;
-/**
- * testcase of converting shardingshphere ast to calcite ast.
- *
- * <p>after converting phrase finished, the next phrase is comparing the
converted result with the
- * result of calcite parser.
- * </p>
- */
-public final class SelectStatementSQLNodeConverterTest extends
BaseSqlNodeConverterTest {
+public final class SelectStatementConverterTest {
private ShardingSphereSQLParserEngine sqlStatementParserEngine;
@@ -66,13 +65,13 @@ public final class SelectStatementSQLNodeConverterTest
extends BaseSqlNodeConver
assertNull(sqlSelect.getWhere());
assertNull(sqlSelect.getOffset());
assertNull(sqlSelect.getFetch());
- SqlNode calciteSqlNode = parseByCalciteParser(sql);
+ SqlNode calciteSqlNode = parseByCalciteParser(sql, new
MySQLDatabaseType());
assertNotNull(calciteSqlNode);
assertThat(sqlNode.toString(), is(calciteSqlNode.toString()));
}
@Test
- public void assertConvertSimpleSelectLimit() {
+ public void assertConvertLimit() {
String sql = "select order_id, user_id from t_order limit 1, 2";
SQLStatement sqlStatement =
sqlStatementParserEngine.parse(sql.toUpperCase(), false);
SqlNode sqlNode = SQLNodeConvertEngine.convert(sqlStatement);
@@ -88,7 +87,7 @@ public final class SelectStatementSQLNodeConverterTest
extends BaseSqlNodeConver
}
@Test
- public void assertConvertSimpleSelectRowCount() {
+ public void assertConvertLimitWithRowCountOnly() {
String sql = "select order_id, user_id from t_order limit 2";
SQLStatement sqlStatement =
sqlStatementParserEngine.parse(sql.toUpperCase(), false);
SqlNode sqlNode = SQLNodeConvertEngine.convert(sqlStatement);
@@ -104,7 +103,7 @@ public final class SelectStatementSQLNodeConverterTest
extends BaseSqlNodeConver
}
@Test
- public void assertConvertSimpleSelectFilter() {
+ public void assertConvertWhere() {
String sql = "select order_id, user_id from t_order where order_id =
10";
SQLStatement sqlStatement =
sqlStatementParserEngine.parse(sql.toUpperCase(), false);
SqlNode sqlNode = SQLNodeConvertEngine.convert(sqlStatement);
@@ -118,7 +117,7 @@ public final class SelectStatementSQLNodeConverterTest
extends BaseSqlNodeConver
}
@Test
- public void assertConvertSimpleSelectFilterGroupBy() {
+ public void assertConvertWhereAndGroupBy() {
String sql = "select order_id, user_id from t_order where order_id =
10 group by order_id";
SQLStatement sqlStatement =
sqlStatementParserEngine.parse(sql.toUpperCase(), false);
SqlNode sqlNode = SQLNodeConvertEngine.convert(sqlStatement);
@@ -133,7 +132,7 @@ public final class SelectStatementSQLNodeConverterTest
extends BaseSqlNodeConver
}
@Test
- public void assertConvertSimpleSelectFilterOrderBy() {
+ public void assertConvertWhereAndOrderBy() {
String sql = "select order_id, user_id from t_order where user_id = 10
order by order_id desc";
SQLStatement sqlStatement =
sqlStatementParserEngine.parse(sql.toUpperCase(), false);
SqlNode sqlNode = SQLNodeConvertEngine.convert(sqlStatement);
@@ -171,4 +170,13 @@ public final class SelectStatementSQLNodeConverterTest
extends BaseSqlNodeConver
assertThat(sqlNode, instanceOf(SqlSelect.class));
// TODO outer join is not supported by parser of ShardingSphere
}
+
+ @SneakyThrows(SqlParseException.class)
+ protected SqlNode parseByCalciteParser(final String sql, final
DatabaseType databaseType) {
+ return SqlParser.create(sql,
Config.DEFAULT.withConformance(getSQLConformance(databaseType))).parseQuery();
+ }
+
+ private SqlConformanceEnum getSQLConformance(final DatabaseType
databaseType) {
+ return databaseType instanceof MySQLDatabaseType ?
SqlConformanceEnum.MYSQL_5 : SqlConformanceEnum.DEFAULT;
+ }
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-optimize/src/test/java/org/apache/shardingsphere/infra/optimize/core/convert/BaseSqlNodeConverterTest.java
b/shardingsphere-infra/shardingsphere-infra-optimize/src/test/java/org/apache/shardingsphere/infra/optimize/core/convert/BaseSqlNodeConverterTest.java
deleted file mode 100644
index aff17f6..0000000
---
a/shardingsphere-infra/shardingsphere-infra-optimize/src/test/java/org/apache/shardingsphere/infra/optimize/core/convert/BaseSqlNodeConverterTest.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.infra.optimize.core.convert;
-
-import org.apache.calcite.sql.SqlNode;
-import org.apache.calcite.sql.parser.SqlParseException;
-import org.apache.calcite.sql.parser.SqlParser;
-import org.apache.calcite.sql.validate.SqlConformanceEnum;
-import org.apache.shardingsphere.infra.database.type.DatabaseType;
-import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
-
-/**
- * Base sql node converter test.
- */
-public abstract class BaseSqlNodeConverterTest {
-
- /**
- * parse by Calcite sql parser with default database dialect.
- * @param sql sql
- * @return Calcite SqlNode.
- */
- protected SqlNode parseByCalciteParser(final String sql) {
- SqlParser parser = SqlParser.create(sql);
- return realParse(parser);
- }
-
- /**
- * parse by Calcite sql parser with arbitrary database dialect.
- * @param sql sql
- * @param databaseType database type.
- * @return Calcite SqlNode.
- */
- protected SqlNode parseByCalciteParser(final String sql, final
DatabaseType databaseType) {
- if (databaseType == null) {
- return parseByCalciteParser(sql);
- }
- SqlConformanceEnum sqlConformance = getConformance(databaseType);
- SqlParser.Config parserConfig =
SqlParser.Config.DEFAULT.withConformance(sqlConformance);
- SqlParser parser = SqlParser.create(sql, parserConfig);
- return realParse(parser);
- }
-
- private SqlNode realParse(final SqlParser parser) {
- try {
- return parser.parseQuery();
- } catch (SqlParseException e) {
- throw new RuntimeException(e);
- }
- }
-
- private SqlConformanceEnum getConformance(final DatabaseType databaseType)
{
- if (databaseType instanceof MySQLDatabaseType) {
- return SqlConformanceEnum.MYSQL_5;
- }
- return SqlConformanceEnum.DEFAULT;
- }
-}
diff --git
a/shardingsphere-infra/shardingsphere-infra-optimize/src/test/java/org/apache/shardingsphere/infra/optimize/core/metadata/loader/CommonFixtureTableMetaDataBuilder.java
b/shardingsphere-infra/shardingsphere-infra-optimize/src/test/java/org/apache/shardingsphere/infra/optimize/metadata/loader/CommonFixtureTableMetaDataBuilder.java
similarity index 92%
rename from
shardingsphere-infra/shardingsphere-infra-optimize/src/test/java/org/apache/shardingsphere/infra/optimize/core/metadata/loader/CommonFixtureTableMetaDataBuilder.java
rename to
shardingsphere-infra/shardingsphere-infra-optimize/src/test/java/org/apache/shardingsphere/infra/optimize/metadata/loader/CommonFixtureTableMetaDataBuilder.java
index 3166ce8..105da68 100644
---
a/shardingsphere-infra/shardingsphere-infra-optimize/src/test/java/org/apache/shardingsphere/infra/optimize/core/metadata/loader/CommonFixtureTableMetaDataBuilder.java
+++
b/shardingsphere-infra/shardingsphere-infra-optimize/src/test/java/org/apache/shardingsphere/infra/optimize/metadata/loader/CommonFixtureTableMetaDataBuilder.java
@@ -15,12 +15,12 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.infra.optimize.core.metadata.loader;
+package org.apache.shardingsphere.infra.optimize.metadata.loader;
import
org.apache.shardingsphere.infra.metadata.schema.builder.SchemaBuilderMaterials;
import
org.apache.shardingsphere.infra.metadata.schema.builder.spi.RuleBasedTableMetaDataBuilder;
import org.apache.shardingsphere.infra.metadata.schema.model.TableMetaData;
-import
org.apache.shardingsphere.infra.optimize.core.metadata.rule.CommonFixtureRule;
+import
org.apache.shardingsphere.infra.optimize.metadata.rule.CommonFixtureRule;
import java.sql.SQLException;
import java.util.Collection;
diff --git
a/shardingsphere-infra/shardingsphere-infra-optimize/src/test/java/org/apache/shardingsphere/infra/optimize/core/metadata/refresher/AlterTableFederationMetaDataRefresherTest.java
b/shardingsphere-infra/shardingsphere-infra-optimize/src/test/java/org/apache/shardingsphere/infra/optimize/metadata/refresher/AlterTableFederationMetaDataRefresherTest.java
similarity index 95%
rename from
shardingsphere-infra/shardingsphere-infra-optimize/src/test/java/org/apache/shardingsphere/infra/optimize/core/metadata/refresher/AlterTableFederationMetaDataRefresherTest.java
rename to
shardingsphere-infra/shardingsphere-infra-optimize/src/test/java/org/apache/shardingsphere/infra/optimize/metadata/refresher/AlterTableFederationMetaDataRefresherTest.java
index ec2c302..7b70a85 100644
---
a/shardingsphere-infra/shardingsphere-infra-optimize/src/test/java/org/apache/shardingsphere/infra/optimize/core/metadata/refresher/AlterTableFederationMetaDataRefresherTest.java
+++
b/shardingsphere-infra/shardingsphere-infra-optimize/src/test/java/org/apache/shardingsphere/infra/optimize/metadata/refresher/AlterTableFederationMetaDataRefresherTest.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.infra.optimize.core.metadata.refresher;
+package org.apache.shardingsphere.infra.optimize.metadata.refresher;
import com.google.common.collect.ImmutableMap;
import
org.apache.shardingsphere.infra.metadata.schema.builder.SchemaBuilderMaterials;
@@ -23,9 +23,8 @@ import
org.apache.shardingsphere.infra.metadata.schema.model.ColumnMetaData;
import org.apache.shardingsphere.infra.metadata.schema.model.IndexMetaData;
import org.apache.shardingsphere.infra.metadata.schema.model.TableMetaData;
import
org.apache.shardingsphere.infra.optimize.metadata.FederationSchemaMetaData;
-import
org.apache.shardingsphere.infra.optimize.metadata.refresher.FederationMetaDataRefresher;
import
org.apache.shardingsphere.infra.optimize.metadata.refresher.type.AlterTableFederationMetaDataRefresher;
-import
org.apache.shardingsphere.infra.optimize.core.metadata.rule.CommonFixtureRule;
+import
org.apache.shardingsphere.infra.optimize.metadata.rule.CommonFixtureRule;
import org.apache.shardingsphere.infra.rule.identifier.type.TableContainedRule;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.TableNameSegment;
diff --git
a/shardingsphere-infra/shardingsphere-infra-optimize/src/test/java/org/apache/shardingsphere/infra/optimize/core/metadata/refresher/CreateTableFederationMetaDataRefresherTest.java
b/shardingsphere-infra/shardingsphere-infra-optimize/src/test/java/org/apache/shardingsphere/infra/optimize/metadata/refresher/CreateTableFederationMetaDataRefresherTest.java
similarity index 96%
rename from
shardingsphere-infra/shardingsphere-infra-optimize/src/test/java/org/apache/shardingsphere/infra/optimize/core/metadata/refresher/CreateTableFederationMetaDataRefresherTest.java
rename to
shardingsphere-infra/shardingsphere-infra-optimize/src/test/java/org/apache/shardingsphere/infra/optimize/metadata/refresher/CreateTableFederationMetaDataRefresherTest.java
index 537f5b4..a3cbfe6 100644
---
a/shardingsphere-infra/shardingsphere-infra-optimize/src/test/java/org/apache/shardingsphere/infra/optimize/core/metadata/refresher/CreateTableFederationMetaDataRefresherTest.java
+++
b/shardingsphere-infra/shardingsphere-infra-optimize/src/test/java/org/apache/shardingsphere/infra/optimize/metadata/refresher/CreateTableFederationMetaDataRefresherTest.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.infra.optimize.core.metadata.refresher;
+package org.apache.shardingsphere.infra.optimize.metadata.refresher;
import com.google.common.collect.ImmutableMap;
import
org.apache.shardingsphere.infra.metadata.schema.builder.SchemaBuilderMaterials;
@@ -23,7 +23,6 @@ import
org.apache.shardingsphere.infra.metadata.schema.model.ColumnMetaData;
import org.apache.shardingsphere.infra.metadata.schema.model.IndexMetaData;
import org.apache.shardingsphere.infra.metadata.schema.model.TableMetaData;
import
org.apache.shardingsphere.infra.optimize.metadata.FederationSchemaMetaData;
-import
org.apache.shardingsphere.infra.optimize.metadata.refresher.FederationMetaDataRefresher;
import
org.apache.shardingsphere.infra.optimize.metadata.refresher.type.CreateTableFederationMetaDataRefresher;
import org.apache.shardingsphere.infra.rule.identifier.type.TableContainedRule;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
diff --git
a/shardingsphere-infra/shardingsphere-infra-optimize/src/test/java/org/apache/shardingsphere/infra/optimize/core/metadata/refresher/DropTableFederationMetaDataRefresherTest.java
b/shardingsphere-infra/shardingsphere-infra-optimize/src/test/java/org/apache/shardingsphere/infra/optimize/metadata/refresher/DropTableFederationMetaDataRefresherTest.java
similarity index 97%
rename from
shardingsphere-infra/shardingsphere-infra-optimize/src/test/java/org/apache/shardingsphere/infra/optimize/core/metadata/refresher/DropTableFederationMetaDataRefresherTest.java
rename to
shardingsphere-infra/shardingsphere-infra-optimize/src/test/java/org/apache/shardingsphere/infra/optimize/metadata/refresher/DropTableFederationMetaDataRefresherTest.java
index aa0b8bb..e83f498 100644
---
a/shardingsphere-infra/shardingsphere-infra-optimize/src/test/java/org/apache/shardingsphere/infra/optimize/core/metadata/refresher/DropTableFederationMetaDataRefresherTest.java
+++
b/shardingsphere-infra/shardingsphere-infra-optimize/src/test/java/org/apache/shardingsphere/infra/optimize/metadata/refresher/DropTableFederationMetaDataRefresherTest.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.infra.optimize.core.metadata.refresher;
+package org.apache.shardingsphere.infra.optimize.metadata.refresher;
import com.google.common.collect.ImmutableMap;
import
org.apache.shardingsphere.infra.metadata.schema.builder.SchemaBuilderMaterials;
@@ -23,7 +23,6 @@ import
org.apache.shardingsphere.infra.metadata.schema.model.ColumnMetaData;
import org.apache.shardingsphere.infra.metadata.schema.model.IndexMetaData;
import org.apache.shardingsphere.infra.metadata.schema.model.TableMetaData;
import
org.apache.shardingsphere.infra.optimize.metadata.FederationSchemaMetaData;
-import
org.apache.shardingsphere.infra.optimize.metadata.refresher.FederationMetaDataRefresher;
import
org.apache.shardingsphere.infra.optimize.metadata.refresher.type.DropTableFederationMetaDataRefresher;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.TableNameSegment;
diff --git
a/shardingsphere-infra/shardingsphere-infra-optimize/src/test/java/org/apache/shardingsphere/infra/optimize/core/metadata/rule/CommonFixtureRule.java
b/shardingsphere-infra/shardingsphere-infra-optimize/src/test/java/org/apache/shardingsphere/infra/optimize/metadata/rule/CommonFixtureRule.java
similarity index 94%
rename from
shardingsphere-infra/shardingsphere-infra-optimize/src/test/java/org/apache/shardingsphere/infra/optimize/core/metadata/rule/CommonFixtureRule.java
rename to
shardingsphere-infra/shardingsphere-infra-optimize/src/test/java/org/apache/shardingsphere/infra/optimize/metadata/rule/CommonFixtureRule.java
index 51af791..f6cf756 100644
---
a/shardingsphere-infra/shardingsphere-infra-optimize/src/test/java/org/apache/shardingsphere/infra/optimize/core/metadata/rule/CommonFixtureRule.java
+++
b/shardingsphere-infra/shardingsphere-infra-optimize/src/test/java/org/apache/shardingsphere/infra/optimize/metadata/rule/CommonFixtureRule.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.infra.optimize.core.metadata.rule;
+package org.apache.shardingsphere.infra.optimize.metadata.rule;
import org.apache.shardingsphere.infra.rule.identifier.type.TableContainedRule;
diff --git
a/shardingsphere-infra/shardingsphere-infra-optimize/src/test/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.schema.builder.spi.RuleBasedTableMetaDataBuilder
b/shardingsphere-infra/shardingsphere-infra-optimize/src/test/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.schema.builder.spi.RuleBasedTableMetaDataBuilder
index 03a304e..127ab8e 100644
---
a/shardingsphere-infra/shardingsphere-infra-optimize/src/test/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.schema.builder.spi.RuleBasedTableMetaDataBuilder
+++
b/shardingsphere-infra/shardingsphere-infra-optimize/src/test/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.schema.builder.spi.RuleBasedTableMetaDataBuilder
@@ -15,4 +15,4 @@
# limitations under the License.
#
-org.apache.shardingsphere.infra.optimize.core.metadata.loader.CommonFixtureTableMetaDataBuilder
+org.apache.shardingsphere.infra.optimize.metadata.loader.CommonFixtureTableMetaDataBuilder
diff --git
a/shardingsphere-infra/shardingsphere-infra-optimize/src/test/resources/logback-test.xml
b/shardingsphere-infra/shardingsphere-infra-optimize/src/test/resources/logback-test.xml
new file mode 100644
index 0000000..d90fc4a
--- /dev/null
+++
b/shardingsphere-infra/shardingsphere-infra-optimize/src/test/resources/logback-test.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0"?>
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one or more
+ ~ contributor license agreements. See the NOTICE file distributed with
+ ~ this work for additional information regarding copyright ownership.
+ ~ The ASF licenses this file to You under the Apache License, Version 2.0
+ ~ (the "License"); you may not use this file except in compliance with
+ ~ the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<configuration>
+ <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
+ <encoder>
+ <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread]
%logger{36} - %msg%n</pattern>
+ </encoder>
+ </appender>
+ <logger name="org.apache.shardingsphere" level="warn" additivity="false">
+ <appender-ref ref="console" />
+ </logger>
+
+ <root>
+ <level value="error" />
+ <appender-ref ref="console" />
+ </root>
+</configuration>