From 9d8ede15c1bf7e9da33b39229f1fb218451baf5c Mon Sep 17 00:00:00 2001 From: tuohai666 Date: Thu, 6 Jun 2019 12:52:17 +0800 Subject: [PATCH 001/283] add weight balance --- ...WeightMasterSlaveLoadBalanceAlgorithm.java | 63 +++++++++++++++++++ ...asterslave.MasterSlaveLoadBalanceAlgorithm | 1 + 2 files changed, 64 insertions(+) create mode 100644 sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/strategy/masterslave/WeightMasterSlaveLoadBalanceAlgorithm.java diff --git a/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/strategy/masterslave/WeightMasterSlaveLoadBalanceAlgorithm.java b/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/strategy/masterslave/WeightMasterSlaveLoadBalanceAlgorithm.java new file mode 100644 index 0000000000000..49762b0f1993d --- /dev/null +++ b/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/strategy/masterslave/WeightMasterSlaveLoadBalanceAlgorithm.java @@ -0,0 +1,63 @@ +/* + * 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.core.strategy.masterslave; + +import lombok.Getter; +import lombok.Setter; +import org.apache.shardingsphere.spi.masterslave.MasterSlaveLoadBalanceAlgorithm; + +import java.util.List; +import java.util.Properties; +import java.util.Random; +import java.util.SortedMap; +import java.util.TreeMap; + +/** + * Weight slave database load-balance algorithm. + * + * @author zhangyonglun + */ +@Getter +@Setter +public final class WeightMasterSlaveLoadBalanceAlgorithm implements MasterSlaveLoadBalanceAlgorithm { + + private static final String WEIGHT_KEY = "weight.values"; + + private TreeMap weightMap = new TreeMap<>(); + + private Properties properties = new Properties(); + + @Override + public String getType() { + return "WEIGHT"; + } + + @Override + public String getDataSource(final String name, final String masterDataSourceName, final List slaveDataSourceNames) { + if (weightMap.isEmpty()) { + String[] weightsString = properties.get(WEIGHT_KEY).toString().split(","); + int total = 0; + for (int i = 0; i < slaveDataSourceNames.size(); i++) { + total += Integer.parseInt(weightsString[i]); + weightMap.put(total, slaveDataSourceNames.get(i)); + } + } + SortedMap tailMap = weightMap.tailMap(new Random().nextInt(weightMap.lastKey()), false); + return weightMap.get(tailMap.firstKey()); + } +} diff --git a/sharding-core/sharding-core-common/src/main/resources/META-INF/services/org.apache.shardingsphere.spi.masterslave.MasterSlaveLoadBalanceAlgorithm b/sharding-core/sharding-core-common/src/main/resources/META-INF/services/org.apache.shardingsphere.spi.masterslave.MasterSlaveLoadBalanceAlgorithm index 260fe5bc67d7f..1a26dcf9b2666 100644 --- a/sharding-core/sharding-core-common/src/main/resources/META-INF/services/org.apache.shardingsphere.spi.masterslave.MasterSlaveLoadBalanceAlgorithm +++ b/sharding-core/sharding-core-common/src/main/resources/META-INF/services/org.apache.shardingsphere.spi.masterslave.MasterSlaveLoadBalanceAlgorithm @@ -17,3 +17,4 @@ org.apache.shardingsphere.core.strategy.masterslave.RoundRobinMasterSlaveLoadBalanceAlgorithm org.apache.shardingsphere.core.strategy.masterslave.RandomMasterSlaveLoadBalanceAlgorithm +org.apache.shardingsphere.core.strategy.masterslave.WeightMasterSlaveLoadBalanceAlgorithm From c7049aa7b2d435d542663c21d28d45b4abedb9d8 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Thu, 6 Jun 2019 22:32:19 +0800 Subject: [PATCH 002/283] for #2441, add Pagination.getOffsetSegment() & getRowCountSegment() --- .../RowNumberDecoratorMergedResult.java | 4 +++- .../parameter/ShardingParameterRewriter.java | 8 ++++---- .../core/route/pagination/Pagination.java | 20 +++++++++++++++++-- 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/sharding-core/sharding-core-merge/src/main/java/org/apache/shardingsphere/core/merge/dql/pagination/RowNumberDecoratorMergedResult.java b/sharding-core/sharding-core-merge/src/main/java/org/apache/shardingsphere/core/merge/dql/pagination/RowNumberDecoratorMergedResult.java index b0f87fbc63492..955e76c12389b 100644 --- a/sharding-core/sharding-core-merge/src/main/java/org/apache/shardingsphere/core/merge/dql/pagination/RowNumberDecoratorMergedResult.java +++ b/sharding-core/sharding-core-merge/src/main/java/org/apache/shardingsphere/core/merge/dql/pagination/RowNumberDecoratorMergedResult.java @@ -17,6 +17,7 @@ package org.apache.shardingsphere.core.merge.dql.pagination; +import com.google.common.base.Preconditions; import org.apache.shardingsphere.core.merge.MergedResult; import org.apache.shardingsphere.core.merge.dql.common.DecoratorMergedResult; import org.apache.shardingsphere.core.route.pagination.Pagination; @@ -61,7 +62,8 @@ public boolean next() throws SQLException { if (!pagination.getActualRowCount().isPresent()) { return getMergedResult().next(); } - if (pagination.getRowCountSegment().isBoundOpened()) { + Preconditions.checkState(pagination.getRowCountSegment().isPresent()); + if (pagination.getRowCountSegment().get().isBoundOpened()) { return rowNumber++ <= pagination.getActualRowCount().get() && getMergedResult().next(); } return rowNumber++ < pagination.getActualRowCount().get() && getMergedResult().next(); diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/rewriter/parameter/ShardingParameterRewriter.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/rewriter/parameter/ShardingParameterRewriter.java index d8a8a73fb315b..49de799c17e20 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/rewriter/parameter/ShardingParameterRewriter.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/rewriter/parameter/ShardingParameterRewriter.java @@ -36,11 +36,11 @@ public final class ShardingParameterRewriter implements ParameterRewriter { @Override public void rewrite(final ParameterBuilder parameterBuilder) { if (isNeedRewritePagination()) { - if (null != sqlRouteResult.getPagination().getOffsetSegment() && sqlRouteResult.getPagination().getOffsetSegment() instanceof ParameterMarkerPaginationValueSegment) { - rewriteOffset(parameterBuilder, (ParameterMarkerPaginationValueSegment) sqlRouteResult.getPagination().getOffsetSegment()); + if (sqlRouteResult.getPagination().getOffsetSegment().isPresent() && sqlRouteResult.getPagination().getOffsetSegment().get() instanceof ParameterMarkerPaginationValueSegment) { + rewriteOffset(parameterBuilder, (ParameterMarkerPaginationValueSegment) sqlRouteResult.getPagination().getOffsetSegment().get()); } - if (null != sqlRouteResult.getPagination().getRowCountSegment() && sqlRouteResult.getPagination().getRowCountSegment() instanceof ParameterMarkerPaginationValueSegment) { - rewriteRowCount(parameterBuilder, (ParameterMarkerPaginationValueSegment) sqlRouteResult.getPagination().getRowCountSegment()); + if (sqlRouteResult.getPagination().getRowCountSegment().isPresent() && sqlRouteResult.getPagination().getRowCountSegment().get() instanceof ParameterMarkerPaginationValueSegment) { + rewriteRowCount(parameterBuilder, (ParameterMarkerPaginationValueSegment) sqlRouteResult.getPagination().getRowCountSegment().get()); } } } diff --git a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/pagination/Pagination.java b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/pagination/Pagination.java index 87074ce5e30cd..6f814286023bb 100644 --- a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/pagination/Pagination.java +++ b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/pagination/Pagination.java @@ -18,7 +18,6 @@ package org.apache.shardingsphere.core.route.pagination; import com.google.common.base.Optional; -import lombok.Getter; import org.apache.shardingsphere.core.parse.sql.segment.dml.pagination.NumberLiteralPaginationValueSegment; import org.apache.shardingsphere.core.parse.sql.segment.dml.pagination.PaginationValueSegment; import org.apache.shardingsphere.core.parse.sql.segment.dml.pagination.ParameterMarkerPaginationValueSegment; @@ -34,7 +33,6 @@ * @author caohao * @author zhangyonglun */ -@Getter public final class Pagination { private final PaginationValueSegment offsetSegment; @@ -58,6 +56,24 @@ private int getValue(final PaginationValueSegment paginationValueSegment, final : ((NumberLiteralPaginationValueSegment) paginationValueSegment).getValue(); } + /** + * Get offset segment. + * + * @return offset segment + */ + public Optional getOffsetSegment() { + return Optional.fromNullable(offsetSegment); + } + + /** + * Get row count segment. + * + * @return row count segment + */ + public Optional getRowCountSegment() { + return Optional.fromNullable(rowCountSegment); + } + /** * Get actual offset. * From f4d9eac8222f70013c71650c84ca719a69b9db6c Mon Sep 17 00:00:00 2001 From: terrymanu Date: Thu, 6 Jun 2019 23:54:08 +0800 Subject: [PATCH 003/283] for #2441, add Pagination.getOffsetParameterIndex() & getRowCountParameterIndex() --- .../parameter/ShardingParameterRewriter.java | 21 +++++++------- .../core/route/pagination/Pagination.java | 28 +++++++++++++------ 2 files changed, 30 insertions(+), 19 deletions(-) diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/rewriter/parameter/ShardingParameterRewriter.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/rewriter/parameter/ShardingParameterRewriter.java index 49de799c17e20..0727100953142 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/rewriter/parameter/ShardingParameterRewriter.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/rewriter/parameter/ShardingParameterRewriter.java @@ -17,8 +17,8 @@ package org.apache.shardingsphere.core.rewrite.rewriter.parameter; +import com.google.common.base.Optional; import lombok.RequiredArgsConstructor; -import org.apache.shardingsphere.core.parse.sql.segment.dml.pagination.ParameterMarkerPaginationValueSegment; import org.apache.shardingsphere.core.parse.sql.statement.dml.SelectStatement; import org.apache.shardingsphere.core.rewrite.builder.ParameterBuilder; import org.apache.shardingsphere.core.route.SQLRouteResult; @@ -36,11 +36,13 @@ public final class ShardingParameterRewriter implements ParameterRewriter { @Override public void rewrite(final ParameterBuilder parameterBuilder) { if (isNeedRewritePagination()) { - if (sqlRouteResult.getPagination().getOffsetSegment().isPresent() && sqlRouteResult.getPagination().getOffsetSegment().get() instanceof ParameterMarkerPaginationValueSegment) { - rewriteOffset(parameterBuilder, (ParameterMarkerPaginationValueSegment) sqlRouteResult.getPagination().getOffsetSegment().get()); + Optional offsetParameterIndex = sqlRouteResult.getPagination().getOffsetParameterIndex(); + if (offsetParameterIndex.isPresent()) { + rewriteOffset(parameterBuilder, offsetParameterIndex.get()); } - if (sqlRouteResult.getPagination().getRowCountSegment().isPresent() && sqlRouteResult.getPagination().getRowCountSegment().get() instanceof ParameterMarkerPaginationValueSegment) { - rewriteRowCount(parameterBuilder, (ParameterMarkerPaginationValueSegment) sqlRouteResult.getPagination().getRowCountSegment().get()); + Optional rowCountParameterIndex = sqlRouteResult.getPagination().getRowCountParameterIndex(); + if (rowCountParameterIndex.isPresent()) { + rewriteRowCount(parameterBuilder, rowCountParameterIndex.get()); } } } @@ -49,12 +51,11 @@ private boolean isNeedRewritePagination() { return sqlRouteResult.getSqlStatement() instanceof SelectStatement && null != sqlRouteResult.getPagination() && !sqlRouteResult.getRoutingResult().isSingleRouting(); } - private void rewriteOffset(final ParameterBuilder parameterBuilder, final ParameterMarkerPaginationValueSegment offsetSegment) { - parameterBuilder.getReplacedIndexAndParameters().put(offsetSegment.getParameterIndex(), sqlRouteResult.getPagination().getRevisedOffset()); + private void rewriteOffset(final ParameterBuilder parameterBuilder, final int offsetParameterIndex) { + parameterBuilder.getReplacedIndexAndParameters().put(offsetParameterIndex, sqlRouteResult.getPagination().getRevisedOffset()); } - private void rewriteRowCount(final ParameterBuilder parameterBuilder, final ParameterMarkerPaginationValueSegment rowCountSegment) { - parameterBuilder.getReplacedIndexAndParameters().put( - rowCountSegment.getParameterIndex(), sqlRouteResult.getPagination().getRevisedRowCount((SelectStatement) sqlRouteResult.getSqlStatement())); + private void rewriteRowCount(final ParameterBuilder parameterBuilder, final int rowCountParameterIndex) { + parameterBuilder.getReplacedIndexAndParameters().put(rowCountParameterIndex, sqlRouteResult.getPagination().getRevisedRowCount((SelectStatement) sqlRouteResult.getSqlStatement())); } } diff --git a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/pagination/Pagination.java b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/pagination/Pagination.java index 6f814286023bb..426f193efdadd 100644 --- a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/pagination/Pagination.java +++ b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/pagination/Pagination.java @@ -56,15 +56,6 @@ private int getValue(final PaginationValueSegment paginationValueSegment, final : ((NumberLiteralPaginationValueSegment) paginationValueSegment).getValue(); } - /** - * Get offset segment. - * - * @return offset segment - */ - public Optional getOffsetSegment() { - return Optional.fromNullable(offsetSegment); - } - /** * Get row count segment. * @@ -95,6 +86,25 @@ public Optional getActualRowCount() { return Optional.fromNullable(actualRowCount); } + /** + * Get offset parameter index. + * + * @return offset parameter index + */ + public Optional getOffsetParameterIndex() { + return offsetSegment instanceof ParameterMarkerPaginationValueSegment ? Optional.of(((ParameterMarkerPaginationValueSegment) offsetSegment).getParameterIndex()) : Optional.absent(); + } + + /** + * Get row count parameter index. + * + * @return row count parameter index + */ + public Optional getRowCountParameterIndex() { + return rowCountSegment instanceof ParameterMarkerPaginationValueSegment + ? Optional.of(((ParameterMarkerPaginationValueSegment) rowCountSegment).getParameterIndex()) : Optional.absent(); + } + /** * Get revised offset. * From 7db58d2fd31a06fe841d33f3d968b916f481bfb6 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Fri, 7 Jun 2019 00:07:15 +0800 Subject: [PATCH 004/283] for #2335, add logback --- .../src/test/resources/logback-test.xml | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/test/resources/logback-test.xml diff --git a/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/test/resources/logback-test.xml b/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/test/resources/logback-test.xml new file mode 100644 index 0000000000000..c698274325144 --- /dev/null +++ b/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/test/resources/logback-test.xml @@ -0,0 +1,33 @@ + + + + + + + [%-5level] %d{HH:mm:ss.SSS} [%thread] %logger{36} - %msg%n + + + + + + + + + + + From 89fa212bb53228095edb6aab0364489b4cada23b Mon Sep 17 00:00:00 2001 From: terrymanu Date: Fri, 7 Jun 2019 00:12:33 +0800 Subject: [PATCH 005/283] for #2441, refactor Pagination.getActualRowCount() --- .../pagination/RowNumberDecoratorMergedResult.java | 5 ----- .../core/route/pagination/Pagination.java | 14 ++++---------- 2 files changed, 4 insertions(+), 15 deletions(-) diff --git a/sharding-core/sharding-core-merge/src/main/java/org/apache/shardingsphere/core/merge/dql/pagination/RowNumberDecoratorMergedResult.java b/sharding-core/sharding-core-merge/src/main/java/org/apache/shardingsphere/core/merge/dql/pagination/RowNumberDecoratorMergedResult.java index 955e76c12389b..67562edbac37a 100644 --- a/sharding-core/sharding-core-merge/src/main/java/org/apache/shardingsphere/core/merge/dql/pagination/RowNumberDecoratorMergedResult.java +++ b/sharding-core/sharding-core-merge/src/main/java/org/apache/shardingsphere/core/merge/dql/pagination/RowNumberDecoratorMergedResult.java @@ -17,7 +17,6 @@ package org.apache.shardingsphere.core.merge.dql.pagination; -import com.google.common.base.Preconditions; import org.apache.shardingsphere.core.merge.MergedResult; import org.apache.shardingsphere.core.merge.dql.common.DecoratorMergedResult; import org.apache.shardingsphere.core.route.pagination.Pagination; @@ -62,10 +61,6 @@ public boolean next() throws SQLException { if (!pagination.getActualRowCount().isPresent()) { return getMergedResult().next(); } - Preconditions.checkState(pagination.getRowCountSegment().isPresent()); - if (pagination.getRowCountSegment().get().isBoundOpened()) { - return rowNumber++ <= pagination.getActualRowCount().get() && getMergedResult().next(); - } return rowNumber++ < pagination.getActualRowCount().get() && getMergedResult().next(); } } diff --git a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/pagination/Pagination.java b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/pagination/Pagination.java index 426f193efdadd..cdee54bdfb8f3 100644 --- a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/pagination/Pagination.java +++ b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/pagination/Pagination.java @@ -56,15 +56,6 @@ private int getValue(final PaginationValueSegment paginationValueSegment, final : ((NumberLiteralPaginationValueSegment) paginationValueSegment).getValue(); } - /** - * Get row count segment. - * - * @return row count segment - */ - public Optional getRowCountSegment() { - return Optional.fromNullable(rowCountSegment); - } - /** * Get actual offset. * @@ -83,7 +74,10 @@ public int getActualOffset() { * @return actual row count */ public Optional getActualRowCount() { - return Optional.fromNullable(actualRowCount); + if (null == rowCountSegment) { + return Optional.absent(); + } + return Optional.of(rowCountSegment.isBoundOpened() ? actualRowCount + 1 : actualRowCount); } /** From 3137d244ce8fcd2b6b4683c8bf9e411390a932ca Mon Sep 17 00:00:00 2001 From: terrymanu Date: Fri, 7 Jun 2019 00:23:58 +0800 Subject: [PATCH 006/283] for #2441, remove OffsetTokenGenerator.isLiteralOffset & RowCountTokenGenerator.isLiteralRowCount --- .../core/rewrite/token/generator/OffsetTokenGenerator.java | 6 +----- .../rewrite/token/generator/RowCountTokenGenerator.java | 6 +----- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/generator/OffsetTokenGenerator.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/generator/OffsetTokenGenerator.java index 9f116b40831df..ce7662c85cc3f 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/generator/OffsetTokenGenerator.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/generator/OffsetTokenGenerator.java @@ -47,11 +47,7 @@ public Optional generateSQLToken(final SQLStatement sqlStatement, f } private Optional getLiteralOffsetSegment(final SelectStatement selectStatement) { - return isLiteralOffset(selectStatement) ? Optional.of(selectStatement.getOffset()) : Optional.absent(); - } - - private boolean isLiteralOffset(final SelectStatement selectStatement) { - return null != selectStatement.getOffset() && selectStatement.getOffset() instanceof NumberLiteralPaginationValueSegment; + return selectStatement.getOffset() instanceof NumberLiteralPaginationValueSegment ? Optional.of(selectStatement.getOffset()) : Optional.absent(); } private int getRevisedOffset(final SelectStatement selectStatement, final List parameters, final PaginationValueSegment offsetSegment) { diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/generator/RowCountTokenGenerator.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/generator/RowCountTokenGenerator.java index 2d2f0fcd63403..51c9b98da7147 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/generator/RowCountTokenGenerator.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/generator/RowCountTokenGenerator.java @@ -47,11 +47,7 @@ public Optional generateSQLToken(final SQLStatement sqlStatement, } private Optional getLiteralRowCountSegment(final SelectStatement selectStatement) { - return isLiteralRowCount(selectStatement) ? Optional.of(selectStatement.getRowCount()) : Optional.absent(); - } - - private boolean isLiteralRowCount(final SelectStatement selectStatement) { - return null != selectStatement.getRowCount() && selectStatement.getRowCount() instanceof NumberLiteralPaginationValueSegment; + return selectStatement.getRowCount() instanceof NumberLiteralPaginationValueSegment ? Optional.of(selectStatement.getRowCount()) : Optional.absent(); } private int getRevisedRowCount(final SelectStatement selectStatement, final List parameters, final PaginationValueSegment rowCountSegment) { From e6b50885812a95e71168b2e463b59dcae2acbe53 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Fri, 7 Jun 2019 15:03:48 +0800 Subject: [PATCH 007/283] for #2441, remove single route judge from route module --- .../core/route/router/sharding/ParsingSQLRouter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java index 12613969a6860..56fd5c46f41fa 100644 --- a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java +++ b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java @@ -104,7 +104,7 @@ public SQLRouteResult route(final SQLStatement sqlStatement, final List mergeShardingValues(optimizeResult.getShardingConditions()); } RoutingResult routingResult = RoutingEngineFactory.newInstance(shardingRule, shardingMetaData.getDataSource(), sqlStatement, optimizeResult).route(); - if (sqlStatement instanceof SelectStatement && !routingResult.isSingleRouting()) { + if (sqlStatement instanceof SelectStatement) { PaginationValueSegment offsetSegment = ((SelectStatement) sqlStatement).getOffset(); PaginationValueSegment rowCountSegment = ((SelectStatement) sqlStatement).getRowCount(); if (null != offsetSegment || null != rowCountSegment) { From 774a1666029a1d5848210d634ae54d6dce513340 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Fri, 7 Jun 2019 22:31:24 +0800 Subject: [PATCH 008/283] for #2441, move Pagination from route module to optimized module --- .../core/BaseShardingEngineTest.java | 5 ++ .../core/merge/dql/DQLMergeEngine.java | 10 +-- .../LimitDecoratorMergedResult.java | 2 +- .../RowNumberDecoratorMergedResult.java | 2 +- .../TopAndRowNumberDecoratorMergedResult.java | 2 +- .../core/merge/dql/DQLMergeEngineTest.java | 38 ++++++----- .../GroupByMemoryMergedResultTest.java | 5 ++ .../GroupByStreamMergedResultTest.java | 5 ++ .../IteratorStreamMergedResultTest.java | 5 ++ .../OrderByStreamMergedResultTest.java | 9 ++- .../LimitDecoratorMergedResultTest.java | 14 ++-- .../RowNumberDecoratorMergedResultTest.java | 16 +++-- ...AndRowNumberDecoratorMergedResultTest.java | 16 +++-- .../core/optimize/OptimizeEngineFactory.java | 4 +- .../sharding/query/QueryOptimizeEngine.java | 28 ++++++-- .../core/optimize}/pagination/Pagination.java | 2 +- .../optimize}/pagination/PaginationValue.java | 2 +- .../core/optimize/result/OptimizeResult.java | 9 ++- .../sharding/QueryOptimizeEngineTest.java | 13 ++-- .../parameter/ShardingParameterRewriter.java | 11 ++-- .../token/generator/OffsetTokenGenerator.java | 2 +- .../generator/RowCountTokenGenerator.java | 2 +- .../rewriter/ShardingSQLRewriterTest.java | 66 +++++++++++++++---- .../core/route/SQLRouteResult.java | 3 - .../router/sharding/ParsingSQLRouter.java | 9 --- 25 files changed, 189 insertions(+), 91 deletions(-) rename sharding-core/{sharding-core-route/src/main/java/org/apache/shardingsphere/core/route => sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize}/pagination/Pagination.java (98%) rename sharding-core/{sharding-core-route/src/main/java/org/apache/shardingsphere/core/route => sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize}/pagination/PaginationValue.java (95%) diff --git a/sharding-core/sharding-core-entry/src/test/java/org/apache/shardingsphere/core/BaseShardingEngineTest.java b/sharding-core/sharding-core-entry/src/test/java/org/apache/shardingsphere/core/BaseShardingEngineTest.java index b55ea17c4ebd1..7786a10f860ef 100644 --- a/sharding-core/sharding-core-entry/src/test/java/org/apache/shardingsphere/core/BaseShardingEngineTest.java +++ b/sharding-core/sharding-core-entry/src/test/java/org/apache/shardingsphere/core/BaseShardingEngineTest.java @@ -22,6 +22,9 @@ import org.apache.shardingsphere.api.hint.HintManager; import org.apache.shardingsphere.core.constant.properties.ShardingProperties; import org.apache.shardingsphere.core.constant.properties.ShardingPropertiesConstant; +import org.apache.shardingsphere.core.optimize.condition.ShardingCondition; +import org.apache.shardingsphere.core.optimize.condition.ShardingConditions; +import org.apache.shardingsphere.core.optimize.result.OptimizeResult; import org.apache.shardingsphere.core.parse.sql.statement.dml.SelectStatement; import org.apache.shardingsphere.core.route.RouteUnit; import org.apache.shardingsphere.core.route.SQLRouteResult; @@ -29,6 +32,7 @@ import org.apache.shardingsphere.core.route.type.RoutingUnit; import org.junit.Test; +import java.util.Collections; import java.util.List; import java.util.Properties; @@ -54,6 +58,7 @@ protected final SQLRouteResult createSQLRouteResult() { RoutingResult routingResult = new RoutingResult(); routingResult.getRoutingUnits().add(new RoutingUnit("ds")); result.setRoutingResult(routingResult); + result.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); return result; } diff --git a/sharding-core/sharding-core-merge/src/main/java/org/apache/shardingsphere/core/merge/dql/DQLMergeEngine.java b/sharding-core/sharding-core-merge/src/main/java/org/apache/shardingsphere/core/merge/dql/DQLMergeEngine.java index 1a135f17ddfc5..b38c4ced6e775 100644 --- a/sharding-core/sharding-core-merge/src/main/java/org/apache/shardingsphere/core/merge/dql/DQLMergeEngine.java +++ b/sharding-core/sharding-core-merge/src/main/java/org/apache/shardingsphere/core/merge/dql/DQLMergeEngine.java @@ -33,10 +33,10 @@ import org.apache.shardingsphere.core.merge.dql.pagination.LimitDecoratorMergedResult; import org.apache.shardingsphere.core.merge.dql.pagination.RowNumberDecoratorMergedResult; import org.apache.shardingsphere.core.merge.dql.pagination.TopAndRowNumberDecoratorMergedResult; +import org.apache.shardingsphere.core.optimize.pagination.Pagination; import org.apache.shardingsphere.core.parse.sql.statement.dml.SelectStatement; import org.apache.shardingsphere.core.parse.util.SQLUtil; import org.apache.shardingsphere.core.route.SQLRouteResult; -import org.apache.shardingsphere.core.route.pagination.Pagination; import java.sql.SQLException; import java.util.ArrayList; @@ -135,18 +135,18 @@ private MergedResult getGroupByMergedResult() throws SQLException { } private MergedResult decorate(final MergedResult mergedResult) throws SQLException { - Pagination pagination = routeResult.getPagination(); + Pagination pagination = routeResult.getOptimizeResult().getPagination(); if (null == pagination || 1 == queryResults.size()) { return mergedResult; } if (DatabaseType.MySQL == databaseType || DatabaseType.PostgreSQL == databaseType || DatabaseType.H2 == databaseType) { - return new LimitDecoratorMergedResult(mergedResult, routeResult.getPagination()); + return new LimitDecoratorMergedResult(mergedResult, routeResult.getOptimizeResult().getPagination()); } if (DatabaseType.Oracle == databaseType) { - return new RowNumberDecoratorMergedResult(mergedResult, routeResult.getPagination()); + return new RowNumberDecoratorMergedResult(mergedResult, routeResult.getOptimizeResult().getPagination()); } if (DatabaseType.SQLServer == databaseType) { - return new TopAndRowNumberDecoratorMergedResult(mergedResult, routeResult.getPagination()); + return new TopAndRowNumberDecoratorMergedResult(mergedResult, routeResult.getOptimizeResult().getPagination()); } return mergedResult; } diff --git a/sharding-core/sharding-core-merge/src/main/java/org/apache/shardingsphere/core/merge/dql/pagination/LimitDecoratorMergedResult.java b/sharding-core/sharding-core-merge/src/main/java/org/apache/shardingsphere/core/merge/dql/pagination/LimitDecoratorMergedResult.java index 6b05d251fca97..2a66d2c2e0050 100644 --- a/sharding-core/sharding-core-merge/src/main/java/org/apache/shardingsphere/core/merge/dql/pagination/LimitDecoratorMergedResult.java +++ b/sharding-core/sharding-core-merge/src/main/java/org/apache/shardingsphere/core/merge/dql/pagination/LimitDecoratorMergedResult.java @@ -19,7 +19,7 @@ import org.apache.shardingsphere.core.merge.MergedResult; import org.apache.shardingsphere.core.merge.dql.common.DecoratorMergedResult; -import org.apache.shardingsphere.core.route.pagination.Pagination; +import org.apache.shardingsphere.core.optimize.pagination.Pagination; import java.sql.SQLException; diff --git a/sharding-core/sharding-core-merge/src/main/java/org/apache/shardingsphere/core/merge/dql/pagination/RowNumberDecoratorMergedResult.java b/sharding-core/sharding-core-merge/src/main/java/org/apache/shardingsphere/core/merge/dql/pagination/RowNumberDecoratorMergedResult.java index 67562edbac37a..2f15b9b8f851c 100644 --- a/sharding-core/sharding-core-merge/src/main/java/org/apache/shardingsphere/core/merge/dql/pagination/RowNumberDecoratorMergedResult.java +++ b/sharding-core/sharding-core-merge/src/main/java/org/apache/shardingsphere/core/merge/dql/pagination/RowNumberDecoratorMergedResult.java @@ -19,7 +19,7 @@ import org.apache.shardingsphere.core.merge.MergedResult; import org.apache.shardingsphere.core.merge.dql.common.DecoratorMergedResult; -import org.apache.shardingsphere.core.route.pagination.Pagination; +import org.apache.shardingsphere.core.optimize.pagination.Pagination; import java.sql.SQLException; diff --git a/sharding-core/sharding-core-merge/src/main/java/org/apache/shardingsphere/core/merge/dql/pagination/TopAndRowNumberDecoratorMergedResult.java b/sharding-core/sharding-core-merge/src/main/java/org/apache/shardingsphere/core/merge/dql/pagination/TopAndRowNumberDecoratorMergedResult.java index 89c2141814c5e..a78e7c079dc3d 100644 --- a/sharding-core/sharding-core-merge/src/main/java/org/apache/shardingsphere/core/merge/dql/pagination/TopAndRowNumberDecoratorMergedResult.java +++ b/sharding-core/sharding-core-merge/src/main/java/org/apache/shardingsphere/core/merge/dql/pagination/TopAndRowNumberDecoratorMergedResult.java @@ -19,7 +19,7 @@ import org.apache.shardingsphere.core.merge.MergedResult; import org.apache.shardingsphere.core.merge.dql.common.DecoratorMergedResult; -import org.apache.shardingsphere.core.route.pagination.Pagination; +import org.apache.shardingsphere.core.optimize.pagination.Pagination; import java.sql.SQLException; diff --git a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/DQLMergeEngineTest.java b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/DQLMergeEngineTest.java index ee5bf1fb9a710..f6641dde3fe85 100644 --- a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/DQLMergeEngineTest.java +++ b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/DQLMergeEngineTest.java @@ -32,11 +32,14 @@ import org.apache.shardingsphere.core.merge.dql.pagination.RowNumberDecoratorMergedResult; import org.apache.shardingsphere.core.merge.dql.pagination.TopAndRowNumberDecoratorMergedResult; import org.apache.shardingsphere.core.merge.fixture.TestQueryResult; +import org.apache.shardingsphere.core.optimize.condition.ShardingCondition; +import org.apache.shardingsphere.core.optimize.condition.ShardingConditions; +import org.apache.shardingsphere.core.optimize.pagination.Pagination; +import org.apache.shardingsphere.core.optimize.result.OptimizeResult; import org.apache.shardingsphere.core.parse.sql.context.selectitem.AggregationSelectItem; import org.apache.shardingsphere.core.parse.sql.segment.dml.order.item.IndexOrderByItemSegment; import org.apache.shardingsphere.core.parse.sql.statement.dml.SelectStatement; import org.apache.shardingsphere.core.route.SQLRouteResult; -import org.apache.shardingsphere.core.route.pagination.Pagination; import org.junit.Before; import org.junit.Test; @@ -80,6 +83,7 @@ public void setUp() throws SQLException { } selectStatement = new SelectStatement(); routeResult = new SQLRouteResult(selectStatement); + routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); } @Test @@ -90,14 +94,14 @@ public void assertBuildIteratorStreamMergedResult() throws SQLException { @Test public void assertBuildIteratorStreamMergedResultWithLimit() throws SQLException { - routeResult.setPagination(new Pagination(null, null, Collections.emptyList())); + routeResult.getOptimizeResult().setPagination(new Pagination(null, null, Collections.emptyList())); mergeEngine = new DQLMergeEngine(DatabaseType.MySQL, routeResult, singleQueryResult); assertThat(mergeEngine.merge(), instanceOf(IteratorStreamMergedResult.class)); } @Test public void assertBuildIteratorStreamMergedResultWithMySQLLimit() throws SQLException { - routeResult.setPagination(new Pagination(null, null, Collections.emptyList())); + routeResult.getOptimizeResult().setPagination(new Pagination(null, null, Collections.emptyList())); mergeEngine = new DQLMergeEngine(DatabaseType.MySQL, routeResult, queryResults); MergedResult actual = mergeEngine.merge(); assertThat(actual, instanceOf(LimitDecoratorMergedResult.class)); @@ -106,7 +110,7 @@ public void assertBuildIteratorStreamMergedResultWithMySQLLimit() throws SQLExce @Test public void assertBuildIteratorStreamMergedResultWithOracleLimit() throws SQLException { - routeResult.setPagination(new Pagination(null, null, Collections.emptyList())); + routeResult.getOptimizeResult().setPagination(new Pagination(null, null, Collections.emptyList())); mergeEngine = new DQLMergeEngine(DatabaseType.Oracle, routeResult, queryResults); MergedResult actual = mergeEngine.merge(); assertThat(actual, instanceOf(RowNumberDecoratorMergedResult.class)); @@ -115,7 +119,7 @@ public void assertBuildIteratorStreamMergedResultWithOracleLimit() throws SQLExc @Test public void assertBuildIteratorStreamMergedResultWithSQLServerLimit() throws SQLException { - routeResult.setPagination(new Pagination(null, null, Collections.emptyList())); + routeResult.getOptimizeResult().setPagination(new Pagination(null, null, Collections.emptyList())); mergeEngine = new DQLMergeEngine(DatabaseType.SQLServer, routeResult, queryResults); MergedResult actual = mergeEngine.merge(); assertThat(actual, instanceOf(TopAndRowNumberDecoratorMergedResult.class)); @@ -131,7 +135,7 @@ public void assertBuildOrderByStreamMergedResult() throws SQLException { @Test public void assertBuildOrderByStreamMergedResultWithMySQLLimit() throws SQLException { - routeResult.setPagination(new Pagination(null, null, Collections.emptyList())); + routeResult.getOptimizeResult().setPagination(new Pagination(null, null, Collections.emptyList())); selectStatement.getOrderByItems().add(new IndexOrderByItemSegment(0, 0, 1, OrderDirection.DESC, OrderDirection.ASC)); mergeEngine = new DQLMergeEngine(DatabaseType.MySQL, routeResult, queryResults); MergedResult actual = mergeEngine.merge(); @@ -141,7 +145,7 @@ public void assertBuildOrderByStreamMergedResultWithMySQLLimit() throws SQLExcep @Test public void assertBuildOrderByStreamMergedResultWithOracleLimit() throws SQLException { - routeResult.setPagination(new Pagination(null, null, Collections.emptyList())); + routeResult.getOptimizeResult().setPagination(new Pagination(null, null, Collections.emptyList())); selectStatement.getOrderByItems().add(new IndexOrderByItemSegment(0, 0, 1, OrderDirection.DESC, OrderDirection.ASC)); mergeEngine = new DQLMergeEngine(DatabaseType.Oracle, routeResult, queryResults); MergedResult actual = mergeEngine.merge(); @@ -151,7 +155,7 @@ public void assertBuildOrderByStreamMergedResultWithOracleLimit() throws SQLExce @Test public void assertBuildOrderByStreamMergedResultWithSQLServerLimit() throws SQLException { - routeResult.setPagination(new Pagination(null, null, Collections.emptyList())); + routeResult.getOptimizeResult().setPagination(new Pagination(null, null, Collections.emptyList())); selectStatement.getOrderByItems().add(new IndexOrderByItemSegment(0, 0, 1, OrderDirection.DESC, OrderDirection.ASC)); mergeEngine = new DQLMergeEngine(DatabaseType.SQLServer, routeResult, queryResults); MergedResult actual = mergeEngine.merge(); @@ -169,7 +173,7 @@ public void assertBuildGroupByStreamMergedResult() throws SQLException { @Test public void assertBuildGroupByStreamMergedResultWithMySQLLimit() throws SQLException { - routeResult.setPagination(new Pagination(null, null, Collections.emptyList())); + routeResult.getOptimizeResult().setPagination(new Pagination(null, null, Collections.emptyList())); selectStatement.getGroupByItems().add(new IndexOrderByItemSegment(0, 0, 1, OrderDirection.DESC, OrderDirection.ASC)); selectStatement.getOrderByItems().add(new IndexOrderByItemSegment(0, 0, 1, OrderDirection.DESC, OrderDirection.ASC)); mergeEngine = new DQLMergeEngine(DatabaseType.MySQL, routeResult, queryResults); @@ -180,7 +184,7 @@ public void assertBuildGroupByStreamMergedResultWithMySQLLimit() throws SQLExcep @Test public void assertBuildGroupByStreamMergedResultWithOracleLimit() throws SQLException { - routeResult.setPagination(new Pagination(null, null, Collections.emptyList())); + routeResult.getOptimizeResult().setPagination(new Pagination(null, null, Collections.emptyList())); selectStatement.getGroupByItems().add(new IndexOrderByItemSegment(0, 0, 1, OrderDirection.DESC, OrderDirection.ASC)); selectStatement.getOrderByItems().add(new IndexOrderByItemSegment(0, 0, 1, OrderDirection.DESC, OrderDirection.ASC)); mergeEngine = new DQLMergeEngine(DatabaseType.Oracle, routeResult, queryResults); @@ -191,7 +195,7 @@ public void assertBuildGroupByStreamMergedResultWithOracleLimit() throws SQLExce @Test public void assertBuildGroupByStreamMergedResultWithSQLServerLimit() throws SQLException { - routeResult.setPagination(new Pagination(null, null, Collections.emptyList())); + routeResult.getOptimizeResult().setPagination(new Pagination(null, null, Collections.emptyList())); selectStatement.getGroupByItems().add(new IndexOrderByItemSegment(0, 0, 1, OrderDirection.DESC, OrderDirection.ASC)); selectStatement.getOrderByItems().add(new IndexOrderByItemSegment(0, 0, 1, OrderDirection.DESC, OrderDirection.ASC)); mergeEngine = new DQLMergeEngine(DatabaseType.SQLServer, routeResult, queryResults); @@ -209,7 +213,7 @@ public void assertBuildGroupByMemoryMergedResult() throws SQLException { @Test public void assertBuildGroupByMemoryMergedResultWithMySQLLimit() throws SQLException { - routeResult.setPagination(new Pagination(null, null, Collections.emptyList())); + routeResult.getOptimizeResult().setPagination(new Pagination(null, null, Collections.emptyList())); selectStatement.getGroupByItems().add(new IndexOrderByItemSegment(0, 0, 1, OrderDirection.DESC, OrderDirection.ASC)); mergeEngine = new DQLMergeEngine(DatabaseType.MySQL, routeResult, queryResults); MergedResult actual = mergeEngine.merge(); @@ -219,7 +223,7 @@ public void assertBuildGroupByMemoryMergedResultWithMySQLLimit() throws SQLExcep @Test public void assertBuildGroupByMemoryMergedResultWithOracleLimit() throws SQLException { - routeResult.setPagination(new Pagination(null, null, Collections.emptyList())); + routeResult.getOptimizeResult().setPagination(new Pagination(null, null, Collections.emptyList())); selectStatement.getGroupByItems().add(new IndexOrderByItemSegment(0, 0, 1, OrderDirection.DESC, OrderDirection.ASC)); selectStatement.getOrderByItems().add(new IndexOrderByItemSegment(0, 0, 2, OrderDirection.DESC, OrderDirection.ASC)); mergeEngine = new DQLMergeEngine(DatabaseType.Oracle, routeResult, queryResults); @@ -230,7 +234,7 @@ public void assertBuildGroupByMemoryMergedResultWithOracleLimit() throws SQLExce @Test public void assertBuildGroupByMemoryMergedResultWithSQLServerLimit() throws SQLException { - routeResult.setPagination(new Pagination(null, null, Collections.emptyList())); + routeResult.getOptimizeResult().setPagination(new Pagination(null, null, Collections.emptyList())); selectStatement.getGroupByItems().add(new IndexOrderByItemSegment(0, 0, 1, OrderDirection.DESC, OrderDirection.ASC)); selectStatement.getGroupByItems().add(new IndexOrderByItemSegment(0, 0, 1, OrderDirection.ASC, OrderDirection.ASC)); mergeEngine = new DQLMergeEngine(DatabaseType.SQLServer, routeResult, queryResults); @@ -248,7 +252,7 @@ public void assertBuildGroupByMemoryMergedResultWithAggregationOnly() throws SQL @Test public void assertBuildGroupByMemoryMergedResultWithAggregationOnlyWithMySQLLimit() throws SQLException { - routeResult.setPagination(new Pagination(null, null, Collections.emptyList())); + routeResult.getOptimizeResult().setPagination(new Pagination(null, null, Collections.emptyList())); selectStatement.getItems().add(new AggregationSelectItem(AggregationType.COUNT, "(*)", Optional.absent())); mergeEngine = new DQLMergeEngine(DatabaseType.MySQL, routeResult, queryResults); MergedResult actual = mergeEngine.merge(); @@ -258,7 +262,7 @@ public void assertBuildGroupByMemoryMergedResultWithAggregationOnlyWithMySQLLimi @Test public void assertBuildGroupByMemoryMergedResultWithAggregationOnlyWithOracleLimit() throws SQLException { - routeResult.setPagination(new Pagination(null, null, Collections.emptyList())); + routeResult.getOptimizeResult().setPagination(new Pagination(null, null, Collections.emptyList())); selectStatement.getItems().add(new AggregationSelectItem(AggregationType.COUNT, "(*)", Optional.absent())); mergeEngine = new DQLMergeEngine(DatabaseType.Oracle, routeResult, queryResults); MergedResult actual = mergeEngine.merge(); @@ -268,7 +272,7 @@ public void assertBuildGroupByMemoryMergedResultWithAggregationOnlyWithOracleLim @Test public void assertBuildGroupByMemoryMergedResultWithAggregationOnlyWithSQLServerLimit() throws SQLException { - routeResult.setPagination(new Pagination(null, null, Collections.emptyList())); + routeResult.getOptimizeResult().setPagination(new Pagination(null, null, Collections.emptyList())); selectStatement.getItems().add(new AggregationSelectItem(AggregationType.COUNT, "(*)", Optional.absent())); mergeEngine = new DQLMergeEngine(DatabaseType.SQLServer, routeResult, queryResults); MergedResult actual = mergeEngine.merge(); diff --git a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/groupby/GroupByMemoryMergedResultTest.java b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/groupby/GroupByMemoryMergedResultTest.java index 4fc4dfb14cb6b..76ead9afd1d50 100644 --- a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/groupby/GroupByMemoryMergedResultTest.java +++ b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/groupby/GroupByMemoryMergedResultTest.java @@ -26,6 +26,9 @@ import org.apache.shardingsphere.core.merge.MergedResult; import org.apache.shardingsphere.core.merge.dql.DQLMergeEngine; import org.apache.shardingsphere.core.merge.fixture.TestQueryResult; +import org.apache.shardingsphere.core.optimize.condition.ShardingCondition; +import org.apache.shardingsphere.core.optimize.condition.ShardingConditions; +import org.apache.shardingsphere.core.optimize.result.OptimizeResult; import org.apache.shardingsphere.core.parse.sql.context.selectitem.AggregationSelectItem; import org.apache.shardingsphere.core.parse.sql.segment.dml.order.item.IndexOrderByItemSegment; import org.apache.shardingsphere.core.parse.sql.statement.dml.SelectStatement; @@ -38,6 +41,7 @@ import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import static org.hamcrest.CoreMatchers.is; @@ -80,6 +84,7 @@ public void setUp() throws SQLException { selectStatement.getGroupByItems().add(new IndexOrderByItemSegment(0, 0, 3, OrderDirection.ASC, OrderDirection.ASC)); selectStatement.getOrderByItems().add(new IndexOrderByItemSegment(0, 0, 3, OrderDirection.DESC, OrderDirection.ASC)); routeResult = new SQLRouteResult(selectStatement); + routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); } private ResultSet mockResultSet() throws SQLException { diff --git a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/groupby/GroupByStreamMergedResultTest.java b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/groupby/GroupByStreamMergedResultTest.java index d4ef9bfa5bb1b..dcbf1ea322471 100644 --- a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/groupby/GroupByStreamMergedResultTest.java +++ b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/groupby/GroupByStreamMergedResultTest.java @@ -26,6 +26,9 @@ import org.apache.shardingsphere.core.merge.MergedResult; import org.apache.shardingsphere.core.merge.dql.DQLMergeEngine; import org.apache.shardingsphere.core.merge.fixture.TestQueryResult; +import org.apache.shardingsphere.core.optimize.condition.ShardingCondition; +import org.apache.shardingsphere.core.optimize.condition.ShardingConditions; +import org.apache.shardingsphere.core.optimize.result.OptimizeResult; import org.apache.shardingsphere.core.parse.sql.context.selectitem.AggregationSelectItem; import org.apache.shardingsphere.core.parse.sql.segment.dml.order.item.IndexOrderByItemSegment; import org.apache.shardingsphere.core.parse.sql.statement.dml.SelectStatement; @@ -39,6 +42,7 @@ import java.sql.SQLException; import java.util.ArrayList; import java.util.Calendar; +import java.util.Collections; import java.util.Date; import java.util.List; @@ -82,6 +86,7 @@ public void setUp() throws SQLException { selectStatement.getGroupByItems().add(new IndexOrderByItemSegment(0, 0, 3, OrderDirection.ASC, OrderDirection.ASC)); selectStatement.getOrderByItems().add(new IndexOrderByItemSegment(0, 0, 3, OrderDirection.ASC, OrderDirection.ASC)); routeResult = new SQLRouteResult(selectStatement); + routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); } private ResultSet mockResultSet() throws SQLException { diff --git a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/iterator/IteratorStreamMergedResultTest.java b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/iterator/IteratorStreamMergedResultTest.java index 220228cba690e..82a17864f7234 100644 --- a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/iterator/IteratorStreamMergedResultTest.java +++ b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/iterator/IteratorStreamMergedResultTest.java @@ -23,6 +23,9 @@ import org.apache.shardingsphere.core.merge.MergedResult; import org.apache.shardingsphere.core.merge.dql.DQLMergeEngine; import org.apache.shardingsphere.core.merge.fixture.TestQueryResult; +import org.apache.shardingsphere.core.optimize.condition.ShardingCondition; +import org.apache.shardingsphere.core.optimize.condition.ShardingConditions; +import org.apache.shardingsphere.core.optimize.result.OptimizeResult; import org.apache.shardingsphere.core.parse.sql.statement.dml.SelectStatement; import org.apache.shardingsphere.core.route.SQLRouteResult; import org.junit.Before; @@ -31,6 +34,7 @@ import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; +import java.util.Collections; import java.util.List; import static org.junit.Assert.assertFalse; @@ -53,6 +57,7 @@ public void setUp() throws SQLException { when(resultSet.getMetaData()).thenReturn(resultSetMetaData); queryResults = Lists.newArrayList(new TestQueryResult(resultSet), new TestQueryResult(mock(ResultSet.class)), new TestQueryResult(mock(ResultSet.class))); routeResult = new SQLRouteResult(new SelectStatement()); + routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); } @Test diff --git a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/orderby/OrderByStreamMergedResultTest.java b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/orderby/OrderByStreamMergedResultTest.java index d0193d783df8d..6520f4d16d632 100644 --- a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/orderby/OrderByStreamMergedResultTest.java +++ b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/orderby/OrderByStreamMergedResultTest.java @@ -24,6 +24,9 @@ import org.apache.shardingsphere.core.merge.MergedResult; import org.apache.shardingsphere.core.merge.dql.DQLMergeEngine; import org.apache.shardingsphere.core.merge.fixture.TestQueryResult; +import org.apache.shardingsphere.core.optimize.condition.ShardingCondition; +import org.apache.shardingsphere.core.optimize.condition.ShardingConditions; +import org.apache.shardingsphere.core.optimize.result.OptimizeResult; import org.apache.shardingsphere.core.parse.sql.segment.dml.order.item.IndexOrderByItemSegment; import org.apache.shardingsphere.core.parse.sql.statement.dml.SelectStatement; import org.apache.shardingsphere.core.route.SQLRouteResult; @@ -33,6 +36,7 @@ import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; +import java.util.Collections; import java.util.List; import static org.hamcrest.CoreMatchers.is; @@ -48,8 +52,6 @@ public final class OrderByStreamMergedResultTest { private List queryResults; - private SelectStatement selectStatement; - private SQLRouteResult routeResult; @Before @@ -59,9 +61,10 @@ public void setUp() throws SQLException { when(resultSet.getMetaData()).thenReturn(resultSetMetaData); queryResults = Lists.newArrayList( new TestQueryResult(resultSet), new TestQueryResult(mock(ResultSet.class)), new TestQueryResult(mock(ResultSet.class))); - selectStatement = new SelectStatement(); + SelectStatement selectStatement = new SelectStatement(); selectStatement.getOrderByItems().add(new IndexOrderByItemSegment(0, 0, 1, OrderDirection.ASC, OrderDirection.ASC)); routeResult = new SQLRouteResult(selectStatement); + routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); } @Test diff --git a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/pagination/LimitDecoratorMergedResultTest.java b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/pagination/LimitDecoratorMergedResultTest.java index cd75ffa86d9ca..5cd41def48b47 100644 --- a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/pagination/LimitDecoratorMergedResultTest.java +++ b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/pagination/LimitDecoratorMergedResultTest.java @@ -23,10 +23,13 @@ import org.apache.shardingsphere.core.merge.MergedResult; import org.apache.shardingsphere.core.merge.dql.DQLMergeEngine; import org.apache.shardingsphere.core.merge.fixture.TestQueryResult; +import org.apache.shardingsphere.core.optimize.condition.ShardingCondition; +import org.apache.shardingsphere.core.optimize.condition.ShardingConditions; +import org.apache.shardingsphere.core.optimize.pagination.Pagination; +import org.apache.shardingsphere.core.optimize.result.OptimizeResult; import org.apache.shardingsphere.core.parse.sql.segment.dml.pagination.limit.NumberLiteralLimitValueSegment; import org.apache.shardingsphere.core.parse.sql.statement.dml.SelectStatement; import org.apache.shardingsphere.core.route.SQLRouteResult; -import org.apache.shardingsphere.core.route.pagination.Pagination; import org.junit.Before; import org.junit.Test; @@ -65,12 +68,13 @@ public void setUp() throws SQLException { } SelectStatement selectStatement = new SelectStatement(); routeResult = new SQLRouteResult(selectStatement); - routeResult.setPagination(new Pagination(null, null, Collections.emptyList())); + routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.getOptimizeResult().setPagination(new Pagination(null, null, Collections.emptyList())); } @Test public void assertNextForSkipAll() throws SQLException { - routeResult.setPagination(new Pagination(new NumberLiteralLimitValueSegment(0, 0, Integer.MAX_VALUE), null, Collections.emptyList())); + routeResult.getOptimizeResult().setPagination(new Pagination(new NumberLiteralLimitValueSegment(0, 0, Integer.MAX_VALUE), null, Collections.emptyList())); mergeEngine = new DQLMergeEngine(DatabaseType.MySQL, routeResult, queryResults); MergedResult actual = mergeEngine.merge(); assertFalse(actual.next()); @@ -78,7 +82,7 @@ public void assertNextForSkipAll() throws SQLException { @Test public void assertNextWithoutRowCount() throws SQLException { - routeResult.setPagination(new Pagination(new NumberLiteralLimitValueSegment(0, 0, 2), null, Collections.emptyList())); + routeResult.getOptimizeResult().setPagination(new Pagination(new NumberLiteralLimitValueSegment(0, 0, 2), null, Collections.emptyList())); mergeEngine = new DQLMergeEngine(DatabaseType.MySQL, routeResult, queryResults); MergedResult actual = mergeEngine.merge(); for (int i = 0; i < 6; i++) { @@ -89,7 +93,7 @@ public void assertNextWithoutRowCount() throws SQLException { @Test public void assertNextWithRowCount() throws SQLException { - routeResult.setPagination(new Pagination(new NumberLiteralLimitValueSegment(0, 0, 2), new NumberLiteralLimitValueSegment(0, 0, 2), Collections.emptyList())); + routeResult.getOptimizeResult().setPagination(new Pagination(new NumberLiteralLimitValueSegment(0, 0, 2), new NumberLiteralLimitValueSegment(0, 0, 2), Collections.emptyList())); mergeEngine = new DQLMergeEngine(DatabaseType.MySQL, routeResult, queryResults); MergedResult actual = mergeEngine.merge(); assertTrue(actual.next()); diff --git a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/pagination/RowNumberDecoratorMergedResultTest.java b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/pagination/RowNumberDecoratorMergedResultTest.java index f79e1f72f5d0b..c1c7e4efec101 100644 --- a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/pagination/RowNumberDecoratorMergedResultTest.java +++ b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/pagination/RowNumberDecoratorMergedResultTest.java @@ -23,10 +23,13 @@ import org.apache.shardingsphere.core.merge.MergedResult; import org.apache.shardingsphere.core.merge.dql.DQLMergeEngine; import org.apache.shardingsphere.core.merge.fixture.TestQueryResult; +import org.apache.shardingsphere.core.optimize.condition.ShardingCondition; +import org.apache.shardingsphere.core.optimize.condition.ShardingConditions; +import org.apache.shardingsphere.core.optimize.pagination.Pagination; +import org.apache.shardingsphere.core.optimize.result.OptimizeResult; import org.apache.shardingsphere.core.parse.sql.segment.dml.pagination.rownum.NumberLiteralRowNumberValueSegment; import org.apache.shardingsphere.core.parse.sql.statement.dml.SelectStatement; import org.apache.shardingsphere.core.route.SQLRouteResult; -import org.apache.shardingsphere.core.route.pagination.Pagination; import org.junit.Before; import org.junit.Test; @@ -64,11 +67,12 @@ public void setUp() throws SQLException { queryResults.add(new TestQueryResult(each)); } routeResult = new SQLRouteResult(new SelectStatement()); + routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); } @Test public void assertNextForSkipAll() throws SQLException { - routeResult.setPagination(new Pagination(new NumberLiteralRowNumberValueSegment(0, 0, Integer.MAX_VALUE, true), null, Collections.emptyList())); + routeResult.getOptimizeResult().setPagination(new Pagination(new NumberLiteralRowNumberValueSegment(0, 0, Integer.MAX_VALUE, true), null, Collections.emptyList())); mergeEngine = new DQLMergeEngine(DatabaseType.Oracle, routeResult, queryResults); MergedResult actual = mergeEngine.merge(); assertFalse(actual.next()); @@ -76,7 +80,7 @@ public void assertNextForSkipAll() throws SQLException { @Test public void assertNextWithoutOffsetWithoutRowCount() throws SQLException { - routeResult.setPagination(new Pagination(null, null, Collections.emptyList())); + routeResult.getOptimizeResult().setPagination(new Pagination(null, null, Collections.emptyList())); mergeEngine = new DQLMergeEngine(DatabaseType.Oracle, routeResult, queryResults); MergedResult actual = mergeEngine.merge(); for (int i = 0; i < 8; i++) { @@ -87,7 +91,8 @@ public void assertNextWithoutOffsetWithoutRowCount() throws SQLException { @Test public void assertNextForRowCountBoundOpenedFalse() throws SQLException { - routeResult.setPagination(new Pagination(new NumberLiteralRowNumberValueSegment(0, 0, 2, true), new NumberLiteralRowNumberValueSegment(0, 0, 4, false), Collections.emptyList())); + routeResult.getOptimizeResult().setPagination( + new Pagination(new NumberLiteralRowNumberValueSegment(0, 0, 2, true), new NumberLiteralRowNumberValueSegment(0, 0, 4, false), Collections.emptyList())); mergeEngine = new DQLMergeEngine(DatabaseType.Oracle, routeResult, queryResults); MergedResult actual = mergeEngine.merge(); assertTrue(actual.next()); @@ -97,7 +102,8 @@ public void assertNextForRowCountBoundOpenedFalse() throws SQLException { @Test public void assertNextForRowCountBoundOpenedTrue() throws SQLException { - routeResult.setPagination(new Pagination(new NumberLiteralRowNumberValueSegment(0, 0, 2, true), new NumberLiteralRowNumberValueSegment(0, 0, 4, true), Collections.emptyList())); + routeResult.getOptimizeResult().setPagination( + new Pagination(new NumberLiteralRowNumberValueSegment(0, 0, 2, true), new NumberLiteralRowNumberValueSegment(0, 0, 4, true), Collections.emptyList())); mergeEngine = new DQLMergeEngine(DatabaseType.Oracle, routeResult, queryResults); MergedResult actual = mergeEngine.merge(); assertTrue(actual.next()); diff --git a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/pagination/TopAndRowNumberDecoratorMergedResultTest.java b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/pagination/TopAndRowNumberDecoratorMergedResultTest.java index 44384b0e0013c..7f76fb1d76bd2 100644 --- a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/pagination/TopAndRowNumberDecoratorMergedResultTest.java +++ b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/pagination/TopAndRowNumberDecoratorMergedResultTest.java @@ -23,11 +23,14 @@ import org.apache.shardingsphere.core.merge.MergedResult; import org.apache.shardingsphere.core.merge.dql.DQLMergeEngine; import org.apache.shardingsphere.core.merge.fixture.TestQueryResult; +import org.apache.shardingsphere.core.optimize.condition.ShardingCondition; +import org.apache.shardingsphere.core.optimize.condition.ShardingConditions; +import org.apache.shardingsphere.core.optimize.pagination.Pagination; +import org.apache.shardingsphere.core.optimize.result.OptimizeResult; import org.apache.shardingsphere.core.parse.sql.segment.dml.pagination.limit.NumberLiteralLimitValueSegment; import org.apache.shardingsphere.core.parse.sql.segment.dml.pagination.rownum.NumberLiteralRowNumberValueSegment; import org.apache.shardingsphere.core.parse.sql.statement.dml.SelectStatement; import org.apache.shardingsphere.core.route.SQLRouteResult; -import org.apache.shardingsphere.core.route.pagination.Pagination; import org.junit.Before; import org.junit.Test; @@ -65,11 +68,12 @@ public void setUp() throws SQLException { queryResults.add(new TestQueryResult(each)); } routeResult = new SQLRouteResult(new SelectStatement()); + routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); } @Test public void assertNextForSkipAll() throws SQLException { - routeResult.setPagination(new Pagination(new NumberLiteralRowNumberValueSegment(0, 0, Integer.MAX_VALUE, true), null, Collections.emptyList())); + routeResult.getOptimizeResult().setPagination(new Pagination(new NumberLiteralRowNumberValueSegment(0, 0, Integer.MAX_VALUE, true), null, Collections.emptyList())); mergeEngine = new DQLMergeEngine(DatabaseType.SQLServer, routeResult, queryResults); MergedResult actual = mergeEngine.merge(); assertFalse(actual.next()); @@ -77,7 +81,7 @@ public void assertNextForSkipAll() throws SQLException { @Test public void assertNextWithoutOffsetWithRowCount() throws SQLException { - routeResult.setPagination(new Pagination(null, new NumberLiteralLimitValueSegment(0, 0, 5), Collections.emptyList())); + routeResult.getOptimizeResult().setPagination(new Pagination(null, new NumberLiteralLimitValueSegment(0, 0, 5), Collections.emptyList())); mergeEngine = new DQLMergeEngine(DatabaseType.SQLServer, routeResult, queryResults); MergedResult actual = mergeEngine.merge(); for (int i = 0; i < 5; i++) { @@ -88,7 +92,7 @@ public void assertNextWithoutOffsetWithRowCount() throws SQLException { @Test public void assertNextWithOffsetWithoutRowCount() throws SQLException { - routeResult.setPagination(new Pagination(new NumberLiteralRowNumberValueSegment(0, 0, 2, true), null, Collections.emptyList())); + routeResult.getOptimizeResult().setPagination(new Pagination(new NumberLiteralRowNumberValueSegment(0, 0, 2, true), null, Collections.emptyList())); mergeEngine = new DQLMergeEngine(DatabaseType.SQLServer, routeResult, queryResults); MergedResult actual = mergeEngine.merge(); for (int i = 0; i < 7; i++) { @@ -99,7 +103,7 @@ public void assertNextWithOffsetWithoutRowCount() throws SQLException { @Test public void assertNextWithOffsetBoundOpenedFalse() throws SQLException { - routeResult.setPagination(new Pagination(new NumberLiteralRowNumberValueSegment(0, 0, 2, false), new NumberLiteralLimitValueSegment(0, 0, 4), Collections.emptyList())); + routeResult.getOptimizeResult().setPagination(new Pagination(new NumberLiteralRowNumberValueSegment(0, 0, 2, false), new NumberLiteralLimitValueSegment(0, 0, 4), Collections.emptyList())); mergeEngine = new DQLMergeEngine(DatabaseType.SQLServer, routeResult, queryResults); MergedResult actual = mergeEngine.merge(); assertTrue(actual.next()); @@ -109,7 +113,7 @@ public void assertNextWithOffsetBoundOpenedFalse() throws SQLException { @Test public void assertNextWithOffsetBoundOpenedTrue() throws SQLException { - routeResult.setPagination(new Pagination(new NumberLiteralRowNumberValueSegment(0, 0, 2, true), new NumberLiteralLimitValueSegment(0, 0, 4), Collections.emptyList())); + routeResult.getOptimizeResult().setPagination(new Pagination(new NumberLiteralRowNumberValueSegment(0, 0, 2, true), new NumberLiteralLimitValueSegment(0, 0, 4), Collections.emptyList())); mergeEngine = new DQLMergeEngine(DatabaseType.SQLServer, routeResult, queryResults); MergedResult actual = mergeEngine.merge(); assertTrue(actual.next()); diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java index e954cda8f5628..a179ecf6c24d8 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java @@ -57,10 +57,10 @@ public static OptimizeEngine newInstance(final ShardingRule shardingRule, final return new InsertOptimizeEngine(shardingRule, (InsertStatement) sqlStatement, parameters, generatedKey); } if (sqlStatement instanceof SelectStatement || sqlStatement instanceof DMLStatement) { - return new QueryOptimizeEngine(sqlStatement.getRouteCondition(), parameters); + return new QueryOptimizeEngine(sqlStatement, parameters, sqlStatement.getRouteCondition()); } // TODO do with DDL and DAL - return new QueryOptimizeEngine(sqlStatement.getRouteCondition(), parameters); + return new QueryOptimizeEngine(sqlStatement, parameters, sqlStatement.getRouteCondition()); } /** diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/query/QueryOptimizeEngine.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/query/QueryOptimizeEngine.java index 03dc934267c89..2c81784e0559d 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/query/QueryOptimizeEngine.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/query/QueryOptimizeEngine.java @@ -17,6 +17,7 @@ package org.apache.shardingsphere.core.optimize.engine.sharding.query; +import com.google.common.base.Optional; import com.google.common.collect.BoundType; import com.google.common.collect.Range; import lombok.RequiredArgsConstructor; @@ -25,11 +26,15 @@ import org.apache.shardingsphere.core.optimize.condition.ShardingCondition; import org.apache.shardingsphere.core.optimize.condition.ShardingConditions; import org.apache.shardingsphere.core.optimize.engine.OptimizeEngine; +import org.apache.shardingsphere.core.optimize.pagination.Pagination; import org.apache.shardingsphere.core.optimize.result.OptimizeResult; import org.apache.shardingsphere.core.parse.sql.context.condition.AndCondition; import org.apache.shardingsphere.core.parse.sql.context.condition.Column; import org.apache.shardingsphere.core.parse.sql.context.condition.Condition; import org.apache.shardingsphere.core.parse.sql.context.condition.ParseCondition; +import org.apache.shardingsphere.core.parse.sql.segment.dml.pagination.PaginationValueSegment; +import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; +import org.apache.shardingsphere.core.parse.sql.statement.dml.SelectStatement; import org.apache.shardingsphere.core.strategy.route.value.BetweenRouteValue; import org.apache.shardingsphere.core.strategy.route.value.ListRouteValue; import org.apache.shardingsphere.core.strategy.route.value.RouteValue; @@ -48,17 +53,21 @@ @RequiredArgsConstructor public final class QueryOptimizeEngine implements OptimizeEngine { - private final ParseCondition parseCondition; + private final SQLStatement sqlStatement; private final List parameters; + private final ParseCondition parseCondition; + @Override public OptimizeResult optimize() { - List result = new ArrayList<>(parseCondition.getOrConditions().size()); + List shardingConditions = new ArrayList<>(parseCondition.getOrConditions().size()); for (AndCondition each : parseCondition.getOrConditions()) { - result.add(optimize(each.getConditionsMap())); + shardingConditions.add(optimize(each.getConditionsMap())); } - return new OptimizeResult(new ShardingConditions(result)); + OptimizeResult result = new OptimizeResult(new ShardingConditions(shardingConditions)); + result.setPagination(getPagination().orNull()); + return result; } private ShardingCondition optimize(final Map> conditionsMap) { @@ -127,4 +136,15 @@ private List> optimize(final List> listValue, final } return result; } + + private Optional getPagination() { + if (sqlStatement instanceof SelectStatement) { + PaginationValueSegment offsetSegment = ((SelectStatement) sqlStatement).getOffset(); + PaginationValueSegment rowCountSegment = ((SelectStatement) sqlStatement).getRowCount(); + if (null != offsetSegment || null != rowCountSegment) { + return Optional.of(new Pagination(offsetSegment, rowCountSegment, parameters)); + } + } + return Optional.absent(); + } } diff --git a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/pagination/Pagination.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/pagination/Pagination.java similarity index 98% rename from sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/pagination/Pagination.java rename to sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/pagination/Pagination.java index cdee54bdfb8f3..dc4cb2faf996a 100644 --- a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/pagination/Pagination.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/pagination/Pagination.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.shardingsphere.core.route.pagination; +package org.apache.shardingsphere.core.optimize.pagination; import com.google.common.base.Optional; import org.apache.shardingsphere.core.parse.sql.segment.dml.pagination.NumberLiteralPaginationValueSegment; diff --git a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/pagination/PaginationValue.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/pagination/PaginationValue.java similarity index 95% rename from sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/pagination/PaginationValue.java rename to sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/pagination/PaginationValue.java index e841453a43f51..f92f77c6ccd8f 100644 --- a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/pagination/PaginationValue.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/pagination/PaginationValue.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.shardingsphere.core.route.pagination; +package org.apache.shardingsphere.core.optimize.pagination; import lombok.Getter; import lombok.RequiredArgsConstructor; diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/result/OptimizeResult.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/result/OptimizeResult.java index 80576b8058fbd..7de05b552ca72 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/result/OptimizeResult.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/result/OptimizeResult.java @@ -18,10 +18,13 @@ package org.apache.shardingsphere.core.optimize.result; import com.google.common.base.Optional; +import lombok.AccessLevel; import lombok.Getter; import lombok.RequiredArgsConstructor; +import lombok.Setter; import org.apache.shardingsphere.core.optimize.condition.ShardingCondition; import org.apache.shardingsphere.core.optimize.condition.ShardingConditions; +import org.apache.shardingsphere.core.optimize.pagination.Pagination; import org.apache.shardingsphere.core.optimize.result.insert.InsertOptimizeResult; import java.util.Collections; @@ -32,13 +35,17 @@ * @author panjuan */ @RequiredArgsConstructor +@Getter +@Setter public final class OptimizeResult { - @Getter private final ShardingConditions shardingConditions; + @Getter(AccessLevel.NONE) private final InsertOptimizeResult insertOptimizeResult; + private Pagination pagination; + public OptimizeResult(final ShardingConditions shardingConditions) { this(shardingConditions, null); } diff --git a/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/QueryOptimizeEngineTest.java b/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/QueryOptimizeEngineTest.java index 0408942f9e472..66e00420299cf 100644 --- a/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/QueryOptimizeEngineTest.java +++ b/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/QueryOptimizeEngineTest.java @@ -27,6 +27,7 @@ import org.apache.shardingsphere.core.parse.sql.context.condition.ParseCondition; import org.apache.shardingsphere.core.parse.sql.segment.dml.expr.ExpressionSegment; import org.apache.shardingsphere.core.parse.sql.segment.dml.expr.simple.LiteralExpressionSegment; +import org.apache.shardingsphere.core.parse.sql.statement.dml.SelectStatement; import org.apache.shardingsphere.core.strategy.route.value.BetweenRouteValue; import org.apache.shardingsphere.core.strategy.route.value.ListRouteValue; import org.apache.shardingsphere.core.strategy.route.value.RouteValue; @@ -53,7 +54,7 @@ public void assertOptimizeAlwaysFalseListConditions() { andCondition.getConditions().add(condition2); ParseCondition conditions = new ParseCondition(); conditions.getOrConditions().add(andCondition); - ShardingConditions shardingConditions = new QueryOptimizeEngine(conditions, Collections.emptyList()).optimize().getShardingConditions(); + ShardingConditions shardingConditions = new QueryOptimizeEngine(new SelectStatement(), Collections.emptyList(), conditions).optimize().getShardingConditions(); assertTrue(shardingConditions.isAlwaysFalse()); } @@ -66,7 +67,7 @@ public void assertOptimizeAlwaysFalseRangeConditions() { andCondition.getConditions().add(condition2); ParseCondition conditions = new ParseCondition(); conditions.getOrConditions().add(andCondition); - ShardingConditions shardingConditions = new QueryOptimizeEngine(conditions, Collections.emptyList()).optimize().getShardingConditions(); + ShardingConditions shardingConditions = new QueryOptimizeEngine(new SelectStatement(), Collections.emptyList(), conditions).optimize().getShardingConditions(); assertTrue(shardingConditions.isAlwaysFalse()); } @@ -79,7 +80,7 @@ public void assertOptimizeAlwaysFalseListConditionsAndRangeConditions() { andCondition.getConditions().add(condition2); ParseCondition conditions = new ParseCondition(); conditions.getOrConditions().add(andCondition); - ShardingConditions shardingConditions = new QueryOptimizeEngine(conditions, Collections.emptyList()).optimize().getShardingConditions(); + ShardingConditions shardingConditions = new QueryOptimizeEngine(new SelectStatement(), Collections.emptyList(), conditions).optimize().getShardingConditions(); assertTrue(shardingConditions.isAlwaysFalse()); } @@ -93,7 +94,7 @@ public void assertOptimizeListConditions() { andCondition.getConditions().add(condition2); ParseCondition conditions = new ParseCondition(); conditions.getOrConditions().add(andCondition); - ShardingConditions shardingConditions = new QueryOptimizeEngine(conditions, Collections.emptyList()).optimize().getShardingConditions(); + ShardingConditions shardingConditions = new QueryOptimizeEngine(new SelectStatement(), Collections.emptyList(), conditions).optimize().getShardingConditions(); assertFalse(shardingConditions.isAlwaysFalse()); ShardingCondition shardingCondition = shardingConditions.getShardingConditions().get(0); RouteValue shardingValue = shardingCondition.getShardingValues().get(0); @@ -112,7 +113,7 @@ public void assertOptimizeRangeConditions() { andCondition.getConditions().add(condition2); ParseCondition parseCondition = new ParseCondition(); parseCondition.getOrConditions().add(andCondition); - ShardingConditions shardingConditions = new QueryOptimizeEngine(parseCondition, Collections.emptyList()).optimize().getShardingConditions(); + ShardingConditions shardingConditions = new QueryOptimizeEngine(new SelectStatement(), Collections.emptyList(), parseCondition).optimize().getShardingConditions(); assertFalse(shardingConditions.isAlwaysFalse()); ShardingCondition shardingCondition = shardingConditions.getShardingConditions().get(0); RouteValue shardingValue = shardingCondition.getShardingValues().get(0); @@ -131,7 +132,7 @@ public void assertOptimizeListConditionsAndRangeConditions() { andCondition.getConditions().add(condition2); ParseCondition parseCondition = new ParseCondition(); parseCondition.getOrConditions().add(andCondition); - ShardingConditions shardingConditions = new QueryOptimizeEngine(parseCondition, Collections.emptyList()).optimize().getShardingConditions(); + ShardingConditions shardingConditions = new QueryOptimizeEngine(new SelectStatement(), Collections.emptyList(), parseCondition).optimize().getShardingConditions(); assertFalse(shardingConditions.isAlwaysFalse()); ShardingCondition shardingCondition = shardingConditions.getShardingConditions().get(0); RouteValue shardingValue = shardingCondition.getShardingValues().get(0); diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/rewriter/parameter/ShardingParameterRewriter.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/rewriter/parameter/ShardingParameterRewriter.java index 0727100953142..8796aaebfa73d 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/rewriter/parameter/ShardingParameterRewriter.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/rewriter/parameter/ShardingParameterRewriter.java @@ -36,11 +36,11 @@ public final class ShardingParameterRewriter implements ParameterRewriter { @Override public void rewrite(final ParameterBuilder parameterBuilder) { if (isNeedRewritePagination()) { - Optional offsetParameterIndex = sqlRouteResult.getPagination().getOffsetParameterIndex(); + Optional offsetParameterIndex = sqlRouteResult.getOptimizeResult().getPagination().getOffsetParameterIndex(); if (offsetParameterIndex.isPresent()) { rewriteOffset(parameterBuilder, offsetParameterIndex.get()); } - Optional rowCountParameterIndex = sqlRouteResult.getPagination().getRowCountParameterIndex(); + Optional rowCountParameterIndex = sqlRouteResult.getOptimizeResult().getPagination().getRowCountParameterIndex(); if (rowCountParameterIndex.isPresent()) { rewriteRowCount(parameterBuilder, rowCountParameterIndex.get()); } @@ -48,14 +48,15 @@ public void rewrite(final ParameterBuilder parameterBuilder) { } private boolean isNeedRewritePagination() { - return sqlRouteResult.getSqlStatement() instanceof SelectStatement && null != sqlRouteResult.getPagination() && !sqlRouteResult.getRoutingResult().isSingleRouting(); + return null != sqlRouteResult.getOptimizeResult().getPagination() && !sqlRouteResult.getRoutingResult().isSingleRouting(); } private void rewriteOffset(final ParameterBuilder parameterBuilder, final int offsetParameterIndex) { - parameterBuilder.getReplacedIndexAndParameters().put(offsetParameterIndex, sqlRouteResult.getPagination().getRevisedOffset()); + parameterBuilder.getReplacedIndexAndParameters().put(offsetParameterIndex, sqlRouteResult.getOptimizeResult().getPagination().getRevisedOffset()); } private void rewriteRowCount(final ParameterBuilder parameterBuilder, final int rowCountParameterIndex) { - parameterBuilder.getReplacedIndexAndParameters().put(rowCountParameterIndex, sqlRouteResult.getPagination().getRevisedRowCount((SelectStatement) sqlRouteResult.getSqlStatement())); + parameterBuilder.getReplacedIndexAndParameters().put( + rowCountParameterIndex, sqlRouteResult.getOptimizeResult().getPagination().getRevisedRowCount((SelectStatement) sqlRouteResult.getSqlStatement())); } } diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/generator/OffsetTokenGenerator.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/generator/OffsetTokenGenerator.java index ce7662c85cc3f..60a8522130d96 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/generator/OffsetTokenGenerator.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/generator/OffsetTokenGenerator.java @@ -18,12 +18,12 @@ package org.apache.shardingsphere.core.rewrite.token.generator; import com.google.common.base.Optional; +import org.apache.shardingsphere.core.optimize.pagination.Pagination; import org.apache.shardingsphere.core.parse.sql.segment.dml.pagination.NumberLiteralPaginationValueSegment; import org.apache.shardingsphere.core.parse.sql.segment.dml.pagination.PaginationValueSegment; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.SelectStatement; import org.apache.shardingsphere.core.rewrite.token.pojo.OffsetToken; -import org.apache.shardingsphere.core.route.pagination.Pagination; import org.apache.shardingsphere.core.rule.ShardingRule; import java.util.List; diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/generator/RowCountTokenGenerator.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/generator/RowCountTokenGenerator.java index 51c9b98da7147..dcefeaafec66b 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/generator/RowCountTokenGenerator.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/generator/RowCountTokenGenerator.java @@ -18,12 +18,12 @@ package org.apache.shardingsphere.core.rewrite.token.generator; import com.google.common.base.Optional; +import org.apache.shardingsphere.core.optimize.pagination.Pagination; import org.apache.shardingsphere.core.parse.sql.segment.dml.pagination.NumberLiteralPaginationValueSegment; import org.apache.shardingsphere.core.parse.sql.segment.dml.pagination.PaginationValueSegment; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.SelectStatement; import org.apache.shardingsphere.core.rewrite.token.pojo.RowCountToken; -import org.apache.shardingsphere.core.route.pagination.Pagination; import org.apache.shardingsphere.core.rule.ShardingRule; import java.util.List; diff --git a/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/core/rewrite/rewriter/ShardingSQLRewriterTest.java b/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/core/rewrite/rewriter/ShardingSQLRewriterTest.java index bbb10fd299ec4..c0a5bba8a7602 100644 --- a/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/core/rewrite/rewriter/ShardingSQLRewriterTest.java +++ b/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/core/rewrite/rewriter/ShardingSQLRewriterTest.java @@ -22,6 +22,9 @@ import lombok.SneakyThrows; import org.apache.shardingsphere.core.constant.AggregationType; import org.apache.shardingsphere.core.constant.OrderDirection; +import org.apache.shardingsphere.core.optimize.condition.ShardingCondition; +import org.apache.shardingsphere.core.optimize.condition.ShardingConditions; +import org.apache.shardingsphere.core.optimize.pagination.Pagination; import org.apache.shardingsphere.core.optimize.result.OptimizeResult; import org.apache.shardingsphere.core.optimize.result.insert.InsertOptimizeResult; import org.apache.shardingsphere.core.parse.constant.QuoteCharacter; @@ -63,7 +66,6 @@ import org.apache.shardingsphere.core.rewrite.rewriter.sql.EncryptSQLRewriter; import org.apache.shardingsphere.core.rewrite.rewriter.sql.ShardingSQLRewriter; import org.apache.shardingsphere.core.route.SQLRouteResult; -import org.apache.shardingsphere.core.route.pagination.Pagination; import org.apache.shardingsphere.core.route.type.RoutingResult; import org.apache.shardingsphere.core.route.type.RoutingUnit; import org.apache.shardingsphere.core.route.type.TableUnit; @@ -129,6 +131,7 @@ public void setUp() throws IOException { public void assertRewriteWithoutChange() { routeResult = new SQLRouteResult(selectStatement); routeResult.setRoutingResult(new RoutingResult()); + routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); selectStatement.setLogicSQL("SELECT table_y.id FROM table_y WHERE table_y.id=?"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.singletonList(1)); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is("SELECT table_y.id FROM table_y WHERE table_y.id=?")); @@ -144,6 +147,7 @@ public void assertRewriteForTableName() { selectStatement.getSqlSegments().add(new TableSegment(47, 53, "table_x")); routeResult = new SQLRouteResult(selectStatement); routeResult.setRoutingResult(new RoutingResult()); + routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); selectStatement.setLogicSQL("SELECT table_x.id, x.name FROM table_x x WHERE table_x.id=? AND x.name=?"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(parameters); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is("SELECT table_1.id, x.name FROM table_1 x WHERE table_1.id=? AND x.name=?")); @@ -159,6 +163,7 @@ public void assertRewriteForOrderByAndGroupByDerivedColumns() { selectStatement.setSelectListStopIndex(11); routeResult = new SQLRouteResult(selectStatement); routeResult.setRoutingResult(new RoutingResult()); + routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); selectStatement.setLogicSQL("SELECT x.age FROM table_x x GROUP BY x.id ORDER BY x.name"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is( @@ -177,6 +182,7 @@ public void assertRewriteForAggregationDerivedColumns() { selectStatement.setSelectListStopIndex(16); routeResult = new SQLRouteResult(selectStatement); routeResult.setRoutingResult(new RoutingResult()); + routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); selectStatement.setLogicSQL("SELECT AVG(x.age) FROM table_x x"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is( @@ -289,8 +295,8 @@ public void assertRewriteForDuplicateKeyWithSetWithoutParameter() { RoutingUnit routingUnit = new RoutingUnit("db0"); routingUnit.getTableUnits().add(new TableUnit("table_x", "table_1")); routeResult = new SQLRouteResult(insertStatement); - routeResult.setOptimizeResult(new OptimizeResult(insertOptimizeResult)); routeResult.setRoutingResult(new RoutingResult()); + routeResult.setOptimizeResult(new OptimizeResult(insertOptimizeResult)); insertStatement.setLogicSQL("INSERT INTO `table_x` set name = 10, id = 1 ON DUPLICATE KEY UPDATE name = VALUES(name)"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(routingUnit, tableTokens), is("INSERT INTO `table_1` set name = 10, id = 1 ON DUPLICATE KEY UPDATE name = VALUES(name)")); @@ -314,8 +320,8 @@ public void assertRewriteColumnWithoutColumnsWithoutParameter() { RoutingUnit routingUnit = new RoutingUnit("db0"); routingUnit.getTableUnits().add(new TableUnit("table_x", "table_1")); routeResult = new SQLRouteResult(insertStatement); - routeResult.setOptimizeResult(new OptimizeResult(insertOptimizeResult)); routeResult.setRoutingResult(new RoutingResult()); + routeResult.setOptimizeResult(new OptimizeResult(insertOptimizeResult)); insertStatement.setLogicSQL("INSERT INTO `table_x` VALUES (10, 1)"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(parameters); assertThat(getSQLBuilder(rewriteEngine).toSQL(routingUnit, tableTokens), is("INSERT INTO `table_1`(name, id) VALUES (10, 1)")); @@ -337,8 +343,8 @@ public void assertRewriteColumnWithoutColumnsWithParameter() { RoutingUnit routingUnit = new RoutingUnit("db0"); routingUnit.getTableUnits().add(new TableUnit("table_x", "table_1")); routeResult = new SQLRouteResult(insertStatement); - routeResult.setOptimizeResult(new OptimizeResult(insertOptimizeResult)); routeResult.setRoutingResult(new RoutingResult()); + routeResult.setOptimizeResult(new OptimizeResult(insertOptimizeResult)); insertStatement.setLogicSQL("INSERT INTO `table_x` VALUES (?, ?)"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Arrays.asList(parameters)); assertThat(getSQLBuilder(rewriteEngine).toSQL(routingUnit, tableTokens), is("INSERT INTO `table_1`(name, id) VALUES (?, ?)")); @@ -352,8 +358,9 @@ public void assertRewriteForLimit() { selectStatement.setRowCount(rowCountSegment); selectStatement.getSqlSegments().add(new TableSegment(17, 23, "table_x")); routeResult = new SQLRouteResult(selectStatement); - routeResult.setPagination(new Pagination(offsetSegment, rowCountSegment, Collections.emptyList())); routeResult.setRoutingResult(new RoutingResult()); + routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.getOptimizeResult().setPagination(new Pagination(offsetSegment, rowCountSegment, Collections.emptyList())); selectStatement.setLogicSQL("SELECT x.id FROM table_x x LIMIT 2, 2"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is("SELECT x.id FROM table_1 x LIMIT 0, 4")); @@ -367,8 +374,9 @@ public void assertRewriteForRowNumber() { selectStatement.setRowCount(rowCountSegment); selectStatement.getSqlSegments().add(new TableSegment(68, 74, "table_x")); routeResult = new SQLRouteResult(selectStatement); - routeResult.setPagination(new Pagination(offsetSegment, rowCountSegment, Collections.emptyList())); routeResult.setRoutingResult(new RoutingResult()); + routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.getOptimizeResult().setPagination(new Pagination(offsetSegment, rowCountSegment, Collections.emptyList())); selectStatement.setLogicSQL("SELECT * FROM (SELECT row_.*, rownum rownum_ FROM (SELECT x.id FROM table_x x) row_ WHERE rownum<=4) t WHERE t.rownum_>2"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), @@ -383,8 +391,9 @@ public void assertRewriteForTopAndRowNumber() { selectStatement.setRowCount(rowCountSegment); selectStatement.getSqlSegments().add(new TableSegment(85, 91, "table_x")); routeResult = new SQLRouteResult(selectStatement); - routeResult.setPagination(new Pagination(offsetSegment, rowCountSegment, Collections.emptyList())); routeResult.setRoutingResult(new RoutingResult()); + routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.getOptimizeResult().setPagination(new Pagination(offsetSegment, rowCountSegment, Collections.emptyList())); selectStatement.setLogicSQL("SELECT * FROM (SELECT TOP(4) row_number() OVER (ORDER BY x.id) AS rownum_, x.id FROM table_x x) AS row_ WHERE row_.rownum_>2"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), @@ -403,8 +412,9 @@ public void assertRewriteForLimitForMemoryGroupBy() { selectStatement.getGroupByItems().add(new ColumnOrderByItemSegment(0, 0, columnSegment, OrderDirection.DESC, OrderDirection.ASC)); selectStatement.getSqlSegments().add(new TableSegment(17, 23, "table_x")); routeResult = new SQLRouteResult(selectStatement); - routeResult.setPagination(new Pagination(offsetSegment, rowCountSegment, Collections.emptyList())); routeResult.setRoutingResult(new RoutingResult()); + routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.getOptimizeResult().setPagination(new Pagination(offsetSegment, rowCountSegment, Collections.emptyList())); selectStatement.setLogicSQL("SELECT x.id FROM table_x x LIMIT 2, 2"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is("SELECT x.id FROM table_1 x LIMIT 0, 2147483647")); @@ -422,8 +432,9 @@ public void assertRewriteForRowNumForMemoryGroupBy() { selectStatement.getOrderByItems().add(new ColumnOrderByItemSegment(0, 0, columnSegment, OrderDirection.ASC, OrderDirection.ASC)); selectStatement.getGroupByItems().add(new ColumnOrderByItemSegment(0, 0, columnSegment, OrderDirection.DESC, OrderDirection.ASC)); routeResult = new SQLRouteResult(selectStatement); - routeResult.setPagination(new Pagination(offsetSegment, rowCountSegment, Collections.emptyList())); routeResult.setRoutingResult(new RoutingResult()); + routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.getOptimizeResult().setPagination(new Pagination(offsetSegment, rowCountSegment, Collections.emptyList())); selectStatement.setLogicSQL("SELECT * FROM (SELECT row_.*, rownum rownum_ FROM (SELECT x.id FROM table_x x) row_ WHERE rownum<=4) t WHERE t.rownum_>2"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), @@ -442,8 +453,9 @@ public void assertRewriteForTopAndRowNumberForMemoryGroupBy() { selectStatement.getOrderByItems().add(new ColumnOrderByItemSegment(0, 0, columnSegment, OrderDirection.ASC, OrderDirection.ASC)); selectStatement.getGroupByItems().add(new ColumnOrderByItemSegment(0, 0, columnSegment, OrderDirection.DESC, OrderDirection.ASC)); routeResult = new SQLRouteResult(selectStatement); - routeResult.setPagination(new Pagination(offsetSegment, rowCountSegment, Collections.emptyList())); routeResult.setRoutingResult(new RoutingResult()); + routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.getOptimizeResult().setPagination(new Pagination(offsetSegment, rowCountSegment, Collections.emptyList())); selectStatement.setLogicSQL("SELECT * FROM (SELECT TOP(4) row_number() OVER (ORDER BY x.id) AS rownum_, x.id FROM table_x x) AS row_ WHERE row_.rownum_>2"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), @@ -458,10 +470,11 @@ public void assertRewriteForLimitForNotRewritePagination() { selectStatement.setRowCount(rowCountSegment); selectStatement.getSqlSegments().add(new TableSegment(17, 23, "table_x")); routeResult = new SQLRouteResult(selectStatement); - routeResult.setPagination(new Pagination(offsetSegment, rowCountSegment, Collections.emptyList())); RoutingResult routingResult = new RoutingResult(); routingResult.getRoutingUnits().add(new RoutingUnit("ds")); routeResult.setRoutingResult(routingResult); + routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.getOptimizeResult().setPagination(new Pagination(offsetSegment, rowCountSegment, Collections.emptyList())); selectStatement.setLogicSQL("SELECT x.id FROM table_x x LIMIT 2, 2"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is("SELECT x.id FROM table_1 x LIMIT 2, 2")); @@ -475,10 +488,11 @@ public void assertRewriteForRowNumForNotRewritePagination() { selectStatement.setRowCount(rowCountSegment); selectStatement.getSqlSegments().add(new TableSegment(68, 74, "table_x")); routeResult = new SQLRouteResult(selectStatement); - routeResult.setPagination(new Pagination(offsetSegment, rowCountSegment, Collections.emptyList())); RoutingResult routingResult = new RoutingResult(); routingResult.getRoutingUnits().add(new RoutingUnit("ds")); routeResult.setRoutingResult(routingResult); + routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.getOptimizeResult().setPagination(new Pagination(offsetSegment, rowCountSegment, Collections.emptyList())); selectStatement.setLogicSQL("SELECT * FROM (SELECT row_.*, rownum rownum_ FROM (SELECT x.id FROM table_x x) row_ WHERE rownum<=4) t WHERE t.rownum_>2"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), @@ -493,10 +507,11 @@ public void assertRewriteForTopAndRowNumberForNotRewritePagination() { selectStatement.setRowCount(rowCountSegment); selectStatement.getSqlSegments().add(new TableSegment(85, 91, "table_x")); routeResult = new SQLRouteResult(selectStatement); - routeResult.setPagination(new Pagination(offsetSegment, rowCountSegment, Collections.emptyList())); RoutingResult routingResult = new RoutingResult(); routingResult.getRoutingUnits().add(new RoutingUnit("ds")); routeResult.setRoutingResult(routingResult); + routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.getOptimizeResult().setPagination(new Pagination(offsetSegment, rowCountSegment, Collections.emptyList())); selectStatement.setLogicSQL("SELECT * FROM (SELECT TOP(4) row_number() OVER (ORDER BY x.id) AS rownum_, x.id FROM table_x x) AS row_ WHERE row_.rownum_>2"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), @@ -518,6 +533,7 @@ public void assertRewriteForDerivedOrderBy() { selectStatement.getSqlSegments().add(new TableSegment(25, 31, "table_x")); routeResult = new SQLRouteResult(selectStatement); routeResult.setRoutingResult(new RoutingResult()); + routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); selectStatement.setLogicSQL("SELECT x.id, x.name FROM table_x x GROUP BY x.id, x.name DESC"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is("SELECT x.id, x.name FROM table_1 x GROUP BY x.id, x.name DESC ORDER BY x.id ASC,x.name DESC ")); @@ -532,6 +548,7 @@ public void assertGenerateSQL() { selectStatement.getTables().add(new Table("table_y", "y")); routeResult = new SQLRouteResult(selectStatement); routeResult.setRoutingResult(new RoutingResult()); + routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); selectStatement.setLogicSQL("SELECT table_x.id, x.name FROM table_x x, table_y y WHERE table_x.id=? AND x.name=?"); SQLRewriteEngine rewriteEngine = new SQLRewriteEngine(shardingRule, routeResult.getSqlStatement(), parameters, routeResult.getRoutingResult().isSingleRouting()); rewriteEngine.init(Collections.singletonList(new ShardingParameterRewriter(routeResult)), @@ -549,6 +566,7 @@ public void assertIndexTokenForIndexNameTableName() { selectStatement.getSqlSegments().add(new TableSegment(27, 33, "table_x")); routeResult = new SQLRouteResult(selectStatement); routeResult.setRoutingResult(new RoutingResult()); + routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); selectStatement.setLogicSQL("CREATE INDEX index_name ON table_x ('column')"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is("CREATE INDEX index_name_table_1 ON table_1 ('column')")); @@ -575,6 +593,7 @@ public void assertIndexTokenForIndexNameTableNameWithoutLogicTableName() { selectStatement.getSqlSegments().add(new TableSegment(28, 34, "table_x")); routeResult = new SQLRouteResult(selectStatement); routeResult.setRoutingResult(new RoutingResult()); + routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); selectStatement.setLogicSQL("CREATE INDEX logic_index ON table_x ('column')"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is("CREATE INDEX logic_index_table_1 ON table_1 ('column')")); @@ -587,6 +606,7 @@ public void assertTableTokenWithoutBackQuoteForShow() { RoutingResult routingResult = new RoutingResult(); routingResult.getRoutingUnits().add(new RoutingUnit("ds")); routeResult.setRoutingResult(routingResult); + routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); showTablesStatement.setLogicSQL("SHOW COLUMNS FROM table_x"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is("SHOW COLUMNS FROM table_1")); @@ -600,6 +620,7 @@ public void assertTableTokenWithoutBackQuoteFromSchemaForShow() { RoutingResult routingResult = new RoutingResult(); routingResult.getRoutingUnits().add(new RoutingUnit("ds")); routeResult.setRoutingResult(routingResult); + routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); showTablesStatement.setLogicSQL("SHOW COLUMNS FROM table_x FROM 'sharding_db'"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); Map logicAndActualTableMap = new LinkedHashMap<>(); @@ -614,6 +635,7 @@ public void assertTableTokenWithBackQuoteForShow() { RoutingResult routingResult = new RoutingResult(); routingResult.getRoutingUnits().add(new RoutingUnit("ds")); routeResult.setRoutingResult(routingResult); + routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); showTablesStatement.setLogicSQL("SHOW COLUMNS FROM `table_x`"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is("SHOW COLUMNS FROM `table_1`")); @@ -626,6 +648,7 @@ public void assertTableTokenWithBackQuoteFromSchemaForShow() { RoutingResult routingResult = new RoutingResult(); routingResult.getRoutingUnits().add(new RoutingUnit("ds")); routeResult.setRoutingResult(routingResult); + routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); showTablesStatement.setLogicSQL("SHOW COLUMNS FROM `table_x` FROM 'sharding_db'"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is("SHOW COLUMNS FROM `table_1` FROM 'sharding_db'")); @@ -638,6 +661,7 @@ public void assertTableTokenWithSchemaForShow() { RoutingResult routingResult = new RoutingResult(); routingResult.getRoutingUnits().add(new RoutingUnit("ds")); routeResult.setRoutingResult(routingResult); + routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); showTablesStatement.setLogicSQL("SHOW COLUMNS FROM sharding_db.table_x"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is("SHOW COLUMNS FROM table_1")); @@ -650,6 +674,7 @@ public void assertTableTokenWithSchemaFromSchemaForShow() { RoutingResult routingResult = new RoutingResult(); routingResult.getRoutingUnits().add(new RoutingUnit("ds")); routeResult.setRoutingResult(routingResult); + routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); showTablesStatement.setLogicSQL("SHOW COLUMNS FROM sharding_db.table_x FROM sharding_db"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is("SHOW COLUMNS FROM table_1 FROM sharding_db")); @@ -662,6 +687,7 @@ public void assertTableTokenWithBackQuoteWithSchemaForShow() { RoutingResult routingResult = new RoutingResult(); routingResult.getRoutingUnits().add(new RoutingUnit("ds")); routeResult.setRoutingResult(routingResult); + routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); showTablesStatement.setLogicSQL("SHOW COLUMNS FROM sharding_db.`table_x`"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is("SHOW COLUMNS FROM `table_1`")); @@ -674,6 +700,7 @@ public void assertTableTokenWithBackQuoteWithSchemaFromSchemaForShow() { RoutingResult routingResult = new RoutingResult(); routingResult.getRoutingUnits().add(new RoutingUnit("ds")); routeResult.setRoutingResult(routingResult); + routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); showTablesStatement.setLogicSQL("SHOW COLUMNS FROM sharding_db.`table_x` FROM sharding_db"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is("SHOW COLUMNS FROM `table_1` FROM sharding_db")); @@ -686,6 +713,7 @@ public void assertTableTokenWithSchemaWithBackQuoteForShow() { RoutingResult routingResult = new RoutingResult(); routingResult.getRoutingUnits().add(new RoutingUnit("ds")); routeResult.setRoutingResult(routingResult); + routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); showTablesStatement.setLogicSQL("SHOW COLUMNS FROM `sharding_db`.`table_x`"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is("SHOW COLUMNS FROM `table_1`")); @@ -698,6 +726,7 @@ public void assertTableTokenWithSchemaWithBackQuoteFromSchemaForShow() { RoutingResult routingResult = new RoutingResult(); routingResult.getRoutingUnits().add(new RoutingUnit("ds")); routeResult.setRoutingResult(routingResult); + routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); showTablesStatement.setLogicSQL("SHOW COLUMNS FROM `sharding_db`.`table_x` FROM sharding_db"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is("SHOW COLUMNS FROM `table_1` FROM sharding_db")); @@ -713,6 +742,7 @@ public void assertTableTokenWithSchemaForSelect() { RoutingResult routingResult = new RoutingResult(); routingResult.getRoutingUnits().add(new RoutingUnit("ds")); routeResult.setRoutingResult(routingResult); + routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); selectStatement.setLogicSQL("SELECT * FROM sharding_db.table_x"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is("SELECT * FROM table_1")); @@ -723,6 +753,7 @@ public void assertTableTokenWithSchemaForInsert() { insertStatement.getSqlSegments().add(new TableSegment(12, 30, "table_x")); routeResult = new SQLRouteResult(insertStatement); routeResult.setRoutingResult(new RoutingResult()); + routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); insertStatement.setLogicSQL("INSERT INTO sharding_db.table_x (order_id, user_id, status) values (1, 1, 'OK')"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL( @@ -734,6 +765,7 @@ public void assertTableTokenWithSchemaForUpdate() { updateStatement.getSqlSegments().add(new TableSegment(7, 27, "table_x")); routeResult = new SQLRouteResult(updateStatement); routeResult.setRoutingResult(new RoutingResult()); + routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); updateStatement.setLogicSQL("UPDATE `sharding_db`.table_x SET user_id=1 WHERE order_id=1"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is("UPDATE table_1 SET user_id=1 WHERE order_id=1")); @@ -746,6 +778,7 @@ public void assertTableTokenWithSchemaForDelete() { RoutingResult routingResult = new RoutingResult(); routingResult.getRoutingUnits().add(new RoutingUnit("ds")); routeResult.setRoutingResult(routingResult); + routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); deleteStatement.setLogicSQL("DELETE FROM `sharding_db`.`table_x` WHERE user_id=1"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is("DELETE FROM `table_1` WHERE user_id=1")); @@ -763,6 +796,7 @@ public void assertSelectEqualWithShardingEncryptor() { new Condition(column, new PredicateSegment(29, 32, null, null), new ParameterMarkerExpressionSegment(0, 0, 0))); routeResult = new SQLRouteResult(selectStatement); routeResult.setRoutingResult(new RoutingResult()); + routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); selectStatement.setLogicSQL("SELECT id FROM table_z WHERE id=? AND name=?"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(parameters); assertThat(getSQLBuilder(rewriteEngine).toSQL(), is("SELECT id FROM table_z WHERE id = ? AND name=?")); @@ -780,6 +814,7 @@ public void assertSelectInWithShardingEncryptor() { selectStatement.getEncryptCondition().getOrConditions().get(0).getConditions().add(new Condition(column, new PredicateSegment(29, 39, null, null), expressionSegments)); routeResult = new SQLRouteResult(selectStatement); routeResult.setRoutingResult(new RoutingResult()); + routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); selectStatement.setLogicSQL("SELECT id FROM table_z WHERE id in (3,5)"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is("SELECT id FROM table_z WHERE id IN ('encryptValue', 'encryptValue')")); @@ -801,6 +836,7 @@ public void assertSelectInWithShardingEncryptorWithParameter() { selectStatement.getEncryptCondition().getOrConditions().get(0).getConditions().add(new Condition(column, new PredicateSegment(45, 50, null, null), new LiteralExpressionSegment(0, 0, 3))); routeResult = new SQLRouteResult(selectStatement); routeResult.setRoutingResult(new RoutingResult()); + routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); selectStatement.setLogicSQL("SELECT id FROM table_z WHERE id in (?, ?) or id = 3"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(parameters); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is("SELECT id FROM table_z WHERE id IN (?, ?) or id = 'encryptValue'")); @@ -820,6 +856,7 @@ public void assertSelectEqualWithQueryAssistedShardingEncryptor() { new Condition(column, new PredicateSegment(29, 32, null, null), new ParameterMarkerExpressionSegment(0, 0, 0))); routeResult = new SQLRouteResult(selectStatement); routeResult.setRoutingResult(new RoutingResult()); + routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); selectStatement.setLogicSQL("SELECT id FROM table_k WHERE id=? AND name=?"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(parameters); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is("SELECT id FROM table_k WHERE query_id = ? AND name=?")); @@ -837,6 +874,7 @@ public void assertSelectInWithQueryAssistedShardingEncryptor() { selectStatement.getEncryptCondition().getOrConditions().get(0).getConditions().add(new Condition(column, new PredicateSegment(29, 39, null, null), expressionSegments)); routeResult = new SQLRouteResult(selectStatement); routeResult.setRoutingResult(new RoutingResult()); + routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); selectStatement.setLogicSQL("SELECT id FROM table_k WHERE id in (3,5)"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), @@ -855,6 +893,7 @@ public void assertUpdateWithShardingEncryptor() { updateStatement.getEncryptCondition().getOrConditions().get(0).getConditions().add(new Condition(column, new PredicateSegment(32, 37, null, null), new LiteralExpressionSegment(0, 0, 2))); routeResult = new SQLRouteResult(updateStatement); routeResult.setRoutingResult(new RoutingResult()); + routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); updateStatement.setLogicSQL("UPDATE table_z SET id = 1 WHERE id = 2"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is("UPDATE table_z SET id = 'encryptValue' WHERE id = 'encryptValue'")); @@ -895,6 +934,7 @@ public void assertSelectInWithAggregationDistinct() { selectStatement.getSqlSegments().add(selectItemSegment2); routeResult = new SQLRouteResult(selectStatement); routeResult.setRoutingResult(new RoutingResult()); + routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); selectStatement.setLogicSQL("SELECT COUNT(DISTINCT id), SUM(DISTINCT id) FROM table_z WHERE id in (3,5)"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is("SELECT DISTINCT id, id FROM table_z WHERE id in (3,5)")); diff --git a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/SQLRouteResult.java b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/SQLRouteResult.java index fef62e0c75bfe..e34df2655b8ea 100644 --- a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/SQLRouteResult.java +++ b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/SQLRouteResult.java @@ -23,7 +23,6 @@ import org.apache.shardingsphere.core.optimize.GeneratedKey; import org.apache.shardingsphere.core.optimize.result.OptimizeResult; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; -import org.apache.shardingsphere.core.route.pagination.Pagination; import org.apache.shardingsphere.core.route.type.RoutingResult; import java.util.Collection; @@ -45,8 +44,6 @@ public final class SQLRouteResult { private final GeneratedKey generatedKey; - private Pagination pagination; - private RoutingResult routingResult; private OptimizeResult optimizeResult; diff --git a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java index 56fd5c46f41fa..4b96f44c7cb84 100644 --- a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java +++ b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java @@ -32,12 +32,10 @@ import org.apache.shardingsphere.core.parse.entry.ShardingSQLParseEntry; import org.apache.shardingsphere.core.parse.hook.ParsingHook; import org.apache.shardingsphere.core.parse.hook.SPIParsingHook; -import org.apache.shardingsphere.core.parse.sql.segment.dml.pagination.PaginationValueSegment; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.InsertStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.SelectStatement; import org.apache.shardingsphere.core.route.SQLRouteResult; -import org.apache.shardingsphere.core.route.pagination.Pagination; import org.apache.shardingsphere.core.route.type.RoutingResult; import org.apache.shardingsphere.core.rule.BindingTableRule; import org.apache.shardingsphere.core.rule.ShardingRule; @@ -104,13 +102,6 @@ public SQLRouteResult route(final SQLStatement sqlStatement, final List mergeShardingValues(optimizeResult.getShardingConditions()); } RoutingResult routingResult = RoutingEngineFactory.newInstance(shardingRule, shardingMetaData.getDataSource(), sqlStatement, optimizeResult).route(); - if (sqlStatement instanceof SelectStatement) { - PaginationValueSegment offsetSegment = ((SelectStatement) sqlStatement).getOffset(); - PaginationValueSegment rowCountSegment = ((SelectStatement) sqlStatement).getRowCount(); - if (null != offsetSegment || null != rowCountSegment) { - result.setPagination(new Pagination(offsetSegment, rowCountSegment, parameters)); - } - } if (needMerge) { Preconditions.checkState(1 == routingResult.getRoutingUnits().size(), "Must have one sharding with subquery."); } From e91af974ba8f4b59cd535e306713e25ff73f0bd7 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Sat, 8 Jun 2019 00:55:08 +0800 Subject: [PATCH 009/283] for #2441, remove useless Condition.compareOperator --- .../sql/context/condition/Condition.java | 36 ++++--------------- 1 file changed, 7 insertions(+), 29 deletions(-) diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/context/condition/Condition.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/context/condition/Condition.java index 3d1103152678e..53bb0415212b6 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/context/condition/Condition.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/context/condition/Condition.java @@ -21,7 +21,6 @@ import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.RequiredArgsConstructor; -import lombok.Setter; import lombok.ToString; import org.apache.shardingsphere.core.constant.ShardingOperator; import org.apache.shardingsphere.core.exception.ShardingException; @@ -46,7 +45,7 @@ @Getter @EqualsAndHashCode(exclude = {"predicateSegment"}) @ToString -public class Condition { +public final class Condition { private final Column column; @@ -54,52 +53,31 @@ public class Condition { private final ShardingOperator operator; - @Setter - private String compareOperator; - private final Map> positionValueMap = new LinkedHashMap<>(); private final Map positionIndexMap = new LinkedHashMap<>(); - protected Condition() { - column = null; - operator = null; - predicateSegment = null; - } - public Condition(final Column column, final PredicateSegment predicateSegment, final ExpressionSegment expressionSegment) { this(column, predicateSegment, ShardingOperator.EQUAL); - init(expressionSegment, 0); - } - - public Condition(final Column column, final PredicateSegment predicateSegment, final String compareOperator, final ExpressionSegment expressionSegment) { - this.column = column; - this.predicateSegment = predicateSegment; - this.compareOperator = compareOperator; - if ("=".equals(compareOperator)) { - operator = ShardingOperator.EQUAL; - } else { - operator = null; - } - init(expressionSegment, 0); + putPositionMap(0, expressionSegment); } public Condition(final Column column, final PredicateSegment predicateSegment, final ExpressionSegment beginExpressionSegment, final ExpressionSegment endExpressionSegment) { this(column, predicateSegment, ShardingOperator.BETWEEN); - init(beginExpressionSegment, 0); - init(endExpressionSegment, 1); + putPositionMap(0, beginExpressionSegment); + putPositionMap(1, endExpressionSegment); } public Condition(final Column column, final PredicateSegment predicateSegment, final List expressionSegments) { this(column, predicateSegment, ShardingOperator.IN); int count = 0; for (ExpressionSegment each : expressionSegments) { - init(each, count); + putPositionMap(count, each); count++; } } - private void init(final ExpressionSegment expressionSegment, final int position) { + private void putPositionMap(final int position, final ExpressionSegment expressionSegment) { if (expressionSegment instanceof ParameterMarkerExpressionSegment) { positionIndexMap.put(position, ((ParameterMarkerExpressionSegment) expressionSegment).getParameterMarkerIndex()); } else if (expressionSegment instanceof LiteralExpressionSegment) { @@ -113,7 +91,7 @@ private void init(final ExpressionSegment expressionSegment, final int position) * @param parameters parameters * @return condition values */ - public List> getConditionValues(final List parameters) { + public List> getConditionValues(final List parameters) { List> result = new LinkedList<>(positionValueMap.values()); for (Entry entry : positionIndexMap.entrySet()) { Object parameter = parameters.get(entry.getValue()); From 017ab061e7191781041250d5cf28949de7ce4a29 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Sat, 8 Jun 2019 00:56:05 +0800 Subject: [PATCH 010/283] for #2441, made PredicateUtilsTest readable --- .../filler/common/dml/PredicateUtilsTest.java | 60 +++++++------------ 1 file changed, 23 insertions(+), 37 deletions(-) diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/java/org/apache/shardingsphere/core/parse/filler/common/dml/PredicateUtilsTest.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/java/org/apache/shardingsphere/core/parse/filler/common/dml/PredicateUtilsTest.java index 587b4c0d797c2..ed65bb6eeb222 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/java/org/apache/shardingsphere/core/parse/filler/common/dml/PredicateUtilsTest.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/java/org/apache/shardingsphere/core/parse/filler/common/dml/PredicateUtilsTest.java @@ -17,9 +17,7 @@ package org.apache.shardingsphere.core.parse.filler.common.dml; -import com.google.common.base.Optional; import org.apache.shardingsphere.core.parse.sql.context.condition.Column; -import org.apache.shardingsphere.core.parse.sql.context.condition.Condition; import org.apache.shardingsphere.core.parse.sql.segment.dml.expr.ExpressionSegment; import org.apache.shardingsphere.core.parse.sql.segment.dml.expr.complex.SubquerySegment; import org.apache.shardingsphere.core.parse.sql.segment.dml.expr.simple.ParameterMarkerExpressionSegment; @@ -27,49 +25,37 @@ import org.apache.shardingsphere.core.parse.sql.segment.dml.predicate.value.PredicateInRightValue; import org.junit.Test; -import java.util.Stack; -import java.util.Vector; +import java.util.Collections; -import static org.junit.Assert.assertEquals; - -/** - * Unit tests for class {@link PredicateUtils}. - * - * @see PredicateUtils - */ -public class PredicateUtilsTest { +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertThat; +public final class PredicateUtilsTest { + @Test - public void testCreateInConditionOne() { - Vector vector = new Vector<>(); - vector.add(new SubquerySegment(-32, -32, "test")); - Column column = new Column(null, ""); - assertEquals(Optional.absent(), PredicateUtils.createInCondition(new PredicateInRightValue(vector), column, null)); + public void assertCreateInConditionOne() { + assertFalse( + PredicateUtils.createInCondition(new PredicateInRightValue(Collections.singletonList(new SubquerySegment(0, 0, "test"))), new Column(null, ""), null).isPresent()); } - + @Test - public void testCreateInConditionTwo() { - Column column = new Column("!fE3s*#0- ece4_ :", "!fE3s*#0- ece4_ :"); - Stack stack = new Stack(); - stack.add(new ParameterMarkerExpressionSegment(-3652, -3652, 0)); - assertEquals("Optional.of(Condition(column=Column(name=!fE3s*#0- ece4_ :, tableName=!fE3s*#0- ece4_ :), " - + "predicateSegment=null, operator=IN, compareOperator=null, positionValueMap={}, positionIndexMap={0=0}))", - PredicateUtils.createInCondition(new PredicateInRightValue(stack), column, null).toString() - ); + public void assertCreateInConditionTwo() { + assertThat(PredicateUtils.createInCondition( + new PredicateInRightValue(Collections.singletonList(new ParameterMarkerExpressionSegment(0, 0, 1))), new Column("id", "tbl"), null).toString(), + is("Optional.of(Condition(column=Column(name=id, tableName=tbl), predicateSegment=null, operator=IN, positionValueMap={}, positionIndexMap={0=1}))")); } - + @Test - public void testCreateCompareConditionWithNonNull() { - ParameterMarkerExpressionSegment parameterMarkerExpressionSegment = new ParameterMarkerExpressionSegment(0, 0, 0); - PredicateCompareRightValue predicateCompareRightValue = new PredicateCompareRightValue("Z}4,%s6+6mvg{", parameterMarkerExpressionSegment); - Column column = new Column("Z}4,%s6+6mvg{ a", "Z}4,%s6+6mvg{"); - assertEquals("Optional.of(Condition(column=Column(name=Z}4,%s6+6mvg{ a, tableName=Z}4,%s6+6mvg{), predicateSegment=null, " - + "operator=EQUAL, compareOperator=null, positionValueMap={}, positionIndexMap={0=0}))", - PredicateUtils.createCompareCondition(predicateCompareRightValue, column, null).toString()); + public void assertCreateCompareConditionWithNonNull() { + ParameterMarkerExpressionSegment parameterMarkerExpressionSegment = new ParameterMarkerExpressionSegment(0, 0, 1); + PredicateCompareRightValue predicateCompareRightValue = new PredicateCompareRightValue("=", parameterMarkerExpressionSegment); + assertThat(PredicateUtils.createCompareCondition(predicateCompareRightValue, new Column("id", "tbl"), null).toString(), + is("Optional.of(Condition(column=Column(name=id, tableName=tbl), predicateSegment=null, operator=EQUAL, positionValueMap={}, positionIndexMap={0=1}))")); } - + @Test - public void testCreateCompareConditionWithNull() { - assertEquals(Optional.absent(), PredicateUtils.createCompareCondition(new PredicateCompareRightValue("$VALUES", null), null, null)); + public void assertCreateCompareConditionWithNull() { + assertFalse(PredicateUtils.createCompareCondition(new PredicateCompareRightValue("=", null), null, null).isPresent()); } } From 28378dbfaee7b1bc743720b64e1347f55300e985 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Sat, 8 Jun 2019 01:05:59 +0800 Subject: [PATCH 011/283] for #2441, refactor Condition.getConditionValues --- .../core/parse/sql/context/condition/Condition.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/context/condition/Condition.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/context/condition/Condition.java index 53bb0415212b6..7c10868d7e9c3 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/context/condition/Condition.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/context/condition/Condition.java @@ -17,13 +17,13 @@ package org.apache.shardingsphere.core.parse.sql.context.condition; +import com.google.common.base.Preconditions; import lombok.AccessLevel; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.ToString; import org.apache.shardingsphere.core.constant.ShardingOperator; -import org.apache.shardingsphere.core.exception.ShardingException; import org.apache.shardingsphere.core.parse.sql.segment.dml.expr.ExpressionSegment; import org.apache.shardingsphere.core.parse.sql.segment.dml.expr.simple.LiteralExpressionSegment; import org.apache.shardingsphere.core.parse.sql.segment.dml.expr.simple.ParameterMarkerExpressionSegment; @@ -95,9 +95,7 @@ public List> getConditionValues(final List parameters) { List> result = new LinkedList<>(positionValueMap.values()); for (Entry entry : positionIndexMap.entrySet()) { Object parameter = parameters.get(entry.getValue()); - if (!(parameter instanceof Comparable)) { - throw new ShardingException("Parameter `%s` should extends Comparable for sharding value.", parameter); - } + Preconditions.checkArgument(parameter instanceof Comparable, "Parameter `%s` should extends Comparable for sharding value.", parameter); if (entry.getKey() < result.size()) { result.add(entry.getKey(), (Comparable) parameter); } else { From 83b323b8e4a6a1f490fc95375415954cc6b99ae4 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Sat, 8 Jun 2019 01:29:50 +0800 Subject: [PATCH 012/283] for #2441, ParseCondition => Conditions --- .../core/optimize/OptimizeEngineFactory.java | 4 +- .../sharding/insert/InsertOptimizeEngine.java | 2 +- .../sharding/query/QueryOptimizeEngine.java | 8 +- .../sharding/InsertOptimizeEngineTest.java | 20 +-- .../sharding/QueryOptimizeEngineTest.java | 14 +- .../encrypt/dml/EncryptOrPredicateFiller.java | 6 +- .../dml/ShardingOrPredicateFiller.java | 16 +-- .../insert/ShardingInsertValuesFiller.java | 2 +- .../ShardingSubqueryPredicateFiller.java | 2 +- .../update/ShardingSetAssignmentsFiller.java | 2 +- .../optimizer/select/SelectOptimizer.java | 8 +- .../{ParseCondition.java => Conditions.java} | 6 +- .../sql/statement/AbstractSQLStatement.java | 6 +- .../parse/sql/statement/SQLStatement.java | 12 +- .../sql/statement/dml/SelectStatement.java | 4 +- .../asserts/EncryptSQLStatementAssert.java | 2 +- .../integrate/asserts/SQLStatementAssert.java | 4 +- .../asserts/condition/ConditionAssert.java | 8 +- ...Condition.java => ExpectedConditions.java} | 4 +- .../integrate/jaxb/root/ParserResult.java | 10 +- .../src/test/resources/encrypt/delete.xml | 12 +- .../src/test/resources/encrypt/select.xml | 16 +-- .../src/test/resources/encrypt/update.xml | 12 +- .../src/test/resources/parser/dml/delete.xml | 16 +-- .../src/test/resources/parser/dml/insert.xml | 120 +++++++++--------- .../src/test/resources/parser/dml/update.xml | 32 ++--- .../src/test/resources/parser/dql/select.xml | 100 +++++++-------- .../resources/parser/dql/select_aggregate.xml | 8 +- .../parser/dql/select_expression.xml | 4 +- .../resources/parser/dql/select_group_by.xml | 8 +- .../test/resources/parser/dql/select_or.xml | 40 +++--- .../resources/parser/dql/select_order_by.xml | 8 +- .../parser/dql/select_pagination.xml | 40 +++--- .../select_pagination_group_by_order_by.xml | 32 ++--- .../resources/parser/dql/select_relation.xml | 12 +- .../resources/parser/dql/select_sub_query.xml | 4 +- .../rewriter/sql/EncryptSQLRewriter.java | 8 +- .../EncryptColumnTokenGenerator.java | 4 +- .../rewriter/ShardingSQLRewriterTest.java | 28 ++-- .../router/sharding/ParsingSQLRouter.java | 2 +- 40 files changed, 323 insertions(+), 323 deletions(-) rename sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/context/condition/{ParseCondition.java => Conditions.java} (96%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/condition/{ExpectedOrCondition.java => ExpectedConditions.java} (95%) diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java index a179ecf6c24d8..2dde517bd7cc3 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java @@ -57,10 +57,10 @@ public static OptimizeEngine newInstance(final ShardingRule shardingRule, final return new InsertOptimizeEngine(shardingRule, (InsertStatement) sqlStatement, parameters, generatedKey); } if (sqlStatement instanceof SelectStatement || sqlStatement instanceof DMLStatement) { - return new QueryOptimizeEngine(sqlStatement, parameters, sqlStatement.getRouteCondition()); + return new QueryOptimizeEngine(sqlStatement, parameters, sqlStatement.getShardingConditions()); } // TODO do with DDL and DAL - return new QueryOptimizeEngine(sqlStatement, parameters, sqlStatement.getRouteCondition()); + return new QueryOptimizeEngine(sqlStatement, parameters, sqlStatement.getShardingConditions()); } /** diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/insert/InsertOptimizeEngine.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/insert/InsertOptimizeEngine.java index bf3a5d8a87710..c845f7d95cb2d 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/insert/InsertOptimizeEngine.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/insert/InsertOptimizeEngine.java @@ -63,7 +63,7 @@ public final class InsertOptimizeEngine implements OptimizeEngine { @Override public OptimizeResult optimize() { - List andConditions = insertStatement.getRouteCondition().getOrConditions(); + List andConditions = insertStatement.getShardingConditions().getOrConditions(); Iterator> generatedKeys = createGeneratedKeys(); List shardingConditions = new ArrayList<>(andConditions.size()); InsertOptimizeResult insertOptimizeResult = new InsertOptimizeResult(insertStatement.getColumnNames()); diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/query/QueryOptimizeEngine.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/query/QueryOptimizeEngine.java index 2c81784e0559d..4c2c2e08f55f4 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/query/QueryOptimizeEngine.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/query/QueryOptimizeEngine.java @@ -31,7 +31,7 @@ import org.apache.shardingsphere.core.parse.sql.context.condition.AndCondition; import org.apache.shardingsphere.core.parse.sql.context.condition.Column; import org.apache.shardingsphere.core.parse.sql.context.condition.Condition; -import org.apache.shardingsphere.core.parse.sql.context.condition.ParseCondition; +import org.apache.shardingsphere.core.parse.sql.context.condition.Conditions; import org.apache.shardingsphere.core.parse.sql.segment.dml.pagination.PaginationValueSegment; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.SelectStatement; @@ -57,12 +57,12 @@ public final class QueryOptimizeEngine implements OptimizeEngine { private final List parameters; - private final ParseCondition parseCondition; + private final Conditions conditions; @Override public OptimizeResult optimize() { - List shardingConditions = new ArrayList<>(parseCondition.getOrConditions().size()); - for (AndCondition each : parseCondition.getOrConditions()) { + List shardingConditions = new ArrayList<>(conditions.getOrConditions().size()); + for (AndCondition each : conditions.getOrConditions()) { shardingConditions.add(optimize(each.getConditionsMap())); } OptimizeResult result = new OptimizeResult(new ShardingConditions(shardingConditions)); diff --git a/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/InsertOptimizeEngineTest.java b/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/InsertOptimizeEngineTest.java index 8e7bfa7067bf0..09a4586bf0151 100644 --- a/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/InsertOptimizeEngineTest.java +++ b/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/InsertOptimizeEngineTest.java @@ -114,10 +114,10 @@ private void initializeInsertValuesWithPlaceholder() { insertValuesStatementWithPlaceholder.setParametersIndex(4); AndCondition andCondition1 = new AndCondition(); andCondition1.getConditions().add(new Condition(new Column("user_id", "t_order"), null, new ParameterMarkerExpressionSegment(0, 0, 0))); - insertValuesStatementWithPlaceholder.getRouteCondition().getOrConditions().add(andCondition1); + insertValuesStatementWithPlaceholder.getShardingConditions().getOrConditions().add(andCondition1); AndCondition andCondition2 = new AndCondition(); andCondition2.getConditions().add(new Condition(new Column("user_id", "t_order"), null, new ParameterMarkerExpressionSegment(0, 0, 2))); - insertValuesStatementWithPlaceholder.getRouteCondition().getOrConditions().add(andCondition2); + insertValuesStatementWithPlaceholder.getShardingConditions().getOrConditions().add(andCondition2); insertValuesStatementWithPlaceholder.getColumnNames().add("user_id"); insertValuesStatementWithPlaceholder.getColumnNames().add("status"); InsertValue insertValue = new InsertValue(Arrays.asList(new ParameterMarkerExpressionSegment(1, 2, 0), new ParameterMarkerExpressionSegment(3, 4, 1))); @@ -131,10 +131,10 @@ private void initializeInsertValuesWithPlaceholderWithEncrypt() { insertValuesStatementWithPlaceholderWithEncrypt.setParametersIndex(4); AndCondition andCondition1 = new AndCondition(); andCondition1.getConditions().add(new Condition(new Column("user_id", "t_encrypt"), null, new ParameterMarkerExpressionSegment(0, 0, 0))); - insertValuesStatementWithPlaceholderWithEncrypt.getRouteCondition().getOrConditions().add(andCondition1); + insertValuesStatementWithPlaceholderWithEncrypt.getShardingConditions().getOrConditions().add(andCondition1); AndCondition andCondition2 = new AndCondition(); andCondition2.getConditions().add(new Condition(new Column("user_id", "t_encrypt"), null, new ParameterMarkerExpressionSegment(0, 0, 2))); - insertValuesStatementWithPlaceholderWithEncrypt.getRouteCondition().getOrConditions().add(andCondition2); + insertValuesStatementWithPlaceholderWithEncrypt.getShardingConditions().getOrConditions().add(andCondition2); insertValuesStatementWithPlaceholderWithEncrypt.getColumnNames().add("user_id"); insertValuesStatementWithPlaceholderWithEncrypt.getColumnNames().add("status"); InsertValue insertValue = new InsertValue(Arrays.asList(new ParameterMarkerExpressionSegment(1, 2, 0), new ParameterMarkerExpressionSegment(3, 4, 1))); @@ -148,7 +148,7 @@ private void initializeInsertValuesWithoutPlaceholder() { insertValuesStatementWithoutPlaceholder.setParametersIndex(0); AndCondition andCondition = new AndCondition(); andCondition.getConditions().add(new Condition(new Column("user_id", "t_order"), null, new LiteralExpressionSegment(0, 0, 12))); - insertValuesStatementWithoutPlaceholder.getRouteCondition().getOrConditions().add(andCondition); + insertValuesStatementWithoutPlaceholder.getShardingConditions().getOrConditions().add(andCondition); } private void initializeInsertValuesWithoutPlaceholderWithQueryEncrypt() { @@ -157,7 +157,7 @@ private void initializeInsertValuesWithoutPlaceholderWithQueryEncrypt() { insertValuesStatementWithoutPlaceholderWithQueryEncrypt.setParametersIndex(0); AndCondition andCondition = new AndCondition(); andCondition.getConditions().add(new Condition(new Column("user_id", "t_encrypt_query"), null, new LiteralExpressionSegment(0, 0, 12))); - insertValuesStatementWithoutPlaceholderWithQueryEncrypt.getRouteCondition().getOrConditions().add(andCondition); + insertValuesStatementWithoutPlaceholderWithQueryEncrypt.getShardingConditions().getOrConditions().add(andCondition); } private void initializeInsertSetWithPlaceholder() { @@ -168,7 +168,7 @@ private void initializeInsertSetWithPlaceholder() { insertSetStatementWithPlaceholder.getColumnNames().add("status"); AndCondition andCondition = new AndCondition(); andCondition.getConditions().add(new Condition(new Column("user_id", "t_order"), null, new LiteralExpressionSegment(0, 0, 12))); - insertSetStatementWithPlaceholder.getRouteCondition().getOrConditions().add(andCondition); + insertSetStatementWithPlaceholder.getShardingConditions().getOrConditions().add(andCondition); } private void initializeInsertSetWithPlaceholderWithQueryEncrypt() { @@ -179,7 +179,7 @@ private void initializeInsertSetWithPlaceholderWithQueryEncrypt() { insertSetStatementWithPlaceholderWithQueryEncrypt.getColumnNames().add("status"); AndCondition andCondition = new AndCondition(); andCondition.getConditions().add(new Condition(new Column("user_id", "t_encrypt_query"), null, new LiteralExpressionSegment(0, 0, 12))); - insertSetStatementWithPlaceholderWithQueryEncrypt.getRouteCondition().getOrConditions().add(andCondition); + insertSetStatementWithPlaceholderWithQueryEncrypt.getShardingConditions().getOrConditions().add(andCondition); } private void initializeInsertSetWithoutPlaceholder() { @@ -190,7 +190,7 @@ private void initializeInsertSetWithoutPlaceholder() { insertSetStatementWithoutPlaceholder.getColumnNames().add("status"); AndCondition andCondition = new AndCondition(); andCondition.getConditions().add(new Condition(new Column("user_id", "t_order"), null, new LiteralExpressionSegment(0, 0, 12))); - insertSetStatementWithoutPlaceholder.getRouteCondition().getOrConditions().add(andCondition); + insertSetStatementWithoutPlaceholder.getShardingConditions().getOrConditions().add(andCondition); } private void initializeInsertSetWithoutPlaceholderWithEncrypt() { @@ -201,7 +201,7 @@ private void initializeInsertSetWithoutPlaceholderWithEncrypt() { insertSetStatementWithoutPlaceholderWithEncrypt.getColumnNames().add("status"); AndCondition andCondition = new AndCondition(); andCondition.getConditions().add(new Condition(new Column("user_id", "t_encrypt"), null, new LiteralExpressionSegment(0, 0, 12))); - insertSetStatementWithoutPlaceholderWithEncrypt.getRouteCondition().getOrConditions().add(andCondition); + insertSetStatementWithoutPlaceholderWithEncrypt.getShardingConditions().getOrConditions().add(andCondition); } @Test diff --git a/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/QueryOptimizeEngineTest.java b/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/QueryOptimizeEngineTest.java index 66e00420299cf..2f7d9ec988af6 100644 --- a/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/QueryOptimizeEngineTest.java +++ b/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/QueryOptimizeEngineTest.java @@ -24,7 +24,7 @@ import org.apache.shardingsphere.core.parse.sql.context.condition.AndCondition; import org.apache.shardingsphere.core.parse.sql.context.condition.Column; import org.apache.shardingsphere.core.parse.sql.context.condition.Condition; -import org.apache.shardingsphere.core.parse.sql.context.condition.ParseCondition; +import org.apache.shardingsphere.core.parse.sql.context.condition.Conditions; import org.apache.shardingsphere.core.parse.sql.segment.dml.expr.ExpressionSegment; import org.apache.shardingsphere.core.parse.sql.segment.dml.expr.simple.LiteralExpressionSegment; import org.apache.shardingsphere.core.parse.sql.statement.dml.SelectStatement; @@ -52,7 +52,7 @@ public void assertOptimizeAlwaysFalseListConditions() { AndCondition andCondition = new AndCondition(); andCondition.getConditions().add(condition1); andCondition.getConditions().add(condition2); - ParseCondition conditions = new ParseCondition(); + Conditions conditions = new Conditions(); conditions.getOrConditions().add(andCondition); ShardingConditions shardingConditions = new QueryOptimizeEngine(new SelectStatement(), Collections.emptyList(), conditions).optimize().getShardingConditions(); assertTrue(shardingConditions.isAlwaysFalse()); @@ -65,7 +65,7 @@ public void assertOptimizeAlwaysFalseRangeConditions() { AndCondition andCondition = new AndCondition(); andCondition.getConditions().add(condition1); andCondition.getConditions().add(condition2); - ParseCondition conditions = new ParseCondition(); + Conditions conditions = new Conditions(); conditions.getOrConditions().add(andCondition); ShardingConditions shardingConditions = new QueryOptimizeEngine(new SelectStatement(), Collections.emptyList(), conditions).optimize().getShardingConditions(); assertTrue(shardingConditions.isAlwaysFalse()); @@ -78,7 +78,7 @@ public void assertOptimizeAlwaysFalseListConditionsAndRangeConditions() { AndCondition andCondition = new AndCondition(); andCondition.getConditions().add(condition1); andCondition.getConditions().add(condition2); - ParseCondition conditions = new ParseCondition(); + Conditions conditions = new Conditions(); conditions.getOrConditions().add(andCondition); ShardingConditions shardingConditions = new QueryOptimizeEngine(new SelectStatement(), Collections.emptyList(), conditions).optimize().getShardingConditions(); assertTrue(shardingConditions.isAlwaysFalse()); @@ -92,7 +92,7 @@ public void assertOptimizeListConditions() { AndCondition andCondition = new AndCondition(); andCondition.getConditions().add(condition1); andCondition.getConditions().add(condition2); - ParseCondition conditions = new ParseCondition(); + Conditions conditions = new Conditions(); conditions.getOrConditions().add(andCondition); ShardingConditions shardingConditions = new QueryOptimizeEngine(new SelectStatement(), Collections.emptyList(), conditions).optimize().getShardingConditions(); assertFalse(shardingConditions.isAlwaysFalse()); @@ -111,7 +111,7 @@ public void assertOptimizeRangeConditions() { AndCondition andCondition = new AndCondition(); andCondition.getConditions().add(condition1); andCondition.getConditions().add(condition2); - ParseCondition parseCondition = new ParseCondition(); + Conditions parseCondition = new Conditions(); parseCondition.getOrConditions().add(andCondition); ShardingConditions shardingConditions = new QueryOptimizeEngine(new SelectStatement(), Collections.emptyList(), parseCondition).optimize().getShardingConditions(); assertFalse(shardingConditions.isAlwaysFalse()); @@ -130,7 +130,7 @@ public void assertOptimizeListConditionsAndRangeConditions() { AndCondition andCondition = new AndCondition(); andCondition.getConditions().add(condition1); andCondition.getConditions().add(condition2); - ParseCondition parseCondition = new ParseCondition(); + Conditions parseCondition = new Conditions(); parseCondition.getOrConditions().add(andCondition); ShardingConditions shardingConditions = new QueryOptimizeEngine(new SelectStatement(), Collections.emptyList(), parseCondition).optimize().getShardingConditions(); assertFalse(shardingConditions.isAlwaysFalse()); diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/EncryptOrPredicateFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/EncryptOrPredicateFiller.java index 041984e3e2ab1..52d20e82c72fd 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/EncryptOrPredicateFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/EncryptOrPredicateFiller.java @@ -74,11 +74,11 @@ private void fill(final PredicateSegment predicateSegment, final SQLStatement sq Optional condition = createCondition(predicateSegment, column); if (condition.isPresent()) { AndCondition andCondition; - if (sqlStatement.getEncryptCondition().getOrConditions().isEmpty()) { + if (sqlStatement.getEncryptConditions().getOrConditions().isEmpty()) { andCondition = new AndCondition(); - sqlStatement.getEncryptCondition().getOrConditions().add(andCondition); + sqlStatement.getEncryptConditions().getOrConditions().add(andCondition); } else { - andCondition = sqlStatement.getEncryptCondition().getOrConditions().get(0); + andCondition = sqlStatement.getEncryptConditions().getOrConditions().get(0); } andCondition.getConditions().add(condition.get()); } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/ShardingOrPredicateFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/ShardingOrPredicateFiller.java index 2dfdad336dbd2..bb9bd15f34822 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/ShardingOrPredicateFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/ShardingOrPredicateFiller.java @@ -29,7 +29,7 @@ import org.apache.shardingsphere.core.parse.sql.context.condition.AndCondition; import org.apache.shardingsphere.core.parse.sql.context.condition.Column; import org.apache.shardingsphere.core.parse.sql.context.condition.Condition; -import org.apache.shardingsphere.core.parse.sql.context.condition.ParseCondition; +import org.apache.shardingsphere.core.parse.sql.context.condition.Conditions; import org.apache.shardingsphere.core.parse.sql.segment.dml.predicate.AndPredicate; import org.apache.shardingsphere.core.parse.sql.segment.dml.predicate.OrPredicateSegment; import org.apache.shardingsphere.core.parse.sql.segment.dml.predicate.PredicateSegment; @@ -58,21 +58,21 @@ public final class ShardingOrPredicateFiller implements SQLSegmentFiller orConditions = new ArrayList<>(); diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/statement/AbstractSQLStatement.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/statement/AbstractSQLStatement.java index 152a1ebcf6498..5b99efcffe0b7 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/statement/AbstractSQLStatement.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/statement/AbstractSQLStatement.java @@ -23,7 +23,7 @@ import lombok.Setter; import lombok.ToString; import org.apache.shardingsphere.core.constant.SQLType; -import org.apache.shardingsphere.core.parse.sql.context.condition.ParseCondition; +import org.apache.shardingsphere.core.parse.sql.context.condition.Conditions; import org.apache.shardingsphere.core.parse.sql.context.table.Tables; import org.apache.shardingsphere.core.parse.sql.segment.SQLSegment; @@ -48,9 +48,9 @@ public abstract class AbstractSQLStatement implements SQLStatement { private final Tables tables = new Tables(); - private final ParseCondition routeCondition = new ParseCondition(); + private final Conditions shardingConditions = new Conditions(); - private final ParseCondition encryptCondition = new ParseCondition(); + private final Conditions encryptConditions = new Conditions(); private int parametersIndex; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/statement/SQLStatement.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/statement/SQLStatement.java index 983ba1a96a2b9..ccac5dadf0a64 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/statement/SQLStatement.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/statement/SQLStatement.java @@ -19,7 +19,7 @@ import com.google.common.base.Optional; import org.apache.shardingsphere.core.constant.SQLType; -import org.apache.shardingsphere.core.parse.sql.context.condition.ParseCondition; +import org.apache.shardingsphere.core.parse.sql.context.condition.Conditions; import org.apache.shardingsphere.core.parse.sql.context.table.Tables; import org.apache.shardingsphere.core.parse.sql.segment.SQLSegment; @@ -54,18 +54,18 @@ public interface SQLStatement { Tables getTables(); /** - * Get route conditions. + * Get sharding conditions. * - * @return parse condition + * @return conditions */ - ParseCondition getRouteCondition(); + Conditions getShardingConditions(); /** * Get encrypt conditions. * - * @return parse condition + * @return conditions */ - ParseCondition getEncryptCondition(); + Conditions getEncryptConditions(); /** * Get index of parameters. diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/statement/dml/SelectStatement.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/statement/dml/SelectStatement.java index 641372661936f..bb5f7ae86df6a 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/statement/dml/SelectStatement.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/statement/dml/SelectStatement.java @@ -22,7 +22,7 @@ import lombok.Getter; import lombok.Setter; import lombok.ToString; -import org.apache.shardingsphere.core.parse.sql.context.condition.ParseCondition; +import org.apache.shardingsphere.core.parse.sql.context.condition.Conditions; import org.apache.shardingsphere.core.parse.sql.context.selectitem.AggregationDistinctSelectItem; import org.apache.shardingsphere.core.parse.sql.context.selectitem.AggregationSelectItem; import org.apache.shardingsphere.core.parse.sql.context.selectitem.DistinctSelectItem; @@ -79,7 +79,7 @@ public final class SelectStatement extends DQLStatement { private SelectStatement subqueryStatement; - private Collection subqueryParseConditions = new LinkedList<>(); + private Collection subqueryShardingConditions = new LinkedList<>(); /** * Get alias. diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/EncryptSQLStatementAssert.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/EncryptSQLStatementAssert.java index fef1b88c32688..ad5fe89527c6c 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/EncryptSQLStatementAssert.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/EncryptSQLStatementAssert.java @@ -62,7 +62,7 @@ public EncryptSQLStatementAssert(final SQLStatement actual, final String sqlCase public void assertSQLStatement() { tableAssert.assertTables(actual.getTables(), expected.getTables()); if ("MySQL".equals(databaseType)) { - conditionAssert.assertConditions(actual.getEncryptCondition(), expected.getEncryptCondition()); + conditionAssert.assertConditions(actual.getEncryptConditions(), expected.getEncryptConditions()); } if (actual instanceof InsertStatement) { insertNamesAndValuesAssert.assertInsertNamesAndValues((InsertStatement) actual, expected.getInsertColumnsAndValues()); diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/SQLStatementAssert.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/SQLStatementAssert.java index f30a43c90d2e1..907eb9d1dd895 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/SQLStatementAssert.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/SQLStatementAssert.java @@ -95,9 +95,9 @@ public SQLStatementAssert(final SQLStatement actual, final String sqlCaseId, */ public void assertSQLStatement() { tableAssert.assertTables(actual.getTables(), expected.getTables()); - conditionAssert.assertConditions(actual.getRouteCondition(), expected.getOrCondition()); + conditionAssert.assertConditions(actual.getShardingConditions(), expected.getShardingConditions()); if ("MySQL".equals(databaseType)) { - conditionAssert.assertConditions(actual.getEncryptCondition(), expected.getEncryptCondition()); + conditionAssert.assertConditions(actual.getEncryptConditions(), expected.getEncryptConditions()); } indexAssert.assertParametersIndex(actual.getParametersIndex(), expected.getParameters().size()); if (actual instanceof SelectStatement) { diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/condition/ConditionAssert.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/condition/ConditionAssert.java index 1bc7734513fbe..f825002a7fee6 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/condition/ConditionAssert.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/condition/ConditionAssert.java @@ -22,11 +22,11 @@ import org.apache.shardingsphere.core.parse.integrate.asserts.SQLStatementAssertMessage; import org.apache.shardingsphere.core.parse.integrate.jaxb.condition.ExpectedAndCondition; import org.apache.shardingsphere.core.parse.integrate.jaxb.condition.ExpectedCondition; -import org.apache.shardingsphere.core.parse.integrate.jaxb.condition.ExpectedOrCondition; +import org.apache.shardingsphere.core.parse.integrate.jaxb.condition.ExpectedConditions; import org.apache.shardingsphere.core.parse.integrate.jaxb.condition.ExpectedValue; import org.apache.shardingsphere.core.parse.sql.context.condition.AndCondition; import org.apache.shardingsphere.core.parse.sql.context.condition.Condition; -import org.apache.shardingsphere.core.parse.sql.context.condition.ParseCondition; +import org.apache.shardingsphere.core.parse.sql.context.condition.Conditions; import java.lang.reflect.Field; import java.util.Map; @@ -45,12 +45,12 @@ public final class ConditionAssert { private final SQLStatementAssertMessage assertMessage; /** - * Assert or condition. + * Assert conditions. * * @param actual actual or condition * @param expected expected or condition */ - public void assertConditions(final ParseCondition actual, final ExpectedOrCondition expected) { + public void assertConditions(final Conditions actual, final ExpectedConditions expected) { assertThat(assertMessage.getFullAssertMessage("Or condition size assertion error: "), actual.getOrConditions().size(), is(expected.getAndConditions().size())); int count = 0; for (ExpectedAndCondition each : expected.getAndConditions()) { diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/condition/ExpectedOrCondition.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/condition/ExpectedConditions.java similarity index 95% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/condition/ExpectedOrCondition.java rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/condition/ExpectedConditions.java index 678beee483ac9..f5c62d9a18104 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/condition/ExpectedOrCondition.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/condition/ExpectedConditions.java @@ -27,14 +27,14 @@ import java.util.List; /** - * Expected and conditions. + * Expected conditions. * * @author maxiaoguang */ @Getter @Setter @XmlAccessorType(XmlAccessType.FIELD) -public final class ExpectedOrCondition { +public final class ExpectedConditions { @XmlElement(name = "and-condition") private List andConditions = new LinkedList<>(); diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/root/ParserResult.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/root/ParserResult.java index d165439b6afd7..7ddbb390d9815 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/root/ParserResult.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/root/ParserResult.java @@ -20,7 +20,7 @@ import com.google.common.base.Splitter; import lombok.Getter; import lombok.Setter; -import org.apache.shardingsphere.core.parse.integrate.jaxb.condition.ExpectedOrCondition; +import org.apache.shardingsphere.core.parse.integrate.jaxb.condition.ExpectedConditions; import org.apache.shardingsphere.core.parse.integrate.jaxb.groupby.ExpectedGroupByColumn; import org.apache.shardingsphere.core.parse.integrate.jaxb.insert.ExpectedInsertColumnsAndValues; import org.apache.shardingsphere.core.parse.integrate.jaxb.item.ExpectedSelectItems; @@ -59,8 +59,8 @@ public final class ParserResult { @XmlElement(name = "schema") private List schemas = new LinkedList<>(); - @XmlElement(name = "or-condition") - private ExpectedOrCondition orCondition = new ExpectedOrCondition(); + @XmlElement(name = "sharding-conditions") + private ExpectedConditions shardingConditions = new ExpectedConditions(); @XmlElement(name = "select-items") private ExpectedSelectItems selectItems = new ExpectedSelectItems(); @@ -91,8 +91,8 @@ public final class ParserResult { @XmlAttribute(name = "tcl-actual-statement-class-type") private String tclActualStatementClassType; - @XmlElement(name = "encrypt-condition") - private ExpectedOrCondition encryptCondition = new ExpectedOrCondition(); + @XmlElement(name = "encrypt-conditions") + private ExpectedConditions encryptConditions = new ExpectedConditions(); @XmlElement(name = "insert-columns-and-values") private ExpectedInsertColumnsAndValues insertColumnsAndValues = new ExpectedInsertColumnsAndValues(); diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/encrypt/delete.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/encrypt/delete.xml index f4b6bb359dff8..9fd49fd35ee69 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/encrypt/delete.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/encrypt/delete.xml @@ -26,19 +26,19 @@ - + - +
- + @@ -47,7 +47,7 @@ - + @@ -63,13 +63,13 @@
- + - + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/encrypt/select.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/encrypt/select.xml index 8dc80bfb7605b..73655e52c376e 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/encrypt/select.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/encrypt/select.xml @@ -21,19 +21,19 @@
- + - +
- + @@ -42,13 +42,13 @@ - +
- + @@ -57,19 +57,19 @@ - +
- + - + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/encrypt/update.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/encrypt/update.xml index 3b9c5769ca6f4..8f48d3dc726df 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/encrypt/update.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/encrypt/update.xml @@ -31,25 +31,25 @@
- + - +
- + - + @@ -65,12 +65,12 @@
- + - + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dml/delete.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dml/delete.xml index 6b729a7647bdf..815ff754b97f6 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dml/delete.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dml/delete.xml @@ -24,7 +24,7 @@ - + @@ -33,14 +33,14 @@ - - + + - + @@ -50,13 +50,13 @@ - + - + @@ -66,13 +66,13 @@ - + - + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dml/insert.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dml/insert.xml index b4e003e598dc0..468e2bd0143bc 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dml/insert.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dml/insert.xml @@ -24,7 +24,7 @@ - + @@ -33,7 +33,7 @@ - + @@ -43,7 +43,7 @@ - + @@ -52,7 +52,7 @@ - + @@ -62,7 +62,7 @@ - + @@ -71,7 +71,7 @@ - + @@ -81,7 +81,7 @@ - + @@ -98,7 +98,7 @@ - + @@ -108,7 +108,7 @@ - + @@ -117,7 +117,7 @@ - + @@ -127,7 +127,7 @@ - + @@ -136,7 +136,7 @@ - + @@ -149,7 +149,7 @@ - + @@ -158,7 +158,7 @@ - + @@ -168,7 +168,7 @@ - + @@ -177,7 +177,7 @@ - + @@ -188,7 +188,7 @@ - + @@ -197,7 +197,7 @@ - + @@ -207,7 +207,7 @@ - + @@ -216,7 +216,7 @@ - + @@ -227,7 +227,7 @@ - + @@ -236,7 +236,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -258,7 +258,7 @@ - + @@ -268,7 +268,7 @@ - + @@ -277,7 +277,7 @@ - + @@ -288,7 +288,7 @@ - + @@ -300,7 +300,7 @@ - + @@ -311,7 +311,7 @@ - + @@ -320,7 +320,7 @@ - + @@ -330,7 +330,7 @@ - + @@ -339,7 +339,7 @@ - + @@ -353,7 +353,7 @@ - + @@ -362,7 +362,7 @@ - + @@ -377,7 +377,7 @@ - + @@ -386,7 +386,7 @@ - + @@ -396,7 +396,7 @@ - + @@ -413,7 +413,7 @@ - + @@ -423,7 +423,7 @@ - + @@ -440,7 +440,7 @@ - + @@ -450,7 +450,7 @@ - + @@ -467,7 +467,7 @@ - + @@ -477,7 +477,7 @@ - + @@ -500,7 +500,7 @@ - + @@ -510,7 +510,7 @@ - + @@ -527,7 +527,7 @@ - + @@ -537,7 +537,7 @@ - + @@ -546,7 +546,7 @@ - + @@ -556,7 +556,7 @@ - + @@ -568,7 +568,7 @@ - + @@ -578,7 +578,7 @@ - + @@ -587,7 +587,7 @@ - + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select_pagination.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select_pagination.xml index 4357e5619900f..a763f2b440dd8 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select_pagination.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select_pagination.xml @@ -26,7 +26,7 @@ - + @@ -37,7 +37,7 @@ - + @@ -53,7 +53,7 @@ - + @@ -64,7 +64,7 @@ - + @@ -80,7 +80,7 @@ - + @@ -91,7 +91,7 @@ - + @@ -108,7 +108,7 @@ - + @@ -119,7 +119,7 @@ - + @@ -135,7 +135,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -163,7 +163,7 @@ - + @@ -174,7 +174,7 @@ - + @@ -191,7 +191,7 @@ - + @@ -202,7 +202,7 @@ - + @@ -219,7 +219,7 @@ - + @@ -230,7 +230,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -257,7 +257,7 @@ - + @@ -274,7 +274,7 @@ - + @@ -285,7 +285,7 @@ - + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select_pagination_group_by_order_by.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select_pagination_group_by_order_by.xml index 6589a03b454a9..270296e739324 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select_pagination_group_by_order_by.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select_pagination_group_by_order_by.xml @@ -26,7 +26,7 @@ - + @@ -37,7 +37,7 @@ - + @@ -57,7 +57,7 @@ - + @@ -68,7 +68,7 @@ - + @@ -88,7 +88,7 @@ - + @@ -99,7 +99,7 @@ - + @@ -119,7 +119,7 @@ - + @@ -130,7 +130,7 @@ - + @@ -150,7 +150,7 @@ - + @@ -161,7 +161,7 @@ - + @@ -181,7 +181,7 @@ - + @@ -192,7 +192,7 @@ - + @@ -212,7 +212,7 @@ - + @@ -223,7 +223,7 @@ - + @@ -243,7 +243,7 @@ - + @@ -254,7 +254,7 @@ - + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select_relation.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select_relation.xml index 9dc1a12b0542b..e25aa9f6edee1 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select_relation.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select_relation.xml @@ -26,13 +26,13 @@ - + - + @@ -48,13 +48,13 @@ - + - + @@ -66,12 +66,12 @@ - + - + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select_sub_query.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select_sub_query.xml index d9e3c15569cff..ef0d873debbce 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select_sub_query.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select_sub_query.xml @@ -24,14 +24,14 @@ - + - + - - + + diff --git a/sharding-sql-test/src/test/java/org/apache/shardingsphere/test/sql/SQLCasesLoaderTest.java b/sharding-sql-test/src/test/java/org/apache/shardingsphere/test/sql/SQLCasesLoaderTest.java index df151d68206d3..bd2a72eea868f 100644 --- a/sharding-sql-test/src/test/java/org/apache/shardingsphere/test/sql/SQLCasesLoaderTest.java +++ b/sharding-sql-test/src/test/java/org/apache/shardingsphere/test/sql/SQLCasesLoaderTest.java @@ -77,7 +77,9 @@ public void assertGetSupportedSQLTestParameters() { @Test public void assertGetUnsupportedSQLTestParameters() { Collection actual = SQLCasesLoader.getInstance().getUnsupportedSQLTestParameters(); - assertFalse(actual.isEmpty()); + if (actual.isEmpty()) { + return; + } Object[] actualRow = actual.iterator().next(); assertThat(actualRow.length, is(3)); assertThat(actualRow[0], instanceOf(String.class)); From 9fbafe0903c5ef946d632e69f475760c2b974020 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Thu, 13 Jun 2019 16:56:55 +0800 Subject: [PATCH 130/283] for #2543, ShardingIndexFiller => IndexFiller --- .../ddl/index/IndexFiller.java} | 6 +-- .../sharding/filler-rule-definition.xml | 1 - .../mysql/sql-statement-rule-definition.xml | 8 ++-- .../oracle/filler-rule-definition.xml | 21 ++++++++++ .../postgresql/filler-rule-definition.xml | 21 ++++++++++ .../sql-statement-rule-definition.xml | 10 ++--- .../cases/WithNamespaceLogicIndexTest.java | 41 ------------------- 7 files changed, 54 insertions(+), 54 deletions(-) rename sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/{sharding/ShardingIndexFiller.java => common/ddl/index/IndexFiller.java} (88%) create mode 100644 sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/sharding/oracle/filler-rule-definition.xml create mode 100644 sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/sharding/postgresql/filler-rule-definition.xml delete mode 100644 sharding-spring/sharding-jdbc-spring/sharding-jdbc-spring-namespace/src/test/java/org/apache/shardingsphere/shardingjdbc/spring/cases/WithNamespaceLogicIndexTest.java diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/ShardingIndexFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/ddl/index/IndexFiller.java similarity index 88% rename from sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/ShardingIndexFiller.java rename to sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/ddl/index/IndexFiller.java index 948894608d999..45aab43c0ace9 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/ShardingIndexFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/ddl/index/IndexFiller.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.shardingsphere.core.parse.filler.sharding; +package org.apache.shardingsphere.core.parse.filler.common.ddl.index; import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; import org.apache.shardingsphere.core.parse.sql.segment.ddl.index.IndexSegment; @@ -23,11 +23,11 @@ import org.apache.shardingsphere.core.parse.sql.statement.ddl.DDLStatement; /** - * Index filler for sharding. + * Index filler. * * @author zhangliang */ -public final class ShardingIndexFiller implements SQLSegmentFiller { +public final class IndexFiller implements SQLSegmentFiller { @Override public void fill(final IndexSegment sqlSegment, final SQLStatement sqlStatement) { diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/resources/META-INF/parsing-rule-definition/sharding/filler-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/resources/META-INF/parsing-rule-definition/sharding/filler-rule-definition.xml index d1a599de82fd5..e113a7fc871e7 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/resources/META-INF/parsing-rule-definition/sharding/filler-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/resources/META-INF/parsing-rule-definition/sharding/filler-rule-definition.xml @@ -18,7 +18,6 @@ - diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/sharding/mysql/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/sharding/mysql/sql-statement-rule-definition.xml index d2160d3ad9ac9..6d61fc128afd8 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/sharding/mysql/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/sharding/mysql/sql-statement-rule-definition.xml @@ -23,12 +23,12 @@ - - + + - - + + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/sharding/oracle/filler-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/sharding/oracle/filler-rule-definition.xml new file mode 100644 index 0000000000000..fb64e2bb476e9 --- /dev/null +++ b/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/sharding/oracle/filler-rule-definition.xml @@ -0,0 +1,21 @@ + + + + + + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/sharding/postgresql/filler-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/sharding/postgresql/filler-rule-definition.xml new file mode 100644 index 0000000000000..fb64e2bb476e9 --- /dev/null +++ b/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/sharding/postgresql/filler-rule-definition.xml @@ -0,0 +1,21 @@ + + + + + + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/sharding/sqlserver/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/sharding/sqlserver/sql-statement-rule-definition.xml index 4c37ce80e5c5c..513a366061a64 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/sharding/sqlserver/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/sharding/sqlserver/sql-statement-rule-definition.xml @@ -22,13 +22,13 @@ - - + + - - - + + + diff --git a/sharding-spring/sharding-jdbc-spring/sharding-jdbc-spring-namespace/src/test/java/org/apache/shardingsphere/shardingjdbc/spring/cases/WithNamespaceLogicIndexTest.java b/sharding-spring/sharding-jdbc-spring/sharding-jdbc-spring-namespace/src/test/java/org/apache/shardingsphere/shardingjdbc/spring/cases/WithNamespaceLogicIndexTest.java deleted file mode 100644 index 70d5858587167..0000000000000 --- a/sharding-spring/sharding-jdbc-spring/sharding-jdbc-spring-namespace/src/test/java/org/apache/shardingsphere/shardingjdbc/spring/cases/WithNamespaceLogicIndexTest.java +++ /dev/null @@ -1,41 +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.shardingjdbc.spring.cases; - -import org.apache.shardingsphere.shardingjdbc.spring.AbstractShardingBothDataBasesAndTablesJUnitTest; -import org.junit.Test; -import org.springframework.test.context.ContextConfiguration; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.SQLException; - -@ContextConfiguration(locations = "classpath:META-INF/rdb/withNamespaceLogicIndex.xml") -public final class WithNamespaceLogicIndexTest extends AbstractShardingBothDataBasesAndTablesJUnitTest { - - @Test - public void assertIndex() throws SQLException { - try (Connection connection = getShardingDataSource().getConnection()) { - PreparedStatement preparedStatement = connection.prepareStatement("CREATE INDEX t_order_index ON t_order(user_id)"); - preparedStatement.execute(); - preparedStatement = connection.prepareStatement("DROP INDEX t_order_index"); - preparedStatement.execute(); - preparedStatement.close(); - } - } -} From 096a0ec321b53b4d235d915f36eaed6b2d7a9163 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Thu, 13 Jun 2019 17:10:26 +0800 Subject: [PATCH 131/283] for #2543, move EncryptSetAssignmentsFiller to update package --- .../encrypt/dml/{ => update}/EncryptSetAssignmentsFiller.java | 2 +- .../encrypt/mysql/filler-rule-definition.xml | 2 +- .../encrypt/oracle/filler-rule-definition.xml | 2 +- .../encrypt/postgresql/filler-rule-definition.xml | 2 +- .../encrypt/sqlserver/filler-rule-definition.xml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) rename sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/{ => update}/EncryptSetAssignmentsFiller.java (98%) diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/EncryptSetAssignmentsFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/update/EncryptSetAssignmentsFiller.java similarity index 98% rename from sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/EncryptSetAssignmentsFiller.java rename to sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/update/EncryptSetAssignmentsFiller.java index caa232104573d..1a34285805d94 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/EncryptSetAssignmentsFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/update/EncryptSetAssignmentsFiller.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.shardingsphere.core.parse.filler.encrypt.dml; +package org.apache.shardingsphere.core.parse.filler.encrypt.dml.update; import lombok.Setter; import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/encrypt/mysql/filler-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/encrypt/mysql/filler-rule-definition.xml index 73cba2a18f253..483342dd58d18 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/encrypt/mysql/filler-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/encrypt/mysql/filler-rule-definition.xml @@ -21,5 +21,5 @@ - + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/encrypt/oracle/filler-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/encrypt/oracle/filler-rule-definition.xml index 73cba2a18f253..483342dd58d18 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/encrypt/oracle/filler-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/encrypt/oracle/filler-rule-definition.xml @@ -21,5 +21,5 @@ - + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/encrypt/postgresql/filler-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/encrypt/postgresql/filler-rule-definition.xml index 73cba2a18f253..483342dd58d18 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/encrypt/postgresql/filler-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/encrypt/postgresql/filler-rule-definition.xml @@ -21,5 +21,5 @@ - + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/encrypt/sqlserver/filler-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/encrypt/sqlserver/filler-rule-definition.xml index 73cba2a18f253..483342dd58d18 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/encrypt/sqlserver/filler-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/encrypt/sqlserver/filler-rule-definition.xml @@ -21,5 +21,5 @@ - + From 8c7e6e5a5fa838d2357818727e85fa3c3b8ffccc Mon Sep 17 00:00:00 2001 From: tristaZero Date: Thu, 13 Jun 2019 17:44:47 +0800 Subject: [PATCH 132/283] delete index rule --- .../sharding/mysql/sql-statement-rule-definition.xml | 8 ++++---- .../sqlserver/sql-statement-rule-definition.xml | 10 +++++----- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/sharding/mysql/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/sharding/mysql/sql-statement-rule-definition.xml index d2160d3ad9ac9..6d61fc128afd8 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/sharding/mysql/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/sharding/mysql/sql-statement-rule-definition.xml @@ -23,12 +23,12 @@ - - + + - - + + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/sharding/sqlserver/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/sharding/sqlserver/sql-statement-rule-definition.xml index 4c37ce80e5c5c..513a366061a64 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/sharding/sqlserver/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/sharding/sqlserver/sql-statement-rule-definition.xml @@ -22,13 +22,13 @@ - - + + - - - + + + From 7e25e147cbcbc4f829fd9d33487e81ca5c3a6106 Mon Sep 17 00:00:00 2001 From: tristaZero Date: Thu, 13 Jun 2019 17:45:00 +0800 Subject: [PATCH 133/283] delete WithNamespaceLogicIndexTest --- .../cases/WithNamespaceLogicIndexTest.java | 41 ------------------- 1 file changed, 41 deletions(-) delete mode 100644 sharding-spring/sharding-jdbc-spring/sharding-jdbc-spring-namespace/src/test/java/org/apache/shardingsphere/shardingjdbc/spring/cases/WithNamespaceLogicIndexTest.java diff --git a/sharding-spring/sharding-jdbc-spring/sharding-jdbc-spring-namespace/src/test/java/org/apache/shardingsphere/shardingjdbc/spring/cases/WithNamespaceLogicIndexTest.java b/sharding-spring/sharding-jdbc-spring/sharding-jdbc-spring-namespace/src/test/java/org/apache/shardingsphere/shardingjdbc/spring/cases/WithNamespaceLogicIndexTest.java deleted file mode 100644 index 70d5858587167..0000000000000 --- a/sharding-spring/sharding-jdbc-spring/sharding-jdbc-spring-namespace/src/test/java/org/apache/shardingsphere/shardingjdbc/spring/cases/WithNamespaceLogicIndexTest.java +++ /dev/null @@ -1,41 +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.shardingjdbc.spring.cases; - -import org.apache.shardingsphere.shardingjdbc.spring.AbstractShardingBothDataBasesAndTablesJUnitTest; -import org.junit.Test; -import org.springframework.test.context.ContextConfiguration; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.SQLException; - -@ContextConfiguration(locations = "classpath:META-INF/rdb/withNamespaceLogicIndex.xml") -public final class WithNamespaceLogicIndexTest extends AbstractShardingBothDataBasesAndTablesJUnitTest { - - @Test - public void assertIndex() throws SQLException { - try (Connection connection = getShardingDataSource().getConnection()) { - PreparedStatement preparedStatement = connection.prepareStatement("CREATE INDEX t_order_index ON t_order(user_id)"); - preparedStatement.execute(); - preparedStatement = connection.prepareStatement("DROP INDEX t_order_index"); - preparedStatement.execute(); - preparedStatement.close(); - } - } -} From b00bec8d79519210b12e9c1d291a4b4625532e89 Mon Sep 17 00:00:00 2001 From: tristaZero Date: Thu, 13 Jun 2019 17:45:20 +0800 Subject: [PATCH 134/283] modify index unit test --- .../core/rewrite/builder/SQLBuilderTest.java | 24 ++++++------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/core/rewrite/builder/SQLBuilderTest.java b/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/core/rewrite/builder/SQLBuilderTest.java index 496fca6ee23f7..ed15bb1822e58 100644 --- a/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/core/rewrite/builder/SQLBuilderTest.java +++ b/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/core/rewrite/builder/SQLBuilderTest.java @@ -17,12 +17,9 @@ package org.apache.shardingsphere.core.rewrite.builder; -import org.apache.shardingsphere.api.config.sharding.ShardingRuleConfiguration; -import org.apache.shardingsphere.api.config.sharding.TableRuleConfiguration; import org.apache.shardingsphere.core.parse.constant.QuoteCharacter; import org.apache.shardingsphere.core.rewrite.placeholder.IndexPlaceholder; import org.apache.shardingsphere.core.rewrite.placeholder.TablePlaceholder; -import org.apache.shardingsphere.core.rule.ShardingRule; import org.junit.Test; import java.util.Arrays; @@ -75,7 +72,7 @@ public void assertAppendTableWithTableToken() { public void assertIndexPlaceholderAppendTableWithoutTableToken() { SQLBuilder sqlBuilder = new SQLBuilder(); sqlBuilder.appendLiterals("CREATE INDEX "); - sqlBuilder.appendPlaceholder(new IndexPlaceholder("index_name", "index_name", QuoteCharacter.NONE)); + sqlBuilder.appendPlaceholder(new IndexPlaceholder("index_name", QuoteCharacter.NONE)); sqlBuilder.appendLiterals(" ON "); sqlBuilder.appendPlaceholder(new TablePlaceholder("table_x", QuoteCharacter.NONE)); sqlBuilder.appendLiterals(" ('column')"); @@ -86,7 +83,7 @@ public void assertIndexPlaceholderAppendTableWithoutTableToken() { public void assertIndexPlaceholderAppendTableWithTableToken() { SQLBuilder sqlBuilder = new SQLBuilder(); sqlBuilder.appendLiterals("CREATE INDEX "); - sqlBuilder.appendPlaceholder(new IndexPlaceholder("index_name", "table_x", QuoteCharacter.NONE)); + sqlBuilder.appendPlaceholder(new IndexPlaceholder("index_name", QuoteCharacter.NONE)); sqlBuilder.appendLiterals(" ON "); sqlBuilder.appendPlaceholder(new TablePlaceholder("table_x", QuoteCharacter.NONE)); sqlBuilder.appendLiterals(" ('column')"); @@ -123,7 +120,7 @@ public void assertAppendTableWithTableTokenWithBackQuotes() { public void assertIndexPlaceholderAppendTableWithoutTableTokenWithBackQuotes() { SQLBuilder sqlBuilder = new SQLBuilder(); sqlBuilder.appendLiterals("CREATE INDEX "); - sqlBuilder.appendPlaceholder(new IndexPlaceholder("index_name", "index_name", QuoteCharacter.NONE)); + sqlBuilder.appendPlaceholder(new IndexPlaceholder("index_name", QuoteCharacter.NONE)); sqlBuilder.appendLiterals(" ON "); sqlBuilder.appendPlaceholder(new TablePlaceholder("table_x", QuoteCharacter.BACK_QUOTE)); sqlBuilder.appendLiterals(" ('column')"); @@ -134,7 +131,7 @@ public void assertIndexPlaceholderAppendTableWithoutTableTokenWithBackQuotes() { public void assertIndexPlaceholderAppendTableWithTableTokenWithBackQuotes() { SQLBuilder sqlBuilder = new SQLBuilder(); sqlBuilder.appendLiterals("CREATE INDEX "); - sqlBuilder.appendPlaceholder(new IndexPlaceholder("index_name", "table_x", QuoteCharacter.NONE)); + sqlBuilder.appendPlaceholder(new IndexPlaceholder("index_name", QuoteCharacter.NONE)); sqlBuilder.appendLiterals(" ON "); sqlBuilder.appendPlaceholder(new TablePlaceholder("table_x", QuoteCharacter.BACK_QUOTE)); sqlBuilder.appendLiterals(" ('column')"); @@ -171,7 +168,7 @@ public void assertAppendTableWithTableTokenWithDoubleQuotes() { public void assertIndexPlaceholderAppendTableWithoutTableTokenWithDoubleQuotes() { SQLBuilder sqlBuilder = new SQLBuilder(); sqlBuilder.appendLiterals("CREATE INDEX "); - sqlBuilder.appendPlaceholder(new IndexPlaceholder("index_name", "index_name", QuoteCharacter.NONE)); + sqlBuilder.appendPlaceholder(new IndexPlaceholder("index_name", QuoteCharacter.NONE)); sqlBuilder.appendLiterals(" ON "); sqlBuilder.appendPlaceholder(new TablePlaceholder("table_x", QuoteCharacter.QUOTE)); sqlBuilder.appendLiterals(" ('column')"); @@ -182,7 +179,7 @@ public void assertIndexPlaceholderAppendTableWithoutTableTokenWithDoubleQuotes() public void assertIndexPlaceholderAppendTableWithTableTokenWithDoubleQuotes() { SQLBuilder sqlBuilder = new SQLBuilder(); sqlBuilder.appendLiterals("CREATE INDEX "); - sqlBuilder.appendPlaceholder(new IndexPlaceholder("index_name", "table_x", QuoteCharacter.NONE)); + sqlBuilder.appendPlaceholder(new IndexPlaceholder("index_name", QuoteCharacter.NONE)); sqlBuilder.appendLiterals(" ON "); sqlBuilder.appendPlaceholder(new TablePlaceholder("table_x", QuoteCharacter.QUOTE)); sqlBuilder.appendLiterals(" ('column')"); @@ -193,17 +190,10 @@ public void assertIndexPlaceholderAppendTableWithTableTokenWithDoubleQuotes() { @Test public void assertShardingPlaceholderToString() { - assertThat(new IndexPlaceholder("index_name", "table_x", QuoteCharacter.NONE).toString(null, Collections.emptyMap()), is("index_name")); + assertThat(new IndexPlaceholder("index_name", QuoteCharacter.NONE).toString(null, Collections.emptyMap()), is("index_name")); assertThat(new TablePlaceholder("table_name", QuoteCharacter.BACK_QUOTE).toString(null, Collections.emptyMap()), is("`table_name`")); } - private ShardingRule createShardingRule() { - ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration(); - TableRuleConfiguration tableRuleConfig = new TableRuleConfiguration("LOGIC_TABLE", "ds${0..1}.table_${0..2}"); - shardingRuleConfig.getTableRuleConfigs().add(tableRuleConfig); - return new ShardingRule(shardingRuleConfig, createDataSourceNames()); - } - private Collection createDataSourceNames() { return Arrays.asList("ds0", "ds1"); } From 3781890762bfe249671c87e08ad85ed91ed3a7b3 Mon Sep 17 00:00:00 2001 From: tristaZero Date: Thu, 13 Jun 2019 17:46:02 +0800 Subject: [PATCH 135/283] modify appendIndexPlaceholder() --- .../core/rewrite/rewriter/sql/ShardingSQLRewriter.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/rewriter/sql/ShardingSQLRewriter.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/rewriter/sql/ShardingSQLRewriter.java index 7feea216c114c..25f86428c5599 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/rewriter/sql/ShardingSQLRewriter.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/rewriter/sql/ShardingSQLRewriter.java @@ -18,7 +18,6 @@ package org.apache.shardingsphere.core.rewrite.rewriter.sql; import com.google.common.base.Optional; -import com.google.common.base.Strings; import org.apache.shardingsphere.core.optimize.result.OptimizeResult; import org.apache.shardingsphere.core.optimize.result.insert.InsertOptimizeResult; import org.apache.shardingsphere.core.parse.sql.segment.dml.order.item.OrderByItemSegment; @@ -118,11 +117,7 @@ private void appendTablePlaceholder(final SQLBuilder sqlBuilder, final TableToke } private void appendIndexPlaceholder(final SQLBuilder sqlBuilder, final IndexToken indexToken) { - String logicTableName = indexToken.getTableName().toLowerCase(); - if (Strings.isNullOrEmpty(logicTableName)) { - logicTableName = shardingRule.getLogicTableName(indexToken.getIndexName()); - } - sqlBuilder.appendPlaceholder(new IndexPlaceholder(indexToken.getIndexName(), logicTableName, indexToken.getQuoteCharacter())); + sqlBuilder.appendPlaceholder(new IndexPlaceholder(indexToken.getIndexName(), indexToken.getQuoteCharacter())); } private void appendSelectItemsPlaceholder(final SQLBuilder sqlBuilder, final SelectItemsToken selectItemsToken) { From 7469e9a3be4c8ccfa548b0ee263e3bedaf6fbc40 Mon Sep 17 00:00:00 2001 From: tristaZero Date: Thu, 13 Jun 2019 17:46:15 +0800 Subject: [PATCH 136/283] modify IndexTokenGenerator --- .../token/generator/IndexTokenGenerator.java | 27 +++---------------- 1 file changed, 4 insertions(+), 23 deletions(-) diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/generator/IndexTokenGenerator.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/generator/IndexTokenGenerator.java index 0bf46c5665988..f16ecc99378c3 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/generator/IndexTokenGenerator.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/generator/IndexTokenGenerator.java @@ -17,13 +17,11 @@ package org.apache.shardingsphere.core.rewrite.token.generator; -import com.google.common.base.Optional; import org.apache.shardingsphere.core.parse.sql.segment.SQLSegment; import org.apache.shardingsphere.core.parse.sql.segment.ddl.index.IndexSegment; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.rewrite.token.pojo.IndexToken; import org.apache.shardingsphere.core.rule.ShardingRule; -import org.apache.shardingsphere.core.rule.TableRule; import java.util.Collection; import java.util.LinkedList; @@ -33,6 +31,7 @@ * Index token generator. * * @author zhangliang + * @author panjuan */ public final class IndexTokenGenerator implements CollectionSQLTokenGenerator { @@ -41,31 +40,13 @@ public Collection generateSQLTokens(final SQLStatement sqlStatement, Collection result = new LinkedList<>(); for (SQLSegment each : sqlStatement.getSQLSegments()) { if (each instanceof IndexSegment) { - Optional indexToken = createIndexToken(sqlStatement, shardingRule, (IndexSegment) each); - if (indexToken.isPresent()) { - result.add(indexToken.get()); - } + result.add(createIndexToken((IndexSegment) each)); } } return result; } - private Optional createIndexToken(final SQLStatement sqlStatement, final ShardingRule shardingRule, final IndexSegment segment) { - Optional tableName = findTableNameOfIndex(sqlStatement, shardingRule, segment); - return tableName.isPresent() - ? Optional.of(new IndexToken(segment.getStartIndex(), segment.getStopIndex(), segment.getIndexName(), segment.getQuoteCharacter(), tableName.get())) - : Optional.absent(); - } - - private Optional findTableNameOfIndex(final SQLStatement sqlStatement, final ShardingRule shardingRule, final IndexSegment segment) { - if (sqlStatement.getTables().isSingleTable()) { - return Optional.of(sqlStatement.getTables().getSingleTableName()); - } - for (TableRule each : shardingRule.getTableRules()) { - if (segment.getIndexName().equalsIgnoreCase(each.getLogicIndex())) { - return Optional.of(each.getLogicTable()); - } - } - return Optional.absent(); + private IndexToken createIndexToken(final IndexSegment segment) { + return new IndexToken(segment.getStartIndex(), segment.getStopIndex(), segment.getIndexName(), segment.getQuoteCharacter()); } } From b7bf5fae75247a929b8e9767ff0fdc9e67f48cae Mon Sep 17 00:00:00 2001 From: tristaZero Date: Thu, 13 Jun 2019 17:46:29 +0800 Subject: [PATCH 137/283] delete table name --- .../shardingsphere/core/rewrite/token/pojo/IndexToken.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/pojo/IndexToken.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/pojo/IndexToken.java index 2fc0dcdd0c884..ef8b0afad0af9 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/pojo/IndexToken.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/pojo/IndexToken.java @@ -37,13 +37,10 @@ public final class IndexToken extends SQLToken implements Substitutable { private final QuoteCharacter quoteCharacter; - private final String tableName; - - public IndexToken(final int startIndex, final int stopIndex, final String indexName, final QuoteCharacter quoteCharacter, final String tableName) { + public IndexToken(final int startIndex, final int stopIndex, final String indexName, final QuoteCharacter quoteCharacter) { super(startIndex); this.stopIndex = stopIndex; this.indexName = indexName; this.quoteCharacter = quoteCharacter; - this.tableName = tableName; } } From 8733e3f359c918a822c2be7bd24377655e2d3f01 Mon Sep 17 00:00:00 2001 From: tristaZero Date: Thu, 13 Jun 2019 17:46:41 +0800 Subject: [PATCH 138/283] modify toString() --- .../core/rewrite/placeholder/IndexPlaceholder.java | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/placeholder/IndexPlaceholder.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/placeholder/IndexPlaceholder.java index e072c71a4d389..8995ef03e6913 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/placeholder/IndexPlaceholder.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/placeholder/IndexPlaceholder.java @@ -17,7 +17,6 @@ package org.apache.shardingsphere.core.rewrite.placeholder; -import com.google.common.base.Strings; import lombok.Getter; import lombok.RequiredArgsConstructor; import org.apache.shardingsphere.core.parse.constant.QuoteCharacter; @@ -37,17 +36,14 @@ public final class IndexPlaceholder implements ShardingPlaceholder, Alterable { private final String logicIndexName; - private final String logicTableName; - private final QuoteCharacter quoteCharacter; @Override public String toString(final RoutingUnit routingUnit, final Map logicAndActualTables) { StringBuilder result = new StringBuilder(); result.append(quoteCharacter.getStartDelimiter()).append(logicIndexName); - String actualTableName = logicAndActualTables.get(logicTableName); - if (!Strings.isNullOrEmpty(actualTableName)) { - result.append("_").append(actualTableName); + if (!logicAndActualTables.isEmpty()) { + result.append("_").append(logicAndActualTables.values().iterator().next()); } result.append(quoteCharacter.getEndDelimiter()); return result.toString(); From ba479a918710ce119e946368cecdc70f2fece74c Mon Sep 17 00:00:00 2001 From: tuohai666 Date: Thu, 13 Jun 2019 18:27:47 +0800 Subject: [PATCH 139/283] for integration test --- pom.xml | 7 +++++++ .../sharding-jdbc-test/pom.xml | 15 +++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/pom.xml b/pom.xml index d112f36fefc5f..b427de6d2b21b 100644 --- a/pom.xml +++ b/pom.xml @@ -93,6 +93,7 @@ 5.1.47 42.2.5 6.1.7.jre7-preview + 12.1.0.2 3.3 3.1.0 @@ -303,6 +304,12 @@ ${mssql.version} provided + + com.oracle + ojdbc7 + ${ojdbc7.version} + provided + org.projectlombok diff --git a/sharding-integration-test/sharding-jdbc-test/pom.xml b/sharding-integration-test/sharding-jdbc-test/pom.xml index 4594e5e934965..4f208545a265f 100644 --- a/sharding-integration-test/sharding-jdbc-test/pom.xml +++ b/sharding-integration-test/sharding-jdbc-test/pom.xml @@ -60,6 +60,21 @@ mysql-connector-java runtime + + org.postgresql + postgresql + runtime + + + com.microsoft.sqlserver + mssql-jdbc + runtime + + + com.oracle + ojdbc7 + runtime + From 8768a9fd3b63f6fbc6c996c4a0854325c6760051 Mon Sep 17 00:00:00 2001 From: tuohai666 Date: Thu, 13 Jun 2019 18:51:17 +0800 Subject: [PATCH 140/283] remove ojdbc7 --- pom.xml | 7 ------- sharding-integration-test/sharding-jdbc-test/pom.xml | 11 +++-------- 2 files changed, 3 insertions(+), 15 deletions(-) diff --git a/pom.xml b/pom.xml index b427de6d2b21b..d112f36fefc5f 100644 --- a/pom.xml +++ b/pom.xml @@ -93,7 +93,6 @@ 5.1.47 42.2.5 6.1.7.jre7-preview - 12.1.0.2 3.3 3.1.0 @@ -304,12 +303,6 @@ ${mssql.version} provided - - com.oracle - ojdbc7 - ${ojdbc7.version} - provided - org.projectlombok diff --git a/sharding-integration-test/sharding-jdbc-test/pom.xml b/sharding-integration-test/sharding-jdbc-test/pom.xml index 4f208545a265f..010571add1dec 100644 --- a/sharding-integration-test/sharding-jdbc-test/pom.xml +++ b/sharding-integration-test/sharding-jdbc-test/pom.xml @@ -58,22 +58,17 @@ mysql mysql-connector-java - runtime + test org.postgresql postgresql - runtime + test com.microsoft.sqlserver mssql-jdbc - runtime - - - com.oracle - ojdbc7 - runtime + test From c43b9da2a4089b8e084ebbfa32fb372d335fb64e Mon Sep 17 00:00:00 2001 From: terrymanu Date: Thu, 13 Jun 2019 19:02:24 +0800 Subject: [PATCH 141/283] for #2543, add type judge protection for SQLStatementFillerEngine --- .../core/parse/filler/SQLStatementFillerEngine.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/SQLStatementFillerEngine.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/SQLStatementFillerEngine.java index 8a3a644186ebb..3d50abc6dc567 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/SQLStatementFillerEngine.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/SQLStatementFillerEngine.java @@ -79,10 +79,10 @@ public SQLStatement fill(final Collection sqlSegments, final SQLStat @SuppressWarnings("unchecked") private void doFill(final SQLSegment sqlSegment, final SQLStatement sqlStatement, final SQLSegmentFiller filler) { - if (filler instanceof ShardingRuleAwareFiller) { + if (filler instanceof ShardingRuleAwareFiller && rule instanceof ShardingRule) { ((ShardingRuleAwareFiller) filler).setShardingRule((ShardingRule) rule); } - if (filler instanceof EncryptRuleAwareFiller) { + if (filler instanceof EncryptRuleAwareFiller && rule instanceof EncryptRule) { ((EncryptRuleAwareFiller) filler).setEncryptRule((EncryptRule) rule); } if (filler instanceof ShardingTableMetaDataAwareFiller) { From b756934b010edd0d8dea61687de9897b7c8156cf Mon Sep 17 00:00:00 2001 From: tuohai666 Date: Thu, 13 Jun 2019 19:04:00 +0800 Subject: [PATCH 142/283] fix ojdbc url format --- .../dbtest/env/datasource/DatabaseEnvironment.java | 2 +- .../shardingjdbc/common/env/DatabaseEnvironment.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sharding-integration-test/sharding-jdbc-test/src/test/java/org/apache/shardingsphere/dbtest/env/datasource/DatabaseEnvironment.java b/sharding-integration-test/sharding-jdbc-test/src/test/java/org/apache/shardingsphere/dbtest/env/datasource/DatabaseEnvironment.java index 7db7e7c88c94e..534198568e100 100644 --- a/sharding-integration-test/sharding-jdbc-test/src/test/java/org/apache/shardingsphere/dbtest/env/datasource/DatabaseEnvironment.java +++ b/sharding-integration-test/sharding-jdbc-test/src/test/java/org/apache/shardingsphere/dbtest/env/datasource/DatabaseEnvironment.java @@ -102,7 +102,7 @@ public String getURL(final String dataSourceName) { case "SQLServer": return String.format("jdbc:sqlserver://%s:%s;DatabaseName=%s", host, port, dataSourceName); case "Oracle": - return String.format("jdbc:oracle:thin:@%s:%s:%s", host, port, dataSourceName); + return String.format("jdbc:oracle:thin:@%s:%s/%s", host, port, dataSourceName); default: throw new UnsupportedOperationException(databaseType.getName()); } diff --git a/sharding-jdbc/sharding-jdbc-core/src/test/java/org/apache/shardingsphere/shardingjdbc/common/env/DatabaseEnvironment.java b/sharding-jdbc/sharding-jdbc-core/src/test/java/org/apache/shardingsphere/shardingjdbc/common/env/DatabaseEnvironment.java index 2fe2d77322a89..1430dfbad9747 100644 --- a/sharding-jdbc/sharding-jdbc-core/src/test/java/org/apache/shardingsphere/shardingjdbc/common/env/DatabaseEnvironment.java +++ b/sharding-jdbc/sharding-jdbc-core/src/test/java/org/apache/shardingsphere/shardingjdbc/common/env/DatabaseEnvironment.java @@ -93,7 +93,7 @@ private void fillSQLServer() { private void fillOracle() { DatabaseType databaseType = DatabaseTypes.getActualDatabaseType("Oracle"); DRIVER_CLASS_NAME.put(databaseType, "oracle.jdbc.driver.OracleDriver"); - URL.put(databaseType, "jdbc:oracle:thin:@db.oracle:1521:test"); + URL.put(databaseType, "jdbc:oracle:thin:@db.oracle:1521/test"); USERNAME.put(databaseType, "jdbc"); PASSWORD.put(databaseType, "jdbc"); SCHEMA.put(databaseType, "%s"); From c843a0acfa6841589abe67d22b13b5de5eb2a8f1 Mon Sep 17 00:00:00 2001 From: tristaZero Date: Thu, 13 Jun 2019 19:46:06 +0800 Subject: [PATCH 143/283] check style --- .../orchestration/internal/keygen/LeafSegmentKeyGenerator.java | 1 - .../internal/registry/fixture/ThirdTestRegistryCenter.java | 1 - ...g.apache.shardingsphere.orchestration.reg.api.RegistryCenter | 2 +- .../reg/zookeeper/curator/CuratorZookeeperRegistryCenter.java | 1 - 4 files changed, 1 insertion(+), 4 deletions(-) diff --git a/sharding-orchestration/sharding-orchestration-core/src/main/java/org/apache/shardingsphere/orchestration/internal/keygen/LeafSegmentKeyGenerator.java b/sharding-orchestration/sharding-orchestration-core/src/main/java/org/apache/shardingsphere/orchestration/internal/keygen/LeafSegmentKeyGenerator.java index cc8b2be1d7481..55529fcaa0a41 100644 --- a/sharding-orchestration/sharding-orchestration-core/src/main/java/org/apache/shardingsphere/orchestration/internal/keygen/LeafSegmentKeyGenerator.java +++ b/sharding-orchestration/sharding-orchestration-core/src/main/java/org/apache/shardingsphere/orchestration/internal/keygen/LeafSegmentKeyGenerator.java @@ -196,5 +196,4 @@ private String getDigest() { private String getRegistryCenterType() { return properties.getProperty("registryCenterType", DEFAULT_REGISTRY_CENTER); } - } diff --git a/sharding-orchestration/sharding-orchestration-core/src/test/java/org/apache/shardingsphere/orchestration/internal/registry/fixture/ThirdTestRegistryCenter.java b/sharding-orchestration/sharding-orchestration-core/src/test/java/org/apache/shardingsphere/orchestration/internal/registry/fixture/ThirdTestRegistryCenter.java index 083ad88a33cea..95bc4ea0d15a5 100644 --- a/sharding-orchestration/sharding-orchestration-core/src/test/java/org/apache/shardingsphere/orchestration/internal/registry/fixture/ThirdTestRegistryCenter.java +++ b/sharding-orchestration/sharding-orchestration-core/src/test/java/org/apache/shardingsphere/orchestration/internal/registry/fixture/ThirdTestRegistryCenter.java @@ -105,5 +105,4 @@ public boolean tryLock() { public void tryRelease() { lock.unlock(); } - } diff --git a/sharding-orchestration/sharding-orchestration-core/src/test/resources/META-INF/services/org.apache.shardingsphere.orchestration.reg.api.RegistryCenter b/sharding-orchestration/sharding-orchestration-core/src/test/resources/META-INF/services/org.apache.shardingsphere.orchestration.reg.api.RegistryCenter index 7dfaecf30ac3c..3d951baf9436a 100644 --- a/sharding-orchestration/sharding-orchestration-core/src/test/resources/META-INF/services/org.apache.shardingsphere.orchestration.reg.api.RegistryCenter +++ b/sharding-orchestration/sharding-orchestration-core/src/test/resources/META-INF/services/org.apache.shardingsphere.orchestration.reg.api.RegistryCenter @@ -17,4 +17,4 @@ org.apache.shardingsphere.orchestration.internal.registry.fixture.FirstTestRegistryCenter org.apache.shardingsphere.orchestration.internal.registry.fixture.SecondTestRegistryCenter -org.apache.shardingsphere.orchestration.internal.registry.fixture.ThirdTestRegistryCenter \ No newline at end of file +org.apache.shardingsphere.orchestration.internal.registry.fixture.ThirdTestRegistryCenter diff --git a/sharding-orchestration/sharding-orchestration-reg/sharding-orchestration-reg-zookeeper-curator/src/main/java/org/apache/shardingsphere/orchestration/reg/zookeeper/curator/CuratorZookeeperRegistryCenter.java b/sharding-orchestration/sharding-orchestration-reg/sharding-orchestration-reg-zookeeper-curator/src/main/java/org/apache/shardingsphere/orchestration/reg/zookeeper/curator/CuratorZookeeperRegistryCenter.java index 511e0b7ba7502..31a6474821c38 100644 --- a/sharding-orchestration/sharding-orchestration-reg/sharding-orchestration-reg-zookeeper-curator/src/main/java/org/apache/shardingsphere/orchestration/reg/zookeeper/curator/CuratorZookeeperRegistryCenter.java +++ b/sharding-orchestration/sharding-orchestration-reg/sharding-orchestration-reg-zookeeper-curator/src/main/java/org/apache/shardingsphere/orchestration/reg/zookeeper/curator/CuratorZookeeperRegistryCenter.java @@ -311,5 +311,4 @@ public boolean tryLock() { public void tryRelease() { leafLock.release(); } - } From 0e3a513474179e20bd9120d9fa2a1e68755862ad Mon Sep 17 00:00:00 2001 From: terrymanu Date: Thu, 13 Jun 2019 20:28:33 +0800 Subject: [PATCH 144/283] for #2553, add table metadata to InsertOptimizeEngine --- .../core/optimize/OptimizeEngineFactory.java | 7 +++++-- .../sharding/insert/InsertOptimizeEngine.java | 3 +++ .../sharding/InsertOptimizeEngineTest.java | 21 +++++++++++-------- .../router/sharding/ParsingSQLRouter.java | 2 +- 4 files changed, 21 insertions(+), 12 deletions(-) diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java index aaa5812f8cc53..2fc9f2067f739 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java @@ -19,6 +19,7 @@ import lombok.AccessLevel; import lombok.NoArgsConstructor; +import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; import org.apache.shardingsphere.core.optimize.engine.OptimizeEngine; import org.apache.shardingsphere.core.optimize.engine.encrypt.EncryptDefaultOptimizeEngine; import org.apache.shardingsphere.core.optimize.engine.encrypt.EncryptInsertOptimizeEngine; @@ -46,15 +47,17 @@ public final class OptimizeEngineFactory { /** * Create optimize engine instance. * + * @param tableMetaData table meta data * @param shardingRule sharding rule * @param sqlStatement SQL statement * @param parameters parameters * @param generatedKey generated key * @return optimize engine instance */ - public static OptimizeEngine newInstance(final ShardingRule shardingRule, final SQLStatement sqlStatement, final List parameters, final GeneratedKey generatedKey) { + public static OptimizeEngine newInstance(final ShardingTableMetaData tableMetaData, + final ShardingRule shardingRule, final SQLStatement sqlStatement, final List parameters, final GeneratedKey generatedKey) { if (sqlStatement instanceof InsertStatement) { - return new InsertOptimizeEngine(shardingRule, (InsertStatement) sqlStatement, parameters, generatedKey); + return new InsertOptimizeEngine(tableMetaData, shardingRule, (InsertStatement) sqlStatement, parameters, generatedKey); } if (sqlStatement instanceof DMLStatement) { return new QueryOptimizeEngine(sqlStatement, parameters, ((DMLStatement) sqlStatement).getShardingConditions()); diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/insert/InsertOptimizeEngine.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/insert/InsertOptimizeEngine.java index c845f7d95cb2d..8a40a6cfeec98 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/insert/InsertOptimizeEngine.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/insert/InsertOptimizeEngine.java @@ -19,6 +19,7 @@ import com.google.common.base.Optional; import lombok.RequiredArgsConstructor; +import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; import org.apache.shardingsphere.core.optimize.GeneratedKey; import org.apache.shardingsphere.core.optimize.condition.ShardingCondition; import org.apache.shardingsphere.core.optimize.condition.ShardingConditions; @@ -53,6 +54,8 @@ @RequiredArgsConstructor public final class InsertOptimizeEngine implements OptimizeEngine { + private final ShardingTableMetaData tableMetaData; + private final ShardingRule shardingRule; private final InsertStatement insertStatement; diff --git a/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/InsertOptimizeEngineTest.java b/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/InsertOptimizeEngineTest.java index fa97bcef96b1f..775a5b0a4f866 100644 --- a/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/InsertOptimizeEngineTest.java +++ b/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/InsertOptimizeEngineTest.java @@ -18,6 +18,7 @@ package org.apache.shardingsphere.core.optimize.engine.sharding; import com.google.common.base.Preconditions; +import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; import org.apache.shardingsphere.core.optimize.GeneratedKey; import org.apache.shardingsphere.core.optimize.engine.sharding.insert.InsertOptimizeEngine; import org.apache.shardingsphere.core.optimize.result.OptimizeResult; @@ -54,6 +55,8 @@ public final class InsertOptimizeEngineTest { + private ShardingTableMetaData tableMetaData; + private ShardingRule shardingRule; private InsertStatement insertValuesStatementWithPlaceholder; @@ -203,7 +206,7 @@ public void assertOptimizeInsertValuesWithPlaceholderWithGeneratedKey() { GeneratedKey generatedKey = new GeneratedKey("order_id"); generatedKey.getGeneratedKeys().add(1); generatedKey.getGeneratedKeys().add(2); - OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertValuesStatementWithPlaceholder, insertValuesParameters, generatedKey).optimize(); + OptimizeResult actual = new InsertOptimizeEngine(tableMetaData, shardingRule, insertValuesStatementWithPlaceholder, insertValuesParameters, generatedKey).optimize(); assertFalse(actual.getShardingConditions().isAlwaysFalse()); assertThat(actual.getShardingConditions().getShardingConditions().size(), is(2)); assertTrue(actual.getInsertOptimizeResult().isPresent()); @@ -228,7 +231,7 @@ public void assertOptimizeInsertValuesWithPlaceholderWithGeneratedKeyWithEncrypt GeneratedKey generatedKey = new GeneratedKey("order_id"); generatedKey.getGeneratedKeys().add(1); generatedKey.getGeneratedKeys().add(2); - OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertValuesStatementWithPlaceholderWithEncrypt, insertValuesParameters, generatedKey).optimize(); + OptimizeResult actual = new InsertOptimizeEngine(tableMetaData, shardingRule, insertValuesStatementWithPlaceholderWithEncrypt, insertValuesParameters, generatedKey).optimize(); assertFalse(actual.getShardingConditions().isAlwaysFalse()); assertThat(actual.getShardingConditions().getShardingConditions().size(), is(2)); assertTrue(actual.getInsertOptimizeResult().isPresent()); @@ -252,7 +255,7 @@ public void assertOptimizeInsertValuesWithPlaceholderWithoutGeneratedKey() { GeneratedKey generatedKey = new GeneratedKey("order_id"); generatedKey.getGeneratedKeys().add(1); generatedKey.getGeneratedKeys().add(1); - OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertValuesStatementWithPlaceholder, insertValuesParameters, generatedKey).optimize(); + OptimizeResult actual = new InsertOptimizeEngine(tableMetaData, shardingRule, insertValuesStatementWithPlaceholder, insertValuesParameters, generatedKey).optimize(); assertFalse(actual.getShardingConditions().isAlwaysFalse()); assertThat(actual.getShardingConditions().getShardingConditions().size(), is(2)); assertTrue(actual.getInsertOptimizeResult().isPresent()); @@ -276,7 +279,7 @@ public void assertOptimizeInsertValuesWithoutPlaceholderWithGeneratedKeyWithQuer insertValuesStatementWithoutPlaceholderWithQueryEncrypt.getColumnNames().add("status"); insertValuesStatementWithoutPlaceholderWithQueryEncrypt.getValues().add( new InsertValue(Arrays.asList(new LiteralExpressionSegment(1, 2, 12), new LiteralExpressionSegment(3, 4, "a")))); - OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertValuesStatementWithoutPlaceholderWithQueryEncrypt, Collections.emptyList(), generatedKey).optimize(); + OptimizeResult actual = new InsertOptimizeEngine(tableMetaData, shardingRule, insertValuesStatementWithoutPlaceholderWithQueryEncrypt, Collections.emptyList(), generatedKey).optimize(); assertThat(actual.getShardingConditions().getShardingConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(0)); @@ -291,7 +294,7 @@ public void assertOptimizeInsertValuesWithoutPlaceholderWithGeneratedKey() { insertValuesStatementWithoutPlaceholder.getColumnNames().add("user_id"); insertValuesStatementWithoutPlaceholder.getColumnNames().add("status"); insertValuesStatementWithoutPlaceholder.getValues().add(new InsertValue(Arrays.asList(new LiteralExpressionSegment(1, 2, 12), new LiteralExpressionSegment(3, 4, "a")))); - OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertValuesStatementWithoutPlaceholder, Collections.emptyList(), generatedKey).optimize(); + OptimizeResult actual = new InsertOptimizeEngine(tableMetaData, shardingRule, insertValuesStatementWithoutPlaceholder, Collections.emptyList(), generatedKey).optimize(); assertThat(actual.getShardingConditions().getShardingConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(0)); @@ -305,7 +308,7 @@ public void assertOptimizeInsertSetWithPlaceholderWithGeneratedKey() { generatedKey.getGeneratedKeys().add(1); insertSetStatementWithPlaceholder.getValues().add( new InsertValue(Arrays.asList(new ParameterMarkerExpressionSegment(1, 2, 0), new ParameterMarkerExpressionSegment(3, 4, 1)))); - OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertSetStatementWithPlaceholder, insertSetParameters, generatedKey).optimize(); + OptimizeResult actual = new InsertOptimizeEngine(tableMetaData, shardingRule, insertSetStatementWithPlaceholder, insertSetParameters, generatedKey).optimize(); assertThat(actual.getShardingConditions().getShardingConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(3)); @@ -321,7 +324,7 @@ public void assertOptimizeInsertSetWithPlaceholderWithGeneratedKeyWithQueryEncry generatedKey.getGeneratedKeys().add(1); InsertValue insertValue = new InsertValue(Arrays.asList(new ParameterMarkerExpressionSegment(1, 2, 0), new ParameterMarkerExpressionSegment(3, 4, 1))); insertSetStatementWithPlaceholderWithQueryEncrypt.getValues().add(insertValue); - OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertSetStatementWithPlaceholderWithQueryEncrypt, insertSetParameters, generatedKey).optimize(); + OptimizeResult actual = new InsertOptimizeEngine(tableMetaData, shardingRule, insertSetStatementWithPlaceholderWithQueryEncrypt, insertSetParameters, generatedKey).optimize(); assertThat(actual.getShardingConditions().getShardingConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(4)); @@ -337,7 +340,7 @@ public void assertOptimizeInsertSetWithoutPlaceholderWithGeneratedKey() { GeneratedKey generatedKey = new GeneratedKey("order_id"); generatedKey.getGeneratedKeys().add(1); insertSetStatementWithoutPlaceholder.getValues().add(new InsertValue(Arrays.asList(new LiteralExpressionSegment(1, 2, 12), new LiteralExpressionSegment(3, 4, "a")))); - OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertSetStatementWithoutPlaceholder, Collections.emptyList(), generatedKey).optimize(); + OptimizeResult actual = new InsertOptimizeEngine(tableMetaData, shardingRule, insertSetStatementWithoutPlaceholder, Collections.emptyList(), generatedKey).optimize(); assertThat(actual.getShardingConditions().getShardingConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(0)); @@ -351,7 +354,7 @@ public void assertOptimizeInsertSetWithoutPlaceholderWithGeneratedKeyWithEncrypt generatedKey.getGeneratedKeys().add(1); insertSetStatementWithoutPlaceholderWithEncrypt.getValues().add( new InsertValue(Arrays.asList(new LiteralExpressionSegment(1, 2, 12), new LiteralExpressionSegment(3, 4, "a")))); - OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertSetStatementWithoutPlaceholderWithEncrypt, Collections.emptyList(), generatedKey).optimize(); + OptimizeResult actual = new InsertOptimizeEngine(tableMetaData, shardingRule, insertSetStatementWithoutPlaceholderWithEncrypt, Collections.emptyList(), generatedKey).optimize(); assertThat(actual.getShardingConditions().getShardingConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(0)); diff --git a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java index 3c188b0e9e173..72af3f9236a9b 100644 --- a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java +++ b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java @@ -89,7 +89,7 @@ public SQLRouteResult route(final SQLStatement sqlStatement, final List Optional generatedKey = sqlStatement instanceof InsertStatement ? GeneratedKey.getGenerateKey(shardingRule, parameters, (InsertStatement) sqlStatement) : Optional.absent(); SQLRouteResult result = new SQLRouteResult(sqlStatement, generatedKey.orNull()); - OptimizeResult optimizeResult = OptimizeEngineFactory.newInstance(shardingRule, sqlStatement, parameters, generatedKey.orNull()).optimize(); + OptimizeResult optimizeResult = OptimizeEngineFactory.newInstance(shardingMetaData.getTable(), shardingRule, sqlStatement, parameters, generatedKey.orNull()).optimize(); if (generatedKey.isPresent()) { setGeneratedKeys(result, generatedKey.get()); } From 656118bdd68c7d643fb32e9176bd05a5a5eba5a5 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Thu, 13 Jun 2019 20:29:59 +0800 Subject: [PATCH 145/283] for #2553, InsertOptimizeEngine => ShardingInsertOptimizeEngine --- .../core/optimize/OptimizeEngineFactory.java | 6 ++--- ...java => ShardingInsertOptimizeEngine.java} | 4 ++-- ... => ShardingInsertOptimizeEngineTest.java} | 24 +++++++++---------- 3 files changed, 17 insertions(+), 17 deletions(-) rename sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/insert/{InsertOptimizeEngine.java => ShardingInsertOptimizeEngine.java} (98%) rename sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/{InsertOptimizeEngineTest.java => ShardingInsertOptimizeEngineTest.java} (93%) diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java index 2fc9f2067f739..38e6d242ba5cf 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java @@ -23,7 +23,7 @@ import org.apache.shardingsphere.core.optimize.engine.OptimizeEngine; import org.apache.shardingsphere.core.optimize.engine.encrypt.EncryptDefaultOptimizeEngine; import org.apache.shardingsphere.core.optimize.engine.encrypt.EncryptInsertOptimizeEngine; -import org.apache.shardingsphere.core.optimize.engine.sharding.insert.InsertOptimizeEngine; +import org.apache.shardingsphere.core.optimize.engine.sharding.insert.ShardingInsertOptimizeEngine; import org.apache.shardingsphere.core.optimize.engine.sharding.query.QueryOptimizeEngine; import org.apache.shardingsphere.core.parse.sql.context.condition.Conditions; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; @@ -45,7 +45,7 @@ public final class OptimizeEngineFactory { /** - * Create optimize engine instance. + * Create sharding optimize engine instance. * * @param tableMetaData table meta data * @param shardingRule sharding rule @@ -57,7 +57,7 @@ public final class OptimizeEngineFactory { public static OptimizeEngine newInstance(final ShardingTableMetaData tableMetaData, final ShardingRule shardingRule, final SQLStatement sqlStatement, final List parameters, final GeneratedKey generatedKey) { if (sqlStatement instanceof InsertStatement) { - return new InsertOptimizeEngine(tableMetaData, shardingRule, (InsertStatement) sqlStatement, parameters, generatedKey); + return new ShardingInsertOptimizeEngine(tableMetaData, shardingRule, (InsertStatement) sqlStatement, parameters, generatedKey); } if (sqlStatement instanceof DMLStatement) { return new QueryOptimizeEngine(sqlStatement, parameters, ((DMLStatement) sqlStatement).getShardingConditions()); diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/insert/InsertOptimizeEngine.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/insert/ShardingInsertOptimizeEngine.java similarity index 98% rename from sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/insert/InsertOptimizeEngine.java rename to sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/insert/ShardingInsertOptimizeEngine.java index 8a40a6cfeec98..9641b52d08a05 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/insert/InsertOptimizeEngine.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/insert/ShardingInsertOptimizeEngine.java @@ -45,14 +45,14 @@ import java.util.List; /** - * Insert optimize engine. + * Insert optimize engine for sharding. * * @author zhangliang * @author maxiaoguang * @author panjuan */ @RequiredArgsConstructor -public final class InsertOptimizeEngine implements OptimizeEngine { +public final class ShardingInsertOptimizeEngine implements OptimizeEngine { private final ShardingTableMetaData tableMetaData; diff --git a/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/InsertOptimizeEngineTest.java b/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/ShardingInsertOptimizeEngineTest.java similarity index 93% rename from sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/InsertOptimizeEngineTest.java rename to sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/ShardingInsertOptimizeEngineTest.java index 775a5b0a4f866..db9583aa9e967 100644 --- a/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/InsertOptimizeEngineTest.java +++ b/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/ShardingInsertOptimizeEngineTest.java @@ -20,7 +20,7 @@ import com.google.common.base.Preconditions; import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; import org.apache.shardingsphere.core.optimize.GeneratedKey; -import org.apache.shardingsphere.core.optimize.engine.sharding.insert.InsertOptimizeEngine; +import org.apache.shardingsphere.core.optimize.engine.sharding.insert.ShardingInsertOptimizeEngine; import org.apache.shardingsphere.core.optimize.result.OptimizeResult; import org.apache.shardingsphere.core.parse.sql.context.condition.AndCondition; import org.apache.shardingsphere.core.parse.sql.context.condition.Column; @@ -53,7 +53,7 @@ import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; -public final class InsertOptimizeEngineTest { +public final class ShardingInsertOptimizeEngineTest { private ShardingTableMetaData tableMetaData; @@ -81,7 +81,7 @@ public final class InsertOptimizeEngineTest { @Before public void setUp() throws IOException { - URL url = InsertOptimizeEngineTest.class.getClassLoader().getResource("yaml/optimize-rule.yaml"); + URL url = ShardingInsertOptimizeEngineTest.class.getClassLoader().getResource("yaml/optimize-rule.yaml"); Preconditions.checkNotNull(url, "Cannot found rewrite rule yaml configuration."); YamlRootShardingConfiguration yamlShardingConfig = YamlEngine.unmarshal(new File(url.getFile()), YamlRootShardingConfiguration.class); shardingRule = new ShardingRule(new ShardingRuleConfigurationYamlSwapper().swap(yamlShardingConfig.getShardingRule()), yamlShardingConfig.getDataSources().keySet()); @@ -206,7 +206,7 @@ public void assertOptimizeInsertValuesWithPlaceholderWithGeneratedKey() { GeneratedKey generatedKey = new GeneratedKey("order_id"); generatedKey.getGeneratedKeys().add(1); generatedKey.getGeneratedKeys().add(2); - OptimizeResult actual = new InsertOptimizeEngine(tableMetaData, shardingRule, insertValuesStatementWithPlaceholder, insertValuesParameters, generatedKey).optimize(); + OptimizeResult actual = new ShardingInsertOptimizeEngine(tableMetaData, shardingRule, insertValuesStatementWithPlaceholder, insertValuesParameters, generatedKey).optimize(); assertFalse(actual.getShardingConditions().isAlwaysFalse()); assertThat(actual.getShardingConditions().getShardingConditions().size(), is(2)); assertTrue(actual.getInsertOptimizeResult().isPresent()); @@ -231,7 +231,7 @@ public void assertOptimizeInsertValuesWithPlaceholderWithGeneratedKeyWithEncrypt GeneratedKey generatedKey = new GeneratedKey("order_id"); generatedKey.getGeneratedKeys().add(1); generatedKey.getGeneratedKeys().add(2); - OptimizeResult actual = new InsertOptimizeEngine(tableMetaData, shardingRule, insertValuesStatementWithPlaceholderWithEncrypt, insertValuesParameters, generatedKey).optimize(); + OptimizeResult actual = new ShardingInsertOptimizeEngine(tableMetaData, shardingRule, insertValuesStatementWithPlaceholderWithEncrypt, insertValuesParameters, generatedKey).optimize(); assertFalse(actual.getShardingConditions().isAlwaysFalse()); assertThat(actual.getShardingConditions().getShardingConditions().size(), is(2)); assertTrue(actual.getInsertOptimizeResult().isPresent()); @@ -255,7 +255,7 @@ public void assertOptimizeInsertValuesWithPlaceholderWithoutGeneratedKey() { GeneratedKey generatedKey = new GeneratedKey("order_id"); generatedKey.getGeneratedKeys().add(1); generatedKey.getGeneratedKeys().add(1); - OptimizeResult actual = new InsertOptimizeEngine(tableMetaData, shardingRule, insertValuesStatementWithPlaceholder, insertValuesParameters, generatedKey).optimize(); + OptimizeResult actual = new ShardingInsertOptimizeEngine(tableMetaData, shardingRule, insertValuesStatementWithPlaceholder, insertValuesParameters, generatedKey).optimize(); assertFalse(actual.getShardingConditions().isAlwaysFalse()); assertThat(actual.getShardingConditions().getShardingConditions().size(), is(2)); assertTrue(actual.getInsertOptimizeResult().isPresent()); @@ -279,7 +279,7 @@ public void assertOptimizeInsertValuesWithoutPlaceholderWithGeneratedKeyWithQuer insertValuesStatementWithoutPlaceholderWithQueryEncrypt.getColumnNames().add("status"); insertValuesStatementWithoutPlaceholderWithQueryEncrypt.getValues().add( new InsertValue(Arrays.asList(new LiteralExpressionSegment(1, 2, 12), new LiteralExpressionSegment(3, 4, "a")))); - OptimizeResult actual = new InsertOptimizeEngine(tableMetaData, shardingRule, insertValuesStatementWithoutPlaceholderWithQueryEncrypt, Collections.emptyList(), generatedKey).optimize(); + OptimizeResult actual = new ShardingInsertOptimizeEngine(tableMetaData, shardingRule, insertValuesStatementWithoutPlaceholderWithQueryEncrypt, Collections.emptyList(), generatedKey).optimize(); assertThat(actual.getShardingConditions().getShardingConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(0)); @@ -294,7 +294,7 @@ public void assertOptimizeInsertValuesWithoutPlaceholderWithGeneratedKey() { insertValuesStatementWithoutPlaceholder.getColumnNames().add("user_id"); insertValuesStatementWithoutPlaceholder.getColumnNames().add("status"); insertValuesStatementWithoutPlaceholder.getValues().add(new InsertValue(Arrays.asList(new LiteralExpressionSegment(1, 2, 12), new LiteralExpressionSegment(3, 4, "a")))); - OptimizeResult actual = new InsertOptimizeEngine(tableMetaData, shardingRule, insertValuesStatementWithoutPlaceholder, Collections.emptyList(), generatedKey).optimize(); + OptimizeResult actual = new ShardingInsertOptimizeEngine(tableMetaData, shardingRule, insertValuesStatementWithoutPlaceholder, Collections.emptyList(), generatedKey).optimize(); assertThat(actual.getShardingConditions().getShardingConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(0)); @@ -308,7 +308,7 @@ public void assertOptimizeInsertSetWithPlaceholderWithGeneratedKey() { generatedKey.getGeneratedKeys().add(1); insertSetStatementWithPlaceholder.getValues().add( new InsertValue(Arrays.asList(new ParameterMarkerExpressionSegment(1, 2, 0), new ParameterMarkerExpressionSegment(3, 4, 1)))); - OptimizeResult actual = new InsertOptimizeEngine(tableMetaData, shardingRule, insertSetStatementWithPlaceholder, insertSetParameters, generatedKey).optimize(); + OptimizeResult actual = new ShardingInsertOptimizeEngine(tableMetaData, shardingRule, insertSetStatementWithPlaceholder, insertSetParameters, generatedKey).optimize(); assertThat(actual.getShardingConditions().getShardingConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(3)); @@ -324,7 +324,7 @@ public void assertOptimizeInsertSetWithPlaceholderWithGeneratedKeyWithQueryEncry generatedKey.getGeneratedKeys().add(1); InsertValue insertValue = new InsertValue(Arrays.asList(new ParameterMarkerExpressionSegment(1, 2, 0), new ParameterMarkerExpressionSegment(3, 4, 1))); insertSetStatementWithPlaceholderWithQueryEncrypt.getValues().add(insertValue); - OptimizeResult actual = new InsertOptimizeEngine(tableMetaData, shardingRule, insertSetStatementWithPlaceholderWithQueryEncrypt, insertSetParameters, generatedKey).optimize(); + OptimizeResult actual = new ShardingInsertOptimizeEngine(tableMetaData, shardingRule, insertSetStatementWithPlaceholderWithQueryEncrypt, insertSetParameters, generatedKey).optimize(); assertThat(actual.getShardingConditions().getShardingConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(4)); @@ -340,7 +340,7 @@ public void assertOptimizeInsertSetWithoutPlaceholderWithGeneratedKey() { GeneratedKey generatedKey = new GeneratedKey("order_id"); generatedKey.getGeneratedKeys().add(1); insertSetStatementWithoutPlaceholder.getValues().add(new InsertValue(Arrays.asList(new LiteralExpressionSegment(1, 2, 12), new LiteralExpressionSegment(3, 4, "a")))); - OptimizeResult actual = new InsertOptimizeEngine(tableMetaData, shardingRule, insertSetStatementWithoutPlaceholder, Collections.emptyList(), generatedKey).optimize(); + OptimizeResult actual = new ShardingInsertOptimizeEngine(tableMetaData, shardingRule, insertSetStatementWithoutPlaceholder, Collections.emptyList(), generatedKey).optimize(); assertThat(actual.getShardingConditions().getShardingConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(0)); @@ -354,7 +354,7 @@ public void assertOptimizeInsertSetWithoutPlaceholderWithGeneratedKeyWithEncrypt generatedKey.getGeneratedKeys().add(1); insertSetStatementWithoutPlaceholderWithEncrypt.getValues().add( new InsertValue(Arrays.asList(new LiteralExpressionSegment(1, 2, 12), new LiteralExpressionSegment(3, 4, "a")))); - OptimizeResult actual = new InsertOptimizeEngine(tableMetaData, shardingRule, insertSetStatementWithoutPlaceholderWithEncrypt, Collections.emptyList(), generatedKey).optimize(); + OptimizeResult actual = new ShardingInsertOptimizeEngine(tableMetaData, shardingRule, insertSetStatementWithoutPlaceholderWithEncrypt, Collections.emptyList(), generatedKey).optimize(); assertThat(actual.getShardingConditions().getShardingConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(0)); From f50195f76b751649eb017de254fe0950ef0300c7 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Thu, 13 Jun 2019 22:06:50 +0800 Subject: [PATCH 146/283] for #2553, revise 0e3a513474179e20bd9120d9fa2a1e68755862ad --- .../core/optimize/OptimizeEngineFactory.java | 7 ++----- .../insert/ShardingInsertOptimizeEngine.java | 3 --- .../ShardingInsertOptimizeEngineTest.java | 21 ++++++++----------- .../InsertAssistedColumnsTokenGenerator.java | 4 ++-- .../router/sharding/ParsingSQLRouter.java | 2 +- 5 files changed, 14 insertions(+), 23 deletions(-) diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java index 38e6d242ba5cf..3d7382643d201 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java @@ -19,7 +19,6 @@ import lombok.AccessLevel; import lombok.NoArgsConstructor; -import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; import org.apache.shardingsphere.core.optimize.engine.OptimizeEngine; import org.apache.shardingsphere.core.optimize.engine.encrypt.EncryptDefaultOptimizeEngine; import org.apache.shardingsphere.core.optimize.engine.encrypt.EncryptInsertOptimizeEngine; @@ -47,17 +46,15 @@ public final class OptimizeEngineFactory { /** * Create sharding optimize engine instance. * - * @param tableMetaData table meta data * @param shardingRule sharding rule * @param sqlStatement SQL statement * @param parameters parameters * @param generatedKey generated key * @return optimize engine instance */ - public static OptimizeEngine newInstance(final ShardingTableMetaData tableMetaData, - final ShardingRule shardingRule, final SQLStatement sqlStatement, final List parameters, final GeneratedKey generatedKey) { + public static OptimizeEngine newInstance(final ShardingRule shardingRule, final SQLStatement sqlStatement, final List parameters, final GeneratedKey generatedKey) { if (sqlStatement instanceof InsertStatement) { - return new ShardingInsertOptimizeEngine(tableMetaData, shardingRule, (InsertStatement) sqlStatement, parameters, generatedKey); + return new ShardingInsertOptimizeEngine(shardingRule, (InsertStatement) sqlStatement, parameters, generatedKey); } if (sqlStatement instanceof DMLStatement) { return new QueryOptimizeEngine(sqlStatement, parameters, ((DMLStatement) sqlStatement).getShardingConditions()); diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/insert/ShardingInsertOptimizeEngine.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/insert/ShardingInsertOptimizeEngine.java index 9641b52d08a05..8fae5c4e4b47c 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/insert/ShardingInsertOptimizeEngine.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/insert/ShardingInsertOptimizeEngine.java @@ -19,7 +19,6 @@ import com.google.common.base.Optional; import lombok.RequiredArgsConstructor; -import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; import org.apache.shardingsphere.core.optimize.GeneratedKey; import org.apache.shardingsphere.core.optimize.condition.ShardingCondition; import org.apache.shardingsphere.core.optimize.condition.ShardingConditions; @@ -54,8 +53,6 @@ @RequiredArgsConstructor public final class ShardingInsertOptimizeEngine implements OptimizeEngine { - private final ShardingTableMetaData tableMetaData; - private final ShardingRule shardingRule; private final InsertStatement insertStatement; diff --git a/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/ShardingInsertOptimizeEngineTest.java b/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/ShardingInsertOptimizeEngineTest.java index db9583aa9e967..6c952eb9f2f20 100644 --- a/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/ShardingInsertOptimizeEngineTest.java +++ b/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/ShardingInsertOptimizeEngineTest.java @@ -18,7 +18,6 @@ package org.apache.shardingsphere.core.optimize.engine.sharding; import com.google.common.base.Preconditions; -import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; import org.apache.shardingsphere.core.optimize.GeneratedKey; import org.apache.shardingsphere.core.optimize.engine.sharding.insert.ShardingInsertOptimizeEngine; import org.apache.shardingsphere.core.optimize.result.OptimizeResult; @@ -55,8 +54,6 @@ public final class ShardingInsertOptimizeEngineTest { - private ShardingTableMetaData tableMetaData; - private ShardingRule shardingRule; private InsertStatement insertValuesStatementWithPlaceholder; @@ -206,7 +203,7 @@ public void assertOptimizeInsertValuesWithPlaceholderWithGeneratedKey() { GeneratedKey generatedKey = new GeneratedKey("order_id"); generatedKey.getGeneratedKeys().add(1); generatedKey.getGeneratedKeys().add(2); - OptimizeResult actual = new ShardingInsertOptimizeEngine(tableMetaData, shardingRule, insertValuesStatementWithPlaceholder, insertValuesParameters, generatedKey).optimize(); + OptimizeResult actual = new ShardingInsertOptimizeEngine(shardingRule, insertValuesStatementWithPlaceholder, insertValuesParameters, generatedKey).optimize(); assertFalse(actual.getShardingConditions().isAlwaysFalse()); assertThat(actual.getShardingConditions().getShardingConditions().size(), is(2)); assertTrue(actual.getInsertOptimizeResult().isPresent()); @@ -231,7 +228,7 @@ public void assertOptimizeInsertValuesWithPlaceholderWithGeneratedKeyWithEncrypt GeneratedKey generatedKey = new GeneratedKey("order_id"); generatedKey.getGeneratedKeys().add(1); generatedKey.getGeneratedKeys().add(2); - OptimizeResult actual = new ShardingInsertOptimizeEngine(tableMetaData, shardingRule, insertValuesStatementWithPlaceholderWithEncrypt, insertValuesParameters, generatedKey).optimize(); + OptimizeResult actual = new ShardingInsertOptimizeEngine(shardingRule, insertValuesStatementWithPlaceholderWithEncrypt, insertValuesParameters, generatedKey).optimize(); assertFalse(actual.getShardingConditions().isAlwaysFalse()); assertThat(actual.getShardingConditions().getShardingConditions().size(), is(2)); assertTrue(actual.getInsertOptimizeResult().isPresent()); @@ -255,7 +252,7 @@ public void assertOptimizeInsertValuesWithPlaceholderWithoutGeneratedKey() { GeneratedKey generatedKey = new GeneratedKey("order_id"); generatedKey.getGeneratedKeys().add(1); generatedKey.getGeneratedKeys().add(1); - OptimizeResult actual = new ShardingInsertOptimizeEngine(tableMetaData, shardingRule, insertValuesStatementWithPlaceholder, insertValuesParameters, generatedKey).optimize(); + OptimizeResult actual = new ShardingInsertOptimizeEngine(shardingRule, insertValuesStatementWithPlaceholder, insertValuesParameters, generatedKey).optimize(); assertFalse(actual.getShardingConditions().isAlwaysFalse()); assertThat(actual.getShardingConditions().getShardingConditions().size(), is(2)); assertTrue(actual.getInsertOptimizeResult().isPresent()); @@ -279,7 +276,7 @@ public void assertOptimizeInsertValuesWithoutPlaceholderWithGeneratedKeyWithQuer insertValuesStatementWithoutPlaceholderWithQueryEncrypt.getColumnNames().add("status"); insertValuesStatementWithoutPlaceholderWithQueryEncrypt.getValues().add( new InsertValue(Arrays.asList(new LiteralExpressionSegment(1, 2, 12), new LiteralExpressionSegment(3, 4, "a")))); - OptimizeResult actual = new ShardingInsertOptimizeEngine(tableMetaData, shardingRule, insertValuesStatementWithoutPlaceholderWithQueryEncrypt, Collections.emptyList(), generatedKey).optimize(); + OptimizeResult actual = new ShardingInsertOptimizeEngine(shardingRule, insertValuesStatementWithoutPlaceholderWithQueryEncrypt, Collections.emptyList(), generatedKey).optimize(); assertThat(actual.getShardingConditions().getShardingConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(0)); @@ -294,7 +291,7 @@ public void assertOptimizeInsertValuesWithoutPlaceholderWithGeneratedKey() { insertValuesStatementWithoutPlaceholder.getColumnNames().add("user_id"); insertValuesStatementWithoutPlaceholder.getColumnNames().add("status"); insertValuesStatementWithoutPlaceholder.getValues().add(new InsertValue(Arrays.asList(new LiteralExpressionSegment(1, 2, 12), new LiteralExpressionSegment(3, 4, "a")))); - OptimizeResult actual = new ShardingInsertOptimizeEngine(tableMetaData, shardingRule, insertValuesStatementWithoutPlaceholder, Collections.emptyList(), generatedKey).optimize(); + OptimizeResult actual = new ShardingInsertOptimizeEngine(shardingRule, insertValuesStatementWithoutPlaceholder, Collections.emptyList(), generatedKey).optimize(); assertThat(actual.getShardingConditions().getShardingConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(0)); @@ -308,7 +305,7 @@ public void assertOptimizeInsertSetWithPlaceholderWithGeneratedKey() { generatedKey.getGeneratedKeys().add(1); insertSetStatementWithPlaceholder.getValues().add( new InsertValue(Arrays.asList(new ParameterMarkerExpressionSegment(1, 2, 0), new ParameterMarkerExpressionSegment(3, 4, 1)))); - OptimizeResult actual = new ShardingInsertOptimizeEngine(tableMetaData, shardingRule, insertSetStatementWithPlaceholder, insertSetParameters, generatedKey).optimize(); + OptimizeResult actual = new ShardingInsertOptimizeEngine(shardingRule, insertSetStatementWithPlaceholder, insertSetParameters, generatedKey).optimize(); assertThat(actual.getShardingConditions().getShardingConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(3)); @@ -324,7 +321,7 @@ public void assertOptimizeInsertSetWithPlaceholderWithGeneratedKeyWithQueryEncry generatedKey.getGeneratedKeys().add(1); InsertValue insertValue = new InsertValue(Arrays.asList(new ParameterMarkerExpressionSegment(1, 2, 0), new ParameterMarkerExpressionSegment(3, 4, 1))); insertSetStatementWithPlaceholderWithQueryEncrypt.getValues().add(insertValue); - OptimizeResult actual = new ShardingInsertOptimizeEngine(tableMetaData, shardingRule, insertSetStatementWithPlaceholderWithQueryEncrypt, insertSetParameters, generatedKey).optimize(); + OptimizeResult actual = new ShardingInsertOptimizeEngine(shardingRule, insertSetStatementWithPlaceholderWithQueryEncrypt, insertSetParameters, generatedKey).optimize(); assertThat(actual.getShardingConditions().getShardingConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(4)); @@ -340,7 +337,7 @@ public void assertOptimizeInsertSetWithoutPlaceholderWithGeneratedKey() { GeneratedKey generatedKey = new GeneratedKey("order_id"); generatedKey.getGeneratedKeys().add(1); insertSetStatementWithoutPlaceholder.getValues().add(new InsertValue(Arrays.asList(new LiteralExpressionSegment(1, 2, 12), new LiteralExpressionSegment(3, 4, "a")))); - OptimizeResult actual = new ShardingInsertOptimizeEngine(tableMetaData, shardingRule, insertSetStatementWithoutPlaceholder, Collections.emptyList(), generatedKey).optimize(); + OptimizeResult actual = new ShardingInsertOptimizeEngine(shardingRule, insertSetStatementWithoutPlaceholder, Collections.emptyList(), generatedKey).optimize(); assertThat(actual.getShardingConditions().getShardingConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(0)); @@ -354,7 +351,7 @@ public void assertOptimizeInsertSetWithoutPlaceholderWithGeneratedKeyWithEncrypt generatedKey.getGeneratedKeys().add(1); insertSetStatementWithoutPlaceholderWithEncrypt.getValues().add( new InsertValue(Arrays.asList(new LiteralExpressionSegment(1, 2, 12), new LiteralExpressionSegment(3, 4, "a")))); - OptimizeResult actual = new ShardingInsertOptimizeEngine(tableMetaData, shardingRule, insertSetStatementWithoutPlaceholderWithEncrypt, Collections.emptyList(), generatedKey).optimize(); + OptimizeResult actual = new ShardingInsertOptimizeEngine(shardingRule, insertSetStatementWithoutPlaceholderWithEncrypt, Collections.emptyList(), generatedKey).optimize(); assertThat(actual.getShardingConditions().getShardingConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(0)); diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/generator/InsertAssistedColumnsTokenGenerator.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/generator/InsertAssistedColumnsTokenGenerator.java index 339d0d03149e5..ffb8d0911cd37 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/generator/InsertAssistedColumnsTokenGenerator.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/generator/InsertAssistedColumnsTokenGenerator.java @@ -46,12 +46,12 @@ public Optional generateSQLToken(final SQLStatement private Optional createInsertAssistedColumnsToken(final InsertStatement insertStatement, final InsertColumnsSegment segment, final EncryptRule encryptRule) { if (insertStatement.isNeededToAppendAssistedColumns()) { - return Optional.of(new InsertAssistedColumnsToken(segment.getStopIndex(), getQueryAssistedColumsn(insertStatement, encryptRule), segment.getColumns().isEmpty())); + return Optional.of(new InsertAssistedColumnsToken(segment.getStopIndex(), getQueryAssistedColumns(insertStatement, encryptRule), segment.getColumns().isEmpty())); } return Optional.absent(); } - private Collection getQueryAssistedColumsn(final InsertStatement insertStatement, final EncryptRule encryptRule) { + private Collection getQueryAssistedColumns(final InsertStatement insertStatement, final EncryptRule encryptRule) { Collection result = new LinkedList<>(); for (String each : insertStatement.getColumnNames()) { Optional assistedColumnName = encryptRule.getEncryptorEngine().getAssistedQueryColumn(insertStatement.getTables().getSingleTableName(), each); diff --git a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java index 72af3f9236a9b..3c188b0e9e173 100644 --- a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java +++ b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java @@ -89,7 +89,7 @@ public SQLRouteResult route(final SQLStatement sqlStatement, final List Optional generatedKey = sqlStatement instanceof InsertStatement ? GeneratedKey.getGenerateKey(shardingRule, parameters, (InsertStatement) sqlStatement) : Optional.absent(); SQLRouteResult result = new SQLRouteResult(sqlStatement, generatedKey.orNull()); - OptimizeResult optimizeResult = OptimizeEngineFactory.newInstance(shardingMetaData.getTable(), shardingRule, sqlStatement, parameters, generatedKey.orNull()).optimize(); + OptimizeResult optimizeResult = OptimizeEngineFactory.newInstance(shardingRule, sqlStatement, parameters, generatedKey.orNull()).optimize(); if (generatedKey.isPresent()) { setGeneratedKeys(result, generatedKey.get()); } From c699cad4f826442acc5497f6cacca7f478b8e50a Mon Sep 17 00:00:00 2001 From: terrymanu Date: Thu, 13 Jun 2019 22:28:11 +0800 Subject: [PATCH 147/283] for #2553, Do not add assist query columns from metadata --- .../encrypt/ShardingEncryptorEngine.java | 10 ++++-- .../encrypt/ShardingEncryptorStrategy.java | 2 +- .../insert/EncryptInsertColumnsFiller.java | 23 +++++++++---- .../dml/insert/EncryptInsertValuesFiller.java | 33 ++----------------- 4 files changed, 28 insertions(+), 40 deletions(-) diff --git a/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/strategy/encrypt/ShardingEncryptorEngine.java b/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/strategy/encrypt/ShardingEncryptorEngine.java index 3670e73d5e9bc..050d173466f4c 100644 --- a/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/strategy/encrypt/ShardingEncryptorEngine.java +++ b/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/strategy/encrypt/ShardingEncryptorEngine.java @@ -29,12 +29,14 @@ import org.apache.shardingsphere.spi.encrypt.ShardingQueryAssistedEncryptor; import java.util.Collection; +import java.util.HashSet; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; +import java.util.TreeSet; /** * Sharding encryptor engine. @@ -105,13 +107,15 @@ public Optional getAssistedQueryColumn(final String logicTableName, fina * Get assisted query columns. * * @param logicTableName logic table name - * @return assisted query column + * @return assisted query columns */ public Collection getAssistedQueryColumns(final String logicTableName) { - Collection result = new LinkedHashSet<>(); + Collection assistedQueryColumns = new HashSet<>(); for (ShardingEncryptorStrategy each : shardingEncryptorStrategies.values()) { - result.addAll(each.getAssistedQueryColumns(logicTableName)); + assistedQueryColumns.addAll(each.getAssistedQueryColumns(logicTableName)); } + Collection result = new TreeSet<>(String.CASE_INSENSITIVE_ORDER); + result.addAll(assistedQueryColumns); return result; } diff --git a/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/strategy/encrypt/ShardingEncryptorStrategy.java b/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/strategy/encrypt/ShardingEncryptorStrategy.java index 2a97431e3e104..6374e8f20fb86 100644 --- a/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/strategy/encrypt/ShardingEncryptorStrategy.java +++ b/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/strategy/encrypt/ShardingEncryptorStrategy.java @@ -121,7 +121,7 @@ public Optional getAssistedQueryColumn(final String logicTableName, fina * Get assisted query columns. * * @param logicTableName logic table name - * @return assisted query column + * @return assisted query columns */ public Collection getAssistedQueryColumns(final String logicTableName) { Collection result = new LinkedList<>(); diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/insert/EncryptInsertColumnsFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/insert/EncryptInsertColumnsFiller.java index a816e446e2453..2cedb8aa27e1c 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/insert/EncryptInsertColumnsFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/insert/EncryptInsertColumnsFiller.java @@ -19,12 +19,16 @@ import lombok.Setter; import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; +import org.apache.shardingsphere.core.parse.filler.api.EncryptRuleAwareFiller; import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; import org.apache.shardingsphere.core.parse.filler.api.ShardingTableMetaDataAwareFiller; import org.apache.shardingsphere.core.parse.sql.segment.dml.column.ColumnSegment; import org.apache.shardingsphere.core.parse.sql.segment.dml.column.InsertColumnsSegment; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.InsertStatement; +import org.apache.shardingsphere.core.rule.EncryptRule; + +import java.util.Collection; /** * Insert columns filler. @@ -33,7 +37,9 @@ * @author panjuan */ @Setter -public final class EncryptInsertColumnsFiller implements SQLSegmentFiller, ShardingTableMetaDataAwareFiller { +public final class EncryptInsertColumnsFiller implements SQLSegmentFiller, EncryptRuleAwareFiller, ShardingTableMetaDataAwareFiller { + + private EncryptRule encryptRule; private ShardingTableMetaData shardingTableMetaData; @@ -41,18 +47,23 @@ public final class EncryptInsertColumnsFiller implements SQLSegmentFiller assistedQueryColumns = encryptRule.getEncryptorEngine().getAssistedQueryColumns(insertStatement.getTables().getSingleTableName()); if (sqlSegment.getColumns().isEmpty()) { - fillFromMetaData(insertStatement); + fillFromMetaData(insertStatement, assistedQueryColumns); } else { fillFromSQL(sqlSegment, insertStatement); } + if (!assistedQueryColumns.isEmpty()) { + insertStatement.setNeededToAppendAssistedColumns(true); + } } } - private void fillFromMetaData(final InsertStatement insertStatement) { - String tableName = insertStatement.getTables().getSingleTableName(); - for (String each : shardingTableMetaData.getAllColumnNames(tableName)) { - insertStatement.getColumnNames().add(each); + private void fillFromMetaData(final InsertStatement insertStatement, final Collection assistedQueryColumns) { + for (String each : shardingTableMetaData.getAllColumnNames(insertStatement.getTables().getSingleTableName())) { + if (!assistedQueryColumns.contains(each)) { + insertStatement.getColumnNames().add(each); + } } } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/insert/EncryptInsertValuesFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/insert/EncryptInsertValuesFiller.java index 8eb6b686c4f12..5e794170da292 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/insert/EncryptInsertValuesFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/insert/EncryptInsertValuesFiller.java @@ -17,16 +17,11 @@ package org.apache.shardingsphere.core.parse.filler.encrypt.dml.insert; -import lombok.Setter; -import org.apache.shardingsphere.core.parse.filler.api.EncryptRuleAwareFiller; import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; import org.apache.shardingsphere.core.parse.sql.context.insertvalue.InsertValue; import org.apache.shardingsphere.core.parse.sql.segment.dml.InsertValuesSegment; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.InsertStatement; -import org.apache.shardingsphere.core.rule.EncryptRule; - -import java.util.Collection; /** * Insert values filler for encrypt. @@ -34,34 +29,12 @@ * @author zhangliang * @author panjuan */ -@Setter -public final class EncryptInsertValuesFiller implements SQLSegmentFiller, EncryptRuleAwareFiller { - - private EncryptRule encryptRule; +public final class EncryptInsertValuesFiller implements SQLSegmentFiller { @Override public void fill(final InsertValuesSegment sqlSegment, final SQLStatement sqlStatement) { - InsertStatement insertStatement = (InsertStatement) sqlStatement; InsertValue insertValue = new InsertValue(sqlSegment.getValues()); - insertStatement.getValues().add(insertValue); - insertStatement.addParametersCount(insertValue.getParametersCount()); - reviseInsertStatement(insertStatement); - } - - private void reviseInsertStatement(final InsertStatement insertStatement) { - reviseInsertColumnNames(insertStatement); - setNeededToAppendAssistedColumns(insertStatement); - - } - - private void reviseInsertColumnNames(final InsertStatement insertStatement) { - insertStatement.getColumnNames().removeAll(encryptRule.getEncryptorEngine().getAssistedQueryColumns(insertStatement.getTables().getSingleTableName())); - } - - private void setNeededToAppendAssistedColumns(final InsertStatement insertStatement) { - Collection assistedQueryColumns = encryptRule.getEncryptorEngine().getAssistedQueryColumns(insertStatement.getTables().getSingleTableName()); - if (!assistedQueryColumns.isEmpty()) { - insertStatement.setNeededToAppendAssistedColumns(true); - } + ((InsertStatement) sqlStatement).getValues().add(insertValue); + sqlStatement.addParametersCount(insertValue.getParametersCount()); } } From d598fa6afbe11b63bc4d38029a3c844588c8c8e9 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Fri, 14 Jun 2019 10:51:34 +0800 Subject: [PATCH 148/283] for #2553, remove InsertStatement.isNeededToAppendColumns() --- .../insert/EncryptInsertColumnsFiller.java | 3 -- .../insert/ShardingInsertValuesFiller.java | 20 ----------- .../sql/statement/dml/InsertStatement.java | 13 ------- .../InsertAssistedColumnsTokenGenerator.java | 6 ++-- .../InsertColumnsTokenGenerator.java | 34 ++++++++++++++++--- .../InsertGeneratedKeyTokenGenerator.java | 15 ++++---- .../rewriter/ShardingSQLRewriterTest.java | 5 --- .../src/test/resources/yaml/rewrite-rule.yaml | 4 +-- 8 files changed, 42 insertions(+), 58 deletions(-) diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/insert/EncryptInsertColumnsFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/insert/EncryptInsertColumnsFiller.java index 2cedb8aa27e1c..879beae44bc84 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/insert/EncryptInsertColumnsFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/insert/EncryptInsertColumnsFiller.java @@ -53,9 +53,6 @@ public void fill(final InsertColumnsSegment sqlSegment, final SQLStatement sqlSt } else { fillFromSQL(sqlSegment, insertStatement); } - if (!assistedQueryColumns.isEmpty()) { - insertStatement.setNeededToAppendAssistedColumns(true); - } } } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingInsertValuesFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingInsertValuesFiller.java index 3fcb86207d42f..0f513143ac108 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingInsertValuesFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingInsertValuesFiller.java @@ -81,12 +81,6 @@ private void fillShardingCondition(final AndCondition andCondition, final String } private void reviseInsertStatement(final InsertStatement insertStatement, final InsertValuesSegment sqlSegment) { - reviseInsertColumnNames(insertStatement, sqlSegment); - setNeededToAppendGeneratedKey(insertStatement); - setNeededToAppendAssistedColumns(insertStatement); - } - - private void reviseInsertColumnNames(final InsertStatement insertStatement, final InsertValuesSegment sqlSegment) { Collection insertColumns = new ArrayList<>(insertStatement.getColumnNames()); insertColumns.removeAll(getAssistedQueryColumns(insertStatement)); Optional generateKeyColumnName = shardingRule.findGenerateKeyColumnName(insertStatement.getTables().getSingleTableName()); @@ -97,20 +91,6 @@ private void reviseInsertColumnNames(final InsertStatement insertStatement, fina insertStatement.getColumnNames().addAll(insertColumns); } - private void setNeededToAppendGeneratedKey(final InsertStatement insertStatement) { - Optional generateKeyColumnName = shardingRule.findGenerateKeyColumnName(insertStatement.getTables().getSingleTableName()); - if (generateKeyColumnName.isPresent() && !insertStatement.getColumnNames().contains(generateKeyColumnName.get())) { - insertStatement.setNeededToAppendGeneratedKey(true); - } - } - - private void setNeededToAppendAssistedColumns(final InsertStatement insertStatement) { - Collection assistedQueryColumns = getAssistedQueryColumns(insertStatement); - if (!assistedQueryColumns.isEmpty()) { - insertStatement.setNeededToAppendAssistedColumns(true); - } - } - private Collection getAssistedQueryColumns(final InsertStatement insertStatement) { Collection result = new ArrayList<>(); Collection assistedQueryColumns = shardingRule.getEncryptRule().getEncryptorEngine().getAssistedQueryColumns(insertStatement.getTables().getSingleTableName()); diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/statement/dml/InsertStatement.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/statement/dml/InsertStatement.java index e574547d98a63..58b9da44c19c6 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/statement/dml/InsertStatement.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/statement/dml/InsertStatement.java @@ -41,17 +41,4 @@ public final class InsertStatement extends DMLStatement { private final Collection columnNames = new LinkedList<>(); private final List values = new LinkedList<>(); - - private boolean isNeededToAppendGeneratedKey; - - private boolean isNeededToAppendAssistedColumns; - - /** - * Is needed to append columns. - * - * @return append columns or not - */ - public boolean isNeededToAppendColumns() { - return isNeededToAppendGeneratedKey || isNeededToAppendAssistedColumns; - } } diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/generator/InsertAssistedColumnsTokenGenerator.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/generator/InsertAssistedColumnsTokenGenerator.java index ffb8d0911cd37..5cd0cd5fe8a80 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/generator/InsertAssistedColumnsTokenGenerator.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/generator/InsertAssistedColumnsTokenGenerator.java @@ -45,10 +45,8 @@ public Optional generateSQLToken(final SQLStatement } private Optional createInsertAssistedColumnsToken(final InsertStatement insertStatement, final InsertColumnsSegment segment, final EncryptRule encryptRule) { - if (insertStatement.isNeededToAppendAssistedColumns()) { - return Optional.of(new InsertAssistedColumnsToken(segment.getStopIndex(), getQueryAssistedColumns(insertStatement, encryptRule), segment.getColumns().isEmpty())); - } - return Optional.absent(); + return encryptRule.getEncryptorEngine().getAssistedQueryColumns(insertStatement.getTables().getSingleTableName()).isEmpty() ? Optional.absent() + : Optional.of(new InsertAssistedColumnsToken(segment.getStopIndex(), getQueryAssistedColumns(insertStatement, encryptRule), segment.getColumns().isEmpty())); } private Collection getQueryAssistedColumns(final InsertStatement insertStatement, final EncryptRule encryptRule) { diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/generator/InsertColumnsTokenGenerator.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/generator/InsertColumnsTokenGenerator.java index 986a6557242cc..769b59f14a203 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/generator/InsertColumnsTokenGenerator.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/generator/InsertColumnsTokenGenerator.java @@ -23,7 +23,10 @@ import org.apache.shardingsphere.core.parse.sql.statement.dml.InsertStatement; import org.apache.shardingsphere.core.rewrite.token.pojo.InsertColumnsToken; import org.apache.shardingsphere.core.rule.BaseRule; +import org.apache.shardingsphere.core.rule.EncryptRule; +import org.apache.shardingsphere.core.rule.ShardingRule; +import java.util.Collection; import java.util.LinkedList; import java.util.List; @@ -35,20 +38,43 @@ public final class InsertColumnsTokenGenerator implements OptionalSQLTokenGenerator { @Override - public Optional generateSQLToken(final SQLStatement sqlStatement, final List parameters, final BaseRule baseRule) { + public Optional generateSQLToken(final SQLStatement sqlStatement, final List parameters, final BaseRule rule) { Optional insertColumnsSegment = sqlStatement.findSQLSegment(InsertColumnsSegment.class); if (!(sqlStatement instanceof InsertStatement && insertColumnsSegment.isPresent())) { return Optional.absent(); } - return createInsertColumnsToken((InsertStatement) sqlStatement, insertColumnsSegment.get()); + return createInsertColumnsToken((InsertStatement) sqlStatement, rule, insertColumnsSegment.get()); } - private Optional createInsertColumnsToken(final InsertStatement insertStatement, final InsertColumnsSegment segment) { + private Optional createInsertColumnsToken(final InsertStatement insertStatement, final BaseRule rule, final InsertColumnsSegment segment) { if (!segment.getColumns().isEmpty()) { return Optional.absent(); } - InsertColumnsToken result = new InsertColumnsToken(segment.getStopIndex(), new LinkedList<>(insertStatement.getColumnNames()), !insertStatement.isNeededToAppendColumns()); + InsertColumnsToken result = new InsertColumnsToken(segment.getStopIndex(), new LinkedList<>(insertStatement.getColumnNames()), !isNeededToAppendColumns(insertStatement, rule)); return Optional.of(result); } + private boolean isNeededToAppendColumns(final InsertStatement insertStatement, final BaseRule rule) { + if (rule instanceof ShardingRule) { + return isNeededToAppendColumns(insertStatement, (ShardingRule) rule); + } + if (rule instanceof EncryptRule) { + return isNeededToAppendColumns(insertStatement.getTables().getSingleTableName(), (EncryptRule) rule); + } + return false; + } + + private boolean isNeededToAppendColumns(final InsertStatement insertStatement, final ShardingRule shardingRule) { + String tableName = insertStatement.getTables().getSingleTableName(); + return isNeededToAppendGeneratedKey(tableName, insertStatement.getColumnNames(), shardingRule) || isNeededToAppendColumns(tableName, shardingRule.getEncryptRule()); + } + + private boolean isNeededToAppendGeneratedKey(final String tableName, final Collection columnNames, final ShardingRule shardingRule) { + Optional generateKeyColumnName = shardingRule.findGenerateKeyColumnName(tableName); + return generateKeyColumnName.isPresent() && !columnNames.contains(generateKeyColumnName.get()); + } + + private boolean isNeededToAppendColumns(final String tableName, final EncryptRule encryptRule) { + return !encryptRule.getEncryptorEngine().getAssistedQueryColumns(tableName).isEmpty(); + } } diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/generator/InsertGeneratedKeyTokenGenerator.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/generator/InsertGeneratedKeyTokenGenerator.java index 14eeb4a166a29..4b8908245069c 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/generator/InsertGeneratedKeyTokenGenerator.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/generator/InsertGeneratedKeyTokenGenerator.java @@ -43,14 +43,15 @@ public Optional generateSQLToken(final SQLStatement sql } private Optional createInsertGeneratedKeyToken(final InsertStatement insertStatement, final InsertColumnsSegment segment, final ShardingRule shardingRule) { - Optional generatedKeyColumn = shardingRule.findGenerateKeyColumnName(insertStatement.getTables().getSingleTableName()); - if (insertStatement.isNeededToAppendGeneratedKey()) { - return Optional.of(new InsertGeneratedKeyToken(segment.getStopIndex(), generatedKeyColumn.get(), isToAddCloseParenthesis(insertStatement, segment))); - } - return Optional.absent(); + String tableName = insertStatement.getTables().getSingleTableName(); + Optional generatedKeyColumnName = shardingRule.findGenerateKeyColumnName(tableName); + return generatedKeyColumnName.isPresent() && !insertStatement.getColumnNames().contains(generatedKeyColumnName.get()) + ? Optional.of(new InsertGeneratedKeyToken(segment.getStopIndex(), generatedKeyColumnName.get(), isToAddCloseParenthesis(tableName, segment, shardingRule))) + : Optional.absent(); } - private boolean isToAddCloseParenthesis(final InsertStatement insertStatement, final InsertColumnsSegment segment) { - return !insertStatement.isNeededToAppendAssistedColumns() && segment.getColumns().isEmpty(); + private boolean isToAddCloseParenthesis(final String tableName, final InsertColumnsSegment segment, final ShardingRule shardingRule) { + return segment.getColumns().isEmpty() && shardingRule.getEncryptRule().getEncryptorEngine().getAssistedQueryColumns(tableName).isEmpty(); } + } diff --git a/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/core/rewrite/rewriter/ShardingSQLRewriterTest.java b/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/core/rewrite/rewriter/ShardingSQLRewriterTest.java index 776e4e356b7de..970ff6fc30a8b 100644 --- a/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/core/rewrite/rewriter/ShardingSQLRewriterTest.java +++ b/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/core/rewrite/rewriter/ShardingSQLRewriterTest.java @@ -197,7 +197,6 @@ public void assertRewriteForAutoGeneratedKeyColumn() { insertStatement.getTables().add(new Table("table_x", null)); insertStatement.getColumnNames().add("name"); insertStatement.getColumnNames().add("age"); - insertStatement.setNeededToAppendGeneratedKey(true); insertStatement.getSQLSegments().add(new InsertColumnsSegment(30, 30, Collections.singleton(mock(ColumnSegment.class)))); insertStatement.getSQLSegments().add(new InsertValuesSegment(39, 44, Collections.emptyList())); insertStatement.addParametersCount(2); @@ -220,7 +219,6 @@ public void assertRewriteForAutoGeneratedKeyColumn() { @Test public void assertRewriteForAutoGeneratedKeyColumnWithoutColumnsWithParameter() { insertStatement.getColumnNames().add("name"); - insertStatement.setNeededToAppendGeneratedKey(true); insertStatement.getSQLSegments().add(new InsertColumnsSegment(21, 21, Collections.emptyList())); insertStatement.getSQLSegments().add(new InsertValuesSegment(29, 31, Collections.emptyList())); insertStatement.getTables().add(new Table("table_x", null)); @@ -244,7 +242,6 @@ public void assertRewriteForAutoGeneratedKeyColumnWithoutColumnsWithParameter() @Test public void assertRewriteForAutoGeneratedKeyColumnWithoutColumnsWithoutParameter() { insertStatement.getColumnNames().add("name"); - insertStatement.setNeededToAppendGeneratedKey(true); insertStatement.getSQLSegments().add(new InsertColumnsSegment(21, 21, Collections.emptyList())); insertStatement.getSQLSegments().add(new InsertValuesSegment(29, 32, Collections.emptyList())); insertStatement.getTables().add(new Table("table_x", null)); @@ -266,7 +263,6 @@ public void assertRewriteForAutoGeneratedKeyColumnWithoutColumnsWithoutParameter @Test public void assertRewriteForDuplicateKeyWithoutColumnsWithoutParameter() { insertStatement.getColumnNames().add("name"); - insertStatement.setNeededToAppendGeneratedKey(true); insertStatement.getSQLSegments().add(new InsertColumnsSegment(21, 21, Collections.emptyList())); insertStatement.getSQLSegments().add(new InsertValuesSegment(29, 32, Collections.emptyList())); insertStatement.getTables().add(new Table("table_x", null)); @@ -333,7 +329,6 @@ public void assertRewriteColumnWithoutColumnsWithoutParameter() { @Test public void assertRewriteColumnWithoutColumnsWithParameter() { insertStatement.getColumnNames().add("name"); - insertStatement.setNeededToAppendGeneratedKey(true); insertStatement.getSQLSegments().add(new InsertColumnsSegment(21, 21, Collections.emptyList())); insertStatement.getSQLSegments().add(new InsertValuesSegment(29, 34, Collections.emptyList())); insertStatement.getTables().add(new Table("table_x", null)); diff --git a/sharding-core/sharding-core-rewrite/src/test/resources/yaml/rewrite-rule.yaml b/sharding-core/sharding-core-rewrite/src/test/resources/yaml/rewrite-rule.yaml index 7f12c3640ee81..623bc7a7d3fbd 100644 --- a/sharding-core/sharding-core-rewrite/src/test/resources/yaml/rewrite-rule.yaml +++ b/sharding-core/sharding-core-rewrite/src/test/resources/yaml/rewrite-rule.yaml @@ -25,7 +25,7 @@ dataSources: driverClassName: org.h2.Driver jdbcUrl: jdbc:h2:mem:db1;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL username: sa - password: + password: shardingRule: tables: @@ -50,7 +50,7 @@ shardingRule: type: SNOWFLAKE column: id props: - worker.id: 123 + worker.id: 123 bindingTables: - table_x, table_y encryptRule: From d832b92a90a0ece5bb48c2df6723b9f2e351b8e7 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Fri, 14 Jun 2019 11:14:36 +0800 Subject: [PATCH 149/283] for #2553, Do not add assist query columns from metadata for sharding --- .../dml/insert/EncryptInsertColumnsFiller.java | 6 +++--- .../dml/insert/ShardingInsertColumnsFiller.java | 16 ++++++++++++---- .../dml/insert/ShardingInsertValuesFiller.java | 10 ---------- 3 files changed, 15 insertions(+), 17 deletions(-) diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/insert/EncryptInsertColumnsFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/insert/EncryptInsertColumnsFiller.java index 879beae44bc84..27019230bf8d1 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/insert/EncryptInsertColumnsFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/insert/EncryptInsertColumnsFiller.java @@ -47,16 +47,16 @@ public final class EncryptInsertColumnsFiller implements SQLSegmentFiller assistedQueryColumns = encryptRule.getEncryptorEngine().getAssistedQueryColumns(insertStatement.getTables().getSingleTableName()); if (sqlSegment.getColumns().isEmpty()) { - fillFromMetaData(insertStatement, assistedQueryColumns); + fillFromMetaData(insertStatement); } else { fillFromSQL(sqlSegment, insertStatement); } } } - private void fillFromMetaData(final InsertStatement insertStatement, final Collection assistedQueryColumns) { + private void fillFromMetaData(final InsertStatement insertStatement) { + Collection assistedQueryColumns = encryptRule.getEncryptorEngine().getAssistedQueryColumns(insertStatement.getTables().getSingleTableName()); for (String each : shardingTableMetaData.getAllColumnNames(insertStatement.getTables().getSingleTableName())) { if (!assistedQueryColumns.contains(each)) { insertStatement.getColumnNames().add(each); diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingInsertColumnsFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingInsertColumnsFiller.java index 5b1e94eceb431..14c02d52a5f38 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingInsertColumnsFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingInsertColumnsFiller.java @@ -20,11 +20,15 @@ import lombok.Setter; import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; +import org.apache.shardingsphere.core.parse.filler.api.ShardingRuleAwareFiller; import org.apache.shardingsphere.core.parse.filler.api.ShardingTableMetaDataAwareFiller; import org.apache.shardingsphere.core.parse.sql.segment.dml.column.ColumnSegment; import org.apache.shardingsphere.core.parse.sql.segment.dml.column.InsertColumnsSegment; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.InsertStatement; +import org.apache.shardingsphere.core.rule.ShardingRule; + +import java.util.Collection; /** * Insert columns filler. @@ -33,7 +37,9 @@ * @author panjuan */ @Setter -public final class ShardingInsertColumnsFiller implements SQLSegmentFiller, ShardingTableMetaDataAwareFiller { +public final class ShardingInsertColumnsFiller implements SQLSegmentFiller, ShardingRuleAwareFiller, ShardingTableMetaDataAwareFiller { + + private ShardingRule shardingRule; private ShardingTableMetaData shardingTableMetaData; @@ -50,9 +56,11 @@ public void fill(final InsertColumnsSegment sqlSegment, final SQLStatement sqlSt } private void fillFromMetaData(final InsertStatement insertStatement) { - String tableName = insertStatement.getTables().getSingleTableName(); - for (String each : shardingTableMetaData.getAllColumnNames(tableName)) { - insertStatement.getColumnNames().add(each); + Collection assistedQueryColumns = shardingRule.getEncryptRule().getEncryptorEngine().getAssistedQueryColumns(insertStatement.getTables().getSingleTableName()); + for (String each : shardingTableMetaData.getAllColumnNames(insertStatement.getTables().getSingleTableName())) { + if (!assistedQueryColumns.contains(each)) { + insertStatement.getColumnNames().add(each); + } } } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingInsertValuesFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingInsertValuesFiller.java index 0f513143ac108..e6a82cca9242f 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingInsertValuesFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingInsertValuesFiller.java @@ -82,7 +82,6 @@ private void fillShardingCondition(final AndCondition andCondition, final String private void reviseInsertStatement(final InsertStatement insertStatement, final InsertValuesSegment sqlSegment) { Collection insertColumns = new ArrayList<>(insertStatement.getColumnNames()); - insertColumns.removeAll(getAssistedQueryColumns(insertStatement)); Optional generateKeyColumnName = shardingRule.findGenerateKeyColumnName(insertStatement.getTables().getSingleTableName()); if (insertStatement.getColumnNames().size() != sqlSegment.getValues().size() && generateKeyColumnName.isPresent()) { insertColumns.remove(generateKeyColumnName.get()); @@ -90,13 +89,4 @@ private void reviseInsertStatement(final InsertStatement insertStatement, final insertStatement.getColumnNames().clear(); insertStatement.getColumnNames().addAll(insertColumns); } - - private Collection getAssistedQueryColumns(final InsertStatement insertStatement) { - Collection result = new ArrayList<>(); - Collection assistedQueryColumns = shardingRule.getEncryptRule().getEncryptorEngine().getAssistedQueryColumns(insertStatement.getTables().getSingleTableName()); - if (!assistedQueryColumns.isEmpty()) { - result.addAll(assistedQueryColumns); - } - return result; - } } From 80e06db0f21f86b7fbba189dec4c0c0625ed96ce Mon Sep 17 00:00:00 2001 From: cherrylzhao Date: Thu, 13 Jun 2019 12:59:39 +0800 Subject: [PATCH 150/283] save SEATA_TX_XID into ShardingExecuteDataMap after begin. --- .../base/seata/at/SeataATShardingTransactionManager.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/main/java/org/apache/shardingsphere/transaction/base/seata/at/SeataATShardingTransactionManager.java b/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/main/java/org/apache/shardingsphere/transaction/base/seata/at/SeataATShardingTransactionManager.java index b8f9ff8f7a341..20273ad789b95 100644 --- a/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/main/java/org/apache/shardingsphere/transaction/base/seata/at/SeataATShardingTransactionManager.java +++ b/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/main/java/org/apache/shardingsphere/transaction/base/seata/at/SeataATShardingTransactionManager.java @@ -27,6 +27,7 @@ import io.seata.tm.TMClient; import io.seata.tm.api.GlobalTransactionContext; import lombok.SneakyThrows; +import org.apache.shardingsphere.core.execute.ShardingExecuteDataMap; import org.apache.shardingsphere.spi.database.DatabaseType; import org.apache.shardingsphere.transaction.core.ResourceDataSource; import org.apache.shardingsphere.transaction.core.TransactionType; @@ -78,6 +79,7 @@ public Connection getConnection(final String dataSourceName) throws SQLException public void begin() { SeataTransactionHolder.set(GlobalTransactionContext.getCurrentOrCreate()); SeataTransactionHolder.get().begin(); + ShardingExecuteDataMap.getDataMap().put("SEATA_TX_XID", RootContext.getXID()); } @Override From 6ec1f3a4effd6860732451c37b9c0b8b18b4d96d Mon Sep 17 00:00:00 2001 From: cherrylzhao Date: Thu, 13 Jun 2019 13:08:40 +0800 Subject: [PATCH 151/283] add TransactionalSQLExecutionHook to bind xid to child thread. --- .../at/TransactionalSQLExecutionHook.java | 48 +++++++++++++++++++ ...gsphere.core.execute.hook.SQLExecutionHook | 18 +++++++ 2 files changed, 66 insertions(+) create mode 100644 sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/main/java/org/apache/shardingsphere/transaction/base/seata/at/TransactionalSQLExecutionHook.java create mode 100644 sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/main/resources/META-INF/services/org.apache.shardingsphere.core.execute.hook.SQLExecutionHook diff --git a/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/main/java/org/apache/shardingsphere/transaction/base/seata/at/TransactionalSQLExecutionHook.java b/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/main/java/org/apache/shardingsphere/transaction/base/seata/at/TransactionalSQLExecutionHook.java new file mode 100644 index 0000000000000..264bdc0fd522a --- /dev/null +++ b/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/main/java/org/apache/shardingsphere/transaction/base/seata/at/TransactionalSQLExecutionHook.java @@ -0,0 +1,48 @@ +/* + * 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.transaction.base.seata.at; + +import io.seata.core.context.RootContext; +import org.apache.shardingsphere.core.execute.hook.SQLExecutionHook; +import org.apache.shardingsphere.core.route.RouteUnit; +import org.apache.shardingsphere.spi.database.DataSourceMetaData; + +import java.util.Map; + +/** + * Seata transactional SQL execution hook. + * + * @author zhaojun + */ +public final class TransactionalSQLExecutionHook implements SQLExecutionHook { + + @Override + public void start(final RouteUnit routeUnit, final DataSourceMetaData dataSourceMetaData, final boolean isTrunkThread, final Map shardingExecuteDataMap) { + if (shardingExecuteDataMap.containsKey("SEATA_TX_ID")) { + RootContext.bind((String) shardingExecuteDataMap.get("SEATA_TX_ID")); + } + } + + @Override + public void finishSuccess() { + } + + @Override + public void finishFailure(final Exception cause) { + } +} diff --git a/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/main/resources/META-INF/services/org.apache.shardingsphere.core.execute.hook.SQLExecutionHook b/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/main/resources/META-INF/services/org.apache.shardingsphere.core.execute.hook.SQLExecutionHook new file mode 100644 index 0000000000000..f54f6dd0e133e --- /dev/null +++ b/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/main/resources/META-INF/services/org.apache.shardingsphere.core.execute.hook.SQLExecutionHook @@ -0,0 +1,18 @@ +# +# 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. +# + +org.apache.shardingsphere.transaction.base.seata.at.TransactionalSQLExecutionHook From 8d251b78b28369f1223d88d0e01013ac686bf99d Mon Sep 17 00:00:00 2001 From: cherrylzhao Date: Thu, 13 Jun 2019 13:19:01 +0800 Subject: [PATCH 152/283] do refactor using SeataTransactionBroadcaster. --- .../at/SeataATShardingTransactionManager.java | 3 +- .../seata/at/SeataTransactionBroadcaster.java | 45 +++++++++++++++++++ .../at/TransactionalSQLExecutionHook.java | 5 +-- 3 files changed, 48 insertions(+), 5 deletions(-) create mode 100644 sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/main/java/org/apache/shardingsphere/transaction/base/seata/at/SeataTransactionBroadcaster.java diff --git a/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/main/java/org/apache/shardingsphere/transaction/base/seata/at/SeataATShardingTransactionManager.java b/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/main/java/org/apache/shardingsphere/transaction/base/seata/at/SeataATShardingTransactionManager.java index 20273ad789b95..b90f94bcfdacb 100644 --- a/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/main/java/org/apache/shardingsphere/transaction/base/seata/at/SeataATShardingTransactionManager.java +++ b/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/main/java/org/apache/shardingsphere/transaction/base/seata/at/SeataATShardingTransactionManager.java @@ -27,7 +27,6 @@ import io.seata.tm.TMClient; import io.seata.tm.api.GlobalTransactionContext; import lombok.SneakyThrows; -import org.apache.shardingsphere.core.execute.ShardingExecuteDataMap; import org.apache.shardingsphere.spi.database.DatabaseType; import org.apache.shardingsphere.transaction.core.ResourceDataSource; import org.apache.shardingsphere.transaction.core.TransactionType; @@ -79,7 +78,7 @@ public Connection getConnection(final String dataSourceName) throws SQLException public void begin() { SeataTransactionHolder.set(GlobalTransactionContext.getCurrentOrCreate()); SeataTransactionHolder.get().begin(); - ShardingExecuteDataMap.getDataMap().put("SEATA_TX_XID", RootContext.getXID()); + SeataTransactionBroadcaster.collectGlobalTxId(); } @Override diff --git a/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/main/java/org/apache/shardingsphere/transaction/base/seata/at/SeataTransactionBroadcaster.java b/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/main/java/org/apache/shardingsphere/transaction/base/seata/at/SeataTransactionBroadcaster.java new file mode 100644 index 0000000000000..4a525b8ffa0c3 --- /dev/null +++ b/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/main/java/org/apache/shardingsphere/transaction/base/seata/at/SeataTransactionBroadcaster.java @@ -0,0 +1,45 @@ +/* + * 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.transaction.base.seata.at; + +import io.seata.core.context.RootContext; +import org.apache.shardingsphere.core.execute.ShardingExecuteDataMap; + +import java.util.Map; + +/** + * Seata transaction broadcaster. + * + * @author zhaojun + */ +class SeataTransactionBroadcaster { + + private static final String SEATA_TX_XID = "SEATA_TX_XID"; + + static void collectGlobalTxId() { + if (RootContext.inGlobalTransaction()) { + ShardingExecuteDataMap.getDataMap().put(SEATA_TX_XID, RootContext.getXID()); + } + } + + static void broadcastIfNecessary(final Map shardingExecuteDataMap) { + if (shardingExecuteDataMap.containsKey(SEATA_TX_XID)) { + RootContext.bind((String) shardingExecuteDataMap.get(SEATA_TX_XID)); + } + } +} diff --git a/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/main/java/org/apache/shardingsphere/transaction/base/seata/at/TransactionalSQLExecutionHook.java b/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/main/java/org/apache/shardingsphere/transaction/base/seata/at/TransactionalSQLExecutionHook.java index 264bdc0fd522a..a4bb62eff7f24 100644 --- a/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/main/java/org/apache/shardingsphere/transaction/base/seata/at/TransactionalSQLExecutionHook.java +++ b/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/main/java/org/apache/shardingsphere/transaction/base/seata/at/TransactionalSQLExecutionHook.java @@ -17,7 +17,6 @@ package org.apache.shardingsphere.transaction.base.seata.at; -import io.seata.core.context.RootContext; import org.apache.shardingsphere.core.execute.hook.SQLExecutionHook; import org.apache.shardingsphere.core.route.RouteUnit; import org.apache.shardingsphere.spi.database.DataSourceMetaData; @@ -33,8 +32,8 @@ public final class TransactionalSQLExecutionHook implements SQLExecutionHook { @Override public void start(final RouteUnit routeUnit, final DataSourceMetaData dataSourceMetaData, final boolean isTrunkThread, final Map shardingExecuteDataMap) { - if (shardingExecuteDataMap.containsKey("SEATA_TX_ID")) { - RootContext.bind((String) shardingExecuteDataMap.get("SEATA_TX_ID")); + if (!isTrunkThread) { + SeataTransactionBroadcaster.broadcastIfNecessary(shardingExecuteDataMap); } } From 0a0028144bc53983ce81d0b80d4a390ce0b69d39 Mon Sep 17 00:00:00 2001 From: cherrylzhao Date: Thu, 13 Jun 2019 15:04:43 +0800 Subject: [PATCH 153/283] add TransactionalSQLExecutionHookTest. --- .../at/TransactionalSQLExecutionHookTest.java | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/test/java/org/apache/shardingsphere/transaction/base/seata/at/TransactionalSQLExecutionHookTest.java diff --git a/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/test/java/org/apache/shardingsphere/transaction/base/seata/at/TransactionalSQLExecutionHookTest.java b/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/test/java/org/apache/shardingsphere/transaction/base/seata/at/TransactionalSQLExecutionHookTest.java new file mode 100644 index 0000000000000..08f99ed48920b --- /dev/null +++ b/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/test/java/org/apache/shardingsphere/transaction/base/seata/at/TransactionalSQLExecutionHookTest.java @@ -0,0 +1,63 @@ +/* + * 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.transaction.base.seata.at; + +import io.seata.core.context.RootContext; +import org.apache.shardingsphere.core.route.RouteUnit; +import org.apache.shardingsphere.spi.database.DataSourceMetaData; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; + +import java.util.HashMap; +import java.util.Map; + +import static org.junit.Assert.assertFalse; + +@RunWith(MockitoJUnitRunner.class) +public class TransactionalSQLExecutionHookTest { + + @Mock + private RouteUnit routeUnit; + + @Mock + private DataSourceMetaData dataSourceMetaData; + + private Map shardingExecuteDataMap = new HashMap<>(); + + private TransactionalSQLExecutionHook executionHook = new TransactionalSQLExecutionHook(); + + @Before + public void setUp() { + shardingExecuteDataMap.put("SEATA_TX_XID", "test-XID"); + } + + @After + public void tearDown() { + RootContext.unbind(); + } + + @Test + public void assertStartInTrunkThread() { + executionHook.start(routeUnit, dataSourceMetaData, true, shardingExecuteDataMap); + assertFalse(RootContext.inGlobalTransaction()); + } +} From 7bd252a66efb2bc8da838cd736155d4114530562 Mon Sep 17 00:00:00 2001 From: cherrylzhao Date: Thu, 13 Jun 2019 15:08:20 +0800 Subject: [PATCH 154/283] add TransactionalSQLExecutionHookTest#assertStartInChildThread. --- .../at/TransactionalSQLExecutionHookTest.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/test/java/org/apache/shardingsphere/transaction/base/seata/at/TransactionalSQLExecutionHookTest.java b/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/test/java/org/apache/shardingsphere/transaction/base/seata/at/TransactionalSQLExecutionHookTest.java index 08f99ed48920b..8d53fd26f4a5c 100644 --- a/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/test/java/org/apache/shardingsphere/transaction/base/seata/at/TransactionalSQLExecutionHookTest.java +++ b/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/test/java/org/apache/shardingsphere/transaction/base/seata/at/TransactionalSQLExecutionHookTest.java @@ -31,6 +31,7 @@ import java.util.Map; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; @RunWith(MockitoJUnitRunner.class) public class TransactionalSQLExecutionHookTest { @@ -60,4 +61,17 @@ public void assertStartInTrunkThread() { executionHook.start(routeUnit, dataSourceMetaData, true, shardingExecuteDataMap); assertFalse(RootContext.inGlobalTransaction()); } + + @Test + public void assertStartInChildThread() { + executionHook.start(routeUnit, dataSourceMetaData, false, shardingExecuteDataMap); + assertTrue(RootContext.inGlobalTransaction()); + } + + @Test + public void assertOthers() { + executionHook.finishFailure(new RuntimeException()); + executionHook.finishSuccess(); + assertFalse(RootContext.inGlobalTransaction()); + } } From a0ce0649c42f233b7fb89d918e7df2649648db14 Mon Sep 17 00:00:00 2001 From: cherrylzhao Date: Thu, 13 Jun 2019 15:12:40 +0800 Subject: [PATCH 155/283] revise SeataATShardingTransactionManagerTest#assertBegin(); --- .../base/seata/at/SeataATShardingTransactionManagerTest.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/test/java/org/apache/shardingsphere/transaction/base/seata/at/SeataATShardingTransactionManagerTest.java b/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/test/java/org/apache/shardingsphere/transaction/base/seata/at/SeataATShardingTransactionManagerTest.java index 6963d17ca95af..030fbc1f332a9 100644 --- a/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/test/java/org/apache/shardingsphere/transaction/base/seata/at/SeataATShardingTransactionManagerTest.java +++ b/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/test/java/org/apache/shardingsphere/transaction/base/seata/at/SeataATShardingTransactionManagerTest.java @@ -30,6 +30,7 @@ import lombok.SneakyThrows; import org.apache.commons.dbcp2.BasicDataSource; import org.apache.shardingsphere.core.database.DatabaseTypes; +import org.apache.shardingsphere.core.execute.ShardingExecuteDataMap; import org.apache.shardingsphere.transaction.core.ResourceDataSource; import org.apache.shardingsphere.transaction.core.TransactionType; import org.junit.After; @@ -96,6 +97,7 @@ public void setUp() { @After public void tearDown() { + ShardingExecuteDataMap.getDataMap().clear(); RootContext.unbind(); SeataTransactionHolder.clear(); seataATShardingTransactionManager.close(); @@ -132,6 +134,7 @@ public void assertGetConnection() { @Test public void assertBegin() { seataATShardingTransactionManager.begin(); + assertTrue(ShardingExecuteDataMap.getDataMap().containsKey("SEATA_TX_XID")); assertTrue(seataATShardingTransactionManager.isInTransaction()); assertResult(); } From c63a2be3c3d5e95e08c6be6f63a65a415d90d1d9 Mon Sep 17 00:00:00 2001 From: cherrylzhao Date: Fri, 14 Jun 2019 11:54:22 +0800 Subject: [PATCH 156/283] release broadcast resource after transaction complete. --- .../base/seata/at/SeataATShardingTransactionManager.java | 2 ++ .../base/seata/at/SeataTransactionBroadcaster.java | 6 +++++- .../transaction/base/seata/at/MockMessageHandler.java | 2 +- .../transaction/base/seata/at/MockSeataServer.java | 2 +- .../src/test/resources/file.conf | 2 +- 5 files changed, 10 insertions(+), 4 deletions(-) diff --git a/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/main/java/org/apache/shardingsphere/transaction/base/seata/at/SeataATShardingTransactionManager.java b/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/main/java/org/apache/shardingsphere/transaction/base/seata/at/SeataATShardingTransactionManager.java index b90f94bcfdacb..6839f3df60503 100644 --- a/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/main/java/org/apache/shardingsphere/transaction/base/seata/at/SeataATShardingTransactionManager.java +++ b/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/main/java/org/apache/shardingsphere/transaction/base/seata/at/SeataATShardingTransactionManager.java @@ -87,6 +87,7 @@ public void commit() { try { SeataTransactionHolder.get().commit(); } finally { + SeataTransactionBroadcaster.clear(); SeataTransactionHolder.clear(); } } @@ -97,6 +98,7 @@ public void rollback() { try { SeataTransactionHolder.get().rollback(); } finally { + SeataTransactionBroadcaster.clear(); SeataTransactionHolder.clear(); } } diff --git a/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/main/java/org/apache/shardingsphere/transaction/base/seata/at/SeataTransactionBroadcaster.java b/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/main/java/org/apache/shardingsphere/transaction/base/seata/at/SeataTransactionBroadcaster.java index 4a525b8ffa0c3..d676999fba690 100644 --- a/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/main/java/org/apache/shardingsphere/transaction/base/seata/at/SeataTransactionBroadcaster.java +++ b/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/main/java/org/apache/shardingsphere/transaction/base/seata/at/SeataTransactionBroadcaster.java @@ -38,8 +38,12 @@ static void collectGlobalTxId() { } static void broadcastIfNecessary(final Map shardingExecuteDataMap) { - if (shardingExecuteDataMap.containsKey(SEATA_TX_XID)) { + if (shardingExecuteDataMap.containsKey(SEATA_TX_XID) && !RootContext.inGlobalTransaction()) { RootContext.bind((String) shardingExecuteDataMap.get(SEATA_TX_XID)); } } + + static void clear() { + ShardingExecuteDataMap.getDataMap().remove(SEATA_TX_XID); + } } diff --git a/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/test/java/org/apache/shardingsphere/transaction/base/seata/at/MockMessageHandler.java b/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/test/java/org/apache/shardingsphere/transaction/base/seata/at/MockMessageHandler.java index 355fb236ab70a..c6844e0c23c42 100644 --- a/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/test/java/org/apache/shardingsphere/transaction/base/seata/at/MockMessageHandler.java +++ b/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/test/java/org/apache/shardingsphere/transaction/base/seata/at/MockMessageHandler.java @@ -73,7 +73,7 @@ public final class MockMessageHandler extends ChannelDuplexHandler { static { XID.setIpAddress("127.0.0.1"); - XID.setPort(8091); + XID.setPort(8891); } @Override diff --git a/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/test/java/org/apache/shardingsphere/transaction/base/seata/at/MockSeataServer.java b/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/test/java/org/apache/shardingsphere/transaction/base/seata/at/MockSeataServer.java index 4635c9c418f1b..5542746faff91 100644 --- a/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/test/java/org/apache/shardingsphere/transaction/base/seata/at/MockSeataServer.java +++ b/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/test/java/org/apache/shardingsphere/transaction/base/seata/at/MockSeataServer.java @@ -59,7 +59,7 @@ public MockSeataServer() { this.bootstrap = new ServerBootstrap(); this.bossGroup = new NioEventLoopGroup(1); this.workerGroup = new NioEventLoopGroup(); - port = 8091; + port = 8891; } /** diff --git a/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/test/resources/file.conf b/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/test/resources/file.conf index 023ec51830753..ce6f99968aa66 100644 --- a/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/test/resources/file.conf +++ b/sharding-transaction/sharding-transaction-base/sharding-transaction-base-seata-at/src/test/resources/file.conf @@ -41,7 +41,7 @@ service { #vgroup->rgroup vgroup_mapping.my_test_tx_group = "default" #only support single node - default.grouplist = "127.0.0.1:8091" + default.grouplist = "127.0.0.1:8891" #degrade current not support enableDegrade = false #disable From d15f06ca9f7111b8d75d76a07df8985bf6da2433 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Fri, 14 Jun 2019 11:59:43 +0800 Subject: [PATCH 157/283] for #2553, reuse getColumnNames with reviseInsertStatement --- .../insert/ShardingInsertValuesFiller.java | 23 ++++++------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingInsertValuesFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingInsertValuesFiller.java index e6a82cca9242f..055df3be258e4 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingInsertValuesFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingInsertValuesFiller.java @@ -51,27 +51,28 @@ public final class ShardingInsertValuesFiller implements SQLSegmentFiller columnNames = getColumnNames(sqlSegment, insertStatement); + Collection columnNames = getColumnNames(sqlSegment, insertStatement); + insertStatement.getColumnNames().clear(); + insertStatement.getColumnNames().addAll(columnNames); + Iterator columnNamesIterator = columnNames.iterator(); for (ExpressionSegment each : sqlSegment.getValues()) { if (each instanceof SimpleExpressionSegment) { - fillShardingCondition(andCondition, insertStatement.getTables().getSingleTableName(), columnNames.next(), (SimpleExpressionSegment) each); + fillShardingCondition(andCondition, insertStatement.getTables().getSingleTableName(), columnNamesIterator.next(), (SimpleExpressionSegment) each); } } insertStatement.getShardingConditions().getOrConditions().add(andCondition); InsertValue insertValue = new InsertValue(sqlSegment.getValues()); insertStatement.getValues().add(insertValue); insertStatement.addParametersCount(insertValue.getParametersCount()); - reviseInsertStatement(insertStatement, sqlSegment); } - private Iterator getColumnNames(final InsertValuesSegment sqlSegment, final InsertStatement insertStatement) { + private Collection getColumnNames(final InsertValuesSegment sqlSegment, final InsertStatement insertStatement) { Collection result = new ArrayList<>(insertStatement.getColumnNames()); - result.removeAll(shardingRule.getEncryptRule().getEncryptorEngine().getAssistedQueryColumns(insertStatement.getTables().getSingleTableName())); Optional generateKeyColumnName = shardingRule.findGenerateKeyColumnName(insertStatement.getTables().getSingleTableName()); if (insertStatement.getColumnNames().size() != sqlSegment.getValues().size() && generateKeyColumnName.isPresent()) { result.remove(generateKeyColumnName.get()); } - return result.iterator(); + return result; } private void fillShardingCondition(final AndCondition andCondition, final String tableName, final String columnName, final SimpleExpressionSegment expressionSegment) { @@ -79,14 +80,4 @@ private void fillShardingCondition(final AndCondition andCondition, final String andCondition.getConditions().add(new Condition(new Column(columnName, tableName), null, expressionSegment)); } } - - private void reviseInsertStatement(final InsertStatement insertStatement, final InsertValuesSegment sqlSegment) { - Collection insertColumns = new ArrayList<>(insertStatement.getColumnNames()); - Optional generateKeyColumnName = shardingRule.findGenerateKeyColumnName(insertStatement.getTables().getSingleTableName()); - if (insertStatement.getColumnNames().size() != sqlSegment.getValues().size() && generateKeyColumnName.isPresent()) { - insertColumns.remove(generateKeyColumnName.get()); - } - insertStatement.getColumnNames().clear(); - insertStatement.getColumnNames().addAll(insertColumns); - } } From 656a8f3677442ca0f3f72e7fb80dd6fedb751f0a Mon Sep 17 00:00:00 2001 From: terrymanu Date: Fri, 14 Jun 2019 12:11:24 +0800 Subject: [PATCH 158/283] for #2553, Move metadata to process for assist query columns from insert column to insert value for encrypt --- .../insert/EncryptInsertColumnsFiller.java | 37 ++----------------- .../dml/insert/EncryptInsertValuesFiller.java | 30 ++++++++++++++- 2 files changed, 33 insertions(+), 34 deletions(-) diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/insert/EncryptInsertColumnsFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/insert/EncryptInsertColumnsFiller.java index 27019230bf8d1..f26c11a33dc51 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/insert/EncryptInsertColumnsFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/insert/EncryptInsertColumnsFiller.java @@ -17,56 +17,27 @@ package org.apache.shardingsphere.core.parse.filler.encrypt.dml.insert; -import lombok.Setter; -import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; -import org.apache.shardingsphere.core.parse.filler.api.EncryptRuleAwareFiller; import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; -import org.apache.shardingsphere.core.parse.filler.api.ShardingTableMetaDataAwareFiller; import org.apache.shardingsphere.core.parse.sql.segment.dml.column.ColumnSegment; import org.apache.shardingsphere.core.parse.sql.segment.dml.column.InsertColumnsSegment; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.InsertStatement; -import org.apache.shardingsphere.core.rule.EncryptRule; - -import java.util.Collection; /** - * Insert columns filler. + * Insert columns filler for encrypt. * * @author zhangliang * @author panjuan */ -@Setter -public final class EncryptInsertColumnsFiller implements SQLSegmentFiller, EncryptRuleAwareFiller, ShardingTableMetaDataAwareFiller { - - private EncryptRule encryptRule; - - private ShardingTableMetaData shardingTableMetaData; +public final class EncryptInsertColumnsFiller implements SQLSegmentFiller { @Override public void fill(final InsertColumnsSegment sqlSegment, final SQLStatement sqlStatement) { if (sqlStatement instanceof InsertStatement) { InsertStatement insertStatement = (InsertStatement) sqlStatement; - if (sqlSegment.getColumns().isEmpty()) { - fillFromMetaData(insertStatement); - } else { - fillFromSQL(sqlSegment, insertStatement); - } - } - } - - private void fillFromMetaData(final InsertStatement insertStatement) { - Collection assistedQueryColumns = encryptRule.getEncryptorEngine().getAssistedQueryColumns(insertStatement.getTables().getSingleTableName()); - for (String each : shardingTableMetaData.getAllColumnNames(insertStatement.getTables().getSingleTableName())) { - if (!assistedQueryColumns.contains(each)) { - insertStatement.getColumnNames().add(each); + for (ColumnSegment each : sqlSegment.getColumns()) { + insertStatement.getColumnNames().add(each.getName()); } } } - - private void fillFromSQL(final InsertColumnsSegment sqlSegment, final InsertStatement insertStatement) { - for (ColumnSegment each : sqlSegment.getColumns()) { - insertStatement.getColumnNames().add(each.getName()); - } - } } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/insert/EncryptInsertValuesFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/insert/EncryptInsertValuesFiller.java index 5e794170da292..06cad748042d8 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/insert/EncryptInsertValuesFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/insert/EncryptInsertValuesFiller.java @@ -17,11 +17,18 @@ package org.apache.shardingsphere.core.parse.filler.encrypt.dml.insert; +import lombok.Setter; +import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; +import org.apache.shardingsphere.core.parse.filler.api.EncryptRuleAwareFiller; import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; +import org.apache.shardingsphere.core.parse.filler.api.ShardingTableMetaDataAwareFiller; import org.apache.shardingsphere.core.parse.sql.context.insertvalue.InsertValue; import org.apache.shardingsphere.core.parse.sql.segment.dml.InsertValuesSegment; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.InsertStatement; +import org.apache.shardingsphere.core.rule.EncryptRule; + +import java.util.Collection; /** * Insert values filler for encrypt. @@ -29,10 +36,31 @@ * @author zhangliang * @author panjuan */ -public final class EncryptInsertValuesFiller implements SQLSegmentFiller { +@Setter +public final class EncryptInsertValuesFiller implements SQLSegmentFiller, EncryptRuleAwareFiller, ShardingTableMetaDataAwareFiller { + + private EncryptRule encryptRule; + + private ShardingTableMetaData shardingTableMetaData; @Override public void fill(final InsertValuesSegment sqlSegment, final SQLStatement sqlStatement) { + if (((InsertStatement) sqlStatement).getColumnNames().isEmpty()) { + fillColumnNamesFromMetaData((InsertStatement) sqlStatement); + } + fillValues(sqlSegment, sqlStatement); + } + + private void fillColumnNamesFromMetaData(final InsertStatement insertStatement) { + Collection assistedQueryColumns = encryptRule.getEncryptorEngine().getAssistedQueryColumns(insertStatement.getTables().getSingleTableName()); + for (String each : shardingTableMetaData.getAllColumnNames(insertStatement.getTables().getSingleTableName())) { + if (!assistedQueryColumns.contains(each)) { + insertStatement.getColumnNames().add(each); + } + } + } + + private void fillValues(final InsertValuesSegment sqlSegment, final SQLStatement sqlStatement) { InsertValue insertValue = new InsertValue(sqlSegment.getValues()); ((InsertStatement) sqlStatement).getValues().add(insertValue); sqlStatement.addParametersCount(insertValue.getParametersCount()); From a67cb147a845eb23a75b7a76517f683d05b71592 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Fri, 14 Jun 2019 12:41:34 +0800 Subject: [PATCH 159/283] for #2553, Move metadata to process for assist query columns from insert column to insert value for sharding --- .../dml/insert/EncryptInsertValuesFiller.java | 4 +- .../insert/ShardingInsertColumnsFiller.java | 35 +----------- .../insert/ShardingInsertValuesFiller.java | 57 +++++++++++++------ 3 files changed, 45 insertions(+), 51 deletions(-) diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/insert/EncryptInsertValuesFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/insert/EncryptInsertValuesFiller.java index 06cad748042d8..21628fa452edb 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/insert/EncryptInsertValuesFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/insert/EncryptInsertValuesFiller.java @@ -46,12 +46,12 @@ public final class EncryptInsertValuesFiller implements SQLSegmentFiller assistedQueryColumns = encryptRule.getEncryptorEngine().getAssistedQueryColumns(insertStatement.getTables().getSingleTableName()); for (String each : shardingTableMetaData.getAllColumnNames(insertStatement.getTables().getSingleTableName())) { if (!assistedQueryColumns.contains(each)) { diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingInsertColumnsFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingInsertColumnsFiller.java index 14c02d52a5f38..d92a8e4f237dd 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingInsertColumnsFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingInsertColumnsFiller.java @@ -17,18 +17,11 @@ package org.apache.shardingsphere.core.parse.filler.sharding.dml.insert; -import lombok.Setter; -import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; -import org.apache.shardingsphere.core.parse.filler.api.ShardingRuleAwareFiller; -import org.apache.shardingsphere.core.parse.filler.api.ShardingTableMetaDataAwareFiller; import org.apache.shardingsphere.core.parse.sql.segment.dml.column.ColumnSegment; import org.apache.shardingsphere.core.parse.sql.segment.dml.column.InsertColumnsSegment; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.InsertStatement; -import org.apache.shardingsphere.core.rule.ShardingRule; - -import java.util.Collection; /** * Insert columns filler. @@ -36,37 +29,15 @@ * @author zhangliang * @author panjuan */ -@Setter -public final class ShardingInsertColumnsFiller implements SQLSegmentFiller, ShardingRuleAwareFiller, ShardingTableMetaDataAwareFiller { - - private ShardingRule shardingRule; - - private ShardingTableMetaData shardingTableMetaData; +public final class ShardingInsertColumnsFiller implements SQLSegmentFiller { @Override public void fill(final InsertColumnsSegment sqlSegment, final SQLStatement sqlStatement) { if (sqlStatement instanceof InsertStatement) { InsertStatement insertStatement = (InsertStatement) sqlStatement; - if (sqlSegment.getColumns().isEmpty()) { - fillFromMetaData(insertStatement); - } else { - fillFromSQL(sqlSegment, insertStatement); - } - } - } - - private void fillFromMetaData(final InsertStatement insertStatement) { - Collection assistedQueryColumns = shardingRule.getEncryptRule().getEncryptorEngine().getAssistedQueryColumns(insertStatement.getTables().getSingleTableName()); - for (String each : shardingTableMetaData.getAllColumnNames(insertStatement.getTables().getSingleTableName())) { - if (!assistedQueryColumns.contains(each)) { - insertStatement.getColumnNames().add(each); + for (ColumnSegment each : sqlSegment.getColumns()) { + insertStatement.getColumnNames().add(each.getName()); } } } - - private void fillFromSQL(final InsertColumnsSegment sqlSegment, final InsertStatement insertStatement) { - for (ColumnSegment each : sqlSegment.getColumns()) { - insertStatement.getColumnNames().add(each.getName()); - } - } } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingInsertValuesFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingInsertValuesFiller.java index 055df3be258e4..629db4ec3d723 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingInsertValuesFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingInsertValuesFiller.java @@ -19,8 +19,10 @@ import com.google.common.base.Optional; import lombok.Setter; +import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; import org.apache.shardingsphere.core.parse.filler.api.ShardingRuleAwareFiller; +import org.apache.shardingsphere.core.parse.filler.api.ShardingTableMetaDataAwareFiller; import org.apache.shardingsphere.core.parse.sql.context.condition.AndCondition; import org.apache.shardingsphere.core.parse.sql.context.condition.Column; import org.apache.shardingsphere.core.parse.sql.context.condition.Condition; @@ -32,7 +34,6 @@ import org.apache.shardingsphere.core.parse.sql.statement.dml.InsertStatement; import org.apache.shardingsphere.core.rule.ShardingRule; -import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; @@ -43,36 +44,58 @@ * @author panjuan */ @Setter -public final class ShardingInsertValuesFiller implements SQLSegmentFiller, ShardingRuleAwareFiller { +public final class ShardingInsertValuesFiller implements SQLSegmentFiller, ShardingRuleAwareFiller, ShardingTableMetaDataAwareFiller { private ShardingRule shardingRule; + private ShardingTableMetaData shardingTableMetaData; + @Override public void fill(final InsertValuesSegment sqlSegment, final SQLStatement sqlStatement) { InsertStatement insertStatement = (InsertStatement) sqlStatement; - AndCondition andCondition = new AndCondition(); - Collection columnNames = getColumnNames(sqlSegment, insertStatement); - insertStatement.getColumnNames().clear(); - insertStatement.getColumnNames().addAll(columnNames); - Iterator columnNamesIterator = columnNames.iterator(); - for (ExpressionSegment each : sqlSegment.getValues()) { - if (each instanceof SimpleExpressionSegment) { - fillShardingCondition(andCondition, insertStatement.getTables().getSingleTableName(), columnNamesIterator.next(), (SimpleExpressionSegment) each); + fillColumns(sqlSegment, insertStatement); + fillValues(sqlSegment, insertStatement); + fillCondition(sqlSegment, insertStatement); + } + + private void fillColumns(final InsertValuesSegment sqlSegment, final InsertStatement insertStatement) { + if (insertStatement.getColumnNames().isEmpty()) { + fillColumnsFromMetaData(insertStatement); + } + reviseColumnNamesForGenerateKeyColumn(sqlSegment, insertStatement); + } + + private void fillColumnsFromMetaData(final InsertStatement insertStatement) { + Collection assistedQueryColumns = shardingRule.getEncryptRule().getEncryptorEngine().getAssistedQueryColumns(insertStatement.getTables().getSingleTableName()); + for (String each : shardingTableMetaData.getAllColumnNames(insertStatement.getTables().getSingleTableName())) { + if (!assistedQueryColumns.contains(each)) { + insertStatement.getColumnNames().add(each); } } - insertStatement.getShardingConditions().getOrConditions().add(andCondition); + } + + private void reviseColumnNamesForGenerateKeyColumn(final InsertValuesSegment sqlSegment, final InsertStatement insertStatement) { + Optional generateKeyColumnName = shardingRule.findGenerateKeyColumnName(insertStatement.getTables().getSingleTableName()); + if (generateKeyColumnName.isPresent() && insertStatement.getColumnNames().size() != sqlSegment.getValues().size()) { + insertStatement.getColumnNames().remove(generateKeyColumnName.get()); + } + } + + private void fillValues(final InsertValuesSegment sqlSegment, final InsertStatement insertStatement) { InsertValue insertValue = new InsertValue(sqlSegment.getValues()); insertStatement.getValues().add(insertValue); insertStatement.addParametersCount(insertValue.getParametersCount()); } - private Collection getColumnNames(final InsertValuesSegment sqlSegment, final InsertStatement insertStatement) { - Collection result = new ArrayList<>(insertStatement.getColumnNames()); - Optional generateKeyColumnName = shardingRule.findGenerateKeyColumnName(insertStatement.getTables().getSingleTableName()); - if (insertStatement.getColumnNames().size() != sqlSegment.getValues().size() && generateKeyColumnName.isPresent()) { - result.remove(generateKeyColumnName.get()); + private void fillCondition(final InsertValuesSegment sqlSegment, final InsertStatement insertStatement) { + AndCondition andCondition = new AndCondition(); + Iterator columnNames = insertStatement.getColumnNames().iterator(); + for (ExpressionSegment each : sqlSegment.getValues()) { + if (each instanceof SimpleExpressionSegment) { + fillShardingCondition(andCondition, insertStatement.getTables().getSingleTableName(), columnNames.next(), (SimpleExpressionSegment) each); + } } - return result; + insertStatement.getShardingConditions().getOrConditions().add(andCondition); } private void fillShardingCondition(final AndCondition andCondition, final String tableName, final String columnName, final SimpleExpressionSegment expressionSegment) { From bde7e75ec3d6979542c1245ea2d30c1bfb7fd520 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Fri, 14 Jun 2019 13:15:22 +0800 Subject: [PATCH 160/283] for #2553, Merge ShardingInsertColumnsFiller and EncryptInsertColumnsFiller to InsertColumnsFiller --- .../dml/InsertColumnsFiller.java} | 4 +- .../insert/EncryptInsertColumnsFiller.java | 43 ------------------- .../filler-rule-definition.xml | 2 + .../sharding/filler-rule-definition.xml | 1 - .../encrypt/mysql/filler-rule-definition.xml | 1 - .../encrypt/oracle/filler-rule-definition.xml | 1 - .../postgresql/filler-rule-definition.xml | 1 - .../sqlserver/filler-rule-definition.xml | 1 - 8 files changed, 4 insertions(+), 50 deletions(-) rename sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/{sharding/dml/insert/ShardingInsertColumnsFiller.java => common/dml/InsertColumnsFiller.java} (90%) delete mode 100644 sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/insert/EncryptInsertColumnsFiller.java diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingInsertColumnsFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/dml/InsertColumnsFiller.java similarity index 90% rename from sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingInsertColumnsFiller.java rename to sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/dml/InsertColumnsFiller.java index d92a8e4f237dd..f1ee768f1ff3b 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingInsertColumnsFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/dml/InsertColumnsFiller.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.shardingsphere.core.parse.filler.sharding.dml.insert; +package org.apache.shardingsphere.core.parse.filler.common.dml; import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; import org.apache.shardingsphere.core.parse.sql.segment.dml.column.ColumnSegment; @@ -29,7 +29,7 @@ * @author zhangliang * @author panjuan */ -public final class ShardingInsertColumnsFiller implements SQLSegmentFiller { +public final class InsertColumnsFiller implements SQLSegmentFiller { @Override public void fill(final InsertColumnsSegment sqlSegment, final SQLStatement sqlStatement) { diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/insert/EncryptInsertColumnsFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/insert/EncryptInsertColumnsFiller.java deleted file mode 100644 index f26c11a33dc51..0000000000000 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/insert/EncryptInsertColumnsFiller.java +++ /dev/null @@ -1,43 +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.core.parse.filler.encrypt.dml.insert; - -import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; -import org.apache.shardingsphere.core.parse.sql.segment.dml.column.ColumnSegment; -import org.apache.shardingsphere.core.parse.sql.segment.dml.column.InsertColumnsSegment; -import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; -import org.apache.shardingsphere.core.parse.sql.statement.dml.InsertStatement; - -/** - * Insert columns filler for encrypt. - * - * @author zhangliang - * @author panjuan - */ -public final class EncryptInsertColumnsFiller implements SQLSegmentFiller { - - @Override - public void fill(final InsertColumnsSegment sqlSegment, final SQLStatement sqlStatement) { - if (sqlStatement instanceof InsertStatement) { - InsertStatement insertStatement = (InsertStatement) sqlStatement; - for (ColumnSegment each : sqlSegment.getColumns()) { - insertStatement.getColumnNames().add(each.getName()); - } - } - } -} diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/resources/META-INF/parsing-rule-definition/filler-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/resources/META-INF/parsing-rule-definition/filler-rule-definition.xml index fe46ab02c1832..48ded9697a583 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/resources/META-INF/parsing-rule-definition/filler-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/resources/META-INF/parsing-rule-definition/filler-rule-definition.xml @@ -30,6 +30,8 @@ + + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/resources/META-INF/parsing-rule-definition/sharding/filler-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/resources/META-INF/parsing-rule-definition/sharding/filler-rule-definition.xml index e113a7fc871e7..19db8e4d04556 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/resources/META-INF/parsing-rule-definition/sharding/filler-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/resources/META-INF/parsing-rule-definition/sharding/filler-rule-definition.xml @@ -18,7 +18,6 @@ - diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/encrypt/mysql/filler-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/encrypt/mysql/filler-rule-definition.xml index 483342dd58d18..6ecaee086e053 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/encrypt/mysql/filler-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/encrypt/mysql/filler-rule-definition.xml @@ -19,7 +19,6 @@ - diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/encrypt/oracle/filler-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/encrypt/oracle/filler-rule-definition.xml index 483342dd58d18..6ecaee086e053 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/encrypt/oracle/filler-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/encrypt/oracle/filler-rule-definition.xml @@ -19,7 +19,6 @@ - diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/encrypt/postgresql/filler-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/encrypt/postgresql/filler-rule-definition.xml index 483342dd58d18..6ecaee086e053 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/encrypt/postgresql/filler-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/encrypt/postgresql/filler-rule-definition.xml @@ -19,7 +19,6 @@ - diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/encrypt/sqlserver/filler-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/encrypt/sqlserver/filler-rule-definition.xml index 483342dd58d18..6ecaee086e053 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/encrypt/sqlserver/filler-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/encrypt/sqlserver/filler-rule-definition.xml @@ -19,7 +19,6 @@ - From 4218367f8aaf243b404aea6f93164a260983ef95 Mon Sep 17 00:00:00 2001 From: KomachiSion <263976490@qq.com> Date: Thu, 13 Jun 2019 11:00:09 +0800 Subject: [PATCH 161/283] Synchronize properties for OrchestrationEncryptDataSource --- .../internal/datasource/OrchestrationEncryptDataSource.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/sharding-jdbc/sharding-jdbc-orchestration/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/internal/datasource/OrchestrationEncryptDataSource.java b/sharding-jdbc/sharding-jdbc-orchestration/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/internal/datasource/OrchestrationEncryptDataSource.java index 9f79e4cee10df..98cab1bd56ed5 100644 --- a/sharding-jdbc/sharding-jdbc-orchestration/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/internal/datasource/OrchestrationEncryptDataSource.java +++ b/sharding-jdbc/sharding-jdbc-orchestration/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/internal/datasource/OrchestrationEncryptDataSource.java @@ -40,8 +40,6 @@ import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; -import java.util.Properties; - /** * Orchestration encrypt datasource. @@ -71,7 +69,7 @@ public OrchestrationEncryptDataSource(final EncryptDataSource dataSource, final this.dataSource = new EncryptDataSource(dataSource.getDataSource(), dataSource.getEncryptRule().getEncryptRuleConfig(), dataSource.getShardingProperties().getProps()); initShardingOrchestrationFacade( Collections.singletonMap(ShardingConstant.LOGIC_SCHEMA_NAME, DataSourceConverter.getDataSourceConfigurationMap(Collections.singletonMap(ENCRYPT_DATASOURCE, dataSource.getDataSource()))), - getRuleConfigurationMap(), new Properties()); + getRuleConfigurationMap(), dataSource.getShardingProperties().getProps()); } private void checkDataSourceConfiguration(final Map dataSourceConfigurations) { From 174b2749acd3b8fc7e4237377511db3664d63f2f Mon Sep 17 00:00:00 2001 From: KomachiSion <263976490@qq.com> Date: Thu, 13 Jun 2019 17:38:53 +0800 Subject: [PATCH 162/283] Move unit test to correct package --- .../spring/boot/registry/TestRegistryCenter.java | 2 +- .../boot/type/OrchestrationSpringBootMasterSlaveTest.java | 4 ++-- .../spring/boot/type/OrchestrationSpringBootShardingTest.java | 4 ++-- .../spring/boot/type/SpringBootRawDataSourceTest.java | 2 +- .../spring/boot/util/DataSourceUtilTest.java | 2 +- .../spring/boot/util/EmbedTestingServer.java | 2 +- ...apache.shardingsphere.orchestration.reg.api.RegistryCenter | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) rename sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/{ => orchestration}/spring/boot/registry/TestRegistryCenter.java (96%) rename sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/{ => orchestration}/spring/boot/type/OrchestrationSpringBootMasterSlaveTest.java (93%) rename sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/{ => orchestration}/spring/boot/type/OrchestrationSpringBootShardingTest.java (98%) rename sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/{ => orchestration}/spring/boot/type/SpringBootRawDataSourceTest.java (95%) rename sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/{ => orchestration}/spring/boot/util/DataSourceUtilTest.java (98%) rename sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/{ => orchestration}/spring/boot/util/EmbedTestingServer.java (96%) diff --git a/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/spring/boot/registry/TestRegistryCenter.java b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/boot/registry/TestRegistryCenter.java similarity index 96% rename from sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/spring/boot/registry/TestRegistryCenter.java rename to sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/boot/registry/TestRegistryCenter.java index 6e68ba8aead84..fe5410a5dd51a 100644 --- a/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/spring/boot/registry/TestRegistryCenter.java +++ b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/boot/registry/TestRegistryCenter.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.shardingsphere.shardingjdbc.spring.boot.registry; +package org.apache.shardingsphere.shardingjdbc.orchestration.spring.boot.registry; import lombok.Getter; import lombok.Setter; diff --git a/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/spring/boot/type/OrchestrationSpringBootMasterSlaveTest.java b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/boot/type/OrchestrationSpringBootMasterSlaveTest.java similarity index 93% rename from sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/spring/boot/type/OrchestrationSpringBootMasterSlaveTest.java rename to sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/boot/type/OrchestrationSpringBootMasterSlaveTest.java index a025a34663d42..df4d5a5c72997 100644 --- a/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/spring/boot/type/OrchestrationSpringBootMasterSlaveTest.java +++ b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/boot/type/OrchestrationSpringBootMasterSlaveTest.java @@ -15,9 +15,9 @@ * limitations under the License. */ -package org.apache.shardingsphere.shardingjdbc.spring.boot.type; +package org.apache.shardingsphere.shardingjdbc.orchestration.spring.boot.type; -import org.apache.shardingsphere.shardingjdbc.spring.boot.util.EmbedTestingServer; +import org.apache.shardingsphere.shardingjdbc.orchestration.spring.boot.util.EmbedTestingServer; import lombok.SneakyThrows; import org.apache.commons.dbcp2.BasicDataSource; import org.apache.shardingsphere.shardingjdbc.jdbc.core.datasource.MasterSlaveDataSource; diff --git a/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/spring/boot/type/OrchestrationSpringBootShardingTest.java b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/boot/type/OrchestrationSpringBootShardingTest.java similarity index 98% rename from sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/spring/boot/type/OrchestrationSpringBootShardingTest.java rename to sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/boot/type/OrchestrationSpringBootShardingTest.java index e57e50524d4b5..88a30944497b7 100644 --- a/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/spring/boot/type/OrchestrationSpringBootShardingTest.java +++ b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/boot/type/OrchestrationSpringBootShardingTest.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.shardingsphere.shardingjdbc.spring.boot.type; +package org.apache.shardingsphere.shardingjdbc.orchestration.spring.boot.type; import lombok.SneakyThrows; import org.apache.commons.dbcp2.BasicDataSource; @@ -28,7 +28,7 @@ import org.apache.shardingsphere.shardingjdbc.jdbc.core.ShardingContext; import org.apache.shardingsphere.shardingjdbc.jdbc.core.datasource.ShardingDataSource; import org.apache.shardingsphere.shardingjdbc.orchestration.internal.datasource.OrchestrationShardingDataSource; -import org.apache.shardingsphere.shardingjdbc.spring.boot.util.EmbedTestingServer; +import org.apache.shardingsphere.shardingjdbc.orchestration.spring.boot.util.EmbedTestingServer; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/spring/boot/type/SpringBootRawDataSourceTest.java b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/boot/type/SpringBootRawDataSourceTest.java similarity index 95% rename from sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/spring/boot/type/SpringBootRawDataSourceTest.java rename to sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/boot/type/SpringBootRawDataSourceTest.java index b87fc141231a7..fb5a349d33048 100644 --- a/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/spring/boot/type/SpringBootRawDataSourceTest.java +++ b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/boot/type/SpringBootRawDataSourceTest.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.shardingsphere.shardingjdbc.spring.boot.type; +package org.apache.shardingsphere.shardingjdbc.orchestration.spring.boot.type; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/spring/boot/util/DataSourceUtilTest.java b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/boot/util/DataSourceUtilTest.java similarity index 98% rename from sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/spring/boot/util/DataSourceUtilTest.java rename to sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/boot/util/DataSourceUtilTest.java index 71d37fa2fb237..9090e7b213b93 100644 --- a/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/spring/boot/util/DataSourceUtilTest.java +++ b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/boot/util/DataSourceUtilTest.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.shardingsphere.shardingjdbc.spring.boot.util; +package org.apache.shardingsphere.shardingjdbc.orchestration.spring.boot.util; import com.zaxxer.hikari.HikariDataSource; import org.apache.shardingsphere.shardingjdbc.orchestration.spring.boot.util.DataSourceUtil; diff --git a/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/spring/boot/util/EmbedTestingServer.java b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/boot/util/EmbedTestingServer.java similarity index 96% rename from sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/spring/boot/util/EmbedTestingServer.java rename to sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/boot/util/EmbedTestingServer.java index deddae41d57bf..d4995504f00c2 100644 --- a/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/spring/boot/util/EmbedTestingServer.java +++ b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/boot/util/EmbedTestingServer.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.shardingsphere.shardingjdbc.spring.boot.util; +package org.apache.shardingsphere.shardingjdbc.orchestration.spring.boot.util; import lombok.AccessLevel; import lombok.NoArgsConstructor; diff --git a/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/resources/META-INF/services/org.apache.shardingsphere.orchestration.reg.api.RegistryCenter b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/resources/META-INF/services/org.apache.shardingsphere.orchestration.reg.api.RegistryCenter index a9c47980968f2..581c9067f6c1b 100644 --- a/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/resources/META-INF/services/org.apache.shardingsphere.orchestration.reg.api.RegistryCenter +++ b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/resources/META-INF/services/org.apache.shardingsphere.orchestration.reg.api.RegistryCenter @@ -15,4 +15,4 @@ # limitations under the License. # -org.apache.shardingsphere.shardingjdbc.spring.boot.registry.TestRegistryCenter +org.apache.shardingsphere.shardingjdbc.orchestration.spring.boot.registry.TestRegistryCenter From 9061c07fb327c7aa0153200b7bd57a4fd3196766 Mon Sep 17 00:00:00 2001 From: KomachiSion <263976490@qq.com> Date: Thu, 13 Jun 2019 18:27:11 +0800 Subject: [PATCH 163/283] For #2144, Add SpringBoot configuring method for orchestrationEncryptDataSource --- .../OrchestrationSpringBootConfiguration.java | 48 +++++++++++++++++-- ...ootEncryptRuleConfigurationProperties.java | 30 ++++++++++++ 2 files changed, 73 insertions(+), 5 deletions(-) create mode 100644 sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/boot/encrypt/SpringBootEncryptRuleConfigurationProperties.java diff --git a/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/boot/OrchestrationSpringBootConfiguration.java b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/boot/OrchestrationSpringBootConfiguration.java index 5d3b029fd523e..b64c09abab86a 100644 --- a/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/boot/OrchestrationSpringBootConfiguration.java +++ b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/boot/OrchestrationSpringBootConfiguration.java @@ -24,15 +24,19 @@ import org.apache.shardingsphere.core.exception.ShardingException; import org.apache.shardingsphere.core.rule.ShardingRule; import org.apache.shardingsphere.core.util.InlineExpressionParser; +import org.apache.shardingsphere.core.yaml.swapper.impl.EncryptRuleConfigurationYamlSwapper; import org.apache.shardingsphere.core.yaml.swapper.impl.MasterSlaveRuleConfigurationYamlSwapper; import org.apache.shardingsphere.core.yaml.swapper.impl.ShardingRuleConfigurationYamlSwapper; import org.apache.shardingsphere.orchestration.internal.registry.ShardingOrchestrationFacade; import org.apache.shardingsphere.orchestration.yaml.swapper.OrchestrationConfigurationYamlSwapper; +import org.apache.shardingsphere.shardingjdbc.jdbc.core.datasource.EncryptDataSource; import org.apache.shardingsphere.shardingjdbc.jdbc.core.datasource.MasterSlaveDataSource; import org.apache.shardingsphere.shardingjdbc.jdbc.core.datasource.ShardingDataSource; +import org.apache.shardingsphere.shardingjdbc.orchestration.internal.datasource.OrchestrationEncryptDataSource; import org.apache.shardingsphere.shardingjdbc.orchestration.internal.datasource.OrchestrationMasterSlaveDataSource; import org.apache.shardingsphere.shardingjdbc.orchestration.internal.datasource.OrchestrationShardingDataSource; import org.apache.shardingsphere.shardingjdbc.orchestration.spring.boot.common.SpringBootPropertiesConfigurationProperties; +import org.apache.shardingsphere.shardingjdbc.orchestration.spring.boot.encrypt.SpringBootEncryptRuleConfigurationProperties; import org.apache.shardingsphere.shardingjdbc.orchestration.spring.boot.masterslave.SpringBootMasterSlaveRuleConfigurationProperties; import org.apache.shardingsphere.shardingjdbc.orchestration.spring.boot.orchestration.SpringBootOrchestrationConfigurationProperties; import org.apache.shardingsphere.shardingjdbc.orchestration.spring.boot.sharding.SpringBootShardingRuleConfigurationProperties; @@ -63,7 +67,8 @@ @Configuration @EnableConfigurationProperties({ SpringBootShardingRuleConfigurationProperties.class, SpringBootMasterSlaveRuleConfigurationProperties.class, - SpringBootPropertiesConfigurationProperties.class, SpringBootOrchestrationConfigurationProperties.class}) + SpringBootPropertiesConfigurationProperties.class, SpringBootOrchestrationConfigurationProperties.class, + SpringBootEncryptRuleConfigurationProperties.class}) @ConditionalOnProperty(prefix = "spring.shardingsphere", name = "enabled", havingValue = "true", matchIfMissing = true) @RequiredArgsConstructor public class OrchestrationSpringBootConfiguration implements EnvironmentAware { @@ -74,6 +79,8 @@ public class OrchestrationSpringBootConfiguration implements EnvironmentAware { private final SpringBootMasterSlaveRuleConfigurationProperties masterSlaveProperties; + private final SpringBootEncryptRuleConfigurationProperties encryptProperties; + private final SpringBootPropertiesConfigurationProperties propProperties; private final SpringBootOrchestrationConfigurationProperties orchestrationProperties; @@ -82,6 +89,8 @@ public class OrchestrationSpringBootConfiguration implements EnvironmentAware { private final MasterSlaveRuleConfigurationYamlSwapper masterSlaveSwapper = new MasterSlaveRuleConfigurationYamlSwapper(); + private final EncryptRuleConfigurationYamlSwapper encryptSwapper = new EncryptRuleConfigurationYamlSwapper(); + private final OrchestrationConfigurationYamlSwapper orchestrationSwapper = new OrchestrationConfigurationYamlSwapper(); /** @@ -93,7 +102,7 @@ public class OrchestrationSpringBootConfiguration implements EnvironmentAware { @Bean public DataSource dataSource() throws SQLException { Preconditions.checkState(isValidConfiguration(), "The orchestration configuration is invalid, please choose one from Sharding rule and Master-slave rule."); - return isShardingRule() ? createShardingDataSource() : createMasterSlaveDataSource(); + return isShardingRule() ? createShardingDataSource() : isEncryptRule() ? createEncryptDataSource() : createMasterSlaveDataSource(); } private boolean isValidConfiguration() { @@ -101,8 +110,11 @@ private boolean isValidConfiguration() { } private boolean isValidRuleConfiguration() { - return (shardingProperties.getTables().isEmpty() && !Strings.isNullOrEmpty(masterSlaveProperties.getMasterDataSourceName())) - || (!shardingProperties.getTables().isEmpty() && Strings.isNullOrEmpty(masterSlaveProperties.getMasterDataSourceName())); + int validConfigCount = 0; + validConfigCount += shardingProperties.getTables().isEmpty() ? 0 : 1; + validConfigCount += Strings.isNullOrEmpty(masterSlaveProperties.getMasterDataSourceName()) ? 0 : 1; + validConfigCount += encryptProperties.getEncryptors().isEmpty() ? 0 : 1; + return 1 == validConfigCount; } private boolean isValidOrchestrationConfiguration() { @@ -124,6 +136,21 @@ private boolean isShardingRuleByRegistry() { } } + private boolean isEncryptRule() { + return isValidRuleConfiguration() ? isEncryptRuleByLocal() : isEncryptRuleByRegistry(); + } + + private boolean isEncryptRuleByLocal() { + return !encryptProperties.getEncryptors().isEmpty(); + } + + private boolean isEncryptRuleByRegistry() { + try (ShardingOrchestrationFacade shardingOrchestrationFacade = new ShardingOrchestrationFacade( + orchestrationSwapper.swap(orchestrationProperties), Collections.singletonList(ShardingConstant.LOGIC_SCHEMA_NAME))) { + return shardingOrchestrationFacade.getConfigService().isEncryptRule(ShardingConstant.LOGIC_SCHEMA_NAME); + } + } + private DataSource createShardingDataSource() throws SQLException { if (shardingProperties.getTables().isEmpty()) { return new OrchestrationShardingDataSource(orchestrationSwapper.swap(orchestrationProperties)); @@ -142,6 +169,14 @@ private DataSource createMasterSlaveDataSource() throws SQLException { return new OrchestrationMasterSlaveDataSource(masterSlaveDataSource, orchestrationSwapper.swap(orchestrationProperties)); } + private DataSource createEncryptDataSource() { + if (encryptProperties.getEncryptors().isEmpty()) { + return new OrchestrationEncryptDataSource(orchestrationSwapper.swap(orchestrationProperties)); + } + EncryptDataSource encryptDataSource = new EncryptDataSource(dataSourceMap.values().iterator().next(), encryptSwapper.swap(encryptProperties), propProperties.getProps()); + return new OrchestrationEncryptDataSource(encryptDataSource, orchestrationSwapper.swap(orchestrationProperties)); + } + @Override public final void setEnvironment(final Environment environment) { String prefix = "spring.shardingsphere.datasource."; @@ -157,7 +192,10 @@ public final void setEnvironment(final Environment environment) { private List getDataSourceNames(final Environment environment, final String prefix) { StandardEnvironment standardEnv = (StandardEnvironment) environment; standardEnv.setIgnoreUnresolvableNestedPlaceholders(true); - String dataSources = standardEnv.getProperty(prefix + "names"); + String dataSources = standardEnv.getProperty(prefix + "name"); + if (StringUtils.isEmpty(dataSources)) { + dataSources = standardEnv.getProperty(prefix + "names"); + } if (StringUtils.isEmpty(dataSources)) { return Collections.emptyList(); } diff --git a/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/boot/encrypt/SpringBootEncryptRuleConfigurationProperties.java b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/boot/encrypt/SpringBootEncryptRuleConfigurationProperties.java new file mode 100644 index 0000000000000..2ae0be7432cae --- /dev/null +++ b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/boot/encrypt/SpringBootEncryptRuleConfigurationProperties.java @@ -0,0 +1,30 @@ +/* + * 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.shardingjdbc.orchestration.spring.boot.encrypt; + +import org.apache.shardingsphere.core.yaml.config.encrypt.YamlEncryptRuleConfiguration; +import org.springframework.boot.context.properties.ConfigurationProperties; + +/** + * Encrypt rule configuration properties. + * + * @author yangyi + */ +@ConfigurationProperties(prefix = "spring.shardingsphere.encrypt") +public class SpringBootEncryptRuleConfigurationProperties extends YamlEncryptRuleConfiguration { +} From 60432c2f84d664fdc3a7fe013dbe3d477f19dbbb Mon Sep 17 00:00:00 2001 From: KomachiSion <263976490@qq.com> Date: Thu, 13 Jun 2019 18:27:41 +0800 Subject: [PATCH 164/283] Add unit test for orchestrationEncryptDataSource SpringBoot configuring method --- .../OrchestrationSpringBootEncryptTest.java | 72 +++++++++++++++++++ ...rchestrationSpringBootMasterSlaveTest.java | 2 +- .../spring/boot/util/DataSourceUtilTest.java | 1 - .../resources/application-encrypt.properties | 37 ++++++++++ 4 files changed, 110 insertions(+), 2 deletions(-) create mode 100644 sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/boot/type/OrchestrationSpringBootEncryptTest.java create mode 100644 sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/resources/application-encrypt.properties diff --git a/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/boot/type/OrchestrationSpringBootEncryptTest.java b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/boot/type/OrchestrationSpringBootEncryptTest.java new file mode 100644 index 0000000000000..bcb3d9ce469d0 --- /dev/null +++ b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/boot/type/OrchestrationSpringBootEncryptTest.java @@ -0,0 +1,72 @@ +/* + * 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.shardingjdbc.orchestration.spring.boot.type; + +import lombok.SneakyThrows; + +import org.apache.commons.dbcp2.BasicDataSource; +import org.apache.shardingsphere.api.config.encryptor.EncryptRuleConfiguration; +import org.apache.shardingsphere.shardingjdbc.jdbc.core.datasource.EncryptDataSource; +import org.apache.shardingsphere.shardingjdbc.orchestration.internal.datasource.OrchestrationEncryptDataSource; +import org.apache.shardingsphere.shardingjdbc.orchestration.spring.boot.util.EmbedTestingServer; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import javax.annotation.Resource; +import javax.sql.DataSource; +import java.lang.reflect.Field; + +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringBootTest(classes = OrchestrationSpringBootEncryptTest.class) +@SpringBootApplication +@ActiveProfiles("encrypt") +public class OrchestrationSpringBootEncryptTest { + + @Resource + private DataSource dataSource; + + @BeforeClass + public static void init() { + EmbedTestingServer.start(); + } + + @Test + @SneakyThrows + public void assertWithEncryptDataSource() { + assertTrue(dataSource instanceof OrchestrationEncryptDataSource); + Field field = OrchestrationEncryptDataSource.class.getDeclaredField("dataSource"); + field.setAccessible(true); + EncryptDataSource encryptDataSource = (EncryptDataSource) field.get(dataSource); + BasicDataSource embedDataSource = (BasicDataSource) encryptDataSource.getDataSource(); + assertThat(embedDataSource.getMaxTotal(), is(100)); + assertThat(embedDataSource.getUsername(), is("sa")); + EncryptRuleConfiguration encryptRuleConfig = encryptDataSource.getEncryptRule().getEncryptRuleConfig(); + assertThat(encryptRuleConfig.getEncryptorRuleConfigs().size(), is(1)); + assertTrue(encryptRuleConfig.getEncryptorRuleConfigs().containsKey("order_encrypt")); + assertThat(encryptRuleConfig.getEncryptorRuleConfigs().get("order_encrypt").getType(), is("aes")); + } +} diff --git a/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/boot/type/OrchestrationSpringBootMasterSlaveTest.java b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/boot/type/OrchestrationSpringBootMasterSlaveTest.java index df4d5a5c72997..0fdff19351a41 100644 --- a/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/boot/type/OrchestrationSpringBootMasterSlaveTest.java +++ b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/boot/type/OrchestrationSpringBootMasterSlaveTest.java @@ -17,11 +17,11 @@ package org.apache.shardingsphere.shardingjdbc.orchestration.spring.boot.type; -import org.apache.shardingsphere.shardingjdbc.orchestration.spring.boot.util.EmbedTestingServer; import lombok.SneakyThrows; import org.apache.commons.dbcp2.BasicDataSource; import org.apache.shardingsphere.shardingjdbc.jdbc.core.datasource.MasterSlaveDataSource; import org.apache.shardingsphere.shardingjdbc.orchestration.internal.datasource.OrchestrationMasterSlaveDataSource; +import org.apache.shardingsphere.shardingjdbc.orchestration.spring.boot.util.EmbedTestingServer; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/boot/util/DataSourceUtilTest.java b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/boot/util/DataSourceUtilTest.java index 9090e7b213b93..50aace6cbd5ec 100644 --- a/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/boot/util/DataSourceUtilTest.java +++ b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/boot/util/DataSourceUtilTest.java @@ -18,7 +18,6 @@ package org.apache.shardingsphere.shardingjdbc.orchestration.spring.boot.util; import com.zaxxer.hikari.HikariDataSource; -import org.apache.shardingsphere.shardingjdbc.orchestration.spring.boot.util.DataSourceUtil; import org.apache.commons.dbcp2.BasicDataSource; import org.junit.Test; diff --git a/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/resources/application-encrypt.properties b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/resources/application-encrypt.properties new file mode 100644 index 0000000000000..c329d5951a6df --- /dev/null +++ b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/test/resources/application-encrypt.properties @@ -0,0 +1,37 @@ +# +# 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. +# + +spring.shardingsphere.datasource.name=ds + +spring.shardingsphere.datasource.ds.type=org.apache.commons.dbcp2.BasicDataSource +spring.shardingsphere.datasource.ds.driver-class-name=org.h2.Driver +spring.shardingsphere.datasource.ds.url=jdbc:h2:mem:ds;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL +spring.shardingsphere.datasource.ds.username=sa +spring.shardingsphere.datasource.ds.password= +spring.shardingsphere.datasource.ds.max-total=100 + +spring.shardingsphere.encrypt.encryptors.order_encrypt.type=aes +spring.shardingsphere.encrypt.encryptors.order_encrypt.qualifiedColumns=t_order.user_id +spring.shardingsphere.encrypt.encryptors.order_encrypt.props.aes.key.value=123456 + +spring.shardingsphere.props.sql.show=true + +spring.shardingsphere.orchestration.name=demo_spring_boot_ds_encrypt +spring.shardingsphere.orchestration.overwrite=true +spring.shardingsphere.orchestration.registry.type=TestRegistry +spring.shardingsphere.orchestration.registry.namespace=orchestration-spring-boot-master-slave-test +spring.shardingsphere.orchestration.registry.server-lists=localhost:3181 From ea51d8559059c5855b4be4bbc78f1450abfb1a3c Mon Sep 17 00:00:00 2001 From: KomachiSion <263976490@qq.com> Date: Fri, 14 Jun 2019 10:41:10 +0800 Subject: [PATCH 165/283] For #2144, Add SpringNameSpace configuring method for orchestrationEncryptDataSource --- .../OrchestrationSpringEncryptDataSource.java | 38 +++++++++++++++++++ ...ryptDataSourceBeanDefinitionParserTag.java | 33 ++++++++++++++++ .../OrchestrationNamespaceHandler.java | 2 + .../DataSourceBeanDefinitionParser.java | 16 +++++++- .../META-INF/namespace/orchestration.xsd | 8 ++++ 5 files changed, 95 insertions(+), 2 deletions(-) create mode 100644 sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/datasource/OrchestrationSpringEncryptDataSource.java create mode 100644 sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/namespace/constants/EncryptDataSourceBeanDefinitionParserTag.java diff --git a/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/datasource/OrchestrationSpringEncryptDataSource.java b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/datasource/OrchestrationSpringEncryptDataSource.java new file mode 100644 index 0000000000000..8b34992ecd2f0 --- /dev/null +++ b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/datasource/OrchestrationSpringEncryptDataSource.java @@ -0,0 +1,38 @@ +/* + * 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.shardingjdbc.orchestration.spring.datasource; + +import org.apache.shardingsphere.orchestration.config.OrchestrationConfiguration; +import org.apache.shardingsphere.shardingjdbc.jdbc.core.datasource.EncryptDataSource; +import org.apache.shardingsphere.shardingjdbc.orchestration.internal.datasource.OrchestrationEncryptDataSource; + +/** + * Orchestration encrypt datasource for spring namespace. + * + * @author yangyi + */ +public class OrchestrationSpringEncryptDataSource extends OrchestrationEncryptDataSource { + + public OrchestrationSpringEncryptDataSource(final EncryptDataSource dataSource, final OrchestrationConfiguration orchestrationConfig) { + super(dataSource, orchestrationConfig); + } + + public OrchestrationSpringEncryptDataSource(final OrchestrationConfiguration orchestrationConfig) { + super(orchestrationConfig); + } +} diff --git a/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/namespace/constants/EncryptDataSourceBeanDefinitionParserTag.java b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/namespace/constants/EncryptDataSourceBeanDefinitionParserTag.java new file mode 100644 index 0000000000000..e9c85a485fc38 --- /dev/null +++ b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/namespace/constants/EncryptDataSourceBeanDefinitionParserTag.java @@ -0,0 +1,33 @@ +/* + * 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.shardingjdbc.orchestration.spring.namespace.constants; + +import lombok.AccessLevel; +import lombok.NoArgsConstructor; + +/** + * Encrypt data source parser tag constants. + * + * @author yangyi + */ +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class EncryptDataSourceBeanDefinitionParserTag { + + public static final String ROOT_TAG = "encrypt-data-source"; + +} diff --git a/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/namespace/handler/OrchestrationNamespaceHandler.java b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/namespace/handler/OrchestrationNamespaceHandler.java index 6278b8be29d93..81c6831d19fc2 100644 --- a/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/namespace/handler/OrchestrationNamespaceHandler.java +++ b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/namespace/handler/OrchestrationNamespaceHandler.java @@ -17,6 +17,7 @@ package org.apache.shardingsphere.shardingjdbc.orchestration.spring.namespace.handler; +import org.apache.shardingsphere.shardingjdbc.orchestration.spring.namespace.constants.EncryptDataSourceBeanDefinitionParserTag; import org.apache.shardingsphere.shardingjdbc.orchestration.spring.namespace.constants.MasterSlaveDataSourceBeanDefinitionParserTag; import org.apache.shardingsphere.shardingjdbc.orchestration.spring.namespace.constants.RegistryCenterBeanDefinitionParserTag; import org.apache.shardingsphere.shardingjdbc.orchestration.spring.namespace.constants.ShardingDataSourceBeanDefinitionParserTag; @@ -36,5 +37,6 @@ public void init() { registerBeanDefinitionParser(RegistryCenterBeanDefinitionParserTag.ROOT_TAG, new RegBeanDefinitionParser()); registerBeanDefinitionParser(ShardingDataSourceBeanDefinitionParserTag.ROOT_TAG, new DataSourceBeanDefinitionParser()); registerBeanDefinitionParser(MasterSlaveDataSourceBeanDefinitionParserTag.ROOT_TAG, new DataSourceBeanDefinitionParser()); + registerBeanDefinitionParser(EncryptDataSourceBeanDefinitionParserTag.ROOT_TAG, new DataSourceBeanDefinitionParser()); } } diff --git a/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/namespace/parser/DataSourceBeanDefinitionParser.java b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/namespace/parser/DataSourceBeanDefinitionParser.java index d426627024215..b20fdf7e63cc0 100644 --- a/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/namespace/parser/DataSourceBeanDefinitionParser.java +++ b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/namespace/parser/DataSourceBeanDefinitionParser.java @@ -18,8 +18,11 @@ package org.apache.shardingsphere.shardingjdbc.orchestration.spring.namespace.parser; import com.google.common.base.Strings; + +import org.apache.shardingsphere.shardingjdbc.orchestration.spring.datasource.OrchestrationSpringEncryptDataSource; import org.apache.shardingsphere.shardingjdbc.orchestration.spring.datasource.OrchestrationSpringMasterSlaveDataSource; import org.apache.shardingsphere.shardingjdbc.orchestration.spring.datasource.OrchestrationSpringShardingDataSource; +import org.apache.shardingsphere.shardingjdbc.orchestration.spring.namespace.constants.EncryptDataSourceBeanDefinitionParserTag; import org.apache.shardingsphere.shardingjdbc.orchestration.spring.namespace.constants.ShardingDataSourceBeanDefinitionParserTag; import org.apache.shardingsphere.orchestration.config.OrchestrationConfiguration; import org.springframework.beans.factory.config.BeanDefinition; @@ -38,12 +41,21 @@ public final class DataSourceBeanDefinitionParser extends AbstractBeanDefinition @Override protected AbstractBeanDefinition parseInternal(final Element element, final ParserContext parserContext) { - BeanDefinitionBuilder factory = ShardingDataSourceBeanDefinitionParserTag.ROOT_TAG.equals(element.getLocalName()) - ? BeanDefinitionBuilder.rootBeanDefinition(OrchestrationSpringShardingDataSource.class) : BeanDefinitionBuilder.rootBeanDefinition(OrchestrationSpringMasterSlaveDataSource.class); + BeanDefinitionBuilder factory = BeanDefinitionBuilder.rootBeanDefinition(getOrchestrationDataSourceClass(element.getLocalName())); configureFactory(element, factory); return factory.getBeanDefinition(); } + private Class getOrchestrationDataSourceClass(final String localName) { + if (ShardingDataSourceBeanDefinitionParserTag.ROOT_TAG.equals(localName)) { + return OrchestrationSpringShardingDataSource.class; + } else if (EncryptDataSourceBeanDefinitionParserTag.ROOT_TAG.equals(localName)) { + return OrchestrationSpringEncryptDataSource.class; + } else { + return OrchestrationSpringMasterSlaveDataSource.class; + } + } + private void configureFactory(final Element element, final BeanDefinitionBuilder factory) { String dataSourceName = element.getAttribute(ShardingDataSourceBeanDefinitionParserTag.DATA_SOURCE_REF_TAG); if (!Strings.isNullOrEmpty(dataSourceName)) { diff --git a/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/resources/META-INF/namespace/orchestration.xsd b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/resources/META-INF/namespace/orchestration.xsd index 68de4e875178c..200080a3e1dda 100644 --- a/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/resources/META-INF/namespace/orchestration.xsd +++ b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/resources/META-INF/namespace/orchestration.xsd @@ -38,6 +38,14 @@ + + + + + + + + From 06d8766a20fe2436c2c2812523185b8e91b6567c Mon Sep 17 00:00:00 2001 From: KomachiSion <263976490@qq.com> Date: Fri, 14 Jun 2019 10:41:27 +0800 Subject: [PATCH 166/283] Add unit test for orchestrationEncryptDataSource spring namespace configuring method --- .../OrchestrationEncryptNamespaceTest.java | 87 +++++++++++++++++++ .../META-INF/rdb/encryptOrchestration.xml | 30 +++++++ .../namespace/encryptDataSourceNamespace.xml | 42 +++++++++ 3 files changed, 159 insertions(+) create mode 100644 sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/test/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/OrchestrationEncryptNamespaceTest.java create mode 100644 sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/test/resources/META-INF/rdb/encryptOrchestration.xml create mode 100644 sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/test/resources/META-INF/rdb/namespace/encryptDataSourceNamespace.xml diff --git a/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/test/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/OrchestrationEncryptNamespaceTest.java b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/test/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/OrchestrationEncryptNamespaceTest.java new file mode 100644 index 0000000000000..38d9d39bfaba2 --- /dev/null +++ b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/test/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/OrchestrationEncryptNamespaceTest.java @@ -0,0 +1,87 @@ +/* + * 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.shardingjdbc.orchestration.spring; + +import lombok.SneakyThrows; + +import org.apache.shardingsphere.api.config.encryptor.EncryptRuleConfiguration; +import org.apache.shardingsphere.api.config.encryptor.EncryptorRuleConfiguration; +import org.apache.shardingsphere.core.constant.properties.ShardingProperties; +import org.apache.shardingsphere.core.constant.properties.ShardingPropertiesConstant; +import org.apache.shardingsphere.core.rule.EncryptRule; +import org.apache.shardingsphere.shardingjdbc.jdbc.core.datasource.EncryptDataSource; +import org.apache.shardingsphere.shardingjdbc.orchestration.spring.datasource.OrchestrationSpringEncryptDataSource; +import org.apache.shardingsphere.shardingjdbc.orchestration.spring.util.EmbedTestingServer; +import org.apache.shardingsphere.shardingjdbc.orchestration.spring.util.FieldValueUtil; +import org.junit.BeforeClass; +import org.junit.Test; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests; + +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; + +@ContextConfiguration(locations = "classpath:META-INF/rdb/encryptOrchestration.xml") +public class OrchestrationEncryptNamespaceTest extends AbstractJUnit4SpringContextTests { + + @BeforeClass + public static void init() { + EmbedTestingServer.start(); + } + + @Test + public void assertEncryptDataSourceType() { + assertNotNull(applicationContext.getBean("encryptDataSourceOrchestration", OrchestrationSpringEncryptDataSource.class)); + assertEncryptRule(getEncryptRule()); + } + + @SneakyThrows + private EncryptRule getEncryptRule() { + OrchestrationSpringEncryptDataSource encryptDataSource = (OrchestrationSpringEncryptDataSource) applicationContext.getBean("encryptDataSourceOrchestration"); + EncryptDataSource dataSource = (EncryptDataSource) FieldValueUtil.getFieldValue(encryptDataSource, "dataSource", true); + return dataSource.getEncryptRule(); + } + + private void assertEncryptRule(final EncryptRule encryptRule) { + assertNotNull(encryptRule.getEncryptRuleConfig()); + EncryptRuleConfiguration ruleConfiguration = encryptRule.getEncryptRuleConfig(); + assertThat(ruleConfiguration.getEncryptorRuleConfigs().size(), is(2)); + EncryptorRuleConfiguration encryptorRule = ruleConfiguration.getEncryptorRuleConfigs().get("order_encryptor"); + assertNotNull(encryptorRule); + assertThat(encryptorRule.getType(), is("MD5")); + assertThat(encryptorRule.getQualifiedColumns(), is("t_order.order_id")); + encryptorRule = ruleConfiguration.getEncryptorRuleConfigs().get("user_encryptor"); + assertThat(encryptorRule.getType(), is("AES")); + assertThat(encryptorRule.getQualifiedColumns(), is("t_order.user_id")); + assertThat(encryptorRule.getProperties().getProperty("aes.key.value"), is("123456")); + } + + @Test + public void assertProperties() { + boolean showSQL = getShardingProperties("encryptDataSourceOrchestration").getValue(ShardingPropertiesConstant.SQL_SHOW); + assertTrue(showSQL); + } + + private ShardingProperties getShardingProperties(final String encryptDatasourceName) { + OrchestrationSpringEncryptDataSource encryptDataSource = applicationContext.getBean(encryptDatasourceName, OrchestrationSpringEncryptDataSource.class); + EncryptDataSource dataSource = (EncryptDataSource) FieldValueUtil.getFieldValue(encryptDataSource, "dataSource", true); + return dataSource.getShardingProperties(); + } +} diff --git a/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/test/resources/META-INF/rdb/encryptOrchestration.xml b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/test/resources/META-INF/rdb/encryptOrchestration.xml new file mode 100644 index 0000000000000..c450564544737 --- /dev/null +++ b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/test/resources/META-INF/rdb/encryptOrchestration.xml @@ -0,0 +1,30 @@ + + + + + + + + + diff --git a/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/test/resources/META-INF/rdb/namespace/encryptDataSourceNamespace.xml b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/test/resources/META-INF/rdb/namespace/encryptDataSourceNamespace.xml new file mode 100644 index 0000000000000..61866165a0cd3 --- /dev/null +++ b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/test/resources/META-INF/rdb/namespace/encryptDataSourceNamespace.xml @@ -0,0 +1,42 @@ + + + + + + + + 123456 + + + + + + + ${sql_show} + + + From 710de853b81597ebedaf05390571c22ec93cefd6 Mon Sep 17 00:00:00 2001 From: KomachiSion <263976490@qq.com> Date: Fri, 14 Jun 2019 13:58:10 +0800 Subject: [PATCH 167/283] For checkstyle --- .../encrypt/SpringBootEncryptRuleConfigurationProperties.java | 2 +- .../spring/datasource/OrchestrationSpringEncryptDataSource.java | 2 +- .../constants/EncryptDataSourceBeanDefinitionParserTag.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/boot/encrypt/SpringBootEncryptRuleConfigurationProperties.java b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/boot/encrypt/SpringBootEncryptRuleConfigurationProperties.java index 2ae0be7432cae..029f87b66ea91 100644 --- a/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/boot/encrypt/SpringBootEncryptRuleConfigurationProperties.java +++ b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/boot/encrypt/SpringBootEncryptRuleConfigurationProperties.java @@ -26,5 +26,5 @@ * @author yangyi */ @ConfigurationProperties(prefix = "spring.shardingsphere.encrypt") -public class SpringBootEncryptRuleConfigurationProperties extends YamlEncryptRuleConfiguration { +public final class SpringBootEncryptRuleConfigurationProperties extends YamlEncryptRuleConfiguration { } diff --git a/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/datasource/OrchestrationSpringEncryptDataSource.java b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/datasource/OrchestrationSpringEncryptDataSource.java index 8b34992ecd2f0..377f87f6f5445 100644 --- a/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/datasource/OrchestrationSpringEncryptDataSource.java +++ b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/datasource/OrchestrationSpringEncryptDataSource.java @@ -26,7 +26,7 @@ * * @author yangyi */ -public class OrchestrationSpringEncryptDataSource extends OrchestrationEncryptDataSource { +public final class OrchestrationSpringEncryptDataSource extends OrchestrationEncryptDataSource { public OrchestrationSpringEncryptDataSource(final EncryptDataSource dataSource, final OrchestrationConfiguration orchestrationConfig) { super(dataSource, orchestrationConfig); diff --git a/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/namespace/constants/EncryptDataSourceBeanDefinitionParserTag.java b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/namespace/constants/EncryptDataSourceBeanDefinitionParserTag.java index e9c85a485fc38..fa7d30d80ef0f 100644 --- a/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/namespace/constants/EncryptDataSourceBeanDefinitionParserTag.java +++ b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/namespace/constants/EncryptDataSourceBeanDefinitionParserTag.java @@ -26,7 +26,7 @@ * @author yangyi */ @NoArgsConstructor(access = AccessLevel.PRIVATE) -public class EncryptDataSourceBeanDefinitionParserTag { +public final class EncryptDataSourceBeanDefinitionParserTag { public static final String ROOT_TAG = "encrypt-data-source"; From febac9dabcc6b18dfd4f4872d4b78be913fd100e Mon Sep 17 00:00:00 2001 From: tristaZero Date: Fri, 14 Jun 2019 15:10:44 +0800 Subject: [PATCH 168/283] add logicIndexes --- .../core/metadata/table/TableMetaData.java | 11 ++++++- .../execute/metadata/TableMetaDataLoader.java | 32 +++++++++++++++++-- 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/metadata/table/TableMetaData.java b/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/metadata/table/TableMetaData.java index bf827040dec5c..e1dc9732d9e8f 100644 --- a/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/metadata/table/TableMetaData.java +++ b/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/metadata/table/TableMetaData.java @@ -37,10 +37,19 @@ public final class TableMetaData { private final Map columns; - public TableMetaData(final Collection columnMetaDataList) { + private final Collection logicIndexes; + + public TableMetaData(final Collection columnMetaDataList, final Collection logicIndexes) { + columns = getColumns(columnMetaDataList); + this.logicIndexes = logicIndexes; + } + + private Map getColumns(final Collection columnMetaDataList) { + final Map columns; columns = new LinkedHashMap<>(columnMetaDataList.size(), 1); for (ColumnMetaData each : columnMetaDataList) { columns.put(each.getColumnName(), each); } + return columns; } } diff --git a/sharding-core/sharding-core-execute/src/main/java/org/apache/shardingsphere/core/execute/metadata/TableMetaDataLoader.java b/sharding-core/sharding-core-execute/src/main/java/org/apache/shardingsphere/core/execute/metadata/TableMetaDataLoader.java index c5b238904702c..3e159575e66ed 100644 --- a/sharding-core/sharding-core-execute/src/main/java/org/apache/shardingsphere/core/execute/metadata/TableMetaDataLoader.java +++ b/sharding-core/sharding-core-execute/src/main/java/org/apache/shardingsphere/core/execute/metadata/TableMetaDataLoader.java @@ -17,6 +17,7 @@ package org.apache.shardingsphere.core.execute.metadata; +import com.google.common.base.Optional; import com.google.common.collect.Lists; import lombok.RequiredArgsConstructor; import org.apache.shardingsphere.core.exception.ShardingException; @@ -92,8 +93,7 @@ private Collection load(final String dataSourceName, final String Collection result = new LinkedList<>(); try (Connection connection = connectionManager.getConnection(dataSourceName)) { for (DataNode each : dataNodes) { - result.add(new TableMetaData( - isTableExist(connection, catalog, each.getTableName()) ? getColumnMetaDataList(connection, catalog, each.getTableName()) : Collections.emptyList())); + result.add(createTableMetaData(connection, catalog, each.getTableName())); } } return result; @@ -124,6 +124,13 @@ private Collection> getDataNodeGroups(final List< return result; } + private TableMetaData createTableMetaData(final Connection connection, final String catalog, final String actualTableName) throws SQLException { + if (isTableExist(connection, catalog, actualTableName)) { + return new TableMetaData(getColumnMetaDataList(connection, catalog, actualTableName), getLogicIndexes(connection, catalog, actualTableName)); + } + return new TableMetaData(Collections.emptyList(), Collections.emptyList()); + } + private boolean isTableExist(final Connection connection, final String catalog, final String actualTableName) throws SQLException { try (ResultSet resultSet = connection.getMetaData().getTables(catalog, null, actualTableName, null)) { return resultSet.next(); @@ -153,6 +160,27 @@ private Collection getPrimaryKeys(final Connection connection, final Str return result; } + private Collection getLogicIndexes(final Connection connection, final String catalog, final String actualTableName) throws SQLException { + Collection result = new HashSet<>(); + try (ResultSet resultSet = connection.getMetaData().getIndexInfo(catalog, catalog, actualTableName, false, false)) { + while (resultSet.next()) { + Optional logicIndex = getLogicIndex(resultSet.getString("INDEX_NAME"), actualTableName); + if (logicIndex.isPresent()) { + result.add(logicIndex.get()); + } + } + } + return result; + } + + private Optional getLogicIndex(final String actualIndexName, final String actualTableName) { + String indexNameSuffix = "_" + actualTableName; + if (actualIndexName.contains(indexNameSuffix)) { + return Optional.of(actualIndexName.replace(indexNameSuffix, "")); + } + return Optional.absent(); + } + private void checkUniformed(final String logicTableName, final List actualTableMetaDataList) { if (!isCheckingMetaData) { return; From 45721affa9eb49d76b0458067eb36072dd6e263e Mon Sep 17 00:00:00 2001 From: tristaZero Date: Fri, 14 Jun 2019 15:11:16 +0800 Subject: [PATCH 169/283] modify new TableMetaData --- .../dal/show/ShowCreateTableMergedResultTest.java | 2 +- .../merge/dal/show/ShowTablesMergedResultTest.java | 2 +- .../engine/AbstractBaseIntegrateSQLParsingTest.java | 13 ++++++++----- .../rewrite/rewriter/EncryptSQLRewriterTest.java | 4 ++-- .../route/type/standard/AbstractSQLRouteTest.java | 8 +++++--- 5 files changed, 17 insertions(+), 12 deletions(-) diff --git a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dal/show/ShowCreateTableMergedResultTest.java b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dal/show/ShowCreateTableMergedResultTest.java index e6bf80a8f5707..7b05a564019aa 100644 --- a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dal/show/ShowCreateTableMergedResultTest.java +++ b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dal/show/ShowCreateTableMergedResultTest.java @@ -63,7 +63,7 @@ public void setUp() throws SQLException { shardingRuleConfig.getTableRuleConfigs().add(tableRuleConfig); shardingRule = new ShardingRule(shardingRuleConfig, Lists.newArrayList("ds")); Map tableMetaDataMap = new HashMap<>(1, 1); - tableMetaDataMap.put("table", new TableMetaData(Collections.emptyList())); + tableMetaDataMap.put("table", new TableMetaData(Collections.emptyList(), Collections.emptyList())); shardingTableMetaData = new ShardingTableMetaData(tableMetaDataMap); resultSet = mock(ResultSet.class); ResultSetMetaData resultSetMetaData = mock(ResultSetMetaData.class); diff --git a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dal/show/ShowTablesMergedResultTest.java b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dal/show/ShowTablesMergedResultTest.java index 18826d66f7def..475d6d35f6a1a 100644 --- a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dal/show/ShowTablesMergedResultTest.java +++ b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dal/show/ShowTablesMergedResultTest.java @@ -63,7 +63,7 @@ public void setUp() throws SQLException { shardingRuleConfig.getTableRuleConfigs().add(tableRuleConfig); shardingRule = new ShardingRule(shardingRuleConfig, Lists.newArrayList("ds")); Map tableMetaDataMap = new HashMap<>(1, 1); - tableMetaDataMap.put("table", new TableMetaData(Collections.emptyList())); + tableMetaDataMap.put("table", new TableMetaData(Collections.emptyList(), Collections.emptyList())); shardingTableMetaData = new ShardingTableMetaData(tableMetaDataMap); resultSet = mock(ResultSet.class); ResultSetMetaData resultSetMetaData = mock(ResultSetMetaData.class); diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/AbstractBaseIntegrateSQLParsingTest.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/AbstractBaseIntegrateSQLParsingTest.java index 90db08426befa..6531dd20cdfc2 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/AbstractBaseIntegrateSQLParsingTest.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/AbstractBaseIntegrateSQLParsingTest.java @@ -35,6 +35,7 @@ import java.io.IOException; import java.net.URL; import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -62,13 +63,15 @@ private static ShardingRule buildShardingRule() throws IOException { private static ShardingTableMetaData buildShardingTableMetaData() { Map tableMetaDataMap = new HashMap<>(3, 1); - tableMetaDataMap.put("t_order", - new TableMetaData(Arrays.asList(new ColumnMetaData("order_id", "int", true), new ColumnMetaData("user_id", "int", false), new ColumnMetaData("status", "int", false)))); + tableMetaDataMap.put("t_order", new TableMetaData(Arrays.asList(new ColumnMetaData("order_id", "int", true), new ColumnMetaData("user_id", "int", false), + new ColumnMetaData("status", "int", false)), Collections.emptyList())); tableMetaDataMap.put("t_order_item", new TableMetaData(Arrays.asList(new ColumnMetaData("item_id", "int", true), new ColumnMetaData("order_id", "int", false), - new ColumnMetaData("user_id", "int", false), new ColumnMetaData("status", "varchar", false), new ColumnMetaData("c_date", "timestamp", false)))); - tableMetaDataMap.put("t_place", new TableMetaData(Arrays.asList(new ColumnMetaData("user_new_id", "int", true), new ColumnMetaData("user_new_id", "int", false)))); + new ColumnMetaData("user_id", "int", false), new ColumnMetaData("status", "varchar", false), + new ColumnMetaData("c_date", "timestamp", false)), Collections.emptyList())); + tableMetaDataMap.put("t_place", new TableMetaData(Arrays.asList(new ColumnMetaData("user_new_id", "int", true), + new ColumnMetaData("user_new_id", "int", false)), Collections.emptyList())); tableMetaDataMap.put("t_encrypt", new TableMetaData(Arrays.asList(new ColumnMetaData("id", "int", true), new ColumnMetaData("name", "varchar", false), - new ColumnMetaData("mobile", "varchar", false), new ColumnMetaData("status", "int", false)))); + new ColumnMetaData("mobile", "varchar", false), new ColumnMetaData("status", "int", false)), Collections.emptyList())); return new ShardingTableMetaData(tableMetaDataMap); } } diff --git a/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/core/rewrite/rewriter/EncryptSQLRewriterTest.java b/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/core/rewrite/rewriter/EncryptSQLRewriterTest.java index e55f4329a185a..bac075dfe06e8 100644 --- a/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/core/rewrite/rewriter/EncryptSQLRewriterTest.java +++ b/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/core/rewrite/rewriter/EncryptSQLRewriterTest.java @@ -77,8 +77,8 @@ private ShardingTableMetaData createShardingTableMetaData() { ColumnMetaData columnMetaData2 = new ColumnMetaData("col2", "VARCHAR(10)", false); ColumnMetaData queryColumnMetaData1 = new ColumnMetaData("query1", "VARCHAR(10)", false); ColumnMetaData queryColumnMetaData2 = new ColumnMetaData("query2", "VARCHAR(10)", false); - TableMetaData encryptTableMetaData = new TableMetaData(Arrays.asList(columnMetaData1, columnMetaData2)); - TableMetaData queryTableMetaData = new TableMetaData(Arrays.asList(columnMetaData1, columnMetaData2, queryColumnMetaData1, queryColumnMetaData2)); + TableMetaData encryptTableMetaData = new TableMetaData(Arrays.asList(columnMetaData1, columnMetaData2), Collections.emptyList()); + TableMetaData queryTableMetaData = new TableMetaData(Arrays.asList(columnMetaData1, columnMetaData2, queryColumnMetaData1, queryColumnMetaData2), Collections.emptyList()); Map tables = new LinkedHashMap<>(); tables.put("t_encrypt", encryptTableMetaData); tables.put("t_query_encrypt", queryTableMetaData); diff --git a/sharding-core/sharding-core-route/src/test/java/org/apache/shardingsphere/core/route/type/standard/AbstractSQLRouteTest.java b/sharding-core/sharding-core-route/src/test/java/org/apache/shardingsphere/core/route/type/standard/AbstractSQLRouteTest.java index 0a666bcb893ab..3403151c19dd8 100644 --- a/sharding-core/sharding-core-route/src/test/java/org/apache/shardingsphere/core/route/type/standard/AbstractSQLRouteTest.java +++ b/sharding-core/sharding-core-route/src/test/java/org/apache/shardingsphere/core/route/type/standard/AbstractSQLRouteTest.java @@ -35,6 +35,7 @@ import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; @@ -111,10 +112,11 @@ private TableRuleConfiguration createTableRuleWithHintConfig(final String tableN private ShardingTableMetaData buildShardingTableMetaData() { Map tableMetaDataMap = new HashMap<>(3, 1); - tableMetaDataMap.put("t_order", - new TableMetaData(Arrays.asList(new ColumnMetaData("order_id", "int", true), new ColumnMetaData("user_id", "int", false), new ColumnMetaData("status", "int", false)))); + tableMetaDataMap.put("t_order", new TableMetaData(Arrays.asList(new ColumnMetaData("order_id", "int", true), new ColumnMetaData("user_id", "int", false), + new ColumnMetaData("status", "int", false)), Collections.emptyList())); tableMetaDataMap.put("t_order_item", new TableMetaData(Arrays.asList(new ColumnMetaData("item_id", "int", true), new ColumnMetaData("order_id", "int", false), - new ColumnMetaData("user_id", "int", false), new ColumnMetaData("status", "varchar", false), new ColumnMetaData("c_date", "timestamp", false)))); + new ColumnMetaData("user_id", "int", false), new ColumnMetaData("status", "varchar", false), + new ColumnMetaData("c_date", "timestamp", false)), Collections.emptyList())); return new ShardingTableMetaData(tableMetaDataMap); } } From ee4ca3f28c9981f61c59d3e27fab50097f2dc330 Mon Sep 17 00:00:00 2001 From: tristaZero Date: Fri, 14 Jun 2019 15:11:50 +0800 Subject: [PATCH 170/283] add getLogicIndexes() --- .../core/datasource/EncryptDataSource.java | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/datasource/EncryptDataSource.java b/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/datasource/EncryptDataSource.java index cdd57f2ab1966..d4ae77afc6263 100644 --- a/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/datasource/EncryptDataSource.java +++ b/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/datasource/EncryptDataSource.java @@ -17,6 +17,7 @@ package org.apache.shardingsphere.shardingjdbc.jdbc.core.datasource; +import com.google.common.base.Optional; import lombok.Getter; import lombok.Setter; import lombok.SneakyThrows; @@ -83,7 +84,7 @@ private ShardingTableMetaData createEncryptTableMetaData() { try (Connection connection = dataSource.getConnection()) { for (String each : encryptRule.getEncryptTableNames()) { if (isTableExist(connection, each)) { - tables.put(each, new TableMetaData(getColumnMetaDataList(connection, each))); + tables.put(each, new TableMetaData(getColumnMetaDataList(connection, each), getLogicIndexes(connection, each))); } } } @@ -119,6 +120,27 @@ private Collection getPrimaryKeys(final Connection connection, final Str return result; } + private Collection getLogicIndexes(final Connection connection, final String actualTableName) throws SQLException { + Collection result = new HashSet<>(); + try (ResultSet resultSet = connection.getMetaData().getIndexInfo(connection.getCatalog(), connection.getCatalog(), actualTableName, false, false)) { + while (resultSet.next()) { + Optional logicIndex = getLogicIndex(resultSet.getString("INDEX_NAME"), actualTableName); + if (logicIndex.isPresent()) { + result.add(logicIndex.get()); + } + } + } + return result; + } + + private Optional getLogicIndex(final String actualIndexName, final String actualTableName) { + String indexNameSuffix = "_" + actualTableName; + if (actualIndexName.contains(indexNameSuffix)) { + return Optional.of(actualIndexName.replace(indexNameSuffix, "")); + } + return Optional.absent(); + } + private DatabaseType getDatabaseType() throws SQLException { try (Connection connection = dataSource.getConnection()) { return DatabaseTypes.getDatabaseTypeByURL(connection.getMetaData().getURL()); From f71d3e4805a310ec4669793ebb97218fcf395a71 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Fri, 14 Jun 2019 15:19:35 +0800 Subject: [PATCH 171/283] for #2543, Use global filler engine to set parameters count for SQLStatement --- .../ShardingInsertOptimizeEngineTest.java | 2 -- .../core/parse/SQLParseEngine.java | 20 +++++++++++-- .../extractor/SQLSegmentsExtractorEngine.java | 17 ++--------- .../filler/SQLStatementFillerEngine.java | 4 ++- .../parse/filler/common/dml/WhereFiller.java | 1 - .../dml/insert/EncryptInsertValuesFiller.java | 8 ++---- .../update/EncryptSetAssignmentsFiller.java | 4 +-- .../insert/ShardingInsertValuesFiller.java | 4 +-- .../update/ShardingSetAssignmentsFiller.java | 4 +-- .../sql/statement/AbstractSQLStatement.java | 7 +---- .../parse/sql/statement/SQLStatement.java | 28 +++++++++---------- .../integrate/asserts/SQLStatementAssert.java | 2 +- .../integrate/asserts/index/IndexAssert.java | 12 ++++---- .../rewriter/ShardingSQLRewriterTest.java | 2 -- .../prepare/MySQLComStmtPrepareExecutor.java | 8 +++--- .../parse/PostgreSQLComParseExecutor.java | 3 +- 16 files changed, 56 insertions(+), 70 deletions(-) diff --git a/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/ShardingInsertOptimizeEngineTest.java b/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/ShardingInsertOptimizeEngineTest.java index 6c952eb9f2f20..aaf345a14996c 100644 --- a/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/ShardingInsertOptimizeEngineTest.java +++ b/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/ShardingInsertOptimizeEngineTest.java @@ -111,7 +111,6 @@ private void initializeInsertSetParameters() { private void initializeInsertValuesWithPlaceholder() { insertValuesStatementWithPlaceholder = new InsertStatement(); insertValuesStatementWithPlaceholder.getTables().add(new Table("t_order", null)); - insertValuesStatementWithPlaceholder.addParametersCount(4); AndCondition andCondition1 = new AndCondition(); andCondition1.getConditions().add(new Condition(new Column("user_id", "t_order"), null, new ParameterMarkerExpressionSegment(0, 0, 0))); insertValuesStatementWithPlaceholder.getShardingConditions().getOrConditions().add(andCondition1); @@ -128,7 +127,6 @@ private void initializeInsertValuesWithPlaceholder() { private void initializeInsertValuesWithPlaceholderWithEncrypt() { insertValuesStatementWithPlaceholderWithEncrypt = new InsertStatement(); insertValuesStatementWithPlaceholderWithEncrypt.getTables().add(new Table("t_encrypt", null)); - insertValuesStatementWithPlaceholderWithEncrypt.addParametersCount(4); AndCondition andCondition1 = new AndCondition(); andCondition1.getConditions().add(new Condition(new Column("user_id", "t_encrypt"), null, new ParameterMarkerExpressionSegment(0, 0, 0))); insertValuesStatementWithPlaceholderWithEncrypt.getShardingConditions().getOrConditions().add(andCondition1); diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/SQLParseEngine.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/SQLParseEngine.java index a1fabf3955505..c148b52ed5ba7 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/SQLParseEngine.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/SQLParseEngine.java @@ -17,9 +17,12 @@ package org.apache.shardingsphere.core.parse; +import org.antlr.v4.runtime.ParserRuleContext; import org.apache.shardingsphere.core.database.DatabaseTypes; import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; import org.apache.shardingsphere.core.parse.extractor.SQLSegmentsExtractorEngine; +import org.apache.shardingsphere.core.parse.extractor.util.ExtractorUtils; +import org.apache.shardingsphere.core.parse.extractor.util.RuleName; import org.apache.shardingsphere.core.parse.filler.SQLStatementFillerEngine; import org.apache.shardingsphere.core.parse.optimizer.SQLStatementOptimizerEngine; import org.apache.shardingsphere.core.parse.parser.SQLAST; @@ -31,6 +34,8 @@ import org.apache.shardingsphere.spi.database.DatabaseType; import java.util.Collection; +import java.util.HashMap; +import java.util.Map; /** * SQL parse engine. @@ -63,9 +68,20 @@ public SQLParseEngine(final ParseRuleRegistry parseRuleRegistry, final DatabaseT */ public SQLStatement parse() { SQLAST ast = parserEngine.parse(); - Collection sqlSegments = extractorEngine.extract(ast); - SQLStatement result = fillerEngine.fill(sqlSegments, ast.getSqlStatementRule()); + Map parameterMarkerIndexes = getParameterMarkerIndexes(ast.getParserRuleContext()); + Collection sqlSegments = extractorEngine.extract(ast, parameterMarkerIndexes); + SQLStatement result = fillerEngine.fill(sqlSegments, parameterMarkerIndexes.size(), ast.getSqlStatementRule()); optimizerEngine.optimize(ast.getSqlStatementRule(), result); return result; } + + private Map getParameterMarkerIndexes(final ParserRuleContext rootNode) { + Collection placeholderNodes = ExtractorUtils.getAllDescendantNodes(rootNode, RuleName.PARAMETER_MARKER); + Map result = new HashMap<>(placeholderNodes.size(), 1); + int index = 0; + for (ParserRuleContext each : placeholderNodes) { + result.put(each, index++); + } + return result; + } } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/extractor/SQLSegmentsExtractorEngine.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/extractor/SQLSegmentsExtractorEngine.java index 3a82e164a16e1..2264f710173c6 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/extractor/SQLSegmentsExtractorEngine.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/extractor/SQLSegmentsExtractorEngine.java @@ -22,13 +22,10 @@ import org.apache.shardingsphere.core.parse.extractor.api.CollectionSQLSegmentExtractor; import org.apache.shardingsphere.core.parse.extractor.api.OptionalSQLSegmentExtractor; import org.apache.shardingsphere.core.parse.extractor.api.SQLSegmentExtractor; -import org.apache.shardingsphere.core.parse.extractor.util.ExtractorUtils; -import org.apache.shardingsphere.core.parse.extractor.util.RuleName; import org.apache.shardingsphere.core.parse.parser.SQLAST; import org.apache.shardingsphere.core.parse.sql.segment.SQLSegment; import java.util.Collection; -import java.util.HashMap; import java.util.LinkedList; import java.util.Map; @@ -43,11 +40,11 @@ public final class SQLSegmentsExtractorEngine { * Extract SQL segments. * * @param ast SQL AST + * @param parameterMarkerIndexes parameter marker indexes * @return SQL segments */ - public Collection extract(final SQLAST ast) { + public Collection extract(final SQLAST ast, final Map parameterMarkerIndexes) { Collection result = new LinkedList<>(); - Map parameterMarkerIndexes = getParameterMarkerIndexes(ast.getParserRuleContext()); for (SQLSegmentExtractor each : ast.getSqlStatementRule().getExtractors()) { if (each instanceof OptionalSQLSegmentExtractor) { Optional sqlSegment = ((OptionalSQLSegmentExtractor) each).extract(ast.getParserRuleContext(), parameterMarkerIndexes); @@ -60,14 +57,4 @@ public Collection extract(final SQLAST ast) { } return result; } - - private Map getParameterMarkerIndexes(final ParserRuleContext rootNode) { - Collection placeholderNodes = ExtractorUtils.getAllDescendantNodes(rootNode, RuleName.PARAMETER_MARKER); - Map result = new HashMap<>(placeholderNodes.size(), 1); - int index = 0; - for (ParserRuleContext each : placeholderNodes) { - result.put(each, index++); - } - return result; - } } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/SQLStatementFillerEngine.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/SQLStatementFillerEngine.java index 3d50abc6dc567..4b662d183dcce 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/SQLStatementFillerEngine.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/SQLStatementFillerEngine.java @@ -60,13 +60,15 @@ public final class SQLStatementFillerEngine { * Fill SQL statement. * * @param sqlSegments SQL segments + * @param parameterMarkerCount parameter marker count * @param rule SQL statement rule * @return SQL statement */ @SneakyThrows - public SQLStatement fill(final Collection sqlSegments, final SQLStatementRule rule) { + public SQLStatement fill(final Collection sqlSegments, final int parameterMarkerCount, final SQLStatementRule rule) { SQLStatement result = rule.getSqlStatementClass().newInstance(); result.setLogicSQL(sql); + result.setParametersCount(parameterMarkerCount); result.getSQLSegments().addAll(sqlSegments); for (SQLSegment each : sqlSegments) { Optional filler = parseRuleRegistry.findSQLSegmentFiller(databaseType, each.getClass()); diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/dml/WhereFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/dml/WhereFiller.java index a8bcb9c7085d2..0ec832c16d580 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/dml/WhereFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/dml/WhereFiller.java @@ -33,7 +33,6 @@ public final class WhereFiller implements SQLSegmentFiller { @Override public void fill(final WhereSegment sqlSegment, final SQLStatement sqlStatement) { - sqlStatement.addParametersCount(sqlSegment.getParametersCount()); if (sqlStatement instanceof DeleteStatement) { DeleteStatement deleteStatement = (DeleteStatement) sqlStatement; deleteStatement.setWhereStartIndex(sqlSegment.getStartIndex()); diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/insert/EncryptInsertValuesFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/insert/EncryptInsertValuesFiller.java index 21628fa452edb..fee8910a6c62a 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/insert/EncryptInsertValuesFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/insert/EncryptInsertValuesFiller.java @@ -48,7 +48,7 @@ public void fill(final InsertValuesSegment sqlSegment, final SQLStatement sqlSta if (((InsertStatement) sqlStatement).getColumnNames().isEmpty()) { fillColumnsFromMetaData((InsertStatement) sqlStatement); } - fillValues(sqlSegment, sqlStatement); + fillValues(sqlSegment, (InsertStatement) sqlStatement); } private void fillColumnsFromMetaData(final InsertStatement insertStatement) { @@ -60,9 +60,7 @@ private void fillColumnsFromMetaData(final InsertStatement insertStatement) { } } - private void fillValues(final InsertValuesSegment sqlSegment, final SQLStatement sqlStatement) { - InsertValue insertValue = new InsertValue(sqlSegment.getValues()); - ((InsertStatement) sqlStatement).getValues().add(insertValue); - sqlStatement.addParametersCount(insertValue.getParametersCount()); + private void fillValues(final InsertValuesSegment sqlSegment, final InsertStatement insertStatement) { + insertStatement.getValues().add(new InsertValue(sqlSegment.getValues())); } } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/update/EncryptSetAssignmentsFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/update/EncryptSetAssignmentsFiller.java index 1a34285805d94..f11e70da57407 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/update/EncryptSetAssignmentsFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/update/EncryptSetAssignmentsFiller.java @@ -52,9 +52,7 @@ private void fillInsert(final SetAssignmentsSegment sqlSegment, final InsertStat for (AssignmentSegment each : sqlSegment.getAssignments()) { insertStatement.getColumnNames().add(each.getColumn().getName()); } - InsertValue insertValue = getInsertValue(sqlSegment); - insertStatement.getValues().add(insertValue); - insertStatement.addParametersCount(insertValue.getParametersCount()); + insertStatement.getValues().add(getInsertValue(sqlSegment)); } private InsertValue getInsertValue(final SetAssignmentsSegment sqlSegment) { diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingInsertValuesFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingInsertValuesFiller.java index 629db4ec3d723..0c122f5b5fa15 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingInsertValuesFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingInsertValuesFiller.java @@ -82,9 +82,7 @@ private void reviseColumnNamesForGenerateKeyColumn(final InsertValuesSegment sql } private void fillValues(final InsertValuesSegment sqlSegment, final InsertStatement insertStatement) { - InsertValue insertValue = new InsertValue(sqlSegment.getValues()); - insertStatement.getValues().add(insertValue); - insertStatement.addParametersCount(insertValue.getParametersCount()); + insertStatement.getValues().add(new InsertValue(sqlSegment.getValues())); } private void fillCondition(final InsertValuesSegment sqlSegment, final InsertStatement insertStatement) { diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/update/ShardingSetAssignmentsFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/update/ShardingSetAssignmentsFiller.java index fddf0834683e8..dd373fc9e88ad 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/update/ShardingSetAssignmentsFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/update/ShardingSetAssignmentsFiller.java @@ -79,10 +79,8 @@ private void fillInsert(final SetAssignmentsSegment sqlSegment, final InsertStat } columnValues.add(each.getValue()); } - InsertValue insertValue = new InsertValue(columnValues); - insertStatement.getValues().add(insertValue); + insertStatement.getValues().add(new InsertValue(columnValues)); insertStatement.getShardingConditions().getOrConditions().add(andCondition); - insertStatement.addParametersCount(insertValue.getParametersCount()); } private int getColumnCountExcludeAssistedQueryColumns(final InsertStatement insertStatement) { diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/statement/AbstractSQLStatement.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/statement/AbstractSQLStatement.java index eebbfef9c9537..49f2576f32823 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/statement/AbstractSQLStatement.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/statement/AbstractSQLStatement.java @@ -34,6 +34,7 @@ * @author panjuan */ @Getter +@Setter @ToString public abstract class AbstractSQLStatement implements SQLStatement { @@ -41,7 +42,6 @@ public abstract class AbstractSQLStatement implements SQLStatement { private final Tables tables = new Tables(); - @Setter private String logicSQL; private int parametersCount; @@ -73,9 +73,4 @@ public final Collection findSQLSegments(final Class } return result; } - - @Override - public void addParametersCount(final int parametersCount) { - this.parametersCount += parametersCount; - } } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/statement/SQLStatement.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/statement/SQLStatement.java index 15734bf26cb40..6a9a1d064791f 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/statement/SQLStatement.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/statement/SQLStatement.java @@ -44,6 +44,20 @@ public interface SQLStatement { */ void setLogicSQL(String logicSQL); + /** + * Get count of parameters. + * + * @return count of parameters + */ + int getParametersCount(); + + /** + * Set count of parameters. + * + * @param parametersCount count of parameters + */ + void setParametersCount(int parametersCount); + /** * Get SQL segments. * @@ -69,20 +83,6 @@ public interface SQLStatement { */ Collection findSQLSegments(Class sqlSegmentType); - /** - * Get count of parameters. - * - * @return count of parameters - */ - int getParametersCount(); - - /** - * Add count of parameters. - * - * @param parametersCount count of parameters - */ - void addParametersCount(int parametersCount); - /** * Get tables. * diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/SQLStatementAssert.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/SQLStatementAssert.java index 5aa874c4c3db2..7793c69fcef1f 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/SQLStatementAssert.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/SQLStatementAssert.java @@ -97,7 +97,7 @@ public void assertSQLStatement() { conditionAssert.assertConditions(((DMLStatement) actual).getShardingConditions(), expected.getShardingConditions()); conditionAssert.assertConditions(((DMLStatement) actual).getEncryptConditions(), expected.getEncryptConditions()); } - indexAssert.assertParametersIndex(actual.getParametersCount(), expected.getParameters().size()); + indexAssert.assertParametersCount(actual.getParametersCount(), expected.getParameters().size()); if (actual instanceof SelectStatement) { assertSelectStatement((SelectStatement) actual); } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/index/IndexAssert.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/index/IndexAssert.java index 48470aa3e7ec7..b9786906d784a 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/index/IndexAssert.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/index/IndexAssert.java @@ -37,16 +37,16 @@ public final class IndexAssert { private final SQLStatementAssertMessage assertMessage; /** - * Assert parameters index. + * Assert parameters count. * - * @param actual actual parameters index - * @param expected expected parameters index + * @param actual actual parameters count + * @param expected expected parameters count */ - public void assertParametersIndex(final int actual, final int expected) { + public void assertParametersCount(final int actual, final int expected) { if (SQLCaseType.Placeholder == sqlCaseType) { - assertThat(assertMessage.getFullAssertMessage("Parameters index assertion error: "), actual, is(expected)); + assertThat(assertMessage.getFullAssertMessage("Parameters count assertion error: "), actual, is(expected)); } else { - assertThat(assertMessage.getFullAssertMessage("Parameters index assertion error: "), actual, is(0)); + assertThat(assertMessage.getFullAssertMessage("Parameters count assertion error: "), actual, is(0)); } } } diff --git a/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/core/rewrite/rewriter/ShardingSQLRewriterTest.java b/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/core/rewrite/rewriter/ShardingSQLRewriterTest.java index 970ff6fc30a8b..ce72600c8bb8d 100644 --- a/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/core/rewrite/rewriter/ShardingSQLRewriterTest.java +++ b/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/core/rewrite/rewriter/ShardingSQLRewriterTest.java @@ -199,7 +199,6 @@ public void assertRewriteForAutoGeneratedKeyColumn() { insertStatement.getColumnNames().add("age"); insertStatement.getSQLSegments().add(new InsertColumnsSegment(30, 30, Collections.singleton(mock(ColumnSegment.class)))); insertStatement.getSQLSegments().add(new InsertValuesSegment(39, 44, Collections.emptyList())); - insertStatement.addParametersCount(2); insertStatement.getSQLSegments().add(new TableSegment(12, 18, "table_x")); InsertOptimizeResult insertOptimizeResult = new InsertOptimizeResult(Arrays.asList("name", "age", "id")); Object[] parameters = {"x", 1, 1}; @@ -222,7 +221,6 @@ public void assertRewriteForAutoGeneratedKeyColumnWithoutColumnsWithParameter() insertStatement.getSQLSegments().add(new InsertColumnsSegment(21, 21, Collections.emptyList())); insertStatement.getSQLSegments().add(new InsertValuesSegment(29, 31, Collections.emptyList())); insertStatement.getTables().add(new Table("table_x", null)); - insertStatement.addParametersCount(1); insertStatement.getSQLSegments().add(new TableSegment(12, 20, "`table_x`")); InsertOptimizeResult insertOptimizeResult = new InsertOptimizeResult(Arrays.asList("name", "id")); Object[] parameters = {"Bill", 1}; diff --git a/sharding-proxy/sharding-proxy-frontend/sharding-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/shardingproxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareExecutor.java b/sharding-proxy/sharding-proxy-frontend/sharding-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/shardingproxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareExecutor.java index a0c89b7b67540..fdede79c61b80 100644 --- a/sharding-proxy/sharding-proxy-frontend/sharding-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/shardingproxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareExecutor.java +++ b/sharding-proxy/sharding-proxy-frontend/sharding-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/shardingproxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareExecutor.java @@ -66,14 +66,14 @@ public Collection execute() { Collection result = new LinkedList<>(); int currentSequenceId = 0; SQLStatement sqlStatement = shardingSQLParseEntry.parse(packet.getSql(), true); - int parametersIndex = sqlStatement.getParametersCount(); - result.add(new MySQLComStmtPrepareOKPacket(++currentSequenceId, PREPARED_STATEMENT_REGISTRY.register(packet.getSql(), parametersIndex), getNumColumns(sqlStatement), parametersIndex, 0)); - for (int i = 0; i < parametersIndex; i++) { + int parametersCount = sqlStatement.getParametersCount(); + result.add(new MySQLComStmtPrepareOKPacket(++currentSequenceId, PREPARED_STATEMENT_REGISTRY.register(packet.getSql(), parametersCount), getNumColumns(sqlStatement), parametersCount, 0)); + for (int i = 0; i < parametersCount; i++) { // TODO add column name result.add(new MySQLColumnDefinition41Packet(++currentSequenceId, schemaName, sqlStatement.getTables().isSingleTable() ? sqlStatement.getTables().getSingleTableName() : "", "", "", "", 100, MySQLColumnType.MYSQL_TYPE_VARCHAR, 0)); } - if (parametersIndex > 0) { + if (parametersCount > 0) { result.add(new MySQLEofPacket(++currentSequenceId)); } // TODO add If numColumns > 0 diff --git a/sharding-proxy/sharding-proxy-frontend/sharding-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/shardingproxy/frontend/postgresql/command/query/binary/parse/PostgreSQLComParseExecutor.java b/sharding-proxy/sharding-proxy-frontend/sharding-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/shardingproxy/frontend/postgresql/command/query/binary/parse/PostgreSQLComParseExecutor.java index a1c1284d79f82..60522919bd00a 100644 --- a/sharding-proxy/sharding-proxy-frontend/sharding-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/shardingproxy/frontend/postgresql/command/query/binary/parse/PostgreSQLComParseExecutor.java +++ b/sharding-proxy/sharding-proxy-frontend/sharding-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/shardingproxy/frontend/postgresql/command/query/binary/parse/PostgreSQLComParseExecutor.java @@ -59,8 +59,7 @@ public Collection execute() { DatabaseTypes.getActualDatabaseType("PostgreSQL"), logicSchema.getShardingRule(), logicSchema.getMetaData().getTable(), logicSchema.getParsingResultCache()); if (!packet.getSql().isEmpty()) { SQLStatement sqlStatement = shardingSQLParseEntry.parse(packet.getSql(), true); - int parametersIndex = sqlStatement.getParametersCount(); - binaryStatementRegistry.register(packet.getStatementId(), packet.getSql(), parametersIndex, packet.getBinaryStatementParameterTypes()); + binaryStatementRegistry.register(packet.getStatementId(), packet.getSql(), sqlStatement.getParametersCount(), packet.getBinaryStatementParameterTypes()); } return Collections.singletonList(new PostgreSQLParseCompletePacket()); } From e07736dfef6e6e936b1213a9bb93656b3e20df18 Mon Sep 17 00:00:00 2001 From: tristaZero Date: Fri, 14 Jun 2019 15:25:54 +0800 Subject: [PATCH 172/283] add alter index rule --- .../encrypt/mysql/sql-statement-rule-definition.xml | 1 + .../masterslave/mysql/sql-statement-rule-definition.xml | 1 + .../sharding/mysql/sql-statement-rule-definition.xml | 1 + 3 files changed, 3 insertions(+) diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/encrypt/mysql/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/encrypt/mysql/sql-statement-rule-definition.xml index 2bd8122f2ced0..2fd2b1da765fd 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/encrypt/mysql/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/encrypt/mysql/sql-statement-rule-definition.xml @@ -28,6 +28,7 @@ + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/masterslave/mysql/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/masterslave/mysql/sql-statement-rule-definition.xml index 6c8ea9a09413c..e5043d63e5af0 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/masterslave/mysql/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/masterslave/mysql/sql-statement-rule-definition.xml @@ -28,6 +28,7 @@ + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/sharding/mysql/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/sharding/mysql/sql-statement-rule-definition.xml index 6d61fc128afd8..a33e1471d2f5f 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/sharding/mysql/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/sharding/mysql/sql-statement-rule-definition.xml @@ -28,6 +28,7 @@ + From 5ddeb25b432331cc0280d6e91a275dfe89a69fad Mon Sep 17 00:00:00 2001 From: terrymanu Date: Fri, 14 Jun 2019 15:34:09 +0800 Subject: [PATCH 173/283] for #2543, Move method getParameterMarkerIndexes() to SQLParserEngine --- .../core/parse/SQLParseEngine.java | 15 +-------------- .../core/parse/parser/SQLAST.java | 4 ++++ .../core/parse/parser/SQLParserEngine.java | 18 +++++++++++++++++- 3 files changed, 22 insertions(+), 15 deletions(-) diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/SQLParseEngine.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/SQLParseEngine.java index c148b52ed5ba7..f339e7a72a35a 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/SQLParseEngine.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/SQLParseEngine.java @@ -21,8 +21,6 @@ import org.apache.shardingsphere.core.database.DatabaseTypes; import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; import org.apache.shardingsphere.core.parse.extractor.SQLSegmentsExtractorEngine; -import org.apache.shardingsphere.core.parse.extractor.util.ExtractorUtils; -import org.apache.shardingsphere.core.parse.extractor.util.RuleName; import org.apache.shardingsphere.core.parse.filler.SQLStatementFillerEngine; import org.apache.shardingsphere.core.parse.optimizer.SQLStatementOptimizerEngine; import org.apache.shardingsphere.core.parse.parser.SQLAST; @@ -34,7 +32,6 @@ import org.apache.shardingsphere.spi.database.DatabaseType; import java.util.Collection; -import java.util.HashMap; import java.util.Map; /** @@ -68,20 +65,10 @@ public SQLParseEngine(final ParseRuleRegistry parseRuleRegistry, final DatabaseT */ public SQLStatement parse() { SQLAST ast = parserEngine.parse(); - Map parameterMarkerIndexes = getParameterMarkerIndexes(ast.getParserRuleContext()); + Map parameterMarkerIndexes = ast.getParameterMarkerIndexes(); Collection sqlSegments = extractorEngine.extract(ast, parameterMarkerIndexes); SQLStatement result = fillerEngine.fill(sqlSegments, parameterMarkerIndexes.size(), ast.getSqlStatementRule()); optimizerEngine.optimize(ast.getSqlStatementRule(), result); return result; } - - private Map getParameterMarkerIndexes(final ParserRuleContext rootNode) { - Collection placeholderNodes = ExtractorUtils.getAllDescendantNodes(rootNode, RuleName.PARAMETER_MARKER); - Map result = new HashMap<>(placeholderNodes.size(), 1); - int index = 0; - for (ParserRuleContext each : placeholderNodes) { - result.put(each, index++); - } - return result; - } } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/parser/SQLAST.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/parser/SQLAST.java index d8f19e4218c79..9009b8c37aecd 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/parser/SQLAST.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/parser/SQLAST.java @@ -22,6 +22,8 @@ import org.antlr.v4.runtime.ParserRuleContext; import org.apache.shardingsphere.core.parse.rule.registry.statement.SQLStatementRule; +import java.util.Map; + /** * Abstract syntax tree of SQL. * @@ -33,5 +35,7 @@ public final class SQLAST { private final ParserRuleContext parserRuleContext; + private final Map parameterMarkerIndexes; + private final SQLStatementRule sqlStatementRule; } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/parser/SQLParserEngine.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/parser/SQLParserEngine.java index bfb6c6c792b57..36d69783796c1 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/parser/SQLParserEngine.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/parser/SQLParserEngine.java @@ -22,10 +22,16 @@ import org.antlr.v4.runtime.tree.ErrorNode; import org.antlr.v4.runtime.tree.ParseTree; import org.apache.shardingsphere.core.parse.exception.SQLParsingException; +import org.apache.shardingsphere.core.parse.extractor.util.ExtractorUtils; +import org.apache.shardingsphere.core.parse.extractor.util.RuleName; import org.apache.shardingsphere.core.parse.rule.registry.ParseRuleRegistry; import org.apache.shardingsphere.core.parse.rule.registry.statement.SQLStatementRule; import org.apache.shardingsphere.spi.database.DatabaseType; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + /** * SQL parser engine. * @@ -54,6 +60,16 @@ public SQLAST parse() { if (null == sqlStatementRule) { throw new SQLParsingException(String.format("Unsupported SQL of `%s`", sql)); } - return new SQLAST((ParserRuleContext) parseTree, sqlStatementRule); + return new SQLAST((ParserRuleContext) parseTree, getParameterMarkerIndexes((ParserRuleContext) parseTree), sqlStatementRule); + } + + private Map getParameterMarkerIndexes(final ParserRuleContext rootNode) { + Collection placeholderNodes = ExtractorUtils.getAllDescendantNodes(rootNode, RuleName.PARAMETER_MARKER); + Map result = new HashMap<>(placeholderNodes.size(), 1); + int index = 0; + for (ParserRuleContext each : placeholderNodes) { + result.put(each, index++); + } + return result; } } From 3d20458346f9419607c71b0de38129c6ff7f8cf9 Mon Sep 17 00:00:00 2001 From: tristaZero Date: Fri, 14 Jun 2019 15:43:36 +0800 Subject: [PATCH 174/283] add AlterIndexStatement --- .../statement/ddl/AlterIndexStatement.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/statement/ddl/AlterIndexStatement.java diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/statement/ddl/AlterIndexStatement.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/statement/ddl/AlterIndexStatement.java new file mode 100644 index 0000000000000..fb578245ca7b7 --- /dev/null +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/statement/ddl/AlterIndexStatement.java @@ -0,0 +1,31 @@ +/* + * 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.core.parse.sql.statement.ddl; + +import lombok.Getter; +import lombok.ToString; + +/** + * Alter index statement. + * + * @author panjuan + */ +@Getter +@ToString(callSuper = true) +public final class AlterIndexStatement extends DDLStatement { +} From 763572742be1a264d59078bc38a9ffad9d97e8e3 Mon Sep 17 00:00:00 2001 From: tristaZero Date: Fri, 14 Jun 2019 15:43:46 +0800 Subject: [PATCH 175/283] add CreateIndexStatement --- .../statement/ddl/CreateIndexStatement.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/statement/ddl/CreateIndexStatement.java diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/statement/ddl/CreateIndexStatement.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/statement/ddl/CreateIndexStatement.java new file mode 100644 index 0000000000000..1e135b1328098 --- /dev/null +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/statement/ddl/CreateIndexStatement.java @@ -0,0 +1,31 @@ +/* + * 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.core.parse.sql.statement.ddl; + +import lombok.Getter; +import lombok.ToString; + +/** + * Create index statement. + * + * @author panjuan + */ +@Getter +@ToString(callSuper = true) +public final class CreateIndexStatement extends DDLStatement { +} From 0b8a4b17f32e46bbc27cbe70c5bdd2c6dbcd3a85 Mon Sep 17 00:00:00 2001 From: tristaZero Date: Fri, 14 Jun 2019 15:43:54 +0800 Subject: [PATCH 176/283] add DropIndexStatement --- .../sql/statement/ddl/DropIndexStatement.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/statement/ddl/DropIndexStatement.java diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/statement/ddl/DropIndexStatement.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/statement/ddl/DropIndexStatement.java new file mode 100644 index 0000000000000..1e5edb9bccf40 --- /dev/null +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/statement/ddl/DropIndexStatement.java @@ -0,0 +1,31 @@ +/* + * 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.core.parse.sql.statement.ddl; + +import lombok.Getter; +import lombok.ToString; + +/** + * Drop index statement. + * + * @author panjuan + */ +@Getter +@ToString(callSuper = true) +public final class DropIndexStatement extends DDLStatement { +} From bc227c8e4ae1fa7f2ad77de671ca060a9ee9f995 Mon Sep 17 00:00:00 2001 From: tristaZero Date: Fri, 14 Jun 2019 15:44:22 +0800 Subject: [PATCH 177/283] use index rule for mysql --- .../encrypt/mysql/sql-statement-rule-definition.xml | 6 +++--- .../masterslave/mysql/sql-statement-rule-definition.xml | 6 +++--- .../sharding/mysql/sql-statement-rule-definition.xml | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/encrypt/mysql/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/encrypt/mysql/sql-statement-rule-definition.xml index 2fd2b1da765fd..74a89f73e8191 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/encrypt/mysql/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/encrypt/mysql/sql-statement-rule-definition.xml @@ -27,9 +27,9 @@ - - - + + + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/masterslave/mysql/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/masterslave/mysql/sql-statement-rule-definition.xml index e5043d63e5af0..8444641b9d179 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/masterslave/mysql/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/masterslave/mysql/sql-statement-rule-definition.xml @@ -27,9 +27,9 @@ - - - + + + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/sharding/mysql/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/sharding/mysql/sql-statement-rule-definition.xml index a33e1471d2f5f..5b53f3ad9cfef 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/sharding/mysql/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/sharding/mysql/sql-statement-rule-definition.xml @@ -27,9 +27,9 @@ - - - + + + From e433b9983cb23959cd243d162caff58af07233bf Mon Sep 17 00:00:00 2001 From: tristaZero Date: Fri, 14 Jun 2019 15:44:34 +0800 Subject: [PATCH 178/283] use index rule for oracle --- .../encrypt/oracle/sql-statement-rule-definition.xml | 6 +++--- .../masterslave/oracle/sql-statement-rule-definition.xml | 6 +++--- .../sharding/oracle/sql-statement-rule-definition.xml | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/encrypt/oracle/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/encrypt/oracle/sql-statement-rule-definition.xml index 6f2d723d4ec6c..858b0f5a449eb 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/encrypt/oracle/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/encrypt/oracle/sql-statement-rule-definition.xml @@ -26,9 +26,9 @@ - - - + + + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/masterslave/oracle/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/masterslave/oracle/sql-statement-rule-definition.xml index b442d85a8e90d..05e188c267d68 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/masterslave/oracle/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/masterslave/oracle/sql-statement-rule-definition.xml @@ -26,9 +26,9 @@ - - - + + + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/sharding/oracle/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/sharding/oracle/sql-statement-rule-definition.xml index 664e0d3fb9fa2..f2006e691d7e1 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/sharding/oracle/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/sharding/oracle/sql-statement-rule-definition.xml @@ -26,9 +26,9 @@ - - - + + + From 5ae92987507b597792e9b84d7b42690a4ff19fff Mon Sep 17 00:00:00 2001 From: tristaZero Date: Fri, 14 Jun 2019 15:44:57 +0800 Subject: [PATCH 179/283] use index rule for pg --- .../encrypt/postgresql/sql-statement-rule-definition.xml | 6 +++--- .../postgresql/sql-statement-rule-definition.xml | 6 +++--- .../sharding/postgresql/sql-statement-rule-definition.xml | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/encrypt/postgresql/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/encrypt/postgresql/sql-statement-rule-definition.xml index 2e1cc31251c0e..29db3ebd46bf2 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/encrypt/postgresql/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/encrypt/postgresql/sql-statement-rule-definition.xml @@ -26,9 +26,9 @@ - - - + + + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/masterslave/postgresql/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/masterslave/postgresql/sql-statement-rule-definition.xml index f4a331efb692c..3eb3462426b9f 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/masterslave/postgresql/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/masterslave/postgresql/sql-statement-rule-definition.xml @@ -26,9 +26,9 @@ - - - + + + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/sharding/postgresql/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/sharding/postgresql/sql-statement-rule-definition.xml index 63d7d7587b179..c2af1c060a1f7 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/sharding/postgresql/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/sharding/postgresql/sql-statement-rule-definition.xml @@ -26,9 +26,9 @@ - - - + + + From 06c9b6b65cc487fa70dafbed45dccb800ae40967 Mon Sep 17 00:00:00 2001 From: tristaZero Date: Fri, 14 Jun 2019 15:45:09 +0800 Subject: [PATCH 180/283] use index rule for sql server --- .../encrypt/sqlserver/sql-statement-rule-definition.xml | 6 +++--- .../masterslave/sqlserver/sql-statement-rule-definition.xml | 6 +++--- .../sharding/sqlserver/sql-statement-rule-definition.xml | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/encrypt/sqlserver/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/encrypt/sqlserver/sql-statement-rule-definition.xml index 993c6d04d59f8..d5103c1c44de4 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/encrypt/sqlserver/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/encrypt/sqlserver/sql-statement-rule-definition.xml @@ -26,9 +26,9 @@ - - - + + + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/masterslave/sqlserver/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/masterslave/sqlserver/sql-statement-rule-definition.xml index 87dbf15943216..ba5059d44a7eb 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/masterslave/sqlserver/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/masterslave/sqlserver/sql-statement-rule-definition.xml @@ -26,9 +26,9 @@ - - - + + + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/sharding/sqlserver/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/sharding/sqlserver/sql-statement-rule-definition.xml index 513a366061a64..3adff63ce30c5 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/sharding/sqlserver/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/sharding/sqlserver/sql-statement-rule-definition.xml @@ -26,9 +26,9 @@ - - - + + + From d9405b48a51225f2cd40d458370764cf3c40d5a4 Mon Sep 17 00:00:00 2001 From: tristaZero Date: Fri, 14 Jun 2019 16:09:35 +0800 Subject: [PATCH 181/283] use set --- .../shardingsphere/core/metadata/table/TableMetaData.java | 5 +++-- .../core/execute/metadata/TableMetaDataLoader.java | 7 ++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/metadata/table/TableMetaData.java b/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/metadata/table/TableMetaData.java index e1dc9732d9e8f..4a47ea1717cfb 100644 --- a/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/metadata/table/TableMetaData.java +++ b/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/metadata/table/TableMetaData.java @@ -24,6 +24,7 @@ import java.util.Collection; import java.util.LinkedHashMap; import java.util.Map; +import java.util.Set; /** * Table metadata. @@ -37,9 +38,9 @@ public final class TableMetaData { private final Map columns; - private final Collection logicIndexes; + private final Set logicIndexes; - public TableMetaData(final Collection columnMetaDataList, final Collection logicIndexes) { + public TableMetaData(final Collection columnMetaDataList, final Set logicIndexes) { columns = getColumns(columnMetaDataList); this.logicIndexes = logicIndexes; } diff --git a/sharding-core/sharding-core-execute/src/main/java/org/apache/shardingsphere/core/execute/metadata/TableMetaDataLoader.java b/sharding-core/sharding-core-execute/src/main/java/org/apache/shardingsphere/core/execute/metadata/TableMetaDataLoader.java index 3e159575e66ed..bd9cc06daa2aa 100644 --- a/sharding-core/sharding-core-execute/src/main/java/org/apache/shardingsphere/core/execute/metadata/TableMetaDataLoader.java +++ b/sharding-core/sharding-core-execute/src/main/java/org/apache/shardingsphere/core/execute/metadata/TableMetaDataLoader.java @@ -42,6 +42,7 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.Set; /** * Table meta data loader. @@ -128,7 +129,7 @@ private TableMetaData createTableMetaData(final Connection connection, final Str if (isTableExist(connection, catalog, actualTableName)) { return new TableMetaData(getColumnMetaDataList(connection, catalog, actualTableName), getLogicIndexes(connection, catalog, actualTableName)); } - return new TableMetaData(Collections.emptyList(), Collections.emptyList()); + return new TableMetaData(Collections.emptyList(), Collections.emptySet()); } private boolean isTableExist(final Connection connection, final String catalog, final String actualTableName) throws SQLException { @@ -160,8 +161,8 @@ private Collection getPrimaryKeys(final Connection connection, final Str return result; } - private Collection getLogicIndexes(final Connection connection, final String catalog, final String actualTableName) throws SQLException { - Collection result = new HashSet<>(); + private Set getLogicIndexes(final Connection connection, final String catalog, final String actualTableName) throws SQLException { + Set result = new HashSet<>(); try (ResultSet resultSet = connection.getMetaData().getIndexInfo(catalog, catalog, actualTableName, false, false)) { while (resultSet.next()) { Optional logicIndex = getLogicIndex(resultSet.getString("INDEX_NAME"), actualTableName); From 17bd031d3964701ce2a425ce453702d84e65fc17 Mon Sep 17 00:00:00 2001 From: tristaZero Date: Fri, 14 Jun 2019 16:09:56 +0800 Subject: [PATCH 182/283] modify cases for TableMetaData --- .../merge/dal/show/ShowCreateTableMergedResultTest.java | 2 +- .../core/merge/dal/show/ShowTablesMergedResultTest.java | 2 +- .../engine/AbstractBaseIntegrateSQLParsingTest.java | 8 ++++---- .../core/rewrite/rewriter/EncryptSQLRewriterTest.java | 4 ++-- .../core/route/type/standard/AbstractSQLRouteTest.java | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dal/show/ShowCreateTableMergedResultTest.java b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dal/show/ShowCreateTableMergedResultTest.java index 7b05a564019aa..32b5a20d7903d 100644 --- a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dal/show/ShowCreateTableMergedResultTest.java +++ b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dal/show/ShowCreateTableMergedResultTest.java @@ -63,7 +63,7 @@ public void setUp() throws SQLException { shardingRuleConfig.getTableRuleConfigs().add(tableRuleConfig); shardingRule = new ShardingRule(shardingRuleConfig, Lists.newArrayList("ds")); Map tableMetaDataMap = new HashMap<>(1, 1); - tableMetaDataMap.put("table", new TableMetaData(Collections.emptyList(), Collections.emptyList())); + tableMetaDataMap.put("table", new TableMetaData(Collections.emptyList(), Collections.emptySet())); shardingTableMetaData = new ShardingTableMetaData(tableMetaDataMap); resultSet = mock(ResultSet.class); ResultSetMetaData resultSetMetaData = mock(ResultSetMetaData.class); diff --git a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dal/show/ShowTablesMergedResultTest.java b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dal/show/ShowTablesMergedResultTest.java index 475d6d35f6a1a..eccb901ae4b4a 100644 --- a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dal/show/ShowTablesMergedResultTest.java +++ b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dal/show/ShowTablesMergedResultTest.java @@ -63,7 +63,7 @@ public void setUp() throws SQLException { shardingRuleConfig.getTableRuleConfigs().add(tableRuleConfig); shardingRule = new ShardingRule(shardingRuleConfig, Lists.newArrayList("ds")); Map tableMetaDataMap = new HashMap<>(1, 1); - tableMetaDataMap.put("table", new TableMetaData(Collections.emptyList(), Collections.emptyList())); + tableMetaDataMap.put("table", new TableMetaData(Collections.emptyList(), Collections.emptySet())); shardingTableMetaData = new ShardingTableMetaData(tableMetaDataMap); resultSet = mock(ResultSet.class); ResultSetMetaData resultSetMetaData = mock(ResultSetMetaData.class); diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/AbstractBaseIntegrateSQLParsingTest.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/AbstractBaseIntegrateSQLParsingTest.java index 6531dd20cdfc2..e08440f5fb499 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/AbstractBaseIntegrateSQLParsingTest.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/AbstractBaseIntegrateSQLParsingTest.java @@ -64,14 +64,14 @@ private static ShardingRule buildShardingRule() throws IOException { private static ShardingTableMetaData buildShardingTableMetaData() { Map tableMetaDataMap = new HashMap<>(3, 1); tableMetaDataMap.put("t_order", new TableMetaData(Arrays.asList(new ColumnMetaData("order_id", "int", true), new ColumnMetaData("user_id", "int", false), - new ColumnMetaData("status", "int", false)), Collections.emptyList())); + new ColumnMetaData("status", "int", false)), Collections.emptySet())); tableMetaDataMap.put("t_order_item", new TableMetaData(Arrays.asList(new ColumnMetaData("item_id", "int", true), new ColumnMetaData("order_id", "int", false), new ColumnMetaData("user_id", "int", false), new ColumnMetaData("status", "varchar", false), - new ColumnMetaData("c_date", "timestamp", false)), Collections.emptyList())); + new ColumnMetaData("c_date", "timestamp", false)), Collections.emptySet())); tableMetaDataMap.put("t_place", new TableMetaData(Arrays.asList(new ColumnMetaData("user_new_id", "int", true), - new ColumnMetaData("user_new_id", "int", false)), Collections.emptyList())); + new ColumnMetaData("user_new_id", "int", false)), Collections.emptySet())); tableMetaDataMap.put("t_encrypt", new TableMetaData(Arrays.asList(new ColumnMetaData("id", "int", true), new ColumnMetaData("name", "varchar", false), - new ColumnMetaData("mobile", "varchar", false), new ColumnMetaData("status", "int", false)), Collections.emptyList())); + new ColumnMetaData("mobile", "varchar", false), new ColumnMetaData("status", "int", false)), Collections.emptySet())); return new ShardingTableMetaData(tableMetaDataMap); } } diff --git a/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/core/rewrite/rewriter/EncryptSQLRewriterTest.java b/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/core/rewrite/rewriter/EncryptSQLRewriterTest.java index bac075dfe06e8..646a46f95dd01 100644 --- a/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/core/rewrite/rewriter/EncryptSQLRewriterTest.java +++ b/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/core/rewrite/rewriter/EncryptSQLRewriterTest.java @@ -77,8 +77,8 @@ private ShardingTableMetaData createShardingTableMetaData() { ColumnMetaData columnMetaData2 = new ColumnMetaData("col2", "VARCHAR(10)", false); ColumnMetaData queryColumnMetaData1 = new ColumnMetaData("query1", "VARCHAR(10)", false); ColumnMetaData queryColumnMetaData2 = new ColumnMetaData("query2", "VARCHAR(10)", false); - TableMetaData encryptTableMetaData = new TableMetaData(Arrays.asList(columnMetaData1, columnMetaData2), Collections.emptyList()); - TableMetaData queryTableMetaData = new TableMetaData(Arrays.asList(columnMetaData1, columnMetaData2, queryColumnMetaData1, queryColumnMetaData2), Collections.emptyList()); + TableMetaData encryptTableMetaData = new TableMetaData(Arrays.asList(columnMetaData1, columnMetaData2), Collections.emptySet()); + TableMetaData queryTableMetaData = new TableMetaData(Arrays.asList(columnMetaData1, columnMetaData2, queryColumnMetaData1, queryColumnMetaData2), Collections.emptySet()); Map tables = new LinkedHashMap<>(); tables.put("t_encrypt", encryptTableMetaData); tables.put("t_query_encrypt", queryTableMetaData); diff --git a/sharding-core/sharding-core-route/src/test/java/org/apache/shardingsphere/core/route/type/standard/AbstractSQLRouteTest.java b/sharding-core/sharding-core-route/src/test/java/org/apache/shardingsphere/core/route/type/standard/AbstractSQLRouteTest.java index 3403151c19dd8..12f39076af5aa 100644 --- a/sharding-core/sharding-core-route/src/test/java/org/apache/shardingsphere/core/route/type/standard/AbstractSQLRouteTest.java +++ b/sharding-core/sharding-core-route/src/test/java/org/apache/shardingsphere/core/route/type/standard/AbstractSQLRouteTest.java @@ -113,10 +113,10 @@ private TableRuleConfiguration createTableRuleWithHintConfig(final String tableN private ShardingTableMetaData buildShardingTableMetaData() { Map tableMetaDataMap = new HashMap<>(3, 1); tableMetaDataMap.put("t_order", new TableMetaData(Arrays.asList(new ColumnMetaData("order_id", "int", true), new ColumnMetaData("user_id", "int", false), - new ColumnMetaData("status", "int", false)), Collections.emptyList())); + new ColumnMetaData("status", "int", false)), Collections.emptySet())); tableMetaDataMap.put("t_order_item", new TableMetaData(Arrays.asList(new ColumnMetaData("item_id", "int", true), new ColumnMetaData("order_id", "int", false), new ColumnMetaData("user_id", "int", false), new ColumnMetaData("status", "varchar", false), - new ColumnMetaData("c_date", "timestamp", false)), Collections.emptyList())); + new ColumnMetaData("c_date", "timestamp", false)), Collections.emptySet())); return new ShardingTableMetaData(tableMetaDataMap); } } From 61bf06eec49cd1e1d0179dfc1391e090282871a1 Mon Sep 17 00:00:00 2001 From: tristaZero Date: Fri, 14 Jun 2019 16:10:41 +0800 Subject: [PATCH 183/283] use set to get LogicIndexes --- .../shardingjdbc/jdbc/core/datasource/EncryptDataSource.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/datasource/EncryptDataSource.java b/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/datasource/EncryptDataSource.java index d4ae77afc6263..44ab222650569 100644 --- a/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/datasource/EncryptDataSource.java +++ b/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/datasource/EncryptDataSource.java @@ -46,6 +46,7 @@ import java.util.List; import java.util.Map; import java.util.Properties; +import java.util.Set; import java.util.logging.Logger; /** @@ -120,8 +121,8 @@ private Collection getPrimaryKeys(final Connection connection, final Str return result; } - private Collection getLogicIndexes(final Connection connection, final String actualTableName) throws SQLException { - Collection result = new HashSet<>(); + private Set getLogicIndexes(final Connection connection, final String actualTableName) throws SQLException { + Set result = new HashSet<>(); try (ResultSet resultSet = connection.getMetaData().getIndexInfo(connection.getCatalog(), connection.getCatalog(), actualTableName, false, false)) { while (resultSet.next()) { Optional logicIndex = getLogicIndex(resultSet.getString("INDEX_NAME"), actualTableName); From 96ea88cd49ee25a628af39f5530f48dedb14e12e Mon Sep 17 00:00:00 2001 From: tristaZero Date: Fri, 14 Jun 2019 16:16:51 +0800 Subject: [PATCH 184/283] delete alter index rule --- .../encrypt/mysql/sql-statement-rule-definition.xml | 1 - .../masterslave/mysql/sql-statement-rule-definition.xml | 1 - .../sharding/mysql/sql-statement-rule-definition.xml | 1 - 3 files changed, 3 deletions(-) diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/encrypt/mysql/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/encrypt/mysql/sql-statement-rule-definition.xml index 74a89f73e8191..57d9045ecbbc8 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/encrypt/mysql/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/encrypt/mysql/sql-statement-rule-definition.xml @@ -28,7 +28,6 @@ - diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/masterslave/mysql/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/masterslave/mysql/sql-statement-rule-definition.xml index 8444641b9d179..72c8eba96da04 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/masterslave/mysql/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/masterslave/mysql/sql-statement-rule-definition.xml @@ -28,7 +28,6 @@ - diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/sharding/mysql/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/sharding/mysql/sql-statement-rule-definition.xml index 5b53f3ad9cfef..60bd0d11528e4 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/sharding/mysql/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/sharding/mysql/sql-statement-rule-definition.xml @@ -28,7 +28,6 @@ - From 682beb67594f5eaf4055ed0356cb0cfe8806e21d Mon Sep 17 00:00:00 2001 From: tristaZero Date: Fri, 14 Jun 2019 16:18:41 +0800 Subject: [PATCH 185/283] USE DDLStatement --- .../encrypt/oracle/sql-statement-rule-definition.xml | 2 +- .../masterslave/oracle/sql-statement-rule-definition.xml | 2 +- .../sharding/oracle/sql-statement-rule-definition.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/encrypt/oracle/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/encrypt/oracle/sql-statement-rule-definition.xml index 858b0f5a449eb..1bdbf669013df 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/encrypt/oracle/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/encrypt/oracle/sql-statement-rule-definition.xml @@ -27,7 +27,7 @@ - + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/masterslave/oracle/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/masterslave/oracle/sql-statement-rule-definition.xml index 05e188c267d68..edcacedc855bd 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/masterslave/oracle/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/masterslave/oracle/sql-statement-rule-definition.xml @@ -27,7 +27,7 @@ - + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/sharding/oracle/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/sharding/oracle/sql-statement-rule-definition.xml index f2006e691d7e1..7e86c29bdd049 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/sharding/oracle/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/sharding/oracle/sql-statement-rule-definition.xml @@ -27,7 +27,7 @@ - + From 099917a7dbb4bb4dbadf816922e0f57b2db92ddf Mon Sep 17 00:00:00 2001 From: terrymanu Date: Fri, 14 Jun 2019 16:22:56 +0800 Subject: [PATCH 186/283] for #2556, Merge ShardingTableFiller & EncryptTableFiller to TableFiller --- .../core/rule/ShardingRule.java | 10 --------- .../core/rule/ShardingRuleTest.java | 20 ----------------- .../TableFiller.java} | 22 ++++--------------- .../filler-rule-definition.xml | 6 ++--- .../sharding/filler-rule-definition.xml | 1 - .../encrypt/mysql/filler-rule-definition.xml | 1 - .../encrypt/oracle/filler-rule-definition.xml | 1 - .../postgresql/filler-rule-definition.xml | 1 - .../sqlserver/filler-rule-definition.xml | 1 - .../src/test/resources/parser/dql/select.xml | 20 ++++++++++------- .../test/resources/parser/dql/select_or.xml | 5 +++-- 11 files changed, 22 insertions(+), 66 deletions(-) rename sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/{sharding/ShardingTableFiller.java => common/TableFiller.java} (53%) diff --git a/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/rule/ShardingRule.java b/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/rule/ShardingRule.java index 4570faf43e754..67e3b9032f9d7 100644 --- a/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/rule/ShardingRule.java +++ b/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/rule/ShardingRule.java @@ -460,16 +460,6 @@ public Optional findMasterSlaveRule(final String dataSourceName return Optional.absent(); } - /** - * Judge contains table in sharding rule. - * - * @param logicTableName logic table name - * @return contains table in sharding rule or not - */ - public boolean contains(final String logicTableName) { - return findTableRule(logicTableName).isPresent() || findBindingTableRule(logicTableName).isPresent() || isBroadcastTable(logicTableName); - } - /** * Get sharding logic table names. * diff --git a/sharding-core/sharding-core-common/src/test/java/org/apache/shardingsphere/core/rule/ShardingRuleTest.java b/sharding-core/sharding-core-common/src/test/java/org/apache/shardingsphere/core/rule/ShardingRuleTest.java index 2b3128a49f811..b8fbbeea30f75 100644 --- a/sharding-core/sharding-core-common/src/test/java/org/apache/shardingsphere/core/rule/ShardingRuleTest.java +++ b/sharding-core/sharding-core-common/src/test/java/org/apache/shardingsphere/core/rule/ShardingRuleTest.java @@ -339,26 +339,6 @@ public void assertGetDataNodeByLogicTableFailureWithDataSourceName() { createMaximumShardingRule().getDataNode("ds_3", "logic_table"); } - @Test - public void assertContainsWithTableRule() { - assertTrue(createMaximumShardingRule().contains("LOGIC_TABLE")); - } - - @Test - public void assertContainsWithBindingTableRule() { - assertTrue(createMaximumShardingRule().contains("SUB_LOGIC_TABLE")); - } - - @Test - public void assertContainsWithBroadcastTableRule() { - assertTrue(createMaximumShardingRule().contains("BROADCAST_TABLE")); - } - - @Test - public void assertNotContains() { - assertFalse(createMaximumShardingRule().contains("NEW_TABLE")); - } - @Test public void assertGetShardingLogicTableNames() { ShardingRule actual = createMaximumShardingRule(); diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/ShardingTableFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/TableFiller.java similarity index 53% rename from sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/ShardingTableFiller.java rename to sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/TableFiller.java index 9fce9cd962cc6..0485a02868b90 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/ShardingTableFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/TableFiller.java @@ -15,38 +15,24 @@ * limitations under the License. */ -package org.apache.shardingsphere.core.parse.filler.sharding; +package org.apache.shardingsphere.core.parse.filler.common; -import lombok.Setter; import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; -import org.apache.shardingsphere.core.parse.filler.api.ShardingRuleAwareFiller; import org.apache.shardingsphere.core.parse.sql.context.table.Table; import org.apache.shardingsphere.core.parse.sql.segment.common.TableSegment; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; -import org.apache.shardingsphere.core.parse.sql.statement.dml.SelectStatement; -import org.apache.shardingsphere.core.rule.ShardingRule; /** - * Table filler for sharding. + * Table filler. * * @author duhongjun * @author zhangliang * @author panjuan */ -@Setter -public final class ShardingTableFiller implements SQLSegmentFiller, ShardingRuleAwareFiller { - - private ShardingRule shardingRule; +public final class TableFiller implements SQLSegmentFiller { @Override public void fill(final TableSegment sqlSegment, final SQLStatement sqlStatement) { - if (isTableInShardingRule(sqlSegment.getName()) || !(sqlStatement instanceof SelectStatement)) { - sqlStatement.getTables().add(new Table(sqlSegment.getName(), sqlSegment.getAlias().orNull())); - } - } - - private boolean isTableInShardingRule(final String tableName) { - return shardingRule.contains(tableName) || shardingRule.findBindingTableRule(tableName).isPresent() || shardingRule.isBroadcastTable(tableName) - || shardingRule.getShardingDataSourceNames().getDataSourceNames().contains(shardingRule.getShardingDataSourceNames().getDefaultDataSourceName()); + sqlStatement.getTables().add(new Table(sqlSegment.getName(), sqlSegment.getAlias().orNull())); } } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/resources/META-INF/parsing-rule-definition/filler-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/resources/META-INF/parsing-rule-definition/filler-rule-definition.xml index 48ded9697a583..46b57ff059859 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/resources/META-INF/parsing-rule-definition/filler-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/resources/META-INF/parsing-rule-definition/filler-rule-definition.xml @@ -17,6 +17,9 @@ --> + + + @@ -30,8 +33,5 @@ - - - diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/resources/META-INF/parsing-rule-definition/sharding/filler-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/resources/META-INF/parsing-rule-definition/sharding/filler-rule-definition.xml index 19db8e4d04556..a4a1c486d3532 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/resources/META-INF/parsing-rule-definition/sharding/filler-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/resources/META-INF/parsing-rule-definition/sharding/filler-rule-definition.xml @@ -17,7 +17,6 @@ --> - diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/encrypt/mysql/filler-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/encrypt/mysql/filler-rule-definition.xml index 6ecaee086e053..cbf990b4c63e6 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/encrypt/mysql/filler-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/encrypt/mysql/filler-rule-definition.xml @@ -17,7 +17,6 @@ --> - diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/encrypt/oracle/filler-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/encrypt/oracle/filler-rule-definition.xml index 6ecaee086e053..cbf990b4c63e6 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/encrypt/oracle/filler-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/encrypt/oracle/filler-rule-definition.xml @@ -17,7 +17,6 @@ --> - diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/encrypt/postgresql/filler-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/encrypt/postgresql/filler-rule-definition.xml index 6ecaee086e053..cbf990b4c63e6 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/encrypt/postgresql/filler-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/encrypt/postgresql/filler-rule-definition.xml @@ -17,7 +17,6 @@ --> - diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/encrypt/sqlserver/filler-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/encrypt/sqlserver/filler-rule-definition.xml index 6ecaee086e053..cbf990b4c63e6 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/encrypt/sqlserver/filler-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/encrypt/sqlserver/filler-rule-definition.xml @@ -17,7 +17,6 @@ --> - diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select.xml index 49aa61ef2771e..58e73156aba9c 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select.xml @@ -312,8 +312,9 @@ -
-
+
+
+
@@ -345,8 +346,9 @@ -
-
+
+
+
@@ -378,8 +380,9 @@ -
-
+
+
+
@@ -404,8 +407,9 @@ -
-
+
+
+
diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select_or.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select_or.xml index 8b05369931cf1..a0c3b29b4b6ce 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select_or.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select_or.xml @@ -187,8 +187,9 @@ -
-
+
+
+
From 9eb52a6be3918cdcc9068db1539fb74360975b25 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Fri, 14 Jun 2019 16:23:33 +0800 Subject: [PATCH 187/283] for #2556, remove EncryptTableFiller --- .../filler/encrypt/EncryptTableFiller.java | 38 ------------------- 1 file changed, 38 deletions(-) delete mode 100644 sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/EncryptTableFiller.java diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/EncryptTableFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/EncryptTableFiller.java deleted file mode 100644 index 9d529d8f49234..0000000000000 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/EncryptTableFiller.java +++ /dev/null @@ -1,38 +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.core.parse.filler.encrypt; - -import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; -import org.apache.shardingsphere.core.parse.sql.context.table.Table; -import org.apache.shardingsphere.core.parse.sql.segment.common.TableSegment; -import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; - -/** - * Table filler for encrypt. - * - * @author duhongjun - * @author zhangliang - */ -public final class EncryptTableFiller implements SQLSegmentFiller { - - @Override - public void fill(final TableSegment sqlSegment, final SQLStatement sqlStatement) { - // TODO filter encrypt rule - sqlStatement.getTables().add(new Table(sqlSegment.getName(), sqlSegment.getAlias().orNull())); - } -} From 16a1fb796fa51744e834dab87d7fbb3254d28659 Mon Sep 17 00:00:00 2001 From: tristaZero Date: Fri, 14 Jun 2019 16:29:33 +0800 Subject: [PATCH 188/283] USE DDL STATEMENT --- .../encrypt/postgresql/sql-statement-rule-definition.xml | 2 +- .../masterslave/postgresql/sql-statement-rule-definition.xml | 2 +- .../sharding/postgresql/sql-statement-rule-definition.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/encrypt/postgresql/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/encrypt/postgresql/sql-statement-rule-definition.xml index 29db3ebd46bf2..b0dff43c9ea73 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/encrypt/postgresql/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/encrypt/postgresql/sql-statement-rule-definition.xml @@ -27,7 +27,7 @@ - + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/masterslave/postgresql/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/masterslave/postgresql/sql-statement-rule-definition.xml index 3eb3462426b9f..5bf477250ec1a 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/masterslave/postgresql/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/masterslave/postgresql/sql-statement-rule-definition.xml @@ -27,7 +27,7 @@ - + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/sharding/postgresql/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/sharding/postgresql/sql-statement-rule-definition.xml index c2af1c060a1f7..bc25080b6f274 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/sharding/postgresql/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/sharding/postgresql/sql-statement-rule-definition.xml @@ -27,7 +27,7 @@ - + From e4fb682a581cae4e28af7bc75e24976f082bc11a Mon Sep 17 00:00:00 2001 From: tristaZero Date: Fri, 14 Jun 2019 16:30:26 +0800 Subject: [PATCH 189/283] USE DDLStatement FOR SQLSERVER --- .../encrypt/sqlserver/sql-statement-rule-definition.xml | 2 +- .../masterslave/sqlserver/sql-statement-rule-definition.xml | 2 +- .../sharding/sqlserver/sql-statement-rule-definition.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/encrypt/sqlserver/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/encrypt/sqlserver/sql-statement-rule-definition.xml index d5103c1c44de4..59039357ebe3c 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/encrypt/sqlserver/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/encrypt/sqlserver/sql-statement-rule-definition.xml @@ -27,7 +27,7 @@ - + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/masterslave/sqlserver/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/masterslave/sqlserver/sql-statement-rule-definition.xml index ba5059d44a7eb..950f7adb5c159 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/masterslave/sqlserver/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/masterslave/sqlserver/sql-statement-rule-definition.xml @@ -27,7 +27,7 @@ - + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/sharding/sqlserver/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/sharding/sqlserver/sql-statement-rule-definition.xml index 3adff63ce30c5..a60afe464e535 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/sharding/sqlserver/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/sharding/sqlserver/sql-statement-rule-definition.xml @@ -27,7 +27,7 @@ - + From 89a0ad0e30d03e0c3041abe83c03a1ad1726f20c Mon Sep 17 00:00:00 2001 From: tristaZero Date: Fri, 14 Jun 2019 16:31:15 +0800 Subject: [PATCH 190/283] delete AlterIndexStatement --- .../statement/ddl/AlterIndexStatement.java | 31 ------------------- 1 file changed, 31 deletions(-) delete mode 100644 sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/statement/ddl/AlterIndexStatement.java diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/statement/ddl/AlterIndexStatement.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/statement/ddl/AlterIndexStatement.java deleted file mode 100644 index fb578245ca7b7..0000000000000 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/statement/ddl/AlterIndexStatement.java +++ /dev/null @@ -1,31 +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.core.parse.sql.statement.ddl; - -import lombok.Getter; -import lombok.ToString; - -/** - * Alter index statement. - * - * @author panjuan - */ -@Getter -@ToString(callSuper = true) -public final class AlterIndexStatement extends DDLStatement { -} From fc528b40acce2f6d9279eafb479cca03487ec8ae Mon Sep 17 00:00:00 2001 From: tristaZero Date: Fri, 14 Jun 2019 16:47:20 +0800 Subject: [PATCH 191/283] refreshTableMetaData for index --- .../backend/schema/ShardingSchema.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/schema/ShardingSchema.java b/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/schema/ShardingSchema.java index b9985750c0024..c2a364ed7c7af 100644 --- a/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/schema/ShardingSchema.java +++ b/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/schema/ShardingSchema.java @@ -17,6 +17,7 @@ package org.apache.shardingsphere.shardingproxy.backend.schema; +import com.google.common.base.Optional; import com.google.common.eventbus.Subscribe; import lombok.Getter; import org.apache.shardingsphere.api.config.sharding.ShardingRuleConfiguration; @@ -25,7 +26,10 @@ import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.sql.statement.ddl.AlterTableStatement; +import org.apache.shardingsphere.core.parse.sql.statement.ddl.CreateIndexStatement; import org.apache.shardingsphere.core.parse.sql.statement.ddl.CreateTableStatement; +import org.apache.shardingsphere.core.parse.sql.statement.ddl.DDLStatement; +import org.apache.shardingsphere.core.parse.sql.statement.ddl.DropIndexStatement; import org.apache.shardingsphere.core.parse.sql.statement.ddl.DropTableStatement; import org.apache.shardingsphere.core.rule.MasterSlaveRule; import org.apache.shardingsphere.core.rule.ShardingRule; @@ -106,6 +110,10 @@ public void refreshTableMetaData(final SQLStatement sqlStatement) { refreshTableMetaData((AlterTableStatement) sqlStatement); } else if (sqlStatement instanceof DropTableStatement) { refreshTableMetaData((DropTableStatement) sqlStatement); + } else if (sqlStatement instanceof CreateIndexStatement) { + refreshTableMetaData((CreateIndexStatement) sqlStatement); + } else if (sqlStatement instanceof DropIndexStatement) { + refreshTableMetaData((DropIndexStatement) sqlStatement); } } @@ -124,4 +132,27 @@ private void refreshTableMetaData(final DropTableStatement dropTableStatement) { getMetaData().getTable().remove(each); } } + + private void refreshTableMetaData(final CreateIndexStatement createIndexStatement) { + String tableName = createIndexStatement.getTables().getSingleTableName(); + getMetaData().getTable().get(tableName).getLogicIndexes().add(createIndexStatement.getIndexName()); + } + + private void refreshTableMetaData(final DropIndexStatement dropIndexStatement) { + Optional logicTableName = getLogicTableName(dropIndexStatement); + if (logicTableName.isPresent()) { + getMetaData().getTable().get(logicTableName.get()).getLogicIndexes().remove(dropIndexStatement.getIndexName()); + } + } + + private Optional getLogicTableName(final DropIndexStatement dropIndexStatement) { + if (isOperateIndexWithoutTable(dropIndexStatement)) { + return getMetaData().getTable().getLogicTableName(dropIndexStatement.getIndexName()); + } + return Optional.of(dropIndexStatement.getTables().getSingleTableName()); + } + + private boolean isOperateIndexWithoutTable(final SQLStatement sqlStatement) { + return sqlStatement instanceof DDLStatement && sqlStatement.getTables().isEmpty(); + } } From 6e94dfa0f8358d3a6de1ff792e933242a3e21a71 Mon Sep 17 00:00:00 2001 From: tristaZero Date: Fri, 14 Jun 2019 16:47:48 +0800 Subject: [PATCH 192/283] refreshTableMetaData for index --- .../executor/AbstractStatementExecutor.java | 33 ++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/executor/AbstractStatementExecutor.java b/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/executor/AbstractStatementExecutor.java index f332fde38aef7..bd25b9ce45efe 100644 --- a/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/executor/AbstractStatementExecutor.java +++ b/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/executor/AbstractStatementExecutor.java @@ -18,6 +18,7 @@ package org.apache.shardingsphere.shardingjdbc.executor; import com.google.common.base.Function; +import com.google.common.base.Optional; import com.google.common.collect.Lists; import lombok.AccessLevel; import lombok.Getter; @@ -33,7 +34,10 @@ import org.apache.shardingsphere.core.execute.sql.prepare.SQLExecutePrepareTemplate; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.sql.statement.ddl.AlterTableStatement; +import org.apache.shardingsphere.core.parse.sql.statement.ddl.CreateIndexStatement; import org.apache.shardingsphere.core.parse.sql.statement.ddl.CreateTableStatement; +import org.apache.shardingsphere.core.parse.sql.statement.ddl.DDLStatement; +import org.apache.shardingsphere.core.parse.sql.statement.ddl.DropIndexStatement; import org.apache.shardingsphere.core.parse.sql.statement.ddl.DropTableStatement; import org.apache.shardingsphere.shardingjdbc.jdbc.core.ShardingContext; import org.apache.shardingsphere.shardingjdbc.jdbc.core.connection.ShardingConnection; @@ -130,7 +134,7 @@ protected final List executeCallback(final SQLExecuteCallback executeC return result; } - protected boolean isAccumulate() { + protected final boolean isAccumulate() { return !connection.getShardingContext().getShardingRule().isAllBroadcastTables(sqlStatement.getTables().getTableNames()); } @@ -161,6 +165,10 @@ private void refreshShardingMetaDataIfNeeded(final ShardingContext shardingConte refreshTableMetaData(shardingContext, (AlterTableStatement) sqlStatement); } else if (sqlStatement instanceof DropTableStatement) { refreshTableMetaData(shardingContext, (DropTableStatement) sqlStatement); + } else if (sqlStatement instanceof CreateIndexStatement) { + refreshTableMetaData(shardingContext, (CreateIndexStatement) sqlStatement); + } else if (sqlStatement instanceof DropIndexStatement) { + refreshTableMetaData(shardingContext, (DropIndexStatement) sqlStatement); } } @@ -180,6 +188,29 @@ private void refreshTableMetaData(final ShardingContext shardingContext, final D } } + private void refreshTableMetaData(final ShardingContext shardingContext, final CreateIndexStatement createIndexStatement) { + String tableName = createIndexStatement.getTables().getSingleTableName(); + shardingContext.getMetaData().getTable().get(tableName).getLogicIndexes().add(createIndexStatement.getIndexName()); + } + + private void refreshTableMetaData(final ShardingContext shardingContext, final DropIndexStatement dropIndexStatement) { + Optional logicTableName = getLogicTableName(shardingContext, dropIndexStatement); + if (logicTableName.isPresent()) { + shardingContext.getMetaData().getTable().get(logicTableName.get()).getLogicIndexes().remove(dropIndexStatement.getIndexName()); + } + } + + private Optional getLogicTableName(final ShardingContext shardingContext, final DropIndexStatement dropIndexStatement) { + if (isOperateIndexWithoutTable()) { + return shardingContext.getMetaData().getTable().getLogicTableName(dropIndexStatement.getIndexName()); + } + return Optional.of(dropIndexStatement.getTables().getSingleTableName()); + } + + private boolean isOperateIndexWithoutTable() { + return sqlStatement instanceof DDLStatement && sqlStatement.getTables().isEmpty(); + } + private TableMetaDataInitializer getTableMetaDataInitializer() { ShardingProperties shardingProperties = connection.getShardingContext().getShardingProperties(); return new TableMetaDataInitializer(connection.getShardingContext().getMetaData().getDataSource(), From 34ec3773b4f7141b909dfd4726ae85b0b7236671 Mon Sep 17 00:00:00 2001 From: tristaZero Date: Fri, 14 Jun 2019 16:47:59 +0800 Subject: [PATCH 193/283] add getLogicTableName() --- .../metadata/table/ShardingTableMetaData.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/metadata/table/ShardingTableMetaData.java b/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/metadata/table/ShardingTableMetaData.java index 2cc684303a0a7..5ea3622c65a9c 100644 --- a/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/metadata/table/ShardingTableMetaData.java +++ b/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/metadata/table/ShardingTableMetaData.java @@ -17,12 +17,14 @@ package org.apache.shardingsphere.core.metadata.table; +import com.google.common.base.Optional; import lombok.Getter; import lombok.RequiredArgsConstructor; import java.util.Collection; import java.util.Collections; import java.util.Map; +import java.util.Map.Entry; /** * Sharding table meta data. @@ -95,4 +97,19 @@ public boolean containsColumn(final String tableName, final String column) { public Collection getAllColumnNames(final String tableName) { return tables.containsKey(tableName) ? tables.get(tableName).getColumns().keySet() : Collections.emptyList(); } + + /** + * Get logic table name. + * + * @param logicIndexName logic index name + * @return logic table name + */ + public Optional getLogicTableName(final String logicIndexName) { + for (Entry entry : tables.entrySet()) { + if (entry.getValue().getLogicIndexes().contains(logicIndexName)) { + return Optional.of(entry.getKey()); + } + } + return Optional.absent(); + } } From 30d326d43b6b7e17f8d3c28d72415acbd5bce014 Mon Sep 17 00:00:00 2001 From: tristaZero Date: Fri, 14 Jun 2019 17:52:31 +0800 Subject: [PATCH 194/283] add DDLOptimizeEngine --- .../sharding/ddl/DDLOptimizeEngine.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/ddl/DDLOptimizeEngine.java diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/ddl/DDLOptimizeEngine.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/ddl/DDLOptimizeEngine.java new file mode 100644 index 0000000000000..9278ad193f169 --- /dev/null +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/ddl/DDLOptimizeEngine.java @@ -0,0 +1,26 @@ +/* + * 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.core.optimize.engine.sharding.ddl; + +/** + * DDL OptimizeEngine. + * + * @author panjuan + */ +public final class DDLOptimizeEngine { +} From 1eea9bc16471b963b92f1abc7a3c3911c95067f4 Mon Sep 17 00:00:00 2001 From: tristaZero Date: Fri, 14 Jun 2019 17:54:20 +0800 Subject: [PATCH 195/283] rename package name to dql --- .../shardingsphere/core/optimize/OptimizeEngineFactory.java | 4 ++-- .../core/optimize/condition/ShardingConditions.java | 2 +- .../engine/sharding/{insert => dml}/InsertOptimizeEngine.java | 2 +- .../sharding/{query => dql}/AlwaysFalseShardingCondition.java | 2 +- .../sharding/{query => dql}/AlwaysFalseShardingValue.java | 2 +- .../engine/sharding/{query => dql}/QueryOptimizeEngine.java | 2 +- .../optimize/engine/sharding/InsertOptimizeEngineTest.java | 2 +- .../optimize/engine/sharding/QueryOptimizeEngineTest.java | 2 +- 8 files changed, 9 insertions(+), 9 deletions(-) rename sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/{insert => dml}/InsertOptimizeEngine.java (99%) rename sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/{query => dql}/AlwaysFalseShardingCondition.java (99%) rename sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/{query => dql}/AlwaysFalseShardingValue.java (99%) rename sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/{query => dql}/QueryOptimizeEngine.java (99%) diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java index aaa5812f8cc53..e118641498333 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java @@ -22,8 +22,8 @@ import org.apache.shardingsphere.core.optimize.engine.OptimizeEngine; import org.apache.shardingsphere.core.optimize.engine.encrypt.EncryptDefaultOptimizeEngine; import org.apache.shardingsphere.core.optimize.engine.encrypt.EncryptInsertOptimizeEngine; -import org.apache.shardingsphere.core.optimize.engine.sharding.insert.InsertOptimizeEngine; -import org.apache.shardingsphere.core.optimize.engine.sharding.query.QueryOptimizeEngine; +import org.apache.shardingsphere.core.optimize.engine.sharding.dml.InsertOptimizeEngine; +import org.apache.shardingsphere.core.optimize.engine.sharding.dql.QueryOptimizeEngine; import org.apache.shardingsphere.core.parse.sql.context.condition.Conditions; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.DMLStatement; diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/condition/ShardingConditions.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/condition/ShardingConditions.java index 2d1ebb06aeb57..ae328f665c844 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/condition/ShardingConditions.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/condition/ShardingConditions.java @@ -19,7 +19,7 @@ import lombok.Getter; import lombok.RequiredArgsConstructor; -import org.apache.shardingsphere.core.optimize.engine.sharding.query.AlwaysFalseShardingCondition; +import org.apache.shardingsphere.core.optimize.engine.sharding.dql.AlwaysFalseShardingCondition; import java.util.List; diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/insert/InsertOptimizeEngine.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/InsertOptimizeEngine.java similarity index 99% rename from sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/insert/InsertOptimizeEngine.java rename to sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/InsertOptimizeEngine.java index c845f7d95cb2d..050bf740d4c20 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/insert/InsertOptimizeEngine.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/InsertOptimizeEngine.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.shardingsphere.core.optimize.engine.sharding.insert; +package org.apache.shardingsphere.core.optimize.engine.sharding.dml; import com.google.common.base.Optional; import lombok.RequiredArgsConstructor; diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/query/AlwaysFalseShardingCondition.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dql/AlwaysFalseShardingCondition.java similarity index 99% rename from sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/query/AlwaysFalseShardingCondition.java rename to sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dql/AlwaysFalseShardingCondition.java index 044c42c6bbf55..4818ce78ff493 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/query/AlwaysFalseShardingCondition.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dql/AlwaysFalseShardingCondition.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.shardingsphere.core.optimize.engine.sharding.query; +package org.apache.shardingsphere.core.optimize.engine.sharding.dql; import org.apache.shardingsphere.core.optimize.condition.ShardingCondition; diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/query/AlwaysFalseShardingValue.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dql/AlwaysFalseShardingValue.java similarity index 99% rename from sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/query/AlwaysFalseShardingValue.java rename to sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dql/AlwaysFalseShardingValue.java index 3422336f716f6..15c779d4aadca 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/query/AlwaysFalseShardingValue.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dql/AlwaysFalseShardingValue.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.shardingsphere.core.optimize.engine.sharding.query; +package org.apache.shardingsphere.core.optimize.engine.sharding.dql; import org.apache.shardingsphere.core.strategy.route.value.RouteValue; diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/query/QueryOptimizeEngine.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dql/QueryOptimizeEngine.java similarity index 99% rename from sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/query/QueryOptimizeEngine.java rename to sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dql/QueryOptimizeEngine.java index 4c2c2e08f55f4..fef5ef94e439c 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/query/QueryOptimizeEngine.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dql/QueryOptimizeEngine.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.shardingsphere.core.optimize.engine.sharding.query; +package org.apache.shardingsphere.core.optimize.engine.sharding.dql; import com.google.common.base.Optional; import com.google.common.collect.BoundType; diff --git a/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/InsertOptimizeEngineTest.java b/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/InsertOptimizeEngineTest.java index fa97bcef96b1f..d3c40b5fb42dc 100644 --- a/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/InsertOptimizeEngineTest.java +++ b/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/InsertOptimizeEngineTest.java @@ -19,7 +19,7 @@ import com.google.common.base.Preconditions; import org.apache.shardingsphere.core.optimize.GeneratedKey; -import org.apache.shardingsphere.core.optimize.engine.sharding.insert.InsertOptimizeEngine; +import org.apache.shardingsphere.core.optimize.engine.sharding.dml.InsertOptimizeEngine; import org.apache.shardingsphere.core.optimize.result.OptimizeResult; import org.apache.shardingsphere.core.parse.sql.context.condition.AndCondition; import org.apache.shardingsphere.core.parse.sql.context.condition.Column; diff --git a/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/QueryOptimizeEngineTest.java b/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/QueryOptimizeEngineTest.java index 2f7d9ec988af6..cc190a60b71c0 100644 --- a/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/QueryOptimizeEngineTest.java +++ b/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/QueryOptimizeEngineTest.java @@ -20,7 +20,7 @@ import com.google.common.collect.Range; import org.apache.shardingsphere.core.optimize.condition.ShardingCondition; import org.apache.shardingsphere.core.optimize.condition.ShardingConditions; -import org.apache.shardingsphere.core.optimize.engine.sharding.query.QueryOptimizeEngine; +import org.apache.shardingsphere.core.optimize.engine.sharding.dql.QueryOptimizeEngine; import org.apache.shardingsphere.core.parse.sql.context.condition.AndCondition; import org.apache.shardingsphere.core.parse.sql.context.condition.Column; import org.apache.shardingsphere.core.parse.sql.context.condition.Condition; From 8846e88436fcd4d2825f789b3e382b36b2deefca Mon Sep 17 00:00:00 2001 From: tristaZero Date: Fri, 14 Jun 2019 18:09:47 +0800 Subject: [PATCH 196/283] delete isOperateIndexWithoutTable() --- .../shardingjdbc/executor/AbstractStatementExecutor.java | 7 +------ .../shardingproxy/backend/schema/ShardingSchema.java | 7 +------ 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/executor/AbstractStatementExecutor.java b/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/executor/AbstractStatementExecutor.java index bd25b9ce45efe..cd98366bfae9f 100644 --- a/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/executor/AbstractStatementExecutor.java +++ b/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/executor/AbstractStatementExecutor.java @@ -36,7 +36,6 @@ import org.apache.shardingsphere.core.parse.sql.statement.ddl.AlterTableStatement; import org.apache.shardingsphere.core.parse.sql.statement.ddl.CreateIndexStatement; import org.apache.shardingsphere.core.parse.sql.statement.ddl.CreateTableStatement; -import org.apache.shardingsphere.core.parse.sql.statement.ddl.DDLStatement; import org.apache.shardingsphere.core.parse.sql.statement.ddl.DropIndexStatement; import org.apache.shardingsphere.core.parse.sql.statement.ddl.DropTableStatement; import org.apache.shardingsphere.shardingjdbc.jdbc.core.ShardingContext; @@ -201,16 +200,12 @@ private void refreshTableMetaData(final ShardingContext shardingContext, final D } private Optional getLogicTableName(final ShardingContext shardingContext, final DropIndexStatement dropIndexStatement) { - if (isOperateIndexWithoutTable()) { + if (dropIndexStatement.getTables().isEmpty()) { return shardingContext.getMetaData().getTable().getLogicTableName(dropIndexStatement.getIndexName()); } return Optional.of(dropIndexStatement.getTables().getSingleTableName()); } - private boolean isOperateIndexWithoutTable() { - return sqlStatement instanceof DDLStatement && sqlStatement.getTables().isEmpty(); - } - private TableMetaDataInitializer getTableMetaDataInitializer() { ShardingProperties shardingProperties = connection.getShardingContext().getShardingProperties(); return new TableMetaDataInitializer(connection.getShardingContext().getMetaData().getDataSource(), diff --git a/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/schema/ShardingSchema.java b/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/schema/ShardingSchema.java index c2a364ed7c7af..39cc5dbcf1a2a 100644 --- a/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/schema/ShardingSchema.java +++ b/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/schema/ShardingSchema.java @@ -28,7 +28,6 @@ import org.apache.shardingsphere.core.parse.sql.statement.ddl.AlterTableStatement; import org.apache.shardingsphere.core.parse.sql.statement.ddl.CreateIndexStatement; import org.apache.shardingsphere.core.parse.sql.statement.ddl.CreateTableStatement; -import org.apache.shardingsphere.core.parse.sql.statement.ddl.DDLStatement; import org.apache.shardingsphere.core.parse.sql.statement.ddl.DropIndexStatement; import org.apache.shardingsphere.core.parse.sql.statement.ddl.DropTableStatement; import org.apache.shardingsphere.core.rule.MasterSlaveRule; @@ -146,13 +145,9 @@ private void refreshTableMetaData(final DropIndexStatement dropIndexStatement) { } private Optional getLogicTableName(final DropIndexStatement dropIndexStatement) { - if (isOperateIndexWithoutTable(dropIndexStatement)) { + if (dropIndexStatement.getTables().isEmpty()) { return getMetaData().getTable().getLogicTableName(dropIndexStatement.getIndexName()); } return Optional.of(dropIndexStatement.getTables().getSingleTableName()); } - - private boolean isOperateIndexWithoutTable(final SQLStatement sqlStatement) { - return sqlStatement instanceof DDLStatement && sqlStatement.getTables().isEmpty(); - } } From 30621b2917ccb46f3152c9d18a130aed924c5070 Mon Sep 17 00:00:00 2001 From: tristaZero Date: Fri, 14 Jun 2019 18:11:59 +0800 Subject: [PATCH 197/283] add optimize() --- .../sharding/ddl/DDLOptimizeEngine.java | 39 ++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/ddl/DDLOptimizeEngine.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/ddl/DDLOptimizeEngine.java index 9278ad193f169..be7d6e0acecc9 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/ddl/DDLOptimizeEngine.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/ddl/DDLOptimizeEngine.java @@ -17,10 +17,47 @@ package org.apache.shardingsphere.core.optimize.engine.sharding.ddl; +import com.google.common.base.Optional; +import lombok.RequiredArgsConstructor; +import org.apache.shardingsphere.core.metadata.ShardingMetaData; +import org.apache.shardingsphere.core.optimize.condition.ShardingCondition; +import org.apache.shardingsphere.core.optimize.condition.ShardingConditions; +import org.apache.shardingsphere.core.optimize.engine.OptimizeEngine; +import org.apache.shardingsphere.core.optimize.result.OptimizeResult; +import org.apache.shardingsphere.core.parse.sql.statement.ddl.DDLStatement; +import org.apache.shardingsphere.core.parse.sql.statement.ddl.DropIndexStatement; + +import java.util.Collections; + /** * DDL OptimizeEngine. * * @author panjuan */ -public final class DDLOptimizeEngine { +@RequiredArgsConstructor +public final class DDLOptimizeEngine implements OptimizeEngine { + + private final DDLStatement ddlStatement; + + private final ShardingMetaData shardingMetaData; + + @Override + public OptimizeResult optimize() { + OptimizeResult result = new OptimizeResult(new ShardingConditions(Collections.emptyList())); + if (isDropIndexWithoutTable()) { + setLogicTableName(result); + } + return result; + } + + private boolean isDropIndexWithoutTable() { + return ddlStatement instanceof DropIndexStatement && ddlStatement.getTables().isEmpty(); + } + + private void setLogicTableName(final OptimizeResult result) { + Optional logicTableName = shardingMetaData.getTable().getLogicTableName(ddlStatement.getIndexName()); + if (logicTableName.isPresent()) { + result.setLogicTableNameForDropIndex(logicTableName.get()); + } + } } From 0ab93813814a9a9a516bb4fe8abc3db5b59aaafa Mon Sep 17 00:00:00 2001 From: tristaZero Date: Fri, 14 Jun 2019 18:12:08 +0800 Subject: [PATCH 198/283] add logicTableNameForDropIndex --- .../shardingsphere/core/optimize/result/OptimizeResult.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/result/OptimizeResult.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/result/OptimizeResult.java index 7de05b552ca72..9a586f512c0f0 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/result/OptimizeResult.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/result/OptimizeResult.java @@ -46,6 +46,8 @@ public final class OptimizeResult { private Pagination pagination; + private String logicTableNameForDropIndex; + public OptimizeResult(final ShardingConditions shardingConditions) { this(shardingConditions, null); } From f589f0aa52fa005d34fb2a33e6166722d6d60788 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Fri, 14 Jun 2019 18:20:07 +0800 Subject: [PATCH 199/283] for #2556, move addCondition from filler to ShardingInsertOptimizer --- .../core/parse/SQLParseEngine.java | 2 +- .../insert/ShardingInsertValuesFiller.java | 24 ------- .../update/ShardingSetAssignmentsFiller.java | 17 ----- .../optimizer/SQLStatementOptimizer.java | 4 +- .../SQLStatementOptimizerEngine.java | 11 +-- .../insert/ShardingInsertOptimizer.java | 67 +++++++++++++++++++ .../optimizer/select/SelectOptimizer.java | 6 +- .../mysql/sql-statement-rule-definition.xml | 2 +- .../oracle/sql-statement-rule-definition.xml | 2 +- .../sql-statement-rule-definition.xml | 2 +- .../sql-statement-rule-definition.xml | 2 +- 11 files changed, 85 insertions(+), 54 deletions(-) create mode 100644 sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/insert/ShardingInsertOptimizer.java diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/SQLParseEngine.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/SQLParseEngine.java index f339e7a72a35a..1d75fa2ab7308 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/SQLParseEngine.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/SQLParseEngine.java @@ -55,7 +55,7 @@ public SQLParseEngine(final ParseRuleRegistry parseRuleRegistry, final DatabaseT parserEngine = new SQLParserEngine(parseRuleRegistry, trunkDatabaseType, sql); extractorEngine = new SQLSegmentsExtractorEngine(); fillerEngine = new SQLStatementFillerEngine(parseRuleRegistry, trunkDatabaseType, sql, rule, shardingTableMetaData); - optimizerEngine = new SQLStatementOptimizerEngine(shardingTableMetaData); + optimizerEngine = new SQLStatementOptimizerEngine(rule, shardingTableMetaData); } /** diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingInsertValuesFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingInsertValuesFiller.java index 0c122f5b5fa15..8c77144d607a4 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingInsertValuesFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingInsertValuesFiller.java @@ -23,19 +23,13 @@ import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; import org.apache.shardingsphere.core.parse.filler.api.ShardingRuleAwareFiller; import org.apache.shardingsphere.core.parse.filler.api.ShardingTableMetaDataAwareFiller; -import org.apache.shardingsphere.core.parse.sql.context.condition.AndCondition; -import org.apache.shardingsphere.core.parse.sql.context.condition.Column; -import org.apache.shardingsphere.core.parse.sql.context.condition.Condition; import org.apache.shardingsphere.core.parse.sql.context.insertvalue.InsertValue; import org.apache.shardingsphere.core.parse.sql.segment.dml.InsertValuesSegment; -import org.apache.shardingsphere.core.parse.sql.segment.dml.expr.ExpressionSegment; -import org.apache.shardingsphere.core.parse.sql.segment.dml.expr.simple.SimpleExpressionSegment; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.InsertStatement; import org.apache.shardingsphere.core.rule.ShardingRule; import java.util.Collection; -import java.util.Iterator; /** * Insert values filler for sharding. @@ -55,7 +49,6 @@ public void fill(final InsertValuesSegment sqlSegment, final SQLStatement sqlSta InsertStatement insertStatement = (InsertStatement) sqlStatement; fillColumns(sqlSegment, insertStatement); fillValues(sqlSegment, insertStatement); - fillCondition(sqlSegment, insertStatement); } private void fillColumns(final InsertValuesSegment sqlSegment, final InsertStatement insertStatement) { @@ -84,21 +77,4 @@ private void reviseColumnNamesForGenerateKeyColumn(final InsertValuesSegment sql private void fillValues(final InsertValuesSegment sqlSegment, final InsertStatement insertStatement) { insertStatement.getValues().add(new InsertValue(sqlSegment.getValues())); } - - private void fillCondition(final InsertValuesSegment sqlSegment, final InsertStatement insertStatement) { - AndCondition andCondition = new AndCondition(); - Iterator columnNames = insertStatement.getColumnNames().iterator(); - for (ExpressionSegment each : sqlSegment.getValues()) { - if (each instanceof SimpleExpressionSegment) { - fillShardingCondition(andCondition, insertStatement.getTables().getSingleTableName(), columnNames.next(), (SimpleExpressionSegment) each); - } - } - insertStatement.getShardingConditions().getOrConditions().add(andCondition); - } - - private void fillShardingCondition(final AndCondition andCondition, final String tableName, final String columnName, final SimpleExpressionSegment expressionSegment) { - if (shardingRule.isShardingColumn(columnName, tableName)) { - andCondition.getConditions().add(new Condition(new Column(columnName, tableName), null, expressionSegment)); - } - } } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/update/ShardingSetAssignmentsFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/update/ShardingSetAssignmentsFiller.java index dd373fc9e88ad..535eff8fd1987 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/update/ShardingSetAssignmentsFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/update/ShardingSetAssignmentsFiller.java @@ -23,20 +23,16 @@ import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; import org.apache.shardingsphere.core.parse.filler.api.ShardingRuleAwareFiller; import org.apache.shardingsphere.core.parse.filler.api.ShardingTableMetaDataAwareFiller; -import org.apache.shardingsphere.core.parse.sql.context.condition.AndCondition; import org.apache.shardingsphere.core.parse.sql.context.condition.Column; -import org.apache.shardingsphere.core.parse.sql.context.condition.Condition; import org.apache.shardingsphere.core.parse.sql.context.insertvalue.InsertValue; import org.apache.shardingsphere.core.parse.sql.segment.dml.assignment.AssignmentSegment; import org.apache.shardingsphere.core.parse.sql.segment.dml.assignment.SetAssignmentsSegment; import org.apache.shardingsphere.core.parse.sql.segment.dml.expr.ExpressionSegment; -import org.apache.shardingsphere.core.parse.sql.segment.dml.expr.simple.SimpleExpressionSegment; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.InsertStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.UpdateStatement; import org.apache.shardingsphere.core.rule.ShardingRule; -import java.util.Iterator; import java.util.LinkedList; import java.util.List; @@ -70,17 +66,11 @@ private void fillInsert(final SetAssignmentsSegment sqlSegment, final InsertStat if (sqlSegment.getAssignments().size() != columnCount) { throw new SQLParsingException("INSERT INTO column size mismatch value size."); } - AndCondition andCondition = new AndCondition(); - Iterator columnNames = insertStatement.getColumnNames().iterator(); List columnValues = new LinkedList<>(); for (AssignmentSegment each : sqlSegment.getAssignments()) { - if (each.getValue() instanceof SimpleExpressionSegment) { - fillShardingCondition(andCondition, columnNames.next(), insertStatement.getTables().getSingleTableName(), (SimpleExpressionSegment) each.getValue()); - } columnValues.add(each.getValue()); } insertStatement.getValues().add(new InsertValue(columnValues)); - insertStatement.getShardingConditions().getOrConditions().add(andCondition); } private int getColumnCountExcludeAssistedQueryColumns(final InsertStatement insertStatement) { @@ -92,13 +82,6 @@ private int getColumnCountExcludeAssistedQueryColumns(final InsertStatement inse return insertStatement.getColumnNames().size() - assistedQueryColumnCount; } - private void fillShardingCondition(final AndCondition andCondition, - final String columnName, final String tableName, final SimpleExpressionSegment simpleExpressionSegment) { - if (shardingRule.isShardingColumn(columnName, tableName)) { - andCondition.getConditions().add(new Condition(new Column(columnName, tableName), null, simpleExpressionSegment)); - } - } - private void fillUpdate(final SetAssignmentsSegment sqlSegment, final UpdateStatement updateStatement) { String tableName = updateStatement.getTables().getSingleTableName(); for (AssignmentSegment each : sqlSegment.getAssignments()) { diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/SQLStatementOptimizer.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/SQLStatementOptimizer.java index 8599dc35564a2..c223f53f475cd 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/SQLStatementOptimizer.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/SQLStatementOptimizer.java @@ -19,6 +19,7 @@ import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; +import org.apache.shardingsphere.core.rule.BaseRule; /** * SQL statement optimizer. @@ -31,7 +32,8 @@ public interface SQLStatementOptimizer { * Optimize SQL statement. * * @param sqlStatement SQL statement + * @param rule rule * @param shardingTableMetaData sharding table meta data */ - void optimize(SQLStatement sqlStatement, ShardingTableMetaData shardingTableMetaData); + void optimize(SQLStatement sqlStatement, BaseRule rule, ShardingTableMetaData shardingTableMetaData); } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/SQLStatementOptimizerEngine.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/SQLStatementOptimizerEngine.java index a4e90108ec3fe..84307735f892c 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/SQLStatementOptimizerEngine.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/SQLStatementOptimizerEngine.java @@ -22,6 +22,7 @@ import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; import org.apache.shardingsphere.core.parse.rule.registry.statement.SQLStatementRule; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; +import org.apache.shardingsphere.core.rule.BaseRule; /** * SQL statement optimizer engine. @@ -31,18 +32,20 @@ @RequiredArgsConstructor public final class SQLStatementOptimizerEngine { + private final BaseRule rule; + private final ShardingTableMetaData shardingTableMetaData; /** * Optimize SQL statement. * - * @param rule SQL statement rule + * @param sqlStatementRule SQL statement rule * @param sqlStatement SQL statement */ - public void optimize(final SQLStatementRule rule, final SQLStatement sqlStatement) { - Optional optimizer = rule.getOptimizer(); + public void optimize(final SQLStatementRule sqlStatementRule, final SQLStatement sqlStatement) { + Optional optimizer = sqlStatementRule.getOptimizer(); if (optimizer.isPresent()) { - optimizer.get().optimize(sqlStatement, shardingTableMetaData); + optimizer.get().optimize(sqlStatement, rule, shardingTableMetaData); } } } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/insert/ShardingInsertOptimizer.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/insert/ShardingInsertOptimizer.java new file mode 100644 index 0000000000000..4605c9b1f5189 --- /dev/null +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/insert/ShardingInsertOptimizer.java @@ -0,0 +1,67 @@ +/* + * 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.core.parse.optimizer.insert; + +import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; +import org.apache.shardingsphere.core.parse.optimizer.SQLStatementOptimizer; +import org.apache.shardingsphere.core.parse.sql.context.condition.AndCondition; +import org.apache.shardingsphere.core.parse.sql.context.condition.Column; +import org.apache.shardingsphere.core.parse.sql.context.condition.Condition; +import org.apache.shardingsphere.core.parse.sql.context.insertvalue.InsertValue; +import org.apache.shardingsphere.core.parse.sql.segment.dml.expr.ExpressionSegment; +import org.apache.shardingsphere.core.parse.sql.segment.dml.expr.simple.SimpleExpressionSegment; +import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; +import org.apache.shardingsphere.core.parse.sql.statement.dml.InsertStatement; +import org.apache.shardingsphere.core.rule.BaseRule; +import org.apache.shardingsphere.core.rule.ShardingRule; + +import java.util.Iterator; + +/** + * Insert optimizer for sharding. + * + * @author zhangliang + */ +public final class ShardingInsertOptimizer implements SQLStatementOptimizer { + + @Override + public void optimize(final SQLStatement sqlStatement, final BaseRule rule, final ShardingTableMetaData shardingTableMetaData) { + InsertStatement insertStatement = (InsertStatement) sqlStatement; + for (InsertValue each : insertStatement.getValues()) { + fillCondition((ShardingRule) rule, each, insertStatement); + } + } + + private void fillCondition(final ShardingRule shardingRule, final InsertValue insertValue, final InsertStatement insertStatement) { + AndCondition andCondition = new AndCondition(); + Iterator columnNames = insertStatement.getColumnNames().iterator(); + for (ExpressionSegment each : insertValue.getAssignments()) { + if (each instanceof SimpleExpressionSegment) { + fillShardingCondition(shardingRule, andCondition, insertStatement.getTables().getSingleTableName(), columnNames.next(), (SimpleExpressionSegment) each); + } + } + insertStatement.getShardingConditions().getOrConditions().add(andCondition); + } + + private void fillShardingCondition(final ShardingRule shardingRule, + final AndCondition andCondition, final String tableName, final String columnName, final SimpleExpressionSegment expressionSegment) { + if (shardingRule.isShardingColumn(columnName, tableName)) { + andCondition.getConditions().add(new Condition(new Column(columnName, tableName), null, expressionSegment)); + } + } +} diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/select/SelectOptimizer.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/select/SelectOptimizer.java index 521d31f4a052c..f274188de953d 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/select/SelectOptimizer.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/select/SelectOptimizer.java @@ -23,8 +23,8 @@ import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; import org.apache.shardingsphere.core.parse.constant.DerivedColumn; import org.apache.shardingsphere.core.parse.optimizer.SQLStatementOptimizer; -import org.apache.shardingsphere.core.parse.sql.context.selectitem.AggregationDistinctSelectItem; import org.apache.shardingsphere.core.parse.sql.context.condition.Conditions; +import org.apache.shardingsphere.core.parse.sql.context.selectitem.AggregationDistinctSelectItem; import org.apache.shardingsphere.core.parse.sql.context.selectitem.AggregationSelectItem; import org.apache.shardingsphere.core.parse.sql.context.selectitem.DerivedCommonSelectItem; import org.apache.shardingsphere.core.parse.sql.context.selectitem.DistinctSelectItem; @@ -37,6 +37,7 @@ import org.apache.shardingsphere.core.parse.sql.segment.dml.order.item.TextOrderByItemSegment; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.SelectStatement; +import org.apache.shardingsphere.core.rule.BaseRule; import java.util.List; @@ -49,8 +50,7 @@ public final class SelectOptimizer implements SQLStatementOptimizer { @Override - public void optimize(final SQLStatement sqlStatement, final ShardingTableMetaData shardingTableMetaData) { - + public void optimize(final SQLStatement sqlStatement, final BaseRule rule, final ShardingTableMetaData shardingTableMetaData) { appendDerivedColumns((SelectStatement) sqlStatement, shardingTableMetaData); appendDerivedOrderBy((SelectStatement) sqlStatement); addSubqueryCondition(sqlStatement); diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/sharding/mysql/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/sharding/mysql/sql-statement-rule-definition.xml index 6d61fc128afd8..396b16f581b24 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/sharding/mysql/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/sharding/mysql/sql-statement-rule-definition.xml @@ -18,7 +18,7 @@ - + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/sharding/oracle/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/sharding/oracle/sql-statement-rule-definition.xml index 664e0d3fb9fa2..b8d597db006f6 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/sharding/oracle/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/sharding/oracle/sql-statement-rule-definition.xml @@ -18,7 +18,7 @@ - + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/sharding/postgresql/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/sharding/postgresql/sql-statement-rule-definition.xml index 63d7d7587b179..f86351a135757 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/sharding/postgresql/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/sharding/postgresql/sql-statement-rule-definition.xml @@ -18,7 +18,7 @@ - + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/sharding/sqlserver/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/sharding/sqlserver/sql-statement-rule-definition.xml index 513a366061a64..e31bb0da2e3cf 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/sharding/sqlserver/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/sharding/sqlserver/sql-statement-rule-definition.xml @@ -18,7 +18,7 @@ - + From caf274ca0ec9cd147c4c6c5c0a2b2c1627a86810 Mon Sep 17 00:00:00 2001 From: tristaZero Date: Fri, 14 Jun 2019 18:30:47 +0800 Subject: [PATCH 200/283] get LogicTableNameForDropIndex --- .../core/optimize/result/OptimizeResult.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/result/OptimizeResult.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/result/OptimizeResult.java index 9a586f512c0f0..058bd1d07116f 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/result/OptimizeResult.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/result/OptimizeResult.java @@ -64,4 +64,13 @@ public OptimizeResult(final InsertOptimizeResult insertOptimizeResult) { public Optional getInsertOptimizeResult() { return Optional.fromNullable(insertOptimizeResult); } + + /** + * Get logic table name for drop index. + * + * @return logic table name for drop index + */ + public Optional getLogicTableNameForDropIndex() { + return Optional.fromNullable(logicTableNameForDropIndex); + } } From 39505f64449aa8b14357207b7aafe560e945f8fd Mon Sep 17 00:00:00 2001 From: tristaZero Date: Fri, 14 Jun 2019 18:33:19 +0800 Subject: [PATCH 201/283] use ShardingTableMetaData --- .../optimize/engine/sharding/ddl/DDLOptimizeEngine.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/ddl/DDLOptimizeEngine.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/ddl/DDLOptimizeEngine.java index be7d6e0acecc9..2d83f7e72753e 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/ddl/DDLOptimizeEngine.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/ddl/DDLOptimizeEngine.java @@ -19,7 +19,7 @@ import com.google.common.base.Optional; import lombok.RequiredArgsConstructor; -import org.apache.shardingsphere.core.metadata.ShardingMetaData; +import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; import org.apache.shardingsphere.core.optimize.condition.ShardingCondition; import org.apache.shardingsphere.core.optimize.condition.ShardingConditions; import org.apache.shardingsphere.core.optimize.engine.OptimizeEngine; @@ -39,7 +39,7 @@ public final class DDLOptimizeEngine implements OptimizeEngine { private final DDLStatement ddlStatement; - private final ShardingMetaData shardingMetaData; + private final ShardingTableMetaData shardingTableMetaData; @Override public OptimizeResult optimize() { @@ -55,7 +55,7 @@ private boolean isDropIndexWithoutTable() { } private void setLogicTableName(final OptimizeResult result) { - Optional logicTableName = shardingMetaData.getTable().getLogicTableName(ddlStatement.getIndexName()); + Optional logicTableName = shardingTableMetaData.getLogicTableName(ddlStatement.getIndexName()); if (logicTableName.isPresent()) { result.setLogicTableNameForDropIndex(logicTableName.get()); } From 726d4846e73bbd3e18c0a43ee8104335d7b0adcd Mon Sep 17 00:00:00 2001 From: terrymanu Date: Fri, 14 Jun 2019 18:33:28 +0800 Subject: [PATCH 202/283] for #2556, add SQLStatementOptimizer.setRule() --- .../optimizer/SQLStatementOptimizer.java | 14 ++++++++++--- .../SQLStatementOptimizerEngine.java | 4 +++- .../insert/ShardingInsertOptimizer.java | 20 ++++++++++--------- .../optimizer/select/SelectOptimizer.java | 10 +++++++--- 4 files changed, 32 insertions(+), 16 deletions(-) diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/SQLStatementOptimizer.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/SQLStatementOptimizer.java index c223f53f475cd..d3d8e67c6ef17 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/SQLStatementOptimizer.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/SQLStatementOptimizer.java @@ -25,15 +25,23 @@ * SQL statement optimizer. * * @author zhangliang + * + * @param type of base rule */ -public interface SQLStatementOptimizer { +public interface SQLStatementOptimizer { + + /** + * Set rule. + * + * @param rule rule + */ + void setRule(T rule); /** * Optimize SQL statement. * * @param sqlStatement SQL statement - * @param rule rule * @param shardingTableMetaData sharding table meta data */ - void optimize(SQLStatement sqlStatement, BaseRule rule, ShardingTableMetaData shardingTableMetaData); + void optimize(SQLStatement sqlStatement, ShardingTableMetaData shardingTableMetaData); } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/SQLStatementOptimizerEngine.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/SQLStatementOptimizerEngine.java index 84307735f892c..46c6e7003c65b 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/SQLStatementOptimizerEngine.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/SQLStatementOptimizerEngine.java @@ -42,10 +42,12 @@ public final class SQLStatementOptimizerEngine { * @param sqlStatementRule SQL statement rule * @param sqlStatement SQL statement */ + @SuppressWarnings("unchecked") public void optimize(final SQLStatementRule sqlStatementRule, final SQLStatement sqlStatement) { Optional optimizer = sqlStatementRule.getOptimizer(); if (optimizer.isPresent()) { - optimizer.get().optimize(sqlStatement, rule, shardingTableMetaData); + optimizer.get().setRule(rule); + optimizer.get().optimize(sqlStatement, shardingTableMetaData); } } } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/insert/ShardingInsertOptimizer.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/insert/ShardingInsertOptimizer.java index 4605c9b1f5189..4106bb94d4e41 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/insert/ShardingInsertOptimizer.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/insert/ShardingInsertOptimizer.java @@ -17,6 +17,7 @@ package org.apache.shardingsphere.core.parse.optimizer.insert; +import lombok.Setter; import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; import org.apache.shardingsphere.core.parse.optimizer.SQLStatementOptimizer; import org.apache.shardingsphere.core.parse.sql.context.condition.AndCondition; @@ -27,7 +28,6 @@ import org.apache.shardingsphere.core.parse.sql.segment.dml.expr.simple.SimpleExpressionSegment; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.InsertStatement; -import org.apache.shardingsphere.core.rule.BaseRule; import org.apache.shardingsphere.core.rule.ShardingRule; import java.util.Iterator; @@ -37,30 +37,32 @@ * * @author zhangliang */ -public final class ShardingInsertOptimizer implements SQLStatementOptimizer { +@Setter +public final class ShardingInsertOptimizer implements SQLStatementOptimizer { + + private ShardingRule rule; @Override - public void optimize(final SQLStatement sqlStatement, final BaseRule rule, final ShardingTableMetaData shardingTableMetaData) { + public void optimize(final SQLStatement sqlStatement, final ShardingTableMetaData shardingTableMetaData) { InsertStatement insertStatement = (InsertStatement) sqlStatement; for (InsertValue each : insertStatement.getValues()) { - fillCondition((ShardingRule) rule, each, insertStatement); + fillCondition(each, insertStatement); } } - private void fillCondition(final ShardingRule shardingRule, final InsertValue insertValue, final InsertStatement insertStatement) { + private void fillCondition(final InsertValue insertValue, final InsertStatement insertStatement) { AndCondition andCondition = new AndCondition(); Iterator columnNames = insertStatement.getColumnNames().iterator(); for (ExpressionSegment each : insertValue.getAssignments()) { if (each instanceof SimpleExpressionSegment) { - fillShardingCondition(shardingRule, andCondition, insertStatement.getTables().getSingleTableName(), columnNames.next(), (SimpleExpressionSegment) each); + fillShardingCondition(andCondition, insertStatement.getTables().getSingleTableName(), columnNames.next(), (SimpleExpressionSegment) each); } } insertStatement.getShardingConditions().getOrConditions().add(andCondition); } - private void fillShardingCondition(final ShardingRule shardingRule, - final AndCondition andCondition, final String tableName, final String columnName, final SimpleExpressionSegment expressionSegment) { - if (shardingRule.isShardingColumn(columnName, tableName)) { + private void fillShardingCondition(final AndCondition andCondition, final String tableName, final String columnName, final SimpleExpressionSegment expressionSegment) { + if (rule.isShardingColumn(columnName, tableName)) { andCondition.getConditions().add(new Condition(new Column(columnName, tableName), null, expressionSegment)); } } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/select/SelectOptimizer.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/select/SelectOptimizer.java index f274188de953d..de386d26f4832 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/select/SelectOptimizer.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/select/SelectOptimizer.java @@ -19,6 +19,7 @@ import com.google.common.base.Optional; import com.google.common.base.Preconditions; +import lombok.Setter; import org.apache.shardingsphere.core.constant.AggregationType; import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; import org.apache.shardingsphere.core.parse.constant.DerivedColumn; @@ -37,7 +38,7 @@ import org.apache.shardingsphere.core.parse.sql.segment.dml.order.item.TextOrderByItemSegment; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.SelectStatement; -import org.apache.shardingsphere.core.rule.BaseRule; +import org.apache.shardingsphere.core.rule.ShardingRule; import java.util.List; @@ -47,10 +48,13 @@ * @author duhongjun * @author panjuan */ -public final class SelectOptimizer implements SQLStatementOptimizer { +@Setter +public final class SelectOptimizer implements SQLStatementOptimizer { + + private ShardingRule rule; @Override - public void optimize(final SQLStatement sqlStatement, final BaseRule rule, final ShardingTableMetaData shardingTableMetaData) { + public void optimize(final SQLStatement sqlStatement, final ShardingTableMetaData shardingTableMetaData) { appendDerivedColumns((SelectStatement) sqlStatement, shardingTableMetaData); appendDerivedOrderBy((SelectStatement) sqlStatement); addSubqueryCondition(sqlStatement); From d849e41a0ecff922c4e5afc1570e77011286adc3 Mon Sep 17 00:00:00 2001 From: tristaZero Date: Fri, 14 Jun 2019 18:33:59 +0800 Subject: [PATCH 203/283] new DDLOptimizeEngine --- .../core/optimize/OptimizeEngineFactory.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java index e118641498333..a596a3ad0cddd 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java @@ -19,13 +19,16 @@ import lombok.AccessLevel; import lombok.NoArgsConstructor; +import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; import org.apache.shardingsphere.core.optimize.engine.OptimizeEngine; import org.apache.shardingsphere.core.optimize.engine.encrypt.EncryptDefaultOptimizeEngine; import org.apache.shardingsphere.core.optimize.engine.encrypt.EncryptInsertOptimizeEngine; +import org.apache.shardingsphere.core.optimize.engine.sharding.ddl.DDLOptimizeEngine; import org.apache.shardingsphere.core.optimize.engine.sharding.dml.InsertOptimizeEngine; import org.apache.shardingsphere.core.optimize.engine.sharding.dql.QueryOptimizeEngine; import org.apache.shardingsphere.core.parse.sql.context.condition.Conditions; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; +import org.apache.shardingsphere.core.parse.sql.statement.ddl.DDLStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.DMLStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.InsertStatement; import org.apache.shardingsphere.core.rule.EncryptRule; @@ -50,16 +53,21 @@ public final class OptimizeEngineFactory { * @param sqlStatement SQL statement * @param parameters parameters * @param generatedKey generated key + * @param shardingTableMetaData sharding table metadata * @return optimize engine instance */ - public static OptimizeEngine newInstance(final ShardingRule shardingRule, final SQLStatement sqlStatement, final List parameters, final GeneratedKey generatedKey) { + public static OptimizeEngine newInstance(final ShardingRule shardingRule, + final SQLStatement sqlStatement, final List parameters, final GeneratedKey generatedKey, final ShardingTableMetaData shardingTableMetaData) { if (sqlStatement instanceof InsertStatement) { return new InsertOptimizeEngine(shardingRule, (InsertStatement) sqlStatement, parameters, generatedKey); } if (sqlStatement instanceof DMLStatement) { return new QueryOptimizeEngine(sqlStatement, parameters, ((DMLStatement) sqlStatement).getShardingConditions()); } - // TODO do with DDL and DAL + if (sqlStatement instanceof DDLStatement) { + return new DDLOptimizeEngine((DDLStatement) sqlStatement, shardingTableMetaData); + } + // TODO do with DAL return new QueryOptimizeEngine(sqlStatement, parameters, new Conditions()); } From c4038930d22448ea4c3e4731d6e7503ca82305fd Mon Sep 17 00:00:00 2001 From: tristaZero Date: Fri, 14 Jun 2019 18:34:13 +0800 Subject: [PATCH 204/283] pass shardingMetaData.getTable() --- .../core/route/router/sharding/ParsingSQLRouter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java index 3c188b0e9e173..7d01f977b8276 100644 --- a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java +++ b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java @@ -89,7 +89,7 @@ public SQLRouteResult route(final SQLStatement sqlStatement, final List Optional generatedKey = sqlStatement instanceof InsertStatement ? GeneratedKey.getGenerateKey(shardingRule, parameters, (InsertStatement) sqlStatement) : Optional.absent(); SQLRouteResult result = new SQLRouteResult(sqlStatement, generatedKey.orNull()); - OptimizeResult optimizeResult = OptimizeEngineFactory.newInstance(shardingRule, sqlStatement, parameters, generatedKey.orNull()).optimize(); + OptimizeResult optimizeResult = OptimizeEngineFactory.newInstance(shardingRule, sqlStatement, parameters, generatedKey.orNull(), shardingMetaData.getTable()).optimize(); if (generatedKey.isPresent()) { setGeneratedKeys(result, generatedKey.get()); } From b5bad37007092fdf5e033bede15afcdef8c4c5a5 Mon Sep 17 00:00:00 2001 From: tristaZero Date: Fri, 14 Jun 2019 18:34:29 +0800 Subject: [PATCH 205/283] new TableBroadcastRoutingEngine --- .../core/route/router/sharding/RoutingEngineFactory.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/RoutingEngineFactory.java b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/RoutingEngineFactory.java index f4f2b73926fc7..18b81adda30d9 100644 --- a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/RoutingEngineFactory.java +++ b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/RoutingEngineFactory.java @@ -69,13 +69,13 @@ public static RoutingEngine newInstance(final ShardingRule shardingRule, return new DatabaseBroadcastRoutingEngine(shardingRule); } if (sqlStatement instanceof DDLStatement) { - return new TableBroadcastRoutingEngine(shardingRule, sqlStatement); + return new TableBroadcastRoutingEngine(shardingRule, sqlStatement, optimizeResult); } if (sqlStatement instanceof DALStatement) { return getDALRoutingEngine(shardingRule, sqlStatement, tableNames); } if (sqlStatement instanceof DCLStatement) { - return getDCLRoutingEngine(shardingRule, sqlStatement, shardingDataSourceMetaData); + return getDCLRoutingEngine(shardingRule, sqlStatement, optimizeResult, shardingDataSourceMetaData); } if (shardingRule.isAllInDefaultDataSource(tableNames)) { return new DefaultDatabaseRoutingEngine(shardingRule, tableNames); @@ -107,8 +107,8 @@ private static RoutingEngine getDALRoutingEngine(final ShardingRule shardingRule return new DataSourceGroupBroadcastRoutingEngine(shardingRule); } - private static RoutingEngine getDCLRoutingEngine(final ShardingRule shardingRule, final SQLStatement sqlStatement, final ShardingDataSourceMetaData shardingDataSourceMetaData) { - return isGrantForSingleTable(sqlStatement) ? new TableBroadcastRoutingEngine(shardingRule, sqlStatement) : new InstanceBroadcastRoutingEngine(shardingRule, shardingDataSourceMetaData); + private static RoutingEngine getDCLRoutingEngine(final ShardingRule shardingRule, final SQLStatement sqlStatement, final OptimizeResult optimizeResult, final ShardingDataSourceMetaData shardingDataSourceMetaData) { + return isGrantForSingleTable(sqlStatement) ? new TableBroadcastRoutingEngine(shardingRule, sqlStatement, optimizeResult) : new InstanceBroadcastRoutingEngine(shardingRule, shardingDataSourceMetaData); } private static boolean isGrantForSingleTable(final SQLStatement sqlStatement) { From b8390ffb0c345bf365d0c6c76221f5cca7fef8e8 Mon Sep 17 00:00:00 2001 From: tristaZero Date: Fri, 14 Jun 2019 18:35:11 +0800 Subject: [PATCH 206/283] check style --- .../core/route/router/sharding/RoutingEngineFactory.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/RoutingEngineFactory.java b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/RoutingEngineFactory.java index 18b81adda30d9..749975384f5da 100644 --- a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/RoutingEngineFactory.java +++ b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/RoutingEngineFactory.java @@ -107,8 +107,10 @@ private static RoutingEngine getDALRoutingEngine(final ShardingRule shardingRule return new DataSourceGroupBroadcastRoutingEngine(shardingRule); } - private static RoutingEngine getDCLRoutingEngine(final ShardingRule shardingRule, final SQLStatement sqlStatement, final OptimizeResult optimizeResult, final ShardingDataSourceMetaData shardingDataSourceMetaData) { - return isGrantForSingleTable(sqlStatement) ? new TableBroadcastRoutingEngine(shardingRule, sqlStatement, optimizeResult) : new InstanceBroadcastRoutingEngine(shardingRule, shardingDataSourceMetaData); + private static RoutingEngine getDCLRoutingEngine(final ShardingRule shardingRule, + final SQLStatement sqlStatement, final OptimizeResult optimizeResult, final ShardingDataSourceMetaData shardingDataSourceMetaData) { + return isGrantForSingleTable(sqlStatement) + ? new TableBroadcastRoutingEngine(shardingRule, sqlStatement, optimizeResult) : new InstanceBroadcastRoutingEngine(shardingRule, shardingDataSourceMetaData); } private static boolean isGrantForSingleTable(final SQLStatement sqlStatement) { From febcda2697e4ad6832b7d858fabe469dad878bcb Mon Sep 17 00:00:00 2001 From: tristaZero Date: Fri, 14 Jun 2019 18:35:24 +0800 Subject: [PATCH 207/283] delete getLogicTableName() --- .../shardingsphere/core/rule/ShardingRule.java | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/rule/ShardingRule.java b/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/rule/ShardingRule.java index 4570faf43e754..61f1a8bc34e54 100644 --- a/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/rule/ShardingRule.java +++ b/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/rule/ShardingRule.java @@ -361,21 +361,6 @@ public Comparable generateKey(final String logicTableName) { return shardingKeyGenerator.generateKey(); } - /** - * Get logic table name base on logic index name. - * - * @param logicIndexName logic index name - * @return logic table name - */ - public String getLogicTableName(final String logicIndexName) { - for (TableRule each : tableRules) { - if (logicIndexName.equals(each.getLogicIndex())) { - return each.getLogicTable(); - } - } - throw new ShardingConfigurationException("Cannot find logic table name with logic index name: '%s'", logicIndexName); - } - /** * Get logic table names base on actual table name. * From 4d241f80820d3aa7120bde5daa9cd716870968ea Mon Sep 17 00:00:00 2001 From: tristaZero Date: Fri, 14 Jun 2019 18:35:36 +0800 Subject: [PATCH 208/283] delete assertGetLogicTableNameSuccess --- .../core/rule/ShardingRuleTest.java | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/sharding-core/sharding-core-common/src/test/java/org/apache/shardingsphere/core/rule/ShardingRuleTest.java b/sharding-core/sharding-core-common/src/test/java/org/apache/shardingsphere/core/rule/ShardingRuleTest.java index 2b3128a49f811..23902938a58d7 100644 --- a/sharding-core/sharding-core-common/src/test/java/org/apache/shardingsphere/core/rule/ShardingRuleTest.java +++ b/sharding-core/sharding-core-common/src/test/java/org/apache/shardingsphere/core/rule/ShardingRuleTest.java @@ -308,22 +308,6 @@ public void assertDataSourceNameFromDataSourceNames() { assertThat(new ShardingRule(shardingRuleConfig, Collections.singletonList("ds_0")).getShardingDataSourceNames().getDefaultDataSourceName(), is("ds_0")); } - @Test - public void assertGetLogicTableNameSuccess() { - ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration(); - TableRuleConfiguration tableRuleConfig = createTableRuleConfigWithLogicIndex(); - shardingRuleConfig.getTableRuleConfigs().add(tableRuleConfig); - assertThat(new ShardingRule(shardingRuleConfig, createDataSourceNames()).getLogicTableName("index_table"), is("logic_table")); - } - - @Test(expected = ShardingConfigurationException.class) - public void assertGetLogicTableNameFailure() { - ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration(); - TableRuleConfiguration tableRuleConfig = createTableRuleConfigWithLogicIndex(); - shardingRuleConfig.getTableRuleConfigs().add(tableRuleConfig); - new ShardingRule(shardingRuleConfig, createDataSourceNames()).getLogicTableName(""); - } - @Test public void assertGetDataNodeByLogicTable() { assertThat(createMaximumShardingRule().getDataNode("logic_table"), is(new DataNode("ds_0.table_0"))); From 08d55a65a8f465e53751f18269998cd79646f77e Mon Sep 17 00:00:00 2001 From: terrymanu Date: Fri, 14 Jun 2019 18:35:45 +0800 Subject: [PATCH 209/283] for #2556, XXXAwareFiller => XXXAware --- .../EncryptRuleAware.java} | 4 ++-- .../ShardingRuleAware.java} | 4 ++-- .../ShardingTableMetaDataAware.java} | 4 ++-- .../filler/{api => }/SQLSegmentFiller.java | 2 +- .../filler/SQLStatementFillerEngine.java | 19 +++++++++---------- .../core/parse/filler/common/TableFiller.java | 2 +- .../parse/filler/common/dal/SchemaFiller.java | 2 +- .../ddl/column/AddColumnDefinitionFiller.java | 6 +++--- .../ddl/column/ColumnDefinitionFiller.java | 2 +- .../column/DropColumnDefinitionFiller.java | 2 +- .../column/ModifyColumnDefinitionFiller.java | 6 +++--- .../column/RenameColumnDefinitionFiller.java | 6 +++--- .../ConstraintDefinitionFiller.java | 6 +++--- .../ddl/constraint/DropPrimaryKeyFiller.java | 2 +- .../filler/common/ddl/index/IndexFiller.java | 2 +- .../filler/common/dml/GroupByFiller.java | 2 +- .../common/dml/InsertColumnsFiller.java | 2 +- .../parse/filler/common/dml/LimitFiller.java | 2 +- .../filler/common/dml/OrderByFiller.java | 2 +- .../filler/common/dml/SelectItemFiller.java | 2 +- .../filler/common/dml/SelectItemsFiller.java | 2 +- .../filler/common/dml/SubqueryFiller.java | 2 +- .../parse/filler/common/dml/WhereFiller.java | 2 +- .../encrypt/dml/EncryptOrPredicateFiller.java | 8 ++++---- .../dml/insert/EncryptInsertValuesFiller.java | 8 ++++---- .../update/EncryptSetAssignmentsFiller.java | 2 +- .../dml/ShardingOrPredicateFiller.java | 8 ++++---- .../insert/ShardingInsertValuesFiller.java | 8 ++++---- .../ShardingOnDuplicateKeyColumnsFiller.java | 6 +++--- .../ShardingRowNumberPredicateFiller.java | 2 +- .../ShardingSubqueryPredicateFiller.java | 8 ++++---- .../update/ShardingSetAssignmentsFiller.java | 8 ++++---- .../rule/registry/ParseRuleRegistry.java | 2 +- .../registry/filler/FillerRuleDefinition.java | 2 +- .../parse/filler/dal/MySQLShowLikeFiller.java | 6 +++--- .../filler/tcl/MySQLAutoCommitFiller.java | 2 +- .../SQLServerImplicitTransactionsFiller.java | 2 +- 37 files changed, 78 insertions(+), 79 deletions(-) rename sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/{filler/api/EncryptRuleAwareFiller.java => aware/EncryptRuleAware.java} (91%) rename sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/{filler/api/ShardingRuleAwareFiller.java => aware/ShardingRuleAware.java} (91%) rename sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/{filler/api/ShardingTableMetaDataAwareFiller.java => aware/ShardingTableMetaDataAware.java} (91%) rename sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/{api => }/SQLSegmentFiller.java (95%) diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/api/EncryptRuleAwareFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/aware/EncryptRuleAware.java similarity index 91% rename from sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/api/EncryptRuleAwareFiller.java rename to sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/aware/EncryptRuleAware.java index e758b59af2d38..834557b935cdf 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/api/EncryptRuleAwareFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/aware/EncryptRuleAware.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.shardingsphere.core.parse.filler.api; +package org.apache.shardingsphere.core.parse.aware; import org.apache.shardingsphere.core.rule.EncryptRule; @@ -24,7 +24,7 @@ * * @author zhangliang */ -public interface EncryptRuleAwareFiller { +public interface EncryptRuleAware { /** * Set encrypt rule. diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/api/ShardingRuleAwareFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/aware/ShardingRuleAware.java similarity index 91% rename from sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/api/ShardingRuleAwareFiller.java rename to sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/aware/ShardingRuleAware.java index d6d3d71734316..b785327c674e2 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/api/ShardingRuleAwareFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/aware/ShardingRuleAware.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.shardingsphere.core.parse.filler.api; +package org.apache.shardingsphere.core.parse.aware; import org.apache.shardingsphere.core.rule.ShardingRule; @@ -24,7 +24,7 @@ * * @author zhangliang */ -public interface ShardingRuleAwareFiller { +public interface ShardingRuleAware { /** * Set sharding rule. diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/api/ShardingTableMetaDataAwareFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/aware/ShardingTableMetaDataAware.java similarity index 91% rename from sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/api/ShardingTableMetaDataAwareFiller.java rename to sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/aware/ShardingTableMetaDataAware.java index c1cb73402c0a9..ad159516c2c4a 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/api/ShardingTableMetaDataAwareFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/aware/ShardingTableMetaDataAware.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.shardingsphere.core.parse.filler.api; +package org.apache.shardingsphere.core.parse.aware; import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; @@ -24,7 +24,7 @@ * * @author zhangliang */ -public interface ShardingTableMetaDataAwareFiller { +public interface ShardingTableMetaDataAware { /** * Set sharding table meta data. diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/api/SQLSegmentFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/SQLSegmentFiller.java similarity index 95% rename from sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/api/SQLSegmentFiller.java rename to sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/SQLSegmentFiller.java index 1647170eb3c8b..7f69adf54b9f1 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/api/SQLSegmentFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/SQLSegmentFiller.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.shardingsphere.core.parse.filler.api; +package org.apache.shardingsphere.core.parse.filler; import org.apache.shardingsphere.core.parse.sql.segment.SQLSegment; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/SQLStatementFillerEngine.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/SQLStatementFillerEngine.java index 4b662d183dcce..c7682efc511eb 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/SQLStatementFillerEngine.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/SQLStatementFillerEngine.java @@ -21,10 +21,9 @@ import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; -import org.apache.shardingsphere.core.parse.filler.api.EncryptRuleAwareFiller; -import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; -import org.apache.shardingsphere.core.parse.filler.api.ShardingRuleAwareFiller; -import org.apache.shardingsphere.core.parse.filler.api.ShardingTableMetaDataAwareFiller; +import org.apache.shardingsphere.core.parse.aware.EncryptRuleAware; +import org.apache.shardingsphere.core.parse.aware.ShardingRuleAware; +import org.apache.shardingsphere.core.parse.aware.ShardingTableMetaDataAware; import org.apache.shardingsphere.core.parse.rule.registry.ParseRuleRegistry; import org.apache.shardingsphere.core.parse.rule.registry.statement.SQLStatementRule; import org.apache.shardingsphere.core.parse.sql.segment.SQLSegment; @@ -81,14 +80,14 @@ public SQLStatement fill(final Collection sqlSegments, final int par @SuppressWarnings("unchecked") private void doFill(final SQLSegment sqlSegment, final SQLStatement sqlStatement, final SQLSegmentFiller filler) { - if (filler instanceof ShardingRuleAwareFiller && rule instanceof ShardingRule) { - ((ShardingRuleAwareFiller) filler).setShardingRule((ShardingRule) rule); + if (filler instanceof ShardingRuleAware && rule instanceof ShardingRule) { + ((ShardingRuleAware) filler).setShardingRule((ShardingRule) rule); } - if (filler instanceof EncryptRuleAwareFiller && rule instanceof EncryptRule) { - ((EncryptRuleAwareFiller) filler).setEncryptRule((EncryptRule) rule); + if (filler instanceof EncryptRuleAware && rule instanceof EncryptRule) { + ((EncryptRuleAware) filler).setEncryptRule((EncryptRule) rule); } - if (filler instanceof ShardingTableMetaDataAwareFiller) { - ((ShardingTableMetaDataAwareFiller) filler).setShardingTableMetaData(shardingTableMetaData); + if (filler instanceof ShardingTableMetaDataAware) { + ((ShardingTableMetaDataAware) filler).setShardingTableMetaData(shardingTableMetaData); } filler.fill(sqlSegment, sqlStatement); } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/TableFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/TableFiller.java index 0485a02868b90..e76f650f82cd3 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/TableFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/TableFiller.java @@ -17,7 +17,7 @@ package org.apache.shardingsphere.core.parse.filler.common; -import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; +import org.apache.shardingsphere.core.parse.filler.SQLSegmentFiller; import org.apache.shardingsphere.core.parse.sql.context.table.Table; import org.apache.shardingsphere.core.parse.sql.segment.common.TableSegment; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/dal/SchemaFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/dal/SchemaFiller.java index 13ce65cd5232d..8f8654eb43c2f 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/dal/SchemaFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/dal/SchemaFiller.java @@ -17,7 +17,7 @@ package org.apache.shardingsphere.core.parse.filler.common.dal; -import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; +import org.apache.shardingsphere.core.parse.filler.SQLSegmentFiller; import org.apache.shardingsphere.core.parse.sql.segment.common.SchemaSegment; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.sql.statement.dal.dialect.mysql.UseStatement; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/ddl/column/AddColumnDefinitionFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/ddl/column/AddColumnDefinitionFiller.java index 4a7822bf4d63a..1f8bffd88fe52 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/ddl/column/AddColumnDefinitionFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/ddl/column/AddColumnDefinitionFiller.java @@ -19,8 +19,8 @@ import lombok.Setter; import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; -import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; -import org.apache.shardingsphere.core.parse.filler.api.ShardingTableMetaDataAwareFiller; +import org.apache.shardingsphere.core.parse.aware.ShardingTableMetaDataAware; +import org.apache.shardingsphere.core.parse.filler.SQLSegmentFiller; import org.apache.shardingsphere.core.parse.sql.segment.ddl.column.alter.AddColumnDefinitionSegment; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.sql.statement.ddl.AlterTableStatement; @@ -31,7 +31,7 @@ * @author duhongjun */ @Setter -public final class AddColumnDefinitionFiller implements SQLSegmentFiller, ShardingTableMetaDataAwareFiller { +public final class AddColumnDefinitionFiller implements SQLSegmentFiller, ShardingTableMetaDataAware { private ShardingTableMetaData shardingTableMetaData; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/ddl/column/ColumnDefinitionFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/ddl/column/ColumnDefinitionFiller.java index d4f6614c22f51..7b2cc3371e12a 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/ddl/column/ColumnDefinitionFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/ddl/column/ColumnDefinitionFiller.java @@ -17,7 +17,7 @@ package org.apache.shardingsphere.core.parse.filler.common.ddl.column; -import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; +import org.apache.shardingsphere.core.parse.filler.SQLSegmentFiller; import org.apache.shardingsphere.core.parse.sql.segment.ddl.column.ColumnDefinitionSegment; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.sql.statement.ddl.CreateTableStatement; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/ddl/column/DropColumnDefinitionFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/ddl/column/DropColumnDefinitionFiller.java index 1ff2a3f64f3bc..fbfd6ef49d7d9 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/ddl/column/DropColumnDefinitionFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/ddl/column/DropColumnDefinitionFiller.java @@ -17,7 +17,7 @@ package org.apache.shardingsphere.core.parse.filler.common.ddl.column; -import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; +import org.apache.shardingsphere.core.parse.filler.SQLSegmentFiller; import org.apache.shardingsphere.core.parse.sql.segment.ddl.column.alter.DropColumnDefinitionSegment; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.sql.statement.ddl.AlterTableStatement; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/ddl/column/ModifyColumnDefinitionFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/ddl/column/ModifyColumnDefinitionFiller.java index bb310674946df..ea154a57d904e 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/ddl/column/ModifyColumnDefinitionFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/ddl/column/ModifyColumnDefinitionFiller.java @@ -20,8 +20,8 @@ import com.google.common.base.Optional; import lombok.Setter; import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; -import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; -import org.apache.shardingsphere.core.parse.filler.api.ShardingTableMetaDataAwareFiller; +import org.apache.shardingsphere.core.parse.aware.ShardingTableMetaDataAware; +import org.apache.shardingsphere.core.parse.filler.SQLSegmentFiller; import org.apache.shardingsphere.core.parse.sql.segment.ddl.column.ColumnDefinitionSegment; import org.apache.shardingsphere.core.parse.sql.segment.ddl.column.alter.ModifyColumnDefinitionSegment; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; @@ -33,7 +33,7 @@ * @author duhongjun */ @Setter -public final class ModifyColumnDefinitionFiller implements SQLSegmentFiller, ShardingTableMetaDataAwareFiller { +public final class ModifyColumnDefinitionFiller implements SQLSegmentFiller, ShardingTableMetaDataAware { private ShardingTableMetaData shardingTableMetaData; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/ddl/column/RenameColumnDefinitionFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/ddl/column/RenameColumnDefinitionFiller.java index ff10d915130e5..48cf707850cc6 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/ddl/column/RenameColumnDefinitionFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/ddl/column/RenameColumnDefinitionFiller.java @@ -20,8 +20,8 @@ import com.google.common.base.Optional; import lombok.Setter; import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; -import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; -import org.apache.shardingsphere.core.parse.filler.api.ShardingTableMetaDataAwareFiller; +import org.apache.shardingsphere.core.parse.aware.ShardingTableMetaDataAware; +import org.apache.shardingsphere.core.parse.filler.SQLSegmentFiller; import org.apache.shardingsphere.core.parse.sql.segment.ddl.column.ColumnDefinitionSegment; import org.apache.shardingsphere.core.parse.sql.segment.ddl.column.alter.RenameColumnSegment; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; @@ -33,7 +33,7 @@ * @author duhongjun */ @Setter -public final class RenameColumnDefinitionFiller implements SQLSegmentFiller, ShardingTableMetaDataAwareFiller { +public final class RenameColumnDefinitionFiller implements SQLSegmentFiller, ShardingTableMetaDataAware { private ShardingTableMetaData shardingTableMetaData; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/ddl/constraint/ConstraintDefinitionFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/ddl/constraint/ConstraintDefinitionFiller.java index c5e6ccb9057f8..b82a9f911daf1 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/ddl/constraint/ConstraintDefinitionFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/ddl/constraint/ConstraintDefinitionFiller.java @@ -20,8 +20,8 @@ import com.google.common.base.Optional; import lombok.Setter; import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; -import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; -import org.apache.shardingsphere.core.parse.filler.api.ShardingTableMetaDataAwareFiller; +import org.apache.shardingsphere.core.parse.aware.ShardingTableMetaDataAware; +import org.apache.shardingsphere.core.parse.filler.SQLSegmentFiller; import org.apache.shardingsphere.core.parse.sql.segment.ddl.column.ColumnDefinitionSegment; import org.apache.shardingsphere.core.parse.sql.segment.ddl.constraint.ConstraintDefinitionSegment; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; @@ -34,7 +34,7 @@ * @author duhongjun */ @Setter -public final class ConstraintDefinitionFiller implements SQLSegmentFiller, ShardingTableMetaDataAwareFiller { +public final class ConstraintDefinitionFiller implements SQLSegmentFiller, ShardingTableMetaDataAware { private ShardingTableMetaData shardingTableMetaData; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/ddl/constraint/DropPrimaryKeyFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/ddl/constraint/DropPrimaryKeyFiller.java index 8c2fcc0c64a2e..386c30ce79427 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/ddl/constraint/DropPrimaryKeyFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/ddl/constraint/DropPrimaryKeyFiller.java @@ -17,7 +17,7 @@ package org.apache.shardingsphere.core.parse.filler.common.ddl.constraint; -import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; +import org.apache.shardingsphere.core.parse.filler.SQLSegmentFiller; import org.apache.shardingsphere.core.parse.sql.segment.ddl.constraint.DropPrimaryKeySegment; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.sql.statement.ddl.AlterTableStatement; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/ddl/index/IndexFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/ddl/index/IndexFiller.java index 45aab43c0ace9..10c0fb5aa08d1 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/ddl/index/IndexFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/ddl/index/IndexFiller.java @@ -17,7 +17,7 @@ package org.apache.shardingsphere.core.parse.filler.common.ddl.index; -import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; +import org.apache.shardingsphere.core.parse.filler.SQLSegmentFiller; import org.apache.shardingsphere.core.parse.sql.segment.ddl.index.IndexSegment; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.sql.statement.ddl.DDLStatement; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/dml/GroupByFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/dml/GroupByFiller.java index 168ee5492aa00..a5496ed361307 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/dml/GroupByFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/dml/GroupByFiller.java @@ -17,7 +17,7 @@ package org.apache.shardingsphere.core.parse.filler.common.dml; -import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; +import org.apache.shardingsphere.core.parse.filler.SQLSegmentFiller; import org.apache.shardingsphere.core.parse.sql.segment.dml.order.GroupBySegment; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.SelectStatement; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/dml/InsertColumnsFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/dml/InsertColumnsFiller.java index f1ee768f1ff3b..a410a02e3e635 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/dml/InsertColumnsFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/dml/InsertColumnsFiller.java @@ -17,7 +17,7 @@ package org.apache.shardingsphere.core.parse.filler.common.dml; -import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; +import org.apache.shardingsphere.core.parse.filler.SQLSegmentFiller; import org.apache.shardingsphere.core.parse.sql.segment.dml.column.ColumnSegment; import org.apache.shardingsphere.core.parse.sql.segment.dml.column.InsertColumnsSegment; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/dml/LimitFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/dml/LimitFiller.java index cc7614cd6072b..035f57e44fdb9 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/dml/LimitFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/dml/LimitFiller.java @@ -17,7 +17,7 @@ package org.apache.shardingsphere.core.parse.filler.common.dml; -import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; +import org.apache.shardingsphere.core.parse.filler.SQLSegmentFiller; import org.apache.shardingsphere.core.parse.sql.segment.dml.pagination.limit.LimitSegment; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.SelectStatement; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/dml/OrderByFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/dml/OrderByFiller.java index 43e952ea3b7f8..f0510a27952a7 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/dml/OrderByFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/dml/OrderByFiller.java @@ -17,7 +17,7 @@ package org.apache.shardingsphere.core.parse.filler.common.dml; -import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; +import org.apache.shardingsphere.core.parse.filler.SQLSegmentFiller; import org.apache.shardingsphere.core.parse.sql.segment.dml.order.OrderBySegment; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.SelectStatement; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/dml/SelectItemFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/dml/SelectItemFiller.java index a0d71a3bc9d02..4d17a952d9e9f 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/dml/SelectItemFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/dml/SelectItemFiller.java @@ -19,7 +19,7 @@ import com.google.common.base.Optional; import lombok.RequiredArgsConstructor; -import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; +import org.apache.shardingsphere.core.parse.filler.SQLSegmentFiller; import org.apache.shardingsphere.core.parse.sql.context.selectitem.AggregationDistinctSelectItem; import org.apache.shardingsphere.core.parse.sql.context.selectitem.AggregationSelectItem; import org.apache.shardingsphere.core.parse.sql.context.selectitem.CommonSelectItem; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/dml/SelectItemsFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/dml/SelectItemsFiller.java index b45b6372e84dd..b03b207e5cc08 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/dml/SelectItemsFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/dml/SelectItemsFiller.java @@ -20,7 +20,7 @@ import com.google.common.base.Optional; import lombok.Setter; import org.apache.shardingsphere.core.parse.constant.DerivedColumn; -import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; +import org.apache.shardingsphere.core.parse.filler.SQLSegmentFiller; import org.apache.shardingsphere.core.parse.sql.context.selectitem.DistinctSelectItem; import org.apache.shardingsphere.core.parse.sql.segment.dml.SelectItemsSegment; import org.apache.shardingsphere.core.parse.sql.segment.dml.item.AggregationDistinctSelectItemSegment; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/dml/SubqueryFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/dml/SubqueryFiller.java index 9a7782f699649..22544637b6fab 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/dml/SubqueryFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/dml/SubqueryFiller.java @@ -17,7 +17,7 @@ package org.apache.shardingsphere.core.parse.filler.common.dml; -import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; +import org.apache.shardingsphere.core.parse.filler.SQLSegmentFiller; import org.apache.shardingsphere.core.parse.sql.segment.dml.expr.complex.SubquerySegment; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.SelectStatement; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/dml/WhereFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/dml/WhereFiller.java index 0ec832c16d580..be115264c9392 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/dml/WhereFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/common/dml/WhereFiller.java @@ -17,7 +17,7 @@ package org.apache.shardingsphere.core.parse.filler.common.dml; -import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; +import org.apache.shardingsphere.core.parse.filler.SQLSegmentFiller; import org.apache.shardingsphere.core.parse.sql.segment.dml.WhereSegment; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.DeleteStatement; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/EncryptOrPredicateFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/EncryptOrPredicateFiller.java index ac7714c990e15..2562e5a5ba5a5 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/EncryptOrPredicateFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/EncryptOrPredicateFiller.java @@ -20,10 +20,10 @@ import com.google.common.base.Optional; import lombok.Setter; import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; +import org.apache.shardingsphere.core.parse.aware.EncryptRuleAware; +import org.apache.shardingsphere.core.parse.aware.ShardingTableMetaDataAware; import org.apache.shardingsphere.core.parse.exception.SQLParsingException; -import org.apache.shardingsphere.core.parse.filler.api.EncryptRuleAwareFiller; -import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; -import org.apache.shardingsphere.core.parse.filler.api.ShardingTableMetaDataAwareFiller; +import org.apache.shardingsphere.core.parse.filler.SQLSegmentFiller; import org.apache.shardingsphere.core.parse.filler.common.dml.PredicateUtils; import org.apache.shardingsphere.core.parse.sql.context.condition.AndCondition; import org.apache.shardingsphere.core.parse.sql.context.condition.Column; @@ -48,7 +48,7 @@ * @author panjuan */ @Setter -public final class EncryptOrPredicateFiller implements SQLSegmentFiller, EncryptRuleAwareFiller, ShardingTableMetaDataAwareFiller { +public final class EncryptOrPredicateFiller implements SQLSegmentFiller, EncryptRuleAware, ShardingTableMetaDataAware { private EncryptRule encryptRule; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/insert/EncryptInsertValuesFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/insert/EncryptInsertValuesFiller.java index fee8910a6c62a..067808d8e11ac 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/insert/EncryptInsertValuesFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/insert/EncryptInsertValuesFiller.java @@ -19,9 +19,9 @@ import lombok.Setter; import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; -import org.apache.shardingsphere.core.parse.filler.api.EncryptRuleAwareFiller; -import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; -import org.apache.shardingsphere.core.parse.filler.api.ShardingTableMetaDataAwareFiller; +import org.apache.shardingsphere.core.parse.aware.EncryptRuleAware; +import org.apache.shardingsphere.core.parse.aware.ShardingTableMetaDataAware; +import org.apache.shardingsphere.core.parse.filler.SQLSegmentFiller; import org.apache.shardingsphere.core.parse.sql.context.insertvalue.InsertValue; import org.apache.shardingsphere.core.parse.sql.segment.dml.InsertValuesSegment; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; @@ -37,7 +37,7 @@ * @author panjuan */ @Setter -public final class EncryptInsertValuesFiller implements SQLSegmentFiller, EncryptRuleAwareFiller, ShardingTableMetaDataAwareFiller { +public final class EncryptInsertValuesFiller implements SQLSegmentFiller, EncryptRuleAware, ShardingTableMetaDataAware { private EncryptRule encryptRule; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/update/EncryptSetAssignmentsFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/update/EncryptSetAssignmentsFiller.java index f11e70da57407..247b9c67e2fbb 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/update/EncryptSetAssignmentsFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/encrypt/dml/update/EncryptSetAssignmentsFiller.java @@ -18,7 +18,7 @@ package org.apache.shardingsphere.core.parse.filler.encrypt.dml.update; import lombok.Setter; -import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; +import org.apache.shardingsphere.core.parse.filler.SQLSegmentFiller; import org.apache.shardingsphere.core.parse.sql.context.condition.Column; import org.apache.shardingsphere.core.parse.sql.context.insertvalue.InsertValue; import org.apache.shardingsphere.core.parse.sql.segment.dml.assignment.AssignmentSegment; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/ShardingOrPredicateFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/ShardingOrPredicateFiller.java index 743dd3f60ec08..7a30e271fecc4 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/ShardingOrPredicateFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/ShardingOrPredicateFiller.java @@ -20,9 +20,9 @@ import com.google.common.base.Optional; import lombok.Setter; import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; -import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; -import org.apache.shardingsphere.core.parse.filler.api.ShardingRuleAwareFiller; -import org.apache.shardingsphere.core.parse.filler.api.ShardingTableMetaDataAwareFiller; +import org.apache.shardingsphere.core.parse.aware.ShardingRuleAware; +import org.apache.shardingsphere.core.parse.aware.ShardingTableMetaDataAware; +import org.apache.shardingsphere.core.parse.filler.SQLSegmentFiller; import org.apache.shardingsphere.core.parse.filler.common.dml.PredicateUtils; import org.apache.shardingsphere.core.parse.filler.encrypt.dml.EncryptOrPredicateFiller; import org.apache.shardingsphere.core.parse.filler.sharding.dml.select.ShardingRowNumberPredicateFiller; @@ -49,7 +49,7 @@ * @author panjuan */ @Setter -public final class ShardingOrPredicateFiller implements SQLSegmentFiller, ShardingRuleAwareFiller, ShardingTableMetaDataAwareFiller { +public final class ShardingOrPredicateFiller implements SQLSegmentFiller, ShardingRuleAware, ShardingTableMetaDataAware { private final ShardingRowNumberPredicateFiller shardingRowNumberPredicateFiller = new ShardingRowNumberPredicateFiller(); diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingInsertValuesFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingInsertValuesFiller.java index 8c77144d607a4..f962ba44246b5 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingInsertValuesFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingInsertValuesFiller.java @@ -20,9 +20,9 @@ import com.google.common.base.Optional; import lombok.Setter; import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; -import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; -import org.apache.shardingsphere.core.parse.filler.api.ShardingRuleAwareFiller; -import org.apache.shardingsphere.core.parse.filler.api.ShardingTableMetaDataAwareFiller; +import org.apache.shardingsphere.core.parse.aware.ShardingRuleAware; +import org.apache.shardingsphere.core.parse.aware.ShardingTableMetaDataAware; +import org.apache.shardingsphere.core.parse.filler.SQLSegmentFiller; import org.apache.shardingsphere.core.parse.sql.context.insertvalue.InsertValue; import org.apache.shardingsphere.core.parse.sql.segment.dml.InsertValuesSegment; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; @@ -38,7 +38,7 @@ * @author panjuan */ @Setter -public final class ShardingInsertValuesFiller implements SQLSegmentFiller, ShardingRuleAwareFiller, ShardingTableMetaDataAwareFiller { +public final class ShardingInsertValuesFiller implements SQLSegmentFiller, ShardingRuleAware, ShardingTableMetaDataAware { private ShardingRule shardingRule; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingOnDuplicateKeyColumnsFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingOnDuplicateKeyColumnsFiller.java index 1351e1759b0b0..f134b3b6c9abf 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingOnDuplicateKeyColumnsFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingOnDuplicateKeyColumnsFiller.java @@ -18,9 +18,9 @@ package org.apache.shardingsphere.core.parse.filler.sharding.dml.insert; import lombok.Setter; +import org.apache.shardingsphere.core.parse.aware.ShardingRuleAware; import org.apache.shardingsphere.core.parse.exception.SQLParsingException; -import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; -import org.apache.shardingsphere.core.parse.filler.api.ShardingRuleAwareFiller; +import org.apache.shardingsphere.core.parse.filler.SQLSegmentFiller; import org.apache.shardingsphere.core.parse.sql.segment.dml.column.ColumnSegment; import org.apache.shardingsphere.core.parse.sql.segment.dml.column.OnDuplicateKeyColumnsSegment; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; @@ -32,7 +32,7 @@ * @author zhangliang */ @Setter -public final class ShardingOnDuplicateKeyColumnsFiller implements SQLSegmentFiller, ShardingRuleAwareFiller { +public final class ShardingOnDuplicateKeyColumnsFiller implements SQLSegmentFiller, ShardingRuleAware { private ShardingRule shardingRule; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/select/ShardingRowNumberPredicateFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/select/ShardingRowNumberPredicateFiller.java index 988c5a83fe931..1c43f0b24be70 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/select/ShardingRowNumberPredicateFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/select/ShardingRowNumberPredicateFiller.java @@ -18,7 +18,7 @@ package org.apache.shardingsphere.core.parse.filler.sharding.dml.select; import com.google.common.base.Optional; -import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; +import org.apache.shardingsphere.core.parse.filler.SQLSegmentFiller; import org.apache.shardingsphere.core.parse.sql.context.selectitem.SelectItem; import org.apache.shardingsphere.core.parse.sql.segment.dml.expr.ExpressionSegment; import org.apache.shardingsphere.core.parse.sql.segment.dml.expr.simple.LiteralExpressionSegment; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/select/ShardingSubqueryPredicateFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/select/ShardingSubqueryPredicateFiller.java index d5dbfb998f05d..19d227b251ab6 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/select/ShardingSubqueryPredicateFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/select/ShardingSubqueryPredicateFiller.java @@ -19,9 +19,9 @@ import lombok.Setter; import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; -import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; -import org.apache.shardingsphere.core.parse.filler.api.ShardingRuleAwareFiller; -import org.apache.shardingsphere.core.parse.filler.api.ShardingTableMetaDataAwareFiller; +import org.apache.shardingsphere.core.parse.aware.ShardingRuleAware; +import org.apache.shardingsphere.core.parse.aware.ShardingTableMetaDataAware; +import org.apache.shardingsphere.core.parse.filler.SQLSegmentFiller; import org.apache.shardingsphere.core.parse.filler.sharding.dml.ShardingOrPredicateFiller; import org.apache.shardingsphere.core.parse.sql.segment.dml.predicate.OrPredicateSegment; import org.apache.shardingsphere.core.parse.sql.segment.dml.predicate.SubqueryPredicateSegment; @@ -35,7 +35,7 @@ * @author duhongjun */ @Setter -public final class ShardingSubqueryPredicateFiller implements SQLSegmentFiller, ShardingRuleAwareFiller, ShardingTableMetaDataAwareFiller { +public final class ShardingSubqueryPredicateFiller implements SQLSegmentFiller, ShardingRuleAware, ShardingTableMetaDataAware { private final ShardingRowNumberPredicateFiller shardingRowNumberPredicateFiller = new ShardingRowNumberPredicateFiller(); diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/update/ShardingSetAssignmentsFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/update/ShardingSetAssignmentsFiller.java index 535eff8fd1987..4dd04f427ef83 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/update/ShardingSetAssignmentsFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/update/ShardingSetAssignmentsFiller.java @@ -19,10 +19,10 @@ import lombok.Setter; import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; +import org.apache.shardingsphere.core.parse.aware.ShardingRuleAware; +import org.apache.shardingsphere.core.parse.aware.ShardingTableMetaDataAware; import org.apache.shardingsphere.core.parse.exception.SQLParsingException; -import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; -import org.apache.shardingsphere.core.parse.filler.api.ShardingRuleAwareFiller; -import org.apache.shardingsphere.core.parse.filler.api.ShardingTableMetaDataAwareFiller; +import org.apache.shardingsphere.core.parse.filler.SQLSegmentFiller; import org.apache.shardingsphere.core.parse.sql.context.condition.Column; import org.apache.shardingsphere.core.parse.sql.context.insertvalue.InsertValue; import org.apache.shardingsphere.core.parse.sql.segment.dml.assignment.AssignmentSegment; @@ -43,7 +43,7 @@ * @author panjuan */ @Setter -public final class ShardingSetAssignmentsFiller implements SQLSegmentFiller, ShardingRuleAwareFiller, ShardingTableMetaDataAwareFiller { +public final class ShardingSetAssignmentsFiller implements SQLSegmentFiller, ShardingRuleAware, ShardingTableMetaDataAware { private ShardingRule shardingRule; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/rule/registry/ParseRuleRegistry.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/rule/registry/ParseRuleRegistry.java index c016f25e25552..9da78b1ce8c97 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/rule/registry/ParseRuleRegistry.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/rule/registry/ParseRuleRegistry.java @@ -18,7 +18,7 @@ package org.apache.shardingsphere.core.parse.rule.registry; import com.google.common.base.Optional; -import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; +import org.apache.shardingsphere.core.parse.filler.SQLSegmentFiller; import org.apache.shardingsphere.core.parse.parser.SQLParserFactory; import org.apache.shardingsphere.core.parse.rule.jaxb.entity.extractor.ExtractorRuleDefinitionEntity; import org.apache.shardingsphere.core.parse.rule.jaxb.entity.filler.FillerRuleDefinitionEntity; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/rule/registry/filler/FillerRuleDefinition.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/rule/registry/filler/FillerRuleDefinition.java index 0d6701508cdbe..1b887e41b8f97 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/rule/registry/filler/FillerRuleDefinition.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/rule/registry/filler/FillerRuleDefinition.java @@ -18,7 +18,7 @@ package org.apache.shardingsphere.core.parse.rule.registry.filler; import lombok.SneakyThrows; -import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; +import org.apache.shardingsphere.core.parse.filler.SQLSegmentFiller; import org.apache.shardingsphere.core.parse.rule.jaxb.entity.filler.FillerRuleDefinitionEntity; import org.apache.shardingsphere.core.parse.rule.jaxb.entity.filler.FillerRuleEntity; import org.apache.shardingsphere.core.parse.sql.segment.SQLSegment; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/java/org/apache/shardingsphere/core/parse/filler/dal/MySQLShowLikeFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/java/org/apache/shardingsphere/core/parse/filler/dal/MySQLShowLikeFiller.java index f8962a2bcdbea..29832fcdf78cf 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/java/org/apache/shardingsphere/core/parse/filler/dal/MySQLShowLikeFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/java/org/apache/shardingsphere/core/parse/filler/dal/MySQLShowLikeFiller.java @@ -18,8 +18,8 @@ package org.apache.shardingsphere.core.parse.filler.dal; import lombok.Setter; -import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; -import org.apache.shardingsphere.core.parse.filler.api.ShardingRuleAwareFiller; +import org.apache.shardingsphere.core.parse.aware.ShardingRuleAware; +import org.apache.shardingsphere.core.parse.filler.SQLSegmentFiller; import org.apache.shardingsphere.core.parse.sql.context.table.Table; import org.apache.shardingsphere.core.parse.sql.segment.dal.ShowLikeSegment; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; @@ -31,7 +31,7 @@ * @author zhangliang */ @Setter -public final class MySQLShowLikeFiller implements SQLSegmentFiller, ShardingRuleAwareFiller { +public final class MySQLShowLikeFiller implements SQLSegmentFiller, ShardingRuleAware { private ShardingRule shardingRule; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/java/org/apache/shardingsphere/core/parse/filler/tcl/MySQLAutoCommitFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/java/org/apache/shardingsphere/core/parse/filler/tcl/MySQLAutoCommitFiller.java index 42b4fa653db05..af58a598013fe 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/java/org/apache/shardingsphere/core/parse/filler/tcl/MySQLAutoCommitFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/java/org/apache/shardingsphere/core/parse/filler/tcl/MySQLAutoCommitFiller.java @@ -17,7 +17,7 @@ package org.apache.shardingsphere.core.parse.filler.tcl; -import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; +import org.apache.shardingsphere.core.parse.filler.SQLSegmentFiller; import org.apache.shardingsphere.core.parse.sql.segment.tcl.AutoCommitSegment; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.sql.statement.tcl.SetAutoCommitStatement; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/java/org/apache/shardingsphere/core/parse/filler/tcl/SQLServerImplicitTransactionsFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/java/org/apache/shardingsphere/core/parse/filler/tcl/SQLServerImplicitTransactionsFiller.java index 99487d2560fde..08beef4e93388 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/java/org/apache/shardingsphere/core/parse/filler/tcl/SQLServerImplicitTransactionsFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/java/org/apache/shardingsphere/core/parse/filler/tcl/SQLServerImplicitTransactionsFiller.java @@ -17,7 +17,7 @@ package org.apache.shardingsphere.core.parse.filler.tcl; -import org.apache.shardingsphere.core.parse.filler.api.SQLSegmentFiller; +import org.apache.shardingsphere.core.parse.filler.SQLSegmentFiller; import org.apache.shardingsphere.core.parse.sql.segment.SQLSegment; import org.apache.shardingsphere.core.parse.sql.segment.tcl.ImplicitTransactionsSegment; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; From 808911e3592b0a842208b2ecd8cb6c4b16aee006 Mon Sep 17 00:00:00 2001 From: tristaZero Date: Fri, 14 Jun 2019 18:35:46 +0800 Subject: [PATCH 210/283] add optimizeResult --- .../type/broadcast/TableBroadcastRoutingEngine.java | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/type/broadcast/TableBroadcastRoutingEngine.java b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/type/broadcast/TableBroadcastRoutingEngine.java index c46db4acb0df9..365bf9668e168 100644 --- a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/type/broadcast/TableBroadcastRoutingEngine.java +++ b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/type/broadcast/TableBroadcastRoutingEngine.java @@ -18,8 +18,8 @@ package org.apache.shardingsphere.core.route.type.broadcast; import lombok.RequiredArgsConstructor; +import org.apache.shardingsphere.core.optimize.result.OptimizeResult; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; -import org.apache.shardingsphere.core.parse.sql.statement.ddl.DDLStatement; import org.apache.shardingsphere.core.route.type.RoutingEngine; import org.apache.shardingsphere.core.route.type.RoutingResult; import org.apache.shardingsphere.core.route.type.RoutingUnit; @@ -46,6 +46,8 @@ public final class TableBroadcastRoutingEngine implements RoutingEngine { private final SQLStatement sqlStatement; + private final OptimizeResult optimizeResult; + @Override public RoutingResult route() { RoutingResult result = new RoutingResult(); @@ -56,16 +58,12 @@ public RoutingResult route() { } private Collection getLogicTableNames() { - if (isOperateIndexWithoutTable()) { - return Collections.singletonList(shardingRule.getLogicTableName(((DDLStatement) sqlStatement).getIndexName())); + if (optimizeResult.getLogicTableNameForDropIndex().isPresent()) { + return Collections.singletonList(optimizeResult.getLogicTableNameForDropIndex().get()); } return sqlStatement.getTables().getTableNames(); } - private boolean isOperateIndexWithoutTable() { - return sqlStatement instanceof DDLStatement && sqlStatement.getTables().isEmpty(); - } - private Collection getAllRoutingUnits(final String logicTableName) { Collection result = new LinkedList<>(); TableRule tableRule = shardingRule.getTableRule(logicTableName); From a5c0fab9dfd8f60a4274978c2cdc42315739dc7b Mon Sep 17 00:00:00 2001 From: tristaZero Date: Fri, 14 Jun 2019 18:36:10 +0800 Subject: [PATCH 211/283] mock(OptimizeResult) for TableBroadcastRoutingEngine --- .../type/broadcast/TableBroadcastRoutingEngineTest.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sharding-core/sharding-core-route/src/test/java/org/apache/shardingsphere/core/route/type/broadcast/TableBroadcastRoutingEngineTest.java b/sharding-core/sharding-core-route/src/test/java/org/apache/shardingsphere/core/route/type/broadcast/TableBroadcastRoutingEngineTest.java index e813ca033843e..6e3a6d439b450 100644 --- a/sharding-core/sharding-core-route/src/test/java/org/apache/shardingsphere/core/route/type/broadcast/TableBroadcastRoutingEngineTest.java +++ b/sharding-core/sharding-core-route/src/test/java/org/apache/shardingsphere/core/route/type/broadcast/TableBroadcastRoutingEngineTest.java @@ -19,6 +19,7 @@ import org.apache.shardingsphere.api.config.sharding.ShardingRuleConfiguration; import org.apache.shardingsphere.api.config.sharding.TableRuleConfiguration; +import org.apache.shardingsphere.core.optimize.result.OptimizeResult; import org.apache.shardingsphere.core.parse.sql.statement.ddl.DDLStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.SelectStatement; import org.apache.shardingsphere.core.route.type.RoutingResult; @@ -32,6 +33,7 @@ import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertThat; +import static org.mockito.Mockito.mock; public final class TableBroadcastRoutingEngineTest { @@ -79,13 +81,13 @@ public void assertTableUnitsForDDLStatement() { } private RoutingResult createDQLStatementRoutingResult() { - return new TableBroadcastRoutingEngine(shardingRule, new SelectStatement()).route(); + return new TableBroadcastRoutingEngine(shardingRule, new SelectStatement(), mock(OptimizeResult.class)).route(); } private RoutingResult createDDLStatementRoutingResult() { DDLStatement ddlStatement = new DDLStatement(); ddlStatement.setLogicSQL("CREATE INDEX t_order_index on t_order"); ddlStatement.setIndexName("t_order_index"); - return new TableBroadcastRoutingEngine(shardingRule, ddlStatement).route(); + return new TableBroadcastRoutingEngine(shardingRule, ddlStatement, mock(OptimizeResult.class)).route(); } } From 2e47ffc9cdfd47364afa2a38e90ada2bba236b2c Mon Sep 17 00:00:00 2001 From: tristaZero Date: Fri, 14 Jun 2019 18:36:21 +0800 Subject: [PATCH 212/283] delete logicIndex --- .../java/org/apache/shardingsphere/core/rule/TableRule.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/rule/TableRule.java b/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/rule/TableRule.java index ed094f8526025..ad856becf24cf 100644 --- a/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/rule/TableRule.java +++ b/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/rule/TableRule.java @@ -68,8 +68,6 @@ public final class TableRule { private final ShardingKeyGenerator shardingKeyGenerator; - private final String logicIndex; - public TableRule(final String defaultDataSourceName, final String logicTableName) { logicTable = logicTableName.toLowerCase(); actualDataNodes = Collections.singletonList(new DataNode(defaultDataSourceName, logicTableName)); @@ -79,7 +77,6 @@ public TableRule(final String defaultDataSourceName, final String logicTableName tableShardingStrategy = null; generateKeyColumn = null; shardingKeyGenerator = null; - logicIndex = null; } public TableRule(final Collection dataSourceNames, final String logicTableName) { @@ -91,7 +88,6 @@ public TableRule(final Collection dataSourceNames, final String logicTab tableShardingStrategy = null; generateKeyColumn = null; shardingKeyGenerator = null; - logicIndex = null; } public TableRule(final TableRuleConfiguration tableRuleConfig, final ShardingDataSourceNames shardingDataSourceNames, final String defaultGenerateKeyColumn) { @@ -106,7 +102,6 @@ public TableRule(final TableRuleConfiguration tableRuleConfig, final ShardingDat generateKeyColumn = getGenerateKeyColumn(tableRuleConfig.getKeyGeneratorConfig(), defaultGenerateKeyColumn); shardingKeyGenerator = containsKeyGeneratorConfiguration(tableRuleConfig) ? new ShardingKeyGeneratorServiceLoader().newService(tableRuleConfig.getKeyGeneratorConfig().getType(), tableRuleConfig.getKeyGeneratorConfig().getProperties()) : null; - logicIndex = null == tableRuleConfig.getLogicIndex() ? null : tableRuleConfig.getLogicIndex().toLowerCase(); } private Set getActualTables() { From 4dd7fb0cbeb534f05167e9f953710303041994d6 Mon Sep 17 00:00:00 2001 From: tristaZero Date: Fri, 14 Jun 2019 18:36:33 +0800 Subject: [PATCH 213/283] do not assertNull(actual.getLogicIndex()); --- .../org/apache/shardingsphere/core/rule/TableRuleTest.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/sharding-core/sharding-core-common/src/test/java/org/apache/shardingsphere/core/rule/TableRuleTest.java b/sharding-core/sharding-core-common/src/test/java/org/apache/shardingsphere/core/rule/TableRuleTest.java index 0a7d54693070e..4f919186b7e37 100644 --- a/sharding-core/sharding-core-common/src/test/java/org/apache/shardingsphere/core/rule/TableRuleTest.java +++ b/sharding-core/sharding-core-common/src/test/java/org/apache/shardingsphere/core/rule/TableRuleTest.java @@ -50,7 +50,6 @@ public void assertCreateMinTableRule() { assertTrue(actual.getActualDataNodes().contains(new DataNode("ds1", "LOGIC_TABLE"))); assertNull(actual.getDatabaseShardingStrategy()); assertNull(actual.getTableShardingStrategy()); - assertNull(actual.getLogicIndex()); } @Test @@ -73,7 +72,6 @@ public void assertCreateFullTableRule() { assertNotNull(actual.getTableShardingStrategy()); assertThat(actual.getGenerateKeyColumn(), is("col_1")); assertThat(actual.getShardingKeyGenerator(), instanceOf(IncrementShardingKeyGenerator.class)); - assertThat(actual.getLogicIndex(), is("logic_index")); } @Test @@ -119,8 +117,7 @@ public void assertToString() { TableRule actual = new TableRule(new TableRuleConfiguration("LOGIC_TABLE", "ds${0..1}.table_${0..2}"), createShardingDataSourceNames(), null); String actualString = "TableRule(logicTable=logic_table, actualDataNodes=[DataNode(dataSourceName=ds0, tableName=table_0), DataNode(dataSourceName=ds0, tableName=table_1), " + "DataNode(dataSourceName=ds0, tableName=table_2), DataNode(dataSourceName=ds1, tableName=table_0), DataNode(dataSourceName=ds1, tableName=table_1), " - + "DataNode(dataSourceName=ds1, tableName=table_2)], databaseShardingStrategy=null, tableShardingStrategy=null, generateKeyColumn=null, shardingKeyGenerator=null, " - + "logicIndex=null)"; + + "DataNode(dataSourceName=ds1, tableName=table_2)], databaseShardingStrategy=null, tableShardingStrategy=null, generateKeyColumn=null, shardingKeyGenerator=null)"; assertThat(actual.toString(), is(actualString)); } From 146b2ab4711d8e208ac363ab166ab20d272e142c Mon Sep 17 00:00:00 2001 From: terrymanu Date: Fri, 14 Jun 2019 18:39:38 +0800 Subject: [PATCH 214/283] for #2556, use XXXAwareFiller on optimizer --- .../core/parse/optimizer/SQLStatementOptimizer.java | 12 +----------- .../parse/optimizer/SQLStatementOptimizerEngine.java | 11 ++++++++++- .../optimizer/insert/ShardingInsertOptimizer.java | 7 ++++--- .../core/parse/optimizer/select/SelectOptimizer.java | 7 +------ 4 files changed, 16 insertions(+), 21 deletions(-) diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/SQLStatementOptimizer.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/SQLStatementOptimizer.java index d3d8e67c6ef17..8599dc35564a2 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/SQLStatementOptimizer.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/SQLStatementOptimizer.java @@ -19,23 +19,13 @@ import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; -import org.apache.shardingsphere.core.rule.BaseRule; /** * SQL statement optimizer. * * @author zhangliang - * - * @param type of base rule */ -public interface SQLStatementOptimizer { - - /** - * Set rule. - * - * @param rule rule - */ - void setRule(T rule); +public interface SQLStatementOptimizer { /** * Optimize SQL statement. diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/SQLStatementOptimizerEngine.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/SQLStatementOptimizerEngine.java index 46c6e7003c65b..bc909e30016b8 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/SQLStatementOptimizerEngine.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/SQLStatementOptimizerEngine.java @@ -20,9 +20,13 @@ import com.google.common.base.Optional; import lombok.RequiredArgsConstructor; import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; +import org.apache.shardingsphere.core.parse.aware.EncryptRuleAware; +import org.apache.shardingsphere.core.parse.aware.ShardingRuleAware; import org.apache.shardingsphere.core.parse.rule.registry.statement.SQLStatementRule; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.rule.BaseRule; +import org.apache.shardingsphere.core.rule.EncryptRule; +import org.apache.shardingsphere.core.rule.ShardingRule; /** * SQL statement optimizer engine. @@ -46,7 +50,12 @@ public final class SQLStatementOptimizerEngine { public void optimize(final SQLStatementRule sqlStatementRule, final SQLStatement sqlStatement) { Optional optimizer = sqlStatementRule.getOptimizer(); if (optimizer.isPresent()) { - optimizer.get().setRule(rule); + if (optimizer.get() instanceof ShardingRuleAware && rule instanceof ShardingRule) { + ((ShardingRuleAware) optimizer.get()).setShardingRule((ShardingRule) rule); + } + if (optimizer.get() instanceof EncryptRuleAware && rule instanceof EncryptRule) { + ((EncryptRuleAware) optimizer.get()).setEncryptRule((EncryptRule) rule); + } optimizer.get().optimize(sqlStatement, shardingTableMetaData); } } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/insert/ShardingInsertOptimizer.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/insert/ShardingInsertOptimizer.java index 4106bb94d4e41..6fd2c62d0550f 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/insert/ShardingInsertOptimizer.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/insert/ShardingInsertOptimizer.java @@ -19,6 +19,7 @@ import lombok.Setter; import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; +import org.apache.shardingsphere.core.parse.aware.ShardingRuleAware; import org.apache.shardingsphere.core.parse.optimizer.SQLStatementOptimizer; import org.apache.shardingsphere.core.parse.sql.context.condition.AndCondition; import org.apache.shardingsphere.core.parse.sql.context.condition.Column; @@ -38,9 +39,9 @@ * @author zhangliang */ @Setter -public final class ShardingInsertOptimizer implements SQLStatementOptimizer { +public final class ShardingInsertOptimizer implements SQLStatementOptimizer, ShardingRuleAware { - private ShardingRule rule; + private ShardingRule shardingRule; @Override public void optimize(final SQLStatement sqlStatement, final ShardingTableMetaData shardingTableMetaData) { @@ -62,7 +63,7 @@ private void fillCondition(final InsertValue insertValue, final InsertStatement } private void fillShardingCondition(final AndCondition andCondition, final String tableName, final String columnName, final SimpleExpressionSegment expressionSegment) { - if (rule.isShardingColumn(columnName, tableName)) { + if (shardingRule.isShardingColumn(columnName, tableName)) { andCondition.getConditions().add(new Condition(new Column(columnName, tableName), null, expressionSegment)); } } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/select/SelectOptimizer.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/select/SelectOptimizer.java index de386d26f4832..afd0cd2067da0 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/select/SelectOptimizer.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/select/SelectOptimizer.java @@ -19,7 +19,6 @@ import com.google.common.base.Optional; import com.google.common.base.Preconditions; -import lombok.Setter; import org.apache.shardingsphere.core.constant.AggregationType; import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; import org.apache.shardingsphere.core.parse.constant.DerivedColumn; @@ -38,7 +37,6 @@ import org.apache.shardingsphere.core.parse.sql.segment.dml.order.item.TextOrderByItemSegment; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.SelectStatement; -import org.apache.shardingsphere.core.rule.ShardingRule; import java.util.List; @@ -48,10 +46,7 @@ * @author duhongjun * @author panjuan */ -@Setter -public final class SelectOptimizer implements SQLStatementOptimizer { - - private ShardingRule rule; +public final class SelectOptimizer implements SQLStatementOptimizer { @Override public void optimize(final SQLStatement sqlStatement, final ShardingTableMetaData shardingTableMetaData) { From c4a37bfd093003849c49fcd0b54bf856ea7695d8 Mon Sep 17 00:00:00 2001 From: tristaZero Date: Fri, 14 Jun 2019 18:42:25 +0800 Subject: [PATCH 215/283] modify createDDLStatementRoutingResult() --- .../type/broadcast/TableBroadcastRoutingEngineTest.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/sharding-core/sharding-core-route/src/test/java/org/apache/shardingsphere/core/route/type/broadcast/TableBroadcastRoutingEngineTest.java b/sharding-core/sharding-core-route/src/test/java/org/apache/shardingsphere/core/route/type/broadcast/TableBroadcastRoutingEngineTest.java index 6e3a6d439b450..9ff4a04245359 100644 --- a/sharding-core/sharding-core-route/src/test/java/org/apache/shardingsphere/core/route/type/broadcast/TableBroadcastRoutingEngineTest.java +++ b/sharding-core/sharding-core-route/src/test/java/org/apache/shardingsphere/core/route/type/broadcast/TableBroadcastRoutingEngineTest.java @@ -20,6 +20,8 @@ import org.apache.shardingsphere.api.config.sharding.ShardingRuleConfiguration; import org.apache.shardingsphere.api.config.sharding.TableRuleConfiguration; import org.apache.shardingsphere.core.optimize.result.OptimizeResult; +import org.apache.shardingsphere.core.optimize.result.insert.InsertOptimizeResult; +import org.apache.shardingsphere.core.parse.sql.context.table.Table; import org.apache.shardingsphere.core.parse.sql.statement.ddl.DDLStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.SelectStatement; import org.apache.shardingsphere.core.route.type.RoutingResult; @@ -28,12 +30,12 @@ import org.junit.Test; import java.util.Arrays; +import java.util.Collections; import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertThat; -import static org.mockito.Mockito.mock; public final class TableBroadcastRoutingEngineTest { @@ -81,13 +83,14 @@ public void assertTableUnitsForDDLStatement() { } private RoutingResult createDQLStatementRoutingResult() { - return new TableBroadcastRoutingEngine(shardingRule, new SelectStatement(), mock(OptimizeResult.class)).route(); + return new TableBroadcastRoutingEngine(shardingRule, new SelectStatement(), new OptimizeResult(new InsertOptimizeResult(Collections.emptyList()))).route(); } private RoutingResult createDDLStatementRoutingResult() { DDLStatement ddlStatement = new DDLStatement(); + ddlStatement.getTables().add(new Table("t_order", null)); ddlStatement.setLogicSQL("CREATE INDEX t_order_index on t_order"); ddlStatement.setIndexName("t_order_index"); - return new TableBroadcastRoutingEngine(shardingRule, ddlStatement, mock(OptimizeResult.class)).route(); + return new TableBroadcastRoutingEngine(shardingRule, ddlStatement, new OptimizeResult(new InsertOptimizeResult(Collections.emptyList()))).route(); } } From 501cddcf05a6178a5b8ed0fe5629b4485b8e70e6 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Fri, 14 Jun 2019 18:43:10 +0800 Subject: [PATCH 216/283] for #2556, use ShardingTableMetaDataAware on optimizer --- .../core/parse/optimizer/SQLStatementOptimizer.java | 4 +--- .../parse/optimizer/SQLStatementOptimizerEngine.java | 7 +++++-- .../parse/optimizer/insert/ShardingInsertOptimizer.java | 3 +-- .../core/parse/optimizer/select/SelectOptimizer.java | 9 +++++++-- 4 files changed, 14 insertions(+), 9 deletions(-) diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/SQLStatementOptimizer.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/SQLStatementOptimizer.java index 8599dc35564a2..6cb492d088477 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/SQLStatementOptimizer.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/SQLStatementOptimizer.java @@ -17,7 +17,6 @@ package org.apache.shardingsphere.core.parse.optimizer; -import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; /** @@ -31,7 +30,6 @@ public interface SQLStatementOptimizer { * Optimize SQL statement. * * @param sqlStatement SQL statement - * @param shardingTableMetaData sharding table meta data */ - void optimize(SQLStatement sqlStatement, ShardingTableMetaData shardingTableMetaData); + void optimize(SQLStatement sqlStatement); } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/SQLStatementOptimizerEngine.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/SQLStatementOptimizerEngine.java index bc909e30016b8..bdbd99b9f5ff9 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/SQLStatementOptimizerEngine.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/SQLStatementOptimizerEngine.java @@ -22,6 +22,7 @@ import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; import org.apache.shardingsphere.core.parse.aware.EncryptRuleAware; import org.apache.shardingsphere.core.parse.aware.ShardingRuleAware; +import org.apache.shardingsphere.core.parse.aware.ShardingTableMetaDataAware; import org.apache.shardingsphere.core.parse.rule.registry.statement.SQLStatementRule; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.rule.BaseRule; @@ -46,7 +47,6 @@ public final class SQLStatementOptimizerEngine { * @param sqlStatementRule SQL statement rule * @param sqlStatement SQL statement */ - @SuppressWarnings("unchecked") public void optimize(final SQLStatementRule sqlStatementRule, final SQLStatement sqlStatement) { Optional optimizer = sqlStatementRule.getOptimizer(); if (optimizer.isPresent()) { @@ -56,7 +56,10 @@ public void optimize(final SQLStatementRule sqlStatementRule, final SQLStatement if (optimizer.get() instanceof EncryptRuleAware && rule instanceof EncryptRule) { ((EncryptRuleAware) optimizer.get()).setEncryptRule((EncryptRule) rule); } - optimizer.get().optimize(sqlStatement, shardingTableMetaData); + if (optimizer.get() instanceof ShardingTableMetaDataAware) { + ((ShardingTableMetaDataAware) optimizer.get()).setShardingTableMetaData(shardingTableMetaData); + } + optimizer.get().optimize(sqlStatement); } } } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/insert/ShardingInsertOptimizer.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/insert/ShardingInsertOptimizer.java index 6fd2c62d0550f..40ba5750c5dc0 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/insert/ShardingInsertOptimizer.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/insert/ShardingInsertOptimizer.java @@ -18,7 +18,6 @@ package org.apache.shardingsphere.core.parse.optimizer.insert; import lombok.Setter; -import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; import org.apache.shardingsphere.core.parse.aware.ShardingRuleAware; import org.apache.shardingsphere.core.parse.optimizer.SQLStatementOptimizer; import org.apache.shardingsphere.core.parse.sql.context.condition.AndCondition; @@ -44,7 +43,7 @@ public final class ShardingInsertOptimizer implements SQLStatementOptimizer, Sha private ShardingRule shardingRule; @Override - public void optimize(final SQLStatement sqlStatement, final ShardingTableMetaData shardingTableMetaData) { + public void optimize(final SQLStatement sqlStatement) { InsertStatement insertStatement = (InsertStatement) sqlStatement; for (InsertValue each : insertStatement.getValues()) { fillCondition(each, insertStatement); diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/select/SelectOptimizer.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/select/SelectOptimizer.java index afd0cd2067da0..f08cbc0ed540d 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/select/SelectOptimizer.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/select/SelectOptimizer.java @@ -19,8 +19,10 @@ import com.google.common.base.Optional; import com.google.common.base.Preconditions; +import lombok.Setter; import org.apache.shardingsphere.core.constant.AggregationType; import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; +import org.apache.shardingsphere.core.parse.aware.ShardingTableMetaDataAware; import org.apache.shardingsphere.core.parse.constant.DerivedColumn; import org.apache.shardingsphere.core.parse.optimizer.SQLStatementOptimizer; import org.apache.shardingsphere.core.parse.sql.context.condition.Conditions; @@ -46,10 +48,13 @@ * @author duhongjun * @author panjuan */ -public final class SelectOptimizer implements SQLStatementOptimizer { +@Setter +public final class SelectOptimizer implements SQLStatementOptimizer, ShardingTableMetaDataAware { + + private ShardingTableMetaData shardingTableMetaData; @Override - public void optimize(final SQLStatement sqlStatement, final ShardingTableMetaData shardingTableMetaData) { + public void optimize(final SQLStatement sqlStatement) { appendDerivedColumns((SelectStatement) sqlStatement, shardingTableMetaData); appendDerivedOrderBy((SelectStatement) sqlStatement); addSubqueryCondition(sqlStatement); From 4fb1a212c3077e92641750b152ae67e88309f4fa Mon Sep 17 00:00:00 2001 From: terrymanu Date: Fri, 14 Jun 2019 18:47:07 +0800 Subject: [PATCH 217/283] for #2556, SelectOptimizer => ShardingSelectOptimizer --- .../{SelectOptimizer.java => ShardingSelectOptimizer.java} | 4 ++-- .../encrypt/mysql/sql-statement-rule-definition.xml | 2 +- .../encrypt/oracle/sql-statement-rule-definition.xml | 2 +- .../encrypt/postgresql/sql-statement-rule-definition.xml | 2 +- .../encrypt/sqlserver/sql-statement-rule-definition.xml | 2 +- .../masterslave/mysql/sql-statement-rule-definition.xml | 2 +- .../masterslave/oracle/sql-statement-rule-definition.xml | 2 +- .../masterslave/postgresql/sql-statement-rule-definition.xml | 2 +- .../masterslave/sqlserver/sql-statement-rule-definition.xml | 2 +- .../sharding/mysql/sql-statement-rule-definition.xml | 2 +- .../sharding/oracle/sql-statement-rule-definition.xml | 2 +- .../sharding/postgresql/sql-statement-rule-definition.xml | 2 +- .../sharding/sqlserver/sql-statement-rule-definition.xml | 2 +- .../sharding/mysql/sql-statement-rule-definition.xml | 2 +- .../sharding/oracle/sql-statement-rule-definition.xml | 2 +- .../sharding/postgresql/sql-statement-rule-definition.xml | 2 +- .../sharding/sqlserver/sql-statement-rule-definition.xml | 2 +- 17 files changed, 18 insertions(+), 18 deletions(-) rename sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/select/{SelectOptimizer.java => ShardingSelectOptimizer.java} (98%) diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/select/SelectOptimizer.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/select/ShardingSelectOptimizer.java similarity index 98% rename from sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/select/SelectOptimizer.java rename to sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/select/ShardingSelectOptimizer.java index f08cbc0ed540d..c05d1201df223 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/select/SelectOptimizer.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/select/ShardingSelectOptimizer.java @@ -43,13 +43,13 @@ import java.util.List; /** - * Select optimizer. + * Select optimizer for sharding. * * @author duhongjun * @author panjuan */ @Setter -public final class SelectOptimizer implements SQLStatementOptimizer, ShardingTableMetaDataAware { +public final class ShardingSelectOptimizer implements SQLStatementOptimizer, ShardingTableMetaDataAware { private ShardingTableMetaData shardingTableMetaData; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/encrypt/mysql/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/encrypt/mysql/sql-statement-rule-definition.xml index d2c1753e2e9c2..b3543464b50a2 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/encrypt/mysql/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/encrypt/mysql/sql-statement-rule-definition.xml @@ -17,6 +17,6 @@ --> - + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/encrypt/oracle/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/encrypt/oracle/sql-statement-rule-definition.xml index d2c1753e2e9c2..b3543464b50a2 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/encrypt/oracle/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/encrypt/oracle/sql-statement-rule-definition.xml @@ -17,6 +17,6 @@ --> - + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/encrypt/postgresql/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/encrypt/postgresql/sql-statement-rule-definition.xml index d2c1753e2e9c2..b3543464b50a2 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/encrypt/postgresql/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/encrypt/postgresql/sql-statement-rule-definition.xml @@ -17,6 +17,6 @@ --> - + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/encrypt/sqlserver/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/encrypt/sqlserver/sql-statement-rule-definition.xml index d2c1753e2e9c2..b3543464b50a2 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/encrypt/sqlserver/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/encrypt/sqlserver/sql-statement-rule-definition.xml @@ -17,6 +17,6 @@ --> - + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/masterslave/mysql/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/masterslave/mysql/sql-statement-rule-definition.xml index d2c1753e2e9c2..b3543464b50a2 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/masterslave/mysql/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/masterslave/mysql/sql-statement-rule-definition.xml @@ -17,6 +17,6 @@ --> - + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/masterslave/oracle/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/masterslave/oracle/sql-statement-rule-definition.xml index d2c1753e2e9c2..b3543464b50a2 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/masterslave/oracle/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/masterslave/oracle/sql-statement-rule-definition.xml @@ -17,6 +17,6 @@ --> - + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/masterslave/postgresql/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/masterslave/postgresql/sql-statement-rule-definition.xml index d2c1753e2e9c2..b3543464b50a2 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/masterslave/postgresql/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/masterslave/postgresql/sql-statement-rule-definition.xml @@ -17,6 +17,6 @@ --> - + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/masterslave/sqlserver/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/masterslave/sqlserver/sql-statement-rule-definition.xml index d2c1753e2e9c2..b3543464b50a2 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/masterslave/sqlserver/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/masterslave/sqlserver/sql-statement-rule-definition.xml @@ -17,6 +17,6 @@ --> - + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/sharding/mysql/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/sharding/mysql/sql-statement-rule-definition.xml index d2c1753e2e9c2..392943e4d8905 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/sharding/mysql/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/sharding/mysql/sql-statement-rule-definition.xml @@ -17,6 +17,6 @@ --> - + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/sharding/oracle/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/sharding/oracle/sql-statement-rule-definition.xml index d2c1753e2e9c2..392943e4d8905 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/sharding/oracle/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/sharding/oracle/sql-statement-rule-definition.xml @@ -17,6 +17,6 @@ --> - + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/sharding/postgresql/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/sharding/postgresql/sql-statement-rule-definition.xml index d2c1753e2e9c2..392943e4d8905 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/sharding/postgresql/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/sharding/postgresql/sql-statement-rule-definition.xml @@ -17,6 +17,6 @@ --> - + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/sharding/sqlserver/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/sharding/sqlserver/sql-statement-rule-definition.xml index d2c1753e2e9c2..392943e4d8905 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/sharding/sqlserver/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/test/resources/META-INF/parsing-rule-definition/sharding/sqlserver/sql-statement-rule-definition.xml @@ -17,6 +17,6 @@ --> - + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/sharding/mysql/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/sharding/mysql/sql-statement-rule-definition.xml index 396b16f581b24..4b7b2caa4304b 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/sharding/mysql/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/sharding/mysql/sql-statement-rule-definition.xml @@ -17,7 +17,7 @@ --> - + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/sharding/oracle/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/sharding/oracle/sql-statement-rule-definition.xml index b8d597db006f6..4e209fb90c1a9 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/sharding/oracle/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/sharding/oracle/sql-statement-rule-definition.xml @@ -17,7 +17,7 @@ --> - + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/sharding/postgresql/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/sharding/postgresql/sql-statement-rule-definition.xml index f86351a135757..d63a07e100a78 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/sharding/postgresql/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/sharding/postgresql/sql-statement-rule-definition.xml @@ -17,7 +17,7 @@ --> - + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/sharding/sqlserver/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/sharding/sqlserver/sql-statement-rule-definition.xml index e31bb0da2e3cf..9a5f157102b62 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/sharding/sqlserver/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/sharding/sqlserver/sql-statement-rule-definition.xml @@ -17,7 +17,7 @@ --> - + From bdef3e8fc9b254ad8d3bb9a7ce3999b4ee1d55cf Mon Sep 17 00:00:00 2001 From: tristaZero Date: Fri, 14 Jun 2019 19:26:16 +0800 Subject: [PATCH 218/283] Strings.isNullOrEmpty(createIndexStatement.getIndexName()) --- .../shardingjdbc/executor/AbstractStatementExecutor.java | 7 +++++++ .../shardingproxy/backend/schema/ShardingSchema.java | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/executor/AbstractStatementExecutor.java b/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/executor/AbstractStatementExecutor.java index cd98366bfae9f..16a61b6baa1a5 100644 --- a/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/executor/AbstractStatementExecutor.java +++ b/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/executor/AbstractStatementExecutor.java @@ -19,6 +19,7 @@ import com.google.common.base.Function; import com.google.common.base.Optional; +import com.google.common.base.Strings; import com.google.common.collect.Lists; import lombok.AccessLevel; import lombok.Getter; @@ -188,11 +189,17 @@ private void refreshTableMetaData(final ShardingContext shardingContext, final D } private void refreshTableMetaData(final ShardingContext shardingContext, final CreateIndexStatement createIndexStatement) { + if (Strings.isNullOrEmpty(createIndexStatement.getIndexName())) { + return; + } String tableName = createIndexStatement.getTables().getSingleTableName(); shardingContext.getMetaData().getTable().get(tableName).getLogicIndexes().add(createIndexStatement.getIndexName()); } private void refreshTableMetaData(final ShardingContext shardingContext, final DropIndexStatement dropIndexStatement) { + if (Strings.isNullOrEmpty(dropIndexStatement.getIndexName())) { + return; + } Optional logicTableName = getLogicTableName(shardingContext, dropIndexStatement); if (logicTableName.isPresent()) { shardingContext.getMetaData().getTable().get(logicTableName.get()).getLogicIndexes().remove(dropIndexStatement.getIndexName()); diff --git a/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/schema/ShardingSchema.java b/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/schema/ShardingSchema.java index 39cc5dbcf1a2a..26778675989cc 100644 --- a/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/schema/ShardingSchema.java +++ b/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/schema/ShardingSchema.java @@ -18,6 +18,7 @@ package org.apache.shardingsphere.shardingproxy.backend.schema; import com.google.common.base.Optional; +import com.google.common.base.Strings; import com.google.common.eventbus.Subscribe; import lombok.Getter; import org.apache.shardingsphere.api.config.sharding.ShardingRuleConfiguration; @@ -133,11 +134,17 @@ private void refreshTableMetaData(final DropTableStatement dropTableStatement) { } private void refreshTableMetaData(final CreateIndexStatement createIndexStatement) { + if (Strings.isNullOrEmpty(createIndexStatement.getIndexName())) { + return; + } String tableName = createIndexStatement.getTables().getSingleTableName(); getMetaData().getTable().get(tableName).getLogicIndexes().add(createIndexStatement.getIndexName()); } private void refreshTableMetaData(final DropIndexStatement dropIndexStatement) { + if (Strings.isNullOrEmpty(dropIndexStatement.getIndexName())) { + return; + } Optional logicTableName = getLogicTableName(dropIndexStatement); if (logicTableName.isPresent()) { getMetaData().getTable().get(logicTableName.get()).getLogicIndexes().remove(dropIndexStatement.getIndexName()); From 7af8bcbe0f4d2a42f6f71bc8fd8f116722e79c2f Mon Sep 17 00:00:00 2001 From: tristaZero Date: Fri, 14 Jun 2019 20:02:07 +0800 Subject: [PATCH 219/283] delete logic index --- .../api/config/sharding/TableRuleConfiguration.java | 2 -- .../core/yaml/config/sharding/YamlTableRuleConfiguration.java | 2 -- .../yaml/swapper/impl/TableRuleConfigurationYamlSwapper.java | 2 -- 3 files changed, 6 deletions(-) diff --git a/sharding-core/sharding-core-api/src/main/java/org/apache/shardingsphere/api/config/sharding/TableRuleConfiguration.java b/sharding-core/sharding-core-api/src/main/java/org/apache/shardingsphere/api/config/sharding/TableRuleConfiguration.java index becdddebc57a5..03cfa336d1a78 100644 --- a/sharding-core/sharding-core-api/src/main/java/org/apache/shardingsphere/api/config/sharding/TableRuleConfiguration.java +++ b/sharding-core/sharding-core-api/src/main/java/org/apache/shardingsphere/api/config/sharding/TableRuleConfiguration.java @@ -43,8 +43,6 @@ public final class TableRuleConfiguration { private KeyGeneratorConfiguration keyGeneratorConfig; - private String logicIndex; - public TableRuleConfiguration(final String logicTable) { this(logicTable, null); } diff --git a/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/yaml/config/sharding/YamlTableRuleConfiguration.java b/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/yaml/config/sharding/YamlTableRuleConfiguration.java index c642e600211de..3b788d0832d32 100644 --- a/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/yaml/config/sharding/YamlTableRuleConfiguration.java +++ b/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/yaml/config/sharding/YamlTableRuleConfiguration.java @@ -40,6 +40,4 @@ public class YamlTableRuleConfiguration implements YamlConfiguration { private YamlShardingStrategyConfiguration tableStrategy; private YamlKeyGeneratorConfiguration keyGenerator; - - private String logicIndex; } diff --git a/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/yaml/swapper/impl/TableRuleConfigurationYamlSwapper.java b/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/yaml/swapper/impl/TableRuleConfigurationYamlSwapper.java index bc3fa0dd36eb4..33bd5224aa343 100644 --- a/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/yaml/swapper/impl/TableRuleConfigurationYamlSwapper.java +++ b/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/yaml/swapper/impl/TableRuleConfigurationYamlSwapper.java @@ -48,7 +48,6 @@ public YamlTableRuleConfiguration swap(final TableRuleConfiguration data) { if (null != data.getKeyGeneratorConfig()) { result.setKeyGenerator(keyGeneratorConfigurationYamlSwapper.swap(data.getKeyGeneratorConfig())); } - result.setLogicIndex(data.getLogicIndex()); return result; } @@ -65,7 +64,6 @@ public TableRuleConfiguration swap(final YamlTableRuleConfiguration yamlConfigur if (null != yamlConfiguration.getKeyGenerator()) { result.setKeyGeneratorConfig(keyGeneratorConfigurationYamlSwapper.swap(yamlConfiguration.getKeyGenerator())); } - result.setLogicIndex(yamlConfiguration.getLogicIndex()); return result; } } From baec50ee2c20f2a13eb40f1de889f58eada4a891 Mon Sep 17 00:00:00 2001 From: tristaZero Date: Fri, 14 Jun 2019 20:02:27 +0800 Subject: [PATCH 220/283] delete setting for logic index --- .../test/resources/yaml/optimize-rule.yaml | 1 - .../src/test/resources/yaml/parse-rule.yaml | 1 - .../src/test/resources/yaml/rewrite-rule.yaml | 2 - .../main/resources/conf/config-sharding.yaml | 96 +++++++++---------- 4 files changed, 48 insertions(+), 52 deletions(-) diff --git a/sharding-core/sharding-core-optimize/src/test/resources/yaml/optimize-rule.yaml b/sharding-core/sharding-core-optimize/src/test/resources/yaml/optimize-rule.yaml index 1530650dd1ac4..5a96b8091a353 100644 --- a/sharding-core/sharding-core-optimize/src/test/resources/yaml/optimize-rule.yaml +++ b/sharding-core/sharding-core-optimize/src/test/resources/yaml/optimize-rule.yaml @@ -44,7 +44,6 @@ shardingRule: column: order_id props: worker.id: 123 - logicIndex: order_index t_encrypt: actualDataNodes: ds_${0..1}.t_encrypt_${0..1} databaseStrategy: diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/yaml/parse-rule.yaml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/yaml/parse-rule.yaml index 66449a5b24afc..d9a468e7c76d7 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/yaml/parse-rule.yaml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/yaml/parse-rule.yaml @@ -35,7 +35,6 @@ shardingRule: complex: shardingColumns: user_id, order_id algorithmClassName: org.apache.shardingsphere.core.parse.fixture.ComplexKeysShardingAlgorithmFixture - logicIndex: order_index t_order_item: actualDataNodes: db${0..1}.t_order_item tableStrategy: diff --git a/sharding-core/sharding-core-rewrite/src/test/resources/yaml/rewrite-rule.yaml b/sharding-core/sharding-core-rewrite/src/test/resources/yaml/rewrite-rule.yaml index 7f12c3640ee81..3b61426651e81 100644 --- a/sharding-core/sharding-core-rewrite/src/test/resources/yaml/rewrite-rule.yaml +++ b/sharding-core/sharding-core-rewrite/src/test/resources/yaml/rewrite-rule.yaml @@ -36,10 +36,8 @@ shardingRule: column: id props: worker.id: 123 - logicIndex: logic_index table_y: actualDataNodes: db${0..1}.table_y - logicIndex: logic_index table_z: actualDataNodes: db${0..1}.table_z table_k: diff --git a/sharding-proxy/sharding-proxy-bootstrap/src/main/resources/conf/config-sharding.yaml b/sharding-proxy/sharding-proxy-bootstrap/src/main/resources/conf/config-sharding.yaml index 6bda7a11edc2e..1e97387855096 100644 --- a/sharding-proxy/sharding-proxy-bootstrap/src/main/resources/conf/config-sharding.yaml +++ b/sharding-proxy/sharding-proxy-bootstrap/src/main/resources/conf/config-sharding.yaml @@ -26,54 +26,54 @@ # ###################################################################################################### # -#schemaName: sharding_db -# -#dataSources: -# ds_0: -# url: jdbc:postgresql://127.0.0.1:5432/demo_ds_0?serverTimezone=UTC&useSSL=false -# username: postgres -# password: postgres -# connectionTimeoutMilliseconds: 30000 -# idleTimeoutMilliseconds: 60000 -# maxLifetimeMilliseconds: 1800000 -# maxPoolSize: 50 -# ds_1: -# url: jdbc:postgresql://127.0.0.1:5432/demo_ds_1?serverTimezone=UTC&useSSL=false -# username: postgres -# password: postgres -# connectionTimeoutMilliseconds: 30000 -# idleTimeoutMilliseconds: 60000 -# maxLifetimeMilliseconds: 1800000 -# maxPoolSize: 50 -# -#shardingRule: -# tables: -# t_order: -# actualDataNodes: ds_${0..1}.t_order_${0..1} -# tableStrategy: -# inline: -# shardingColumn: order_id -# algorithmExpression: t_order_${order_id % 2} -# keyGenerator: -# type: SNOWFLAKE -# column: order_id -# t_order_item: -# actualDataNodes: ds_${0..1}.t_order_item_${0..1} -# tableStrategy: -# inline: -# shardingColumn: order_id -# algorithmExpression: t_order_item_${order_id % 2} -# keyGenerator: -# type: SNOWFLAKE -# column: order_item_id -# bindingTables: -# - t_order,t_order_item -# defaultDatabaseStrategy: -# inline: -# shardingColumn: user_id -# algorithmExpression: ds_${user_id % 2} -# defaultTableStrategy: -# none: +schemaName: sharding_db + +dataSources: + ds_0: + url: jdbc:postgresql://127.0.0.1:5432/demo_ds_0?serverTimezone=UTC&useSSL=false + username: postgres + password: postgres + connectionTimeoutMilliseconds: 30000 + idleTimeoutMilliseconds: 60000 + maxLifetimeMilliseconds: 1800000 + maxPoolSize: 50 + ds_1: + url: jdbc:postgresql://127.0.0.1:5432/demo_ds_1?serverTimezone=UTC&useSSL=false + username: postgres + password: postgres + connectionTimeoutMilliseconds: 30000 + idleTimeoutMilliseconds: 60000 + maxLifetimeMilliseconds: 1800000 + maxPoolSize: 50 + +shardingRule: + tables: + t_order: + actualDataNodes: ds_${0..1}.t_order_${0..1} + tableStrategy: + inline: + shardingColumn: order_id + algorithmExpression: t_order_${order_id % 2} + keyGenerator: + type: SNOWFLAKE + column: order_id + t_order_item: + actualDataNodes: ds_${0..1}.t_order_item_${0..1} + tableStrategy: + inline: + shardingColumn: order_id + algorithmExpression: t_order_item_${order_id % 2} + keyGenerator: + type: SNOWFLAKE + column: order_item_id + bindingTables: + - t_order,t_order_item + defaultDatabaseStrategy: + inline: + shardingColumn: user_id + algorithmExpression: ds_${user_id % 2} + defaultTableStrategy: + none: ###################################################################################################### # From f020214f473b9e86c12095b202259d94a815bead Mon Sep 17 00:00:00 2001 From: tristaZero Date: Fri, 14 Jun 2019 20:03:07 +0800 Subject: [PATCH 221/283] delete test for logicIndex --- .../apache/shardingsphere/core/rule/ShardingRuleTest.java | 6 ------ .../org/apache/shardingsphere/core/rule/TableRuleTest.java | 1 - .../yaml/engine/YamlEngineShardingConfigurationTest.java | 1 - .../swapper/impl/TableRuleConfigurationYamlSwapperTest.java | 6 ------ .../type/broadcast/TableBroadcastRoutingEngineTest.java | 1 - 5 files changed, 15 deletions(-) diff --git a/sharding-core/sharding-core-common/src/test/java/org/apache/shardingsphere/core/rule/ShardingRuleTest.java b/sharding-core/sharding-core-common/src/test/java/org/apache/shardingsphere/core/rule/ShardingRuleTest.java index 23902938a58d7..13340d4835960 100644 --- a/sharding-core/sharding-core-common/src/test/java/org/apache/shardingsphere/core/rule/ShardingRuleTest.java +++ b/sharding-core/sharding-core-common/src/test/java/org/apache/shardingsphere/core/rule/ShardingRuleTest.java @@ -397,12 +397,6 @@ private Collection createMasterSlaveDataSourceNames() { return Arrays.asList("master_ds_0", "slave_ds_0", "master_ds_1", "slave_ds_1"); } - private TableRuleConfiguration createTableRuleConfigWithLogicIndex() { - TableRuleConfiguration result = new TableRuleConfiguration("LOGIC_TABLE", "ds_${0..1}.table_${0..2}"); - result.setLogicIndex("INDEX_TABLE"); - return result; - } - private TableRuleConfiguration createTableRuleConfigWithAllStrategies() { TableRuleConfiguration result = new TableRuleConfiguration("LOGIC_TABLE", "ds_${0..1}.table_${0..2}"); result.setDatabaseShardingStrategyConfig(new StandardShardingStrategyConfiguration("column", new PreciseShardingAlgorithmFixture())); diff --git a/sharding-core/sharding-core-common/src/test/java/org/apache/shardingsphere/core/rule/TableRuleTest.java b/sharding-core/sharding-core-common/src/test/java/org/apache/shardingsphere/core/rule/TableRuleTest.java index 4f919186b7e37..1a05f294ea576 100644 --- a/sharding-core/sharding-core-common/src/test/java/org/apache/shardingsphere/core/rule/TableRuleTest.java +++ b/sharding-core/sharding-core-common/src/test/java/org/apache/shardingsphere/core/rule/TableRuleTest.java @@ -58,7 +58,6 @@ public void assertCreateFullTableRule() { tableRuleConfig.setDatabaseShardingStrategyConfig(new NoneShardingStrategyConfiguration()); tableRuleConfig.setTableShardingStrategyConfig(new NoneShardingStrategyConfiguration()); tableRuleConfig.setKeyGeneratorConfig(new KeyGeneratorConfiguration("INCREMENT", "col_1", new Properties())); - tableRuleConfig.setLogicIndex("LOGIC_INDEX"); TableRule actual = new TableRule(tableRuleConfig, createShardingDataSourceNames(), null); assertThat(actual.getLogicTable(), is("logic_table")); assertThat(actual.getActualDataNodes().size(), is(6)); diff --git a/sharding-core/sharding-core-common/src/test/java/org/apache/shardingsphere/core/yaml/engine/YamlEngineShardingConfigurationTest.java b/sharding-core/sharding-core-common/src/test/java/org/apache/shardingsphere/core/yaml/engine/YamlEngineShardingConfigurationTest.java index 93ff3d748abeb..26b8fc00e13a7 100644 --- a/sharding-core/sharding-core-common/src/test/java/org/apache/shardingsphere/core/yaml/engine/YamlEngineShardingConfigurationTest.java +++ b/sharding-core/sharding-core-common/src/test/java/org/apache/shardingsphere/core/yaml/engine/YamlEngineShardingConfigurationTest.java @@ -104,7 +104,6 @@ private void assertTOrder(final YamlRootShardingConfiguration actual) { assertThat(actual.getShardingRule().getTables().get("t_order").getTableStrategy().getInline().getAlgorithmExpression(), is("t_order_${order_id % 2}")); assertThat(actual.getShardingRule().getTables().get("t_order").getKeyGenerator().getColumn(), is("order_id")); assertThat(actual.getShardingRule().getTables().get("t_order").getKeyGenerator().getType(), is("SNOWFLAKE")); - assertThat(actual.getShardingRule().getTables().get("t_order").getLogicIndex(), is("order_index")); } private void assertTOrderItem(final YamlRootShardingConfiguration actual) { diff --git a/sharding-core/sharding-core-common/src/test/java/org/apache/shardingsphere/core/yaml/swapper/impl/TableRuleConfigurationYamlSwapperTest.java b/sharding-core/sharding-core-common/src/test/java/org/apache/shardingsphere/core/yaml/swapper/impl/TableRuleConfigurationYamlSwapperTest.java index 41dea25c79e2e..2f3b3f5d305bf 100644 --- a/sharding-core/sharding-core-common/src/test/java/org/apache/shardingsphere/core/yaml/swapper/impl/TableRuleConfigurationYamlSwapperTest.java +++ b/sharding-core/sharding-core-common/src/test/java/org/apache/shardingsphere/core/yaml/swapper/impl/TableRuleConfigurationYamlSwapperTest.java @@ -76,7 +76,6 @@ public void assertSwapToYamlWithMinProperties() { assertNull(actual.getDatabaseStrategy()); assertNull(actual.getTableStrategy()); assertNull(actual.getKeyGenerator()); - assertNull(actual.getLogicIndex()); } @Test @@ -85,14 +84,12 @@ public void assertSwapToYamlWithMaxProperties() { tableRuleConfiguration.setDatabaseShardingStrategyConfig(mock(InlineShardingStrategyConfiguration.class)); tableRuleConfiguration.setTableShardingStrategyConfig(mock(InlineShardingStrategyConfiguration.class)); tableRuleConfiguration.setKeyGeneratorConfig(mock(KeyGeneratorConfiguration.class)); - tableRuleConfiguration.setLogicIndex("idx"); YamlTableRuleConfiguration actual = tableRuleConfigurationYamlSwapper.swap(tableRuleConfiguration); assertThat(actual.getLogicTable(), is("tbl")); assertThat(actual.getActualDataNodes(), is("ds_$->{0..1}.tbl_$->{0..1}")); assertNotNull(actual.getDatabaseStrategy()); assertNotNull(actual.getTableStrategy()); assertNotNull(actual.getKeyGenerator()); - assertThat(actual.getLogicIndex(), is("idx")); } @Test(expected = NullPointerException.class) @@ -111,7 +108,6 @@ public void assertSwapToObjectWithMinProperties() { assertNull(actual.getDatabaseShardingStrategyConfig()); assertNull(actual.getTableShardingStrategyConfig()); assertNull(actual.getKeyGeneratorConfig()); - assertNull(actual.getLogicIndex()); } @Test @@ -122,13 +118,11 @@ public void assertSwapToObjectWithMaxProperties() { yamlConfiguration.setDatabaseStrategy(mock(YamlShardingStrategyConfiguration.class)); yamlConfiguration.setTableStrategy(mock(YamlShardingStrategyConfiguration.class)); yamlConfiguration.setKeyGenerator(mock(YamlKeyGeneratorConfiguration.class)); - yamlConfiguration.setLogicIndex("idx"); TableRuleConfiguration actual = tableRuleConfigurationYamlSwapper.swap(yamlConfiguration); assertThat(actual.getLogicTable(), is("tbl")); assertThat(actual.getActualDataNodes(), is("ds_$->{0..1}.tbl_$->{0..1}")); assertNotNull(actual.getDatabaseShardingStrategyConfig()); assertNotNull(actual.getTableShardingStrategyConfig()); assertNotNull(actual.getKeyGeneratorConfig()); - assertThat(actual.getLogicIndex(), is("idx")); } } diff --git a/sharding-core/sharding-core-route/src/test/java/org/apache/shardingsphere/core/route/type/broadcast/TableBroadcastRoutingEngineTest.java b/sharding-core/sharding-core-route/src/test/java/org/apache/shardingsphere/core/route/type/broadcast/TableBroadcastRoutingEngineTest.java index 9ff4a04245359..11c8763315dc9 100644 --- a/sharding-core/sharding-core-route/src/test/java/org/apache/shardingsphere/core/route/type/broadcast/TableBroadcastRoutingEngineTest.java +++ b/sharding-core/sharding-core-route/src/test/java/org/apache/shardingsphere/core/route/type/broadcast/TableBroadcastRoutingEngineTest.java @@ -44,7 +44,6 @@ public final class TableBroadcastRoutingEngineTest { @Before public void setEngineContext() { TableRuleConfiguration tableRuleConfig = new TableRuleConfiguration("t_order", "ds${0..1}.t_order_${0..2}"); - tableRuleConfig.setLogicIndex("t_order_index"); ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration(); shardingRuleConfig.getTableRuleConfigs().add(tableRuleConfig); shardingRule = new ShardingRule(shardingRuleConfig, Arrays.asList("ds0", "ds1")); From feee96ab62d1376e789a04f53b6433955403601c Mon Sep 17 00:00:00 2001 From: tristaZero Date: Fri, 14 Jun 2019 20:03:29 +0800 Subject: [PATCH 222/283] delete setting for logicIndex --- .../src/test/resources/integrate/env/db/sharding-rule.yaml | 1 - .../integrate/env/dbtbl_with_masterslave/sharding-rule.yaml | 1 - .../src/test/resources/integrate/env/tbl/sharding-rule.yaml | 1 - 3 files changed, 3 deletions(-) diff --git a/sharding-integration-test/sharding-jdbc-test/src/test/resources/integrate/env/db/sharding-rule.yaml b/sharding-integration-test/sharding-jdbc-test/src/test/resources/integrate/env/db/sharding-rule.yaml index 5c34affebd292..a6f419c96c25f 100644 --- a/sharding-integration-test/sharding-jdbc-test/src/test/resources/integrate/env/db/sharding-rule.yaml +++ b/sharding-integration-test/sharding-jdbc-test/src/test/resources/integrate/env/db/sharding-rule.yaml @@ -24,7 +24,6 @@ shardingRule: shardingColumn: user_id preciseAlgorithmClassName: org.apache.shardingsphere.dbtest.fixture.PreciseModuloAlgorithm rangeAlgorithmClassName: org.apache.shardingsphere.dbtest.fixture.RangeModuloAlgorithm - logicIndex: order_index t_order_item: actualDataNodes: db_${0..9}.t_order_item databaseStrategy: diff --git a/sharding-integration-test/sharding-jdbc-test/src/test/resources/integrate/env/dbtbl_with_masterslave/sharding-rule.yaml b/sharding-integration-test/sharding-jdbc-test/src/test/resources/integrate/env/dbtbl_with_masterslave/sharding-rule.yaml index 752b40a40c862..aa20453933933 100644 --- a/sharding-integration-test/sharding-jdbc-test/src/test/resources/integrate/env/dbtbl_with_masterslave/sharding-rule.yaml +++ b/sharding-integration-test/sharding-jdbc-test/src/test/resources/integrate/env/dbtbl_with_masterslave/sharding-rule.yaml @@ -31,7 +31,6 @@ shardingRule: shardingColumn: order_id preciseAlgorithmClassName: org.apache.shardingsphere.dbtest.fixture.PreciseModuloAlgorithm rangeAlgorithmClassName: org.apache.shardingsphere.dbtest.fixture.RangeModuloAlgorithm - logicIndex: order_index t_order_item: actualDataNodes: db_ms_${0..9}.t_order_item_${0..9} databaseStrategy: diff --git a/sharding-integration-test/sharding-jdbc-test/src/test/resources/integrate/env/tbl/sharding-rule.yaml b/sharding-integration-test/sharding-jdbc-test/src/test/resources/integrate/env/tbl/sharding-rule.yaml index bdfca3c110d90..b81ce8a1d9372 100644 --- a/sharding-integration-test/sharding-jdbc-test/src/test/resources/integrate/env/tbl/sharding-rule.yaml +++ b/sharding-integration-test/sharding-jdbc-test/src/test/resources/integrate/env/tbl/sharding-rule.yaml @@ -24,7 +24,6 @@ shardingRule: shardingColumn: order_id preciseAlgorithmClassName: org.apache.shardingsphere.dbtest.fixture.PreciseModuloAlgorithm rangeAlgorithmClassName: org.apache.shardingsphere.dbtest.fixture.RangeModuloAlgorithm - logicIndex: order_index t_order_item: actualDataNodes: tbl.t_order_item_${0..9} tableStrategy: From a7b1215ad2b1118cdc5d9203b97c90bcfc865f05 Mon Sep 17 00:00:00 2001 From: tristaZero Date: Fri, 14 Jun 2019 20:24:27 +0800 Subject: [PATCH 223/283] for multiple thread safety --- .../metadata/datasource/ShardingDataSourceMetaData.java | 6 +++--- .../core/metadata/table/ShardingTableMetaData.java | 8 ++++++-- .../shardingsphere/core/metadata/table/TableMetaData.java | 7 ++++--- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/metadata/datasource/ShardingDataSourceMetaData.java b/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/metadata/datasource/ShardingDataSourceMetaData.java index 37aaf29a63be4..870451bcff7bc 100644 --- a/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/metadata/datasource/ShardingDataSourceMetaData.java +++ b/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/metadata/datasource/ShardingDataSourceMetaData.java @@ -25,10 +25,10 @@ import org.apache.shardingsphere.spi.database.MemorizedDataSourceMetaData; import java.util.Collection; -import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.Map; import java.util.Map.Entry; +import java.util.concurrent.ConcurrentHashMap; /** * Sharding data source meta data. @@ -49,7 +49,7 @@ private Map getDataSourceMetaDataMap(final Map getDataSourceMetaDataMapForSharding(final Map dataSourceURLs, final DatabaseType databaseType) { - Map result = new LinkedHashMap<>(dataSourceURLs.size(), 1); + Map result = new ConcurrentHashMap<>(dataSourceURLs.size()); for (Entry entry : dataSourceURLs.entrySet()) { result.put(entry.getKey(), databaseType.getDataSourceMetaData(entry.getValue())); } @@ -57,7 +57,7 @@ private Map getDataSourceMetaDataMapForSharding(fina } private Map getDataSourceMetaDataMapForMasterSlave(final ShardingRule shardingRule, final Map dataSourceMetaDataMap) { - Map result = new LinkedHashMap<>(dataSourceMetaDataMap); + Map result = new ConcurrentHashMap<>(dataSourceMetaDataMap); for (Entry entry : dataSourceMetaDataMap.entrySet()) { Optional masterSlaveRule = shardingRule.findMasterSlaveRule(entry.getKey()); if (masterSlaveRule.isPresent() && masterSlaveRule.get().getMasterDataSourceName().equals(entry.getKey())) { diff --git a/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/metadata/table/ShardingTableMetaData.java b/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/metadata/table/ShardingTableMetaData.java index 5ea3622c65a9c..446c27715aabe 100644 --- a/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/metadata/table/ShardingTableMetaData.java +++ b/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/metadata/table/ShardingTableMetaData.java @@ -19,12 +19,12 @@ import com.google.common.base.Optional; import lombok.Getter; -import lombok.RequiredArgsConstructor; import java.util.Collection; import java.util.Collections; import java.util.Map; import java.util.Map.Entry; +import java.util.concurrent.ConcurrentHashMap; /** * Sharding table meta data. @@ -32,13 +32,17 @@ * @author panjuan * @author zhaojun * @author zhangliang + * @author panjuan */ -@RequiredArgsConstructor public final class ShardingTableMetaData { @Getter private final Map tables; + public ShardingTableMetaData(final Map tables) { + this.tables = new ConcurrentHashMap<>(tables); + } + /** * Get table meta data by table name. * @param logicTableName logicTableName logic table name diff --git a/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/metadata/table/TableMetaData.java b/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/metadata/table/TableMetaData.java index 4a47ea1717cfb..8a2994fea5b5e 100644 --- a/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/metadata/table/TableMetaData.java +++ b/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/metadata/table/TableMetaData.java @@ -22,9 +22,10 @@ import lombok.ToString; import java.util.Collection; -import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArraySet; /** * Table metadata. @@ -42,12 +43,12 @@ public final class TableMetaData { public TableMetaData(final Collection columnMetaDataList, final Set logicIndexes) { columns = getColumns(columnMetaDataList); - this.logicIndexes = logicIndexes; + this.logicIndexes = new CopyOnWriteArraySet<>(logicIndexes); } private Map getColumns(final Collection columnMetaDataList) { final Map columns; - columns = new LinkedHashMap<>(columnMetaDataList.size(), 1); + columns = new ConcurrentHashMap<>(columnMetaDataList.size(), 1); for (ColumnMetaData each : columnMetaDataList) { columns.put(each.getColumnName(), each); } From 31e6d47ff41fd90f80ef7365feaa3fee074159f8 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Fri, 14 Jun 2019 22:35:13 +0800 Subject: [PATCH 224/283] for #2556, revert ShardingInsertOptimizer --- .../insert/ShardingInsertValuesFiller.java | 24 +++++++ .../update/ShardingSetAssignmentsFiller.java | 17 +++++ .../insert/ShardingInsertOptimizer.java | 69 ------------------- .../mysql/sql-statement-rule-definition.xml | 2 +- .../oracle/sql-statement-rule-definition.xml | 2 +- .../sql-statement-rule-definition.xml | 2 +- .../sql-statement-rule-definition.xml | 2 +- 7 files changed, 45 insertions(+), 73 deletions(-) delete mode 100644 sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/insert/ShardingInsertOptimizer.java diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingInsertValuesFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingInsertValuesFiller.java index f962ba44246b5..acc56850f103e 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingInsertValuesFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingInsertValuesFiller.java @@ -23,13 +23,19 @@ import org.apache.shardingsphere.core.parse.aware.ShardingRuleAware; import org.apache.shardingsphere.core.parse.aware.ShardingTableMetaDataAware; import org.apache.shardingsphere.core.parse.filler.SQLSegmentFiller; +import org.apache.shardingsphere.core.parse.sql.context.condition.AndCondition; +import org.apache.shardingsphere.core.parse.sql.context.condition.Column; +import org.apache.shardingsphere.core.parse.sql.context.condition.Condition; import org.apache.shardingsphere.core.parse.sql.context.insertvalue.InsertValue; import org.apache.shardingsphere.core.parse.sql.segment.dml.InsertValuesSegment; +import org.apache.shardingsphere.core.parse.sql.segment.dml.expr.ExpressionSegment; +import org.apache.shardingsphere.core.parse.sql.segment.dml.expr.simple.SimpleExpressionSegment; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.InsertStatement; import org.apache.shardingsphere.core.rule.ShardingRule; import java.util.Collection; +import java.util.Iterator; /** * Insert values filler for sharding. @@ -49,6 +55,7 @@ public void fill(final InsertValuesSegment sqlSegment, final SQLStatement sqlSta InsertStatement insertStatement = (InsertStatement) sqlStatement; fillColumns(sqlSegment, insertStatement); fillValues(sqlSegment, insertStatement); + fillCondition(sqlSegment, insertStatement); } private void fillColumns(final InsertValuesSegment sqlSegment, final InsertStatement insertStatement) { @@ -77,4 +84,21 @@ private void reviseColumnNamesForGenerateKeyColumn(final InsertValuesSegment sql private void fillValues(final InsertValuesSegment sqlSegment, final InsertStatement insertStatement) { insertStatement.getValues().add(new InsertValue(sqlSegment.getValues())); } + + private void fillCondition(final InsertValuesSegment segment, final InsertStatement insertStatement) { + AndCondition andCondition = new AndCondition(); + Iterator columnNames = insertStatement.getColumnNames().iterator(); + for (ExpressionSegment each : segment.getValues()) { + if (each instanceof SimpleExpressionSegment) { + fillShardingCondition(andCondition, insertStatement.getTables().getSingleTableName(), columnNames.next(), (SimpleExpressionSegment) each); + } + } + insertStatement.getShardingConditions().getOrConditions().add(andCondition); + } + + private void fillShardingCondition(final AndCondition andCondition, final String tableName, final String columnName, final SimpleExpressionSegment expressionSegment) { + if (shardingRule.isShardingColumn(columnName, tableName)) { + andCondition.getConditions().add(new Condition(new Column(columnName, tableName), null, expressionSegment)); + } + } } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/update/ShardingSetAssignmentsFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/update/ShardingSetAssignmentsFiller.java index 4dd04f427ef83..d5e99e2fb22f7 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/update/ShardingSetAssignmentsFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/update/ShardingSetAssignmentsFiller.java @@ -23,16 +23,20 @@ import org.apache.shardingsphere.core.parse.aware.ShardingTableMetaDataAware; import org.apache.shardingsphere.core.parse.exception.SQLParsingException; import org.apache.shardingsphere.core.parse.filler.SQLSegmentFiller; +import org.apache.shardingsphere.core.parse.sql.context.condition.AndCondition; import org.apache.shardingsphere.core.parse.sql.context.condition.Column; +import org.apache.shardingsphere.core.parse.sql.context.condition.Condition; import org.apache.shardingsphere.core.parse.sql.context.insertvalue.InsertValue; import org.apache.shardingsphere.core.parse.sql.segment.dml.assignment.AssignmentSegment; import org.apache.shardingsphere.core.parse.sql.segment.dml.assignment.SetAssignmentsSegment; import org.apache.shardingsphere.core.parse.sql.segment.dml.expr.ExpressionSegment; +import org.apache.shardingsphere.core.parse.sql.segment.dml.expr.simple.SimpleExpressionSegment; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.InsertStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.UpdateStatement; import org.apache.shardingsphere.core.rule.ShardingRule; +import java.util.Iterator; import java.util.LinkedList; import java.util.List; @@ -66,11 +70,17 @@ private void fillInsert(final SetAssignmentsSegment sqlSegment, final InsertStat if (sqlSegment.getAssignments().size() != columnCount) { throw new SQLParsingException("INSERT INTO column size mismatch value size."); } + AndCondition andCondition = new AndCondition(); + Iterator columnNames = insertStatement.getColumnNames().iterator(); List columnValues = new LinkedList<>(); for (AssignmentSegment each : sqlSegment.getAssignments()) { + if (each.getValue() instanceof SimpleExpressionSegment) { + fillShardingCondition(andCondition, columnNames.next(), insertStatement.getTables().getSingleTableName(), (SimpleExpressionSegment) each.getValue()); + } columnValues.add(each.getValue()); } insertStatement.getValues().add(new InsertValue(columnValues)); + insertStatement.getShardingConditions().getOrConditions().add(andCondition); } private int getColumnCountExcludeAssistedQueryColumns(final InsertStatement insertStatement) { @@ -82,6 +92,13 @@ private int getColumnCountExcludeAssistedQueryColumns(final InsertStatement inse return insertStatement.getColumnNames().size() - assistedQueryColumnCount; } + private void fillShardingCondition(final AndCondition andCondition, + final String columnName, final String tableName, final SimpleExpressionSegment simpleExpressionSegment) { + if (shardingRule.isShardingColumn(columnName, tableName)) { + andCondition.getConditions().add(new Condition(new Column(columnName, tableName), null, simpleExpressionSegment)); + } + } + private void fillUpdate(final SetAssignmentsSegment sqlSegment, final UpdateStatement updateStatement) { String tableName = updateStatement.getTables().getSingleTableName(); for (AssignmentSegment each : sqlSegment.getAssignments()) { diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/insert/ShardingInsertOptimizer.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/insert/ShardingInsertOptimizer.java deleted file mode 100644 index 40ba5750c5dc0..0000000000000 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/optimizer/insert/ShardingInsertOptimizer.java +++ /dev/null @@ -1,69 +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.core.parse.optimizer.insert; - -import lombok.Setter; -import org.apache.shardingsphere.core.parse.aware.ShardingRuleAware; -import org.apache.shardingsphere.core.parse.optimizer.SQLStatementOptimizer; -import org.apache.shardingsphere.core.parse.sql.context.condition.AndCondition; -import org.apache.shardingsphere.core.parse.sql.context.condition.Column; -import org.apache.shardingsphere.core.parse.sql.context.condition.Condition; -import org.apache.shardingsphere.core.parse.sql.context.insertvalue.InsertValue; -import org.apache.shardingsphere.core.parse.sql.segment.dml.expr.ExpressionSegment; -import org.apache.shardingsphere.core.parse.sql.segment.dml.expr.simple.SimpleExpressionSegment; -import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; -import org.apache.shardingsphere.core.parse.sql.statement.dml.InsertStatement; -import org.apache.shardingsphere.core.rule.ShardingRule; - -import java.util.Iterator; - -/** - * Insert optimizer for sharding. - * - * @author zhangliang - */ -@Setter -public final class ShardingInsertOptimizer implements SQLStatementOptimizer, ShardingRuleAware { - - private ShardingRule shardingRule; - - @Override - public void optimize(final SQLStatement sqlStatement) { - InsertStatement insertStatement = (InsertStatement) sqlStatement; - for (InsertValue each : insertStatement.getValues()) { - fillCondition(each, insertStatement); - } - } - - private void fillCondition(final InsertValue insertValue, final InsertStatement insertStatement) { - AndCondition andCondition = new AndCondition(); - Iterator columnNames = insertStatement.getColumnNames().iterator(); - for (ExpressionSegment each : insertValue.getAssignments()) { - if (each instanceof SimpleExpressionSegment) { - fillShardingCondition(andCondition, insertStatement.getTables().getSingleTableName(), columnNames.next(), (SimpleExpressionSegment) each); - } - } - insertStatement.getShardingConditions().getOrConditions().add(andCondition); - } - - private void fillShardingCondition(final AndCondition andCondition, final String tableName, final String columnName, final SimpleExpressionSegment expressionSegment) { - if (shardingRule.isShardingColumn(columnName, tableName)) { - andCondition.getConditions().add(new Condition(new Column(columnName, tableName), null, expressionSegment)); - } - } -} diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/sharding/mysql/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/sharding/mysql/sql-statement-rule-definition.xml index 4b7b2caa4304b..845a614625327 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/sharding/mysql/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/sharding/mysql/sql-statement-rule-definition.xml @@ -18,7 +18,7 @@ - + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/sharding/oracle/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/sharding/oracle/sql-statement-rule-definition.xml index 4e209fb90c1a9..0a19ce98c7bda 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/sharding/oracle/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-oracle/src/main/resources/META-INF/parsing-rule-definition/sharding/oracle/sql-statement-rule-definition.xml @@ -18,7 +18,7 @@ - + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/sharding/postgresql/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/sharding/postgresql/sql-statement-rule-definition.xml index d63a07e100a78..1afb25acba670 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/sharding/postgresql/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/resources/META-INF/parsing-rule-definition/sharding/postgresql/sql-statement-rule-definition.xml @@ -18,7 +18,7 @@ - + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/sharding/sqlserver/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/sharding/sqlserver/sql-statement-rule-definition.xml index 9a5f157102b62..173121b10a404 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/sharding/sqlserver/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-sqlserver/src/main/resources/META-INF/parsing-rule-definition/sharding/sqlserver/sql-statement-rule-definition.xml @@ -18,7 +18,7 @@ - + From c58e4688e505a9c40feb313f31ef83fd370c23ee Mon Sep 17 00:00:00 2001 From: terrymanu Date: Fri, 14 Jun 2019 22:59:06 +0800 Subject: [PATCH 225/283] for #2556, remove useless SelectWhereExtractor --- .../impl/common/index/IndexExtractor.java | 4 +- .../column/AddColumnDefinitionExtractor.java | 4 +- .../impl/dml/select/SelectWhereExtractor.java | 45 ------------------- .../impl/dml/update/AssignmentExtractor.java | 2 - 4 files changed, 4 insertions(+), 51 deletions(-) delete mode 100644 sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/extractor/impl/dml/select/SelectWhereExtractor.java diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/extractor/impl/common/index/IndexExtractor.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/extractor/impl/common/index/IndexExtractor.java index 0275780865be2..0789c7f0bc812 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/extractor/impl/common/index/IndexExtractor.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/extractor/impl/common/index/IndexExtractor.java @@ -36,7 +36,7 @@ public final class IndexExtractor implements OptionalSQLSegmentExtractor { @Override public Optional extract(final ParserRuleContext ancestorNode, final Map parameterMarkerIndexes) { Optional indexNameNode = ExtractorUtils.findFirstChildNode(ancestorNode, RuleName.INDEX_NAME); - return indexNameNode.isPresent() ? Optional.of( - new IndexSegment(indexNameNode.get().getStart().getStartIndex(), indexNameNode.get().getStop().getStopIndex(), indexNameNode.get().getText())) : Optional.absent(); + return indexNameNode.isPresent() ? Optional.of(new IndexSegment(indexNameNode.get().getStart().getStartIndex(), indexNameNode.get().getStop().getStopIndex(), indexNameNode.get().getText())) + : Optional.absent(); } } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/extractor/impl/ddl/column/AddColumnDefinitionExtractor.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/extractor/impl/ddl/column/AddColumnDefinitionExtractor.java index 7853747f5aa15..90c7fa19bd79c 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/extractor/impl/ddl/column/AddColumnDefinitionExtractor.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/extractor/impl/ddl/column/AddColumnDefinitionExtractor.java @@ -60,7 +60,7 @@ private Collection extractAddColumnDefinitions(final return result; } - protected void postExtractColumnDefinition(final ParserRuleContext addColumnNode, - final AddColumnDefinitionSegment addColumnDefinitionSegment, final Map parameterMarkerIndexes) { + protected void postExtractColumnDefinition( + final ParserRuleContext addColumnNode, final AddColumnDefinitionSegment addColumnDefinitionSegment, final Map parameterMarkerIndexes) { } } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/extractor/impl/dml/select/SelectWhereExtractor.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/extractor/impl/dml/select/SelectWhereExtractor.java deleted file mode 100644 index 56d34fcb594db..0000000000000 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/extractor/impl/dml/select/SelectWhereExtractor.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.core.parse.extractor.impl.dml.select; - -import com.google.common.base.Optional; -import org.antlr.v4.runtime.ParserRuleContext; -import org.apache.shardingsphere.core.parse.extractor.api.OptionalSQLSegmentExtractor; -import org.apache.shardingsphere.core.parse.extractor.impl.dml.WhereExtractor; -import org.apache.shardingsphere.core.parse.extractor.util.ExtractorUtils; -import org.apache.shardingsphere.core.parse.extractor.util.RuleName; -import org.apache.shardingsphere.core.parse.sql.segment.dml.WhereSegment; - -import java.util.Map; - -/** - * Where extractor for select. - * - * @author duhongjun - * @author zhangliang - */ -public final class SelectWhereExtractor implements OptionalSQLSegmentExtractor { - - private final WhereExtractor whereExtractor = new WhereExtractor(); - - @Override - public Optional extract(final ParserRuleContext ancestorNode, final Map parameterMarkerIndexes) { - Optional selectItemsNode = ExtractorUtils.findFirstChildNode(ancestorNode, RuleName.SELECT_ITEMS); - return selectItemsNode.isPresent() ? whereExtractor.extract(selectItemsNode.get().getParent(), parameterMarkerIndexes) : Optional.absent(); - } -} diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/extractor/impl/dml/update/AssignmentExtractor.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/extractor/impl/dml/update/AssignmentExtractor.java index 93c095dbbba70..2d0ae928d30d3 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/extractor/impl/dml/update/AssignmentExtractor.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/extractor/impl/dml/update/AssignmentExtractor.java @@ -19,7 +19,6 @@ import com.google.common.base.Optional; import com.google.common.base.Preconditions; -import lombok.RequiredArgsConstructor; import org.antlr.v4.runtime.ParserRuleContext; import org.apache.shardingsphere.core.parse.extractor.api.OptionalSQLSegmentExtractor; import org.apache.shardingsphere.core.parse.extractor.impl.common.column.ColumnExtractor; @@ -37,7 +36,6 @@ * * @author zhangliang */ -@RequiredArgsConstructor public final class AssignmentExtractor implements OptionalSQLSegmentExtractor { private final ColumnExtractor columnExtractor = new ColumnExtractor(); From 299b8d4be26d111c4d773eab9e3b73ac48f6a552 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Fri, 14 Jun 2019 23:06:45 +0800 Subject: [PATCH 226/283] for #2556, refactor package of parse test --- .../engine/encrypt}/EncryptIntegrateParsingTest.java | 4 ++-- .../{ => sharding}/AbstractBaseIntegrateSQLParsingTest.java | 2 +- .../{ => sharding}/IntegrateSQLParsingExceptionTest.java | 2 +- .../{ => sharding}/IntegrateSupportedSQLParsingTest.java | 2 +- .../{ => sharding}/IntegrateUnsupportedSQLParsingTest.java | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/{ => integrate/engine/encrypt}/EncryptIntegrateParsingTest.java (96%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/{ => sharding}/AbstractBaseIntegrateSQLParsingTest.java (98%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/{ => sharding}/IntegrateSQLParsingExceptionTest.java (96%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/{ => sharding}/IntegrateSupportedSQLParsingTest.java (98%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/{ => sharding}/IntegrateUnsupportedSQLParsingTest.java (96%) diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/EncryptIntegrateParsingTest.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/encrypt/EncryptIntegrateParsingTest.java similarity index 96% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/EncryptIntegrateParsingTest.java rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/encrypt/EncryptIntegrateParsingTest.java index ff37e7c20c01f..59a0581aa52b6 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/EncryptIntegrateParsingTest.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/encrypt/EncryptIntegrateParsingTest.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.shardingsphere.core.parse; +package org.apache.shardingsphere.core.parse.integrate.engine.encrypt; import com.google.common.base.Preconditions; import lombok.RequiredArgsConstructor; @@ -29,7 +29,7 @@ import org.apache.shardingsphere.core.parse.integrate.asserts.EncryptParserResultSetLoader; import org.apache.shardingsphere.core.parse.integrate.asserts.EncryptSQLStatementAssert; import org.apache.shardingsphere.core.parse.integrate.asserts.ParserResultSetLoader; -import org.apache.shardingsphere.core.parse.integrate.engine.AbstractBaseIntegrateSQLParsingTest; +import org.apache.shardingsphere.core.parse.integrate.engine.sharding.AbstractBaseIntegrateSQLParsingTest; import org.apache.shardingsphere.core.parse.integrate.jaxb.root.ParserResult; import org.apache.shardingsphere.core.parse.parser.SQLParserFactory; import org.apache.shardingsphere.core.rule.EncryptRule; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/AbstractBaseIntegrateSQLParsingTest.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/AbstractBaseIntegrateSQLParsingTest.java similarity index 98% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/AbstractBaseIntegrateSQLParsingTest.java rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/AbstractBaseIntegrateSQLParsingTest.java index 90db08426befa..3724f773b3a69 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/AbstractBaseIntegrateSQLParsingTest.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/AbstractBaseIntegrateSQLParsingTest.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.shardingsphere.core.parse.integrate.engine; +package org.apache.shardingsphere.core.parse.integrate.engine.sharding; import com.google.common.base.Preconditions; import lombok.AccessLevel; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/IntegrateSQLParsingExceptionTest.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/IntegrateSQLParsingExceptionTest.java similarity index 96% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/IntegrateSQLParsingExceptionTest.java rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/IntegrateSQLParsingExceptionTest.java index 15aaf5f8e69a0..3afc171195c17 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/IntegrateSQLParsingExceptionTest.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/IntegrateSQLParsingExceptionTest.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.shardingsphere.core.parse.integrate.engine; +package org.apache.shardingsphere.core.parse.integrate.engine.sharding; import lombok.RequiredArgsConstructor; import org.apache.shardingsphere.core.database.DatabaseTypes; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/IntegrateSupportedSQLParsingTest.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/IntegrateSupportedSQLParsingTest.java similarity index 98% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/IntegrateSupportedSQLParsingTest.java rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/IntegrateSupportedSQLParsingTest.java index f4c3b9a469908..b74423ef316ad 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/IntegrateSupportedSQLParsingTest.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/IntegrateSupportedSQLParsingTest.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.shardingsphere.core.parse.integrate.engine; +package org.apache.shardingsphere.core.parse.integrate.engine.sharding; import lombok.RequiredArgsConstructor; import org.antlr.v4.runtime.ANTLRErrorListener; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/IntegrateUnsupportedSQLParsingTest.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/IntegrateUnsupportedSQLParsingTest.java similarity index 96% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/IntegrateUnsupportedSQLParsingTest.java rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/IntegrateUnsupportedSQLParsingTest.java index cfddc2b2102ff..2475e69af7ed3 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/IntegrateUnsupportedSQLParsingTest.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/IntegrateUnsupportedSQLParsingTest.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.shardingsphere.core.parse.integrate.engine; +package org.apache.shardingsphere.core.parse.integrate.engine.sharding; import lombok.RequiredArgsConstructor; import org.apache.shardingsphere.core.database.DatabaseTypes; From ed7335cbf07bfe82d34e08493ff8b6e3e3d990e3 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Fri, 14 Jun 2019 23:23:46 +0800 Subject: [PATCH 227/283] for #2556, remove t_place for test case --- .../sharding/AbstractBaseIntegrateSQLParsingTest.java | 3 +-- .../src/test/resources/parser/dml/insert.xml | 8 ++++---- .../src/test/resources/parser/dml/update.xml | 10 +++++----- .../src/test/resources/parser/dql/select.xml | 6 +++--- .../src/test/resources/yaml/parse-rule.yaml | 8 +------- .../src/main/resources/sql/dml/insert.xml | 2 +- .../src/main/resources/sql/dml/update.xml | 2 +- .../src/main/resources/sql/dql/select.xml | 2 +- 8 files changed, 17 insertions(+), 24 deletions(-) diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/AbstractBaseIntegrateSQLParsingTest.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/AbstractBaseIntegrateSQLParsingTest.java index 3724f773b3a69..cc4fa642ee617 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/AbstractBaseIntegrateSQLParsingTest.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/AbstractBaseIntegrateSQLParsingTest.java @@ -55,7 +55,7 @@ public static void setUp() throws IOException { private static ShardingRule buildShardingRule() throws IOException { URL url = AbstractBaseIntegrateSQLParsingTest.class.getClassLoader().getResource("yaml/parse-rule.yaml"); - Preconditions.checkNotNull(url, "Cannot found parser rule yaml configuration."); + Preconditions.checkNotNull(url, "Cannot find parse rule yaml configuration."); YamlRootShardingConfiguration yamlShardingConfig = YamlEngine.unmarshal(new File(url.getFile()), YamlRootShardingConfiguration.class); return new ShardingRule(new ShardingRuleConfigurationYamlSwapper().swap(yamlShardingConfig.getShardingRule()), yamlShardingConfig.getDataSources().keySet()); } @@ -66,7 +66,6 @@ private static ShardingTableMetaData buildShardingTableMetaData() { new TableMetaData(Arrays.asList(new ColumnMetaData("order_id", "int", true), new ColumnMetaData("user_id", "int", false), new ColumnMetaData("status", "int", false)))); tableMetaDataMap.put("t_order_item", new TableMetaData(Arrays.asList(new ColumnMetaData("item_id", "int", true), new ColumnMetaData("order_id", "int", false), new ColumnMetaData("user_id", "int", false), new ColumnMetaData("status", "varchar", false), new ColumnMetaData("c_date", "timestamp", false)))); - tableMetaDataMap.put("t_place", new TableMetaData(Arrays.asList(new ColumnMetaData("user_new_id", "int", true), new ColumnMetaData("user_new_id", "int", false)))); tableMetaDataMap.put("t_encrypt", new TableMetaData(Arrays.asList(new ColumnMetaData("id", "int", true), new ColumnMetaData("name", "varchar", false), new ColumnMetaData("mobile", "varchar", false), new ColumnMetaData("status", "int", false)))); return new ShardingTableMetaData(tableMetaDataMap); diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dml/insert.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dml/insert.xml index 468e2bd0143bc..55b4ec7d635af 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dml/insert.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dml/insert.xml @@ -532,17 +532,17 @@ -
+
- + - + - + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dml/update.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dml/update.xml index 2d3a115c13d8a..1bc6ae8001463 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dml/update.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dml/update.xml @@ -57,23 +57,23 @@ -
+
- + - + - + - +
diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select.xml index 58e73156aba9c..cad1ec1982afb 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select.xml @@ -506,14 +506,14 @@ -
+
- + - + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/yaml/parse-rule.yaml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/yaml/parse-rule.yaml index 66449a5b24afc..5e39c96141c01 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/yaml/parse-rule.yaml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/yaml/parse-rule.yaml @@ -46,13 +46,7 @@ shardingRule: type: SNOWFLAKE column: item_id props: - worker.id: 123 - t_place: - actualDataNodes: db${0..1}.t_place - tableStrategy: - complex: - shardingColumns: user_new_id, guid - algorithmClassName: org.apache.shardingsphere.core.parse.fixture.ComplexKeysShardingAlgorithmFixture + worker.id: 123 bindingTables: - t_order, t_order_item encryptRule: diff --git a/sharding-sql-test/src/main/resources/sql/dml/insert.xml b/sharding-sql-test/src/main/resources/sql/dml/insert.xml index be4d93b6b1726..93ee80f63fedf 100644 --- a/sharding-sql-test/src/main/resources/sql/dml/insert.xml +++ b/sharding-sql-test/src/main/resources/sql/dml/insert.xml @@ -42,7 +42,7 @@ - + diff --git a/sharding-sql-test/src/main/resources/sql/dml/update.xml b/sharding-sql-test/src/main/resources/sql/dml/update.xml index 2ccfcff4b4e51..7500011b9edc6 100644 --- a/sharding-sql-test/src/main/resources/sql/dml/update.xml +++ b/sharding-sql-test/src/main/resources/sql/dml/update.xml @@ -19,7 +19,7 @@ - + diff --git a/sharding-sql-test/src/main/resources/sql/dql/select.xml b/sharding-sql-test/src/main/resources/sql/dql/select.xml index 5d851af6ddf79..6221cee883af8 100644 --- a/sharding-sql-test/src/main/resources/sql/dql/select.xml +++ b/sharding-sql-test/src/main/resources/sql/dql/select.xml @@ -41,7 +41,7 @@ - + From 584d7547393baeac5f08b6e8d161f8605e347a3e Mon Sep 17 00:00:00 2001 From: terrymanu Date: Fri, 14 Jun 2019 23:26:16 +0800 Subject: [PATCH 228/283] for #2556, parser-rule.yaml => sharding-rule.yaml --- .../engine/sharding/AbstractBaseIntegrateSQLParsingTest.java | 2 +- .../resources/yaml/{parse-rule.yaml => sharding-rule.yaml} | 0 .../orchestration/spring/boot/util/PropertyUtil.java | 3 +-- .../shardingjdbc/spring/boot/util/PropertyUtil.java | 3 +-- 4 files changed, 3 insertions(+), 5 deletions(-) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/yaml/{parse-rule.yaml => sharding-rule.yaml} (100%) diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/AbstractBaseIntegrateSQLParsingTest.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/AbstractBaseIntegrateSQLParsingTest.java index cc4fa642ee617..c3e66ea8417c0 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/AbstractBaseIntegrateSQLParsingTest.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/AbstractBaseIntegrateSQLParsingTest.java @@ -54,7 +54,7 @@ public static void setUp() throws IOException { } private static ShardingRule buildShardingRule() throws IOException { - URL url = AbstractBaseIntegrateSQLParsingTest.class.getClassLoader().getResource("yaml/parse-rule.yaml"); + URL url = AbstractBaseIntegrateSQLParsingTest.class.getClassLoader().getResource("yaml/sharding-rule.yaml"); Preconditions.checkNotNull(url, "Cannot find parse rule yaml configuration."); YamlRootShardingConfiguration yamlShardingConfig = YamlEngine.unmarshal(new File(url.getFile()), YamlRootShardingConfiguration.class); return new ShardingRule(new ShardingRuleConfigurationYamlSwapper().swap(yamlShardingConfig.getShardingRule()), yamlShardingConfig.getDataSources().keySet()); diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/yaml/parse-rule.yaml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/yaml/sharding-rule.yaml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/yaml/parse-rule.yaml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/yaml/sharding-rule.yaml diff --git a/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/boot/util/PropertyUtil.java b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/boot/util/PropertyUtil.java index de5ac79074ac2..0b24a8a645c51 100644 --- a/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/boot/util/PropertyUtil.java +++ b/sharding-spring/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-boot-starter/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/spring/boot/util/PropertyUtil.java @@ -76,8 +76,7 @@ private static Object v1(final Environment environment, final String prefix) { for (Entry entry : dataSourceProps.entrySet()) { String key = entry.getKey(); Object value = entry.getValue(); - if (value instanceof String && ((String) value).contains( - PlaceholderConfigurerSupport.DEFAULT_PLACEHOLDER_PREFIX)) { + if (value instanceof String && ((String) value).contains(PlaceholderConfigurerSupport.DEFAULT_PLACEHOLDER_PREFIX)) { String resolvedValue = (String) getPropertyMethod.invoke(resolverObject, prefixParam + key); propertiesWithPlaceholderResolved.put(key, resolvedValue); } else { diff --git a/sharding-spring/sharding-jdbc-spring/sharding-jdbc-spring-boot-starter/src/main/java/org/apache/shardingsphere/shardingjdbc/spring/boot/util/PropertyUtil.java b/sharding-spring/sharding-jdbc-spring/sharding-jdbc-spring-boot-starter/src/main/java/org/apache/shardingsphere/shardingjdbc/spring/boot/util/PropertyUtil.java index 05a31ecf28822..61673badf6002 100644 --- a/sharding-spring/sharding-jdbc-spring/sharding-jdbc-spring-boot-starter/src/main/java/org/apache/shardingsphere/shardingjdbc/spring/boot/util/PropertyUtil.java +++ b/sharding-spring/sharding-jdbc-spring/sharding-jdbc-spring-boot-starter/src/main/java/org/apache/shardingsphere/shardingjdbc/spring/boot/util/PropertyUtil.java @@ -76,8 +76,7 @@ private static Object v1(final Environment environment, final String prefix) { for (Entry entry : dataSourceProps.entrySet()) { String key = entry.getKey(); Object value = entry.getValue(); - if (value instanceof String && ((String) value).contains( - PlaceholderConfigurerSupport.DEFAULT_PLACEHOLDER_PREFIX)) { + if (value instanceof String && ((String) value).contains(PlaceholderConfigurerSupport.DEFAULT_PLACEHOLDER_PREFIX)) { String resolvedValue = (String) getPropertyMethod.invoke(resolverObject, prefixParam + key); propertiesWithPlaceholderResolved.put(key, resolvedValue); } else { From e89b9c5f5e9455b14f9c2637b5c0b8e53ce2f512 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Fri, 14 Jun 2019 23:27:47 +0800 Subject: [PATCH 229/283] for #2556, encrypt-rule-for-parser.yaml => encrypt-rule.yaml --- .../integrate/engine/encrypt/EncryptIntegrateParsingTest.java | 2 +- .../yaml/{encrypt-rule-for-parser.yaml => encrypt-rule.yaml} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/yaml/{encrypt-rule-for-parser.yaml => encrypt-rule.yaml} (100%) diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/encrypt/EncryptIntegrateParsingTest.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/encrypt/EncryptIntegrateParsingTest.java index 59a0581aa52b6..9a662c20e9cf7 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/encrypt/EncryptIntegrateParsingTest.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/encrypt/EncryptIntegrateParsingTest.java @@ -71,7 +71,7 @@ public static Collection getTestParameters() { } private static EncryptRule buildShardingRule() throws IOException { - URL url = AbstractBaseIntegrateSQLParsingTest.class.getClassLoader().getResource("yaml/encrypt-rule-for-parser.yaml"); + URL url = AbstractBaseIntegrateSQLParsingTest.class.getClassLoader().getResource("yaml/encrypt-rule.yaml"); Preconditions.checkNotNull(url, "Cannot found parser rule yaml configuration."); YamlEncryptRuleConfiguration encryptConfig = YamlEngine.unmarshal(new File(url.getFile()), YamlEncryptRuleConfiguration.class); return new EncryptRule(new EncryptRuleConfigurationYamlSwapper().swap(encryptConfig)); diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/yaml/encrypt-rule-for-parser.yaml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/yaml/encrypt-rule.yaml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/yaml/encrypt-rule-for-parser.yaml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/yaml/encrypt-rule.yaml From 9c733f5e199b3756ec3a7b8000536abf453250f6 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Fri, 14 Jun 2019 23:40:03 +0800 Subject: [PATCH 230/283] for #2556, rename folder parser to sharding --- .../integrate/asserts/ParserResultSetLoader.java | 15 ++++++++------- .../resources/{parser => sharding}/dal/reset.xml | 0 .../resources/{parser => sharding}/dal/set.xml | 0 .../resources/{parser => sharding}/dal/show.xml | 0 .../{parser => sharding}/dcl/alter_login.xml | 0 .../{parser => sharding}/dcl/alter_role.xml | 0 .../{parser => sharding}/dcl/alter_user.xml | 0 .../{parser => sharding}/dcl/create_login.xml | 0 .../{parser => sharding}/dcl/create_role.xml | 0 .../{parser => sharding}/dcl/create_user.xml | 0 .../{parser => sharding}/dcl/deny_user.xml | 0 .../{parser => sharding}/dcl/drop_login.xml | 0 .../{parser => sharding}/dcl/drop_role.xml | 0 .../{parser => sharding}/dcl/drop_user.xml | 0 .../{parser => sharding}/dcl/grant_user.xml | 0 .../{parser => sharding}/dcl/rename_user.xml | 0 .../{parser => sharding}/dcl/revoke_user.xml | 0 .../{parser => sharding}/dcl/set_default_role.xml | 0 .../{parser => sharding}/dcl/set_password.xml | 0 .../{parser => sharding}/dcl/set_role.xml | 0 .../resources/{parser => sharding}/ddl/alter.xml | 0 .../resources/{parser => sharding}/ddl/create.xml | 0 .../resources/{parser => sharding}/ddl/drop.xml | 0 .../{parser => sharding}/ddl/truncate.xml | 0 .../resources/{parser => sharding}/dml/delete.xml | 0 .../resources/{parser => sharding}/dml/insert.xml | 0 .../resources/{parser => sharding}/dml/update.xml | 0 .../resources/{parser => sharding}/dql/select.xml | 0 .../{parser => sharding}/dql/select_aggregate.xml | 0 .../dql/select_expression.xml | 0 .../{parser => sharding}/dql/select_group_by.xml | 0 .../{parser => sharding}/dql/select_or.xml | 0 .../{parser => sharding}/dql/select_order_by.xml | 0 .../dql/select_pagination.xml | 0 .../dql/select_pagination_group_by_order_by.xml | 0 .../{parser => sharding}/dql/select_relation.xml | 0 .../{parser => sharding}/dql/select_sub_query.xml | 0 .../resources/{parser => sharding}/tcl/tcl.xml | 0 38 files changed, 8 insertions(+), 7 deletions(-) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/{parser => sharding}/dal/reset.xml (100%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/{parser => sharding}/dal/set.xml (100%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/{parser => sharding}/dal/show.xml (100%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/{parser => sharding}/dcl/alter_login.xml (100%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/{parser => sharding}/dcl/alter_role.xml (100%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/{parser => sharding}/dcl/alter_user.xml (100%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/{parser => sharding}/dcl/create_login.xml (100%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/{parser => sharding}/dcl/create_role.xml (100%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/{parser => sharding}/dcl/create_user.xml (100%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/{parser => sharding}/dcl/deny_user.xml (100%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/{parser => sharding}/dcl/drop_login.xml (100%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/{parser => sharding}/dcl/drop_role.xml (100%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/{parser => sharding}/dcl/drop_user.xml (100%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/{parser => sharding}/dcl/grant_user.xml (100%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/{parser => sharding}/dcl/rename_user.xml (100%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/{parser => sharding}/dcl/revoke_user.xml (100%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/{parser => sharding}/dcl/set_default_role.xml (100%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/{parser => sharding}/dcl/set_password.xml (100%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/{parser => sharding}/dcl/set_role.xml (100%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/{parser => sharding}/ddl/alter.xml (100%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/{parser => sharding}/ddl/create.xml (100%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/{parser => sharding}/ddl/drop.xml (100%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/{parser => sharding}/ddl/truncate.xml (100%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/{parser => sharding}/dml/delete.xml (100%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/{parser => sharding}/dml/insert.xml (100%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/{parser => sharding}/dml/update.xml (100%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/{parser => sharding}/dql/select.xml (100%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/{parser => sharding}/dql/select_aggregate.xml (100%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/{parser => sharding}/dql/select_expression.xml (100%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/{parser => sharding}/dql/select_group_by.xml (100%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/{parser => sharding}/dql/select_or.xml (100%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/{parser => sharding}/dql/select_order_by.xml (100%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/{parser => sharding}/dql/select_pagination.xml (100%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/{parser => sharding}/dql/select_pagination_group_by_order_by.xml (100%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/{parser => sharding}/dql/select_relation.xml (100%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/{parser => sharding}/dql/select_sub_query.xml (100%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/{parser => sharding}/tcl/tcl.xml (100%) diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/ParserResultSetLoader.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/ParserResultSetLoader.java index 1cbc806bd57e8..7b21bb5326e36 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/ParserResultSetLoader.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/ParserResultSetLoader.java @@ -18,7 +18,6 @@ package org.apache.shardingsphere.core.parse.integrate.asserts; import com.google.common.base.Preconditions; -import lombok.SneakyThrows; import org.apache.shardingsphere.core.parse.integrate.jaxb.root.ParserResult; import org.apache.shardingsphere.core.parse.integrate.jaxb.root.ParserResultSet; @@ -41,7 +40,7 @@ public class ParserResultSetLoader { protected Map parserResultMap; protected ParserResultSetLoader() { - parserResultMap = loadParserResultSet("parser/"); + parserResultMap = loadParserResultSet("sharding/"); } /** @@ -65,14 +64,16 @@ protected Map loadParserResultSet(final String dirName) { return result; } - @SneakyThrows protected Map loadParserResultSet(final File file) { Map result = new HashMap<>(Short.MAX_VALUE, 1); try { if (file.isDirectory()) { - for (File each : file.listFiles()) { - result.putAll(loadParserResultSet(each)); - } + File[] files = file.listFiles(); + if (null != files) { + for (File each : files) { + result.putAll(loadParserResultSet(each)); + } + } } else { ParserResultSet resultSet = (ParserResultSet) JAXBContext.newInstance(ParserResultSet.class).createUnmarshaller().unmarshal(file); for (ParserResult each : resultSet.getParserResults()) { @@ -83,7 +84,7 @@ protected Map loadParserResultSet(final File file) { } } } - } catch (JAXBException ex) { + } catch (final JAXBException ex) { throw new RuntimeException(ex); } return result; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dal/reset.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dal/reset.xml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dal/reset.xml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dal/reset.xml diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dal/set.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dal/set.xml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dal/set.xml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dal/set.xml diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dal/show.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dal/show.xml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dal/show.xml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dal/show.xml diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dcl/alter_login.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dcl/alter_login.xml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dcl/alter_login.xml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dcl/alter_login.xml diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dcl/alter_role.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dcl/alter_role.xml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dcl/alter_role.xml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dcl/alter_role.xml diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dcl/alter_user.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dcl/alter_user.xml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dcl/alter_user.xml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dcl/alter_user.xml diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dcl/create_login.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dcl/create_login.xml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dcl/create_login.xml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dcl/create_login.xml diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dcl/create_role.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dcl/create_role.xml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dcl/create_role.xml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dcl/create_role.xml diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dcl/create_user.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dcl/create_user.xml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dcl/create_user.xml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dcl/create_user.xml diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dcl/deny_user.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dcl/deny_user.xml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dcl/deny_user.xml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dcl/deny_user.xml diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dcl/drop_login.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dcl/drop_login.xml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dcl/drop_login.xml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dcl/drop_login.xml diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dcl/drop_role.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dcl/drop_role.xml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dcl/drop_role.xml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dcl/drop_role.xml diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dcl/drop_user.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dcl/drop_user.xml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dcl/drop_user.xml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dcl/drop_user.xml diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dcl/grant_user.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dcl/grant_user.xml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dcl/grant_user.xml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dcl/grant_user.xml diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dcl/rename_user.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dcl/rename_user.xml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dcl/rename_user.xml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dcl/rename_user.xml diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dcl/revoke_user.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dcl/revoke_user.xml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dcl/revoke_user.xml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dcl/revoke_user.xml diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dcl/set_default_role.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dcl/set_default_role.xml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dcl/set_default_role.xml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dcl/set_default_role.xml diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dcl/set_password.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dcl/set_password.xml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dcl/set_password.xml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dcl/set_password.xml diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dcl/set_role.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dcl/set_role.xml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dcl/set_role.xml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dcl/set_role.xml diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/ddl/alter.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/ddl/alter.xml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/ddl/alter.xml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/ddl/alter.xml diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/ddl/create.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/ddl/create.xml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/ddl/create.xml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/ddl/create.xml diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/ddl/drop.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/ddl/drop.xml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/ddl/drop.xml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/ddl/drop.xml diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/ddl/truncate.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/ddl/truncate.xml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/ddl/truncate.xml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/ddl/truncate.xml diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dml/delete.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dml/delete.xml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dml/delete.xml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dml/delete.xml diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dml/insert.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dml/insert.xml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dml/insert.xml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dml/insert.xml diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dml/update.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dml/update.xml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dml/update.xml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dml/update.xml diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dql/select.xml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select.xml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dql/select.xml diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select_aggregate.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dql/select_aggregate.xml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select_aggregate.xml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dql/select_aggregate.xml diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select_expression.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dql/select_expression.xml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select_expression.xml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dql/select_expression.xml diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select_group_by.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dql/select_group_by.xml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select_group_by.xml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dql/select_group_by.xml diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select_or.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dql/select_or.xml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select_or.xml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dql/select_or.xml diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select_order_by.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dql/select_order_by.xml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select_order_by.xml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dql/select_order_by.xml diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select_pagination.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dql/select_pagination.xml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select_pagination.xml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dql/select_pagination.xml diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select_pagination_group_by_order_by.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dql/select_pagination_group_by_order_by.xml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select_pagination_group_by_order_by.xml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dql/select_pagination_group_by_order_by.xml diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select_relation.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dql/select_relation.xml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select_relation.xml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dql/select_relation.xml diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select_sub_query.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dql/select_sub_query.xml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/dql/select_sub_query.xml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dql/select_sub_query.xml diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/tcl/tcl.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/tcl/tcl.xml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/parser/tcl/tcl.xml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/tcl/tcl.xml From 2cc398f85cbe9ead4410ad099757ca735d19e70d Mon Sep 17 00:00:00 2001 From: terrymanu Date: Fri, 14 Jun 2019 23:42:14 +0800 Subject: [PATCH 231/283] for #2556, merge dql and dml test cases --- .../src/test/resources/sharding/{dql => dml}/select.xml | 0 .../src/test/resources/sharding/{dql => dml}/select_aggregate.xml | 0 .../test/resources/sharding/{dql => dml}/select_expression.xml | 0 .../src/test/resources/sharding/{dql => dml}/select_group_by.xml | 0 .../src/test/resources/sharding/{dql => dml}/select_or.xml | 0 .../src/test/resources/sharding/{dql => dml}/select_order_by.xml | 0 .../test/resources/sharding/{dql => dml}/select_pagination.xml | 0 .../sharding/{dql => dml}/select_pagination_group_by_order_by.xml | 0 .../src/test/resources/sharding/{dql => dml}/select_relation.xml | 0 .../src/test/resources/sharding/{dql => dml}/select_sub_query.xml | 0 10 files changed, 0 insertions(+), 0 deletions(-) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/{dql => dml}/select.xml (100%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/{dql => dml}/select_aggregate.xml (100%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/{dql => dml}/select_expression.xml (100%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/{dql => dml}/select_group_by.xml (100%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/{dql => dml}/select_or.xml (100%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/{dql => dml}/select_order_by.xml (100%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/{dql => dml}/select_pagination.xml (100%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/{dql => dml}/select_pagination_group_by_order_by.xml (100%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/{dql => dml}/select_relation.xml (100%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/{dql => dml}/select_sub_query.xml (100%) diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dql/select.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dml/select.xml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dql/select.xml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dml/select.xml diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dql/select_aggregate.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dml/select_aggregate.xml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dql/select_aggregate.xml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dml/select_aggregate.xml diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dql/select_expression.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dml/select_expression.xml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dql/select_expression.xml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dml/select_expression.xml diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dql/select_group_by.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dml/select_group_by.xml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dql/select_group_by.xml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dml/select_group_by.xml diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dql/select_or.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dml/select_or.xml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dql/select_or.xml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dml/select_or.xml diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dql/select_order_by.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dml/select_order_by.xml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dql/select_order_by.xml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dml/select_order_by.xml diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dql/select_pagination.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dml/select_pagination.xml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dql/select_pagination.xml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dml/select_pagination.xml diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dql/select_pagination_group_by_order_by.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dml/select_pagination_group_by_order_by.xml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dql/select_pagination_group_by_order_by.xml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dml/select_pagination_group_by_order_by.xml diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dql/select_relation.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dml/select_relation.xml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dql/select_relation.xml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dml/select_relation.xml diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dql/select_sub_query.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dml/select_sub_query.xml similarity index 100% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dql/select_sub_query.xml rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dml/select_sub_query.xml From 5525c021e3ec4cb2e8d84b16820ec95f15c6c3da Mon Sep 17 00:00:00 2001 From: terrymanu Date: Fri, 14 Jun 2019 23:56:10 +0800 Subject: [PATCH 232/283] for #2556, refactor ParserResultSetLoader --- .../asserts/EncryptSQLStatementAssert.java | 1 + .../integrate/asserts/SQLStatementAssert.java | 4 +- .../asserts/SQLStatementAssertMessage.java | 1 + .../encrypt/EncryptIntegrateParsingTest.java | 6 +-- .../IntegrateSupportedSQLParsingTest.java | 5 ++- .../EncryptParserResultSet.java} | 19 +++++---- .../ParserResultSetLoader.java | 25 ++++------- .../jaxb/ShardingParserResultSet.java | 42 +++++++++++++++++++ 8 files changed, 70 insertions(+), 33 deletions(-) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/{asserts/EncryptParserResultSetLoader.java => jaxb/EncryptParserResultSet.java} (66%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/{asserts => jaxb}/ParserResultSetLoader.java (82%) create mode 100644 sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/ShardingParserResultSet.java diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/EncryptSQLStatementAssert.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/EncryptSQLStatementAssert.java index f8f96535b190a..e5e9d5f283f3b 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/EncryptSQLStatementAssert.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/EncryptSQLStatementAssert.java @@ -20,6 +20,7 @@ import org.apache.shardingsphere.core.parse.integrate.asserts.condition.ConditionAssert; import org.apache.shardingsphere.core.parse.integrate.asserts.insert.InsertNamesAndValuesAssert; import org.apache.shardingsphere.core.parse.integrate.asserts.table.TableAssert; +import org.apache.shardingsphere.core.parse.integrate.jaxb.ParserResultSetLoader; import org.apache.shardingsphere.core.parse.integrate.jaxb.root.ParserResult; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.DMLStatement; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/SQLStatementAssert.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/SQLStatementAssert.java index 7793c69fcef1f..eae2b30ce1fc5 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/SQLStatementAssert.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/SQLStatementAssert.java @@ -26,6 +26,8 @@ import org.apache.shardingsphere.core.parse.integrate.asserts.pagination.PaginationAssert; import org.apache.shardingsphere.core.parse.integrate.asserts.table.AlterTableAssert; import org.apache.shardingsphere.core.parse.integrate.asserts.table.TableAssert; +import org.apache.shardingsphere.core.parse.integrate.jaxb.ParserResultSetLoader; +import org.apache.shardingsphere.core.parse.integrate.jaxb.ShardingParserResultSet; import org.apache.shardingsphere.core.parse.integrate.jaxb.root.ParserResult; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.sql.statement.ddl.AlterTableStatement; @@ -69,7 +71,7 @@ public final class SQLStatementAssert { private final AlterTableAssert alterTableAssert; public SQLStatementAssert(final SQLStatement actual, final String sqlCaseId, final SQLCaseType sqlCaseType) { - this(actual, sqlCaseId, sqlCaseType, SQLCasesLoader.getInstance(), ParserResultSetLoader.getInstance()); + this(actual, sqlCaseId, sqlCaseType, SQLCasesLoader.getInstance(), ShardingParserResultSet.getInstance().getParserResultSetLoader()); } public SQLStatementAssert(final SQLStatement actual, final String sqlCaseId, diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/SQLStatementAssertMessage.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/SQLStatementAssertMessage.java index e1c94e5827fca..747828c63d5ed 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/SQLStatementAssertMessage.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/SQLStatementAssertMessage.java @@ -18,6 +18,7 @@ package org.apache.shardingsphere.core.parse.integrate.asserts; import lombok.RequiredArgsConstructor; +import org.apache.shardingsphere.core.parse.integrate.jaxb.ParserResultSetLoader; import org.apache.shardingsphere.test.sql.SQLCaseType; import org.apache.shardingsphere.test.sql.SQLCasesLoader; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/encrypt/EncryptIntegrateParsingTest.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/encrypt/EncryptIntegrateParsingTest.java index 9a662c20e9cf7..7733f311dc1dd 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/encrypt/EncryptIntegrateParsingTest.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/encrypt/EncryptIntegrateParsingTest.java @@ -26,10 +26,10 @@ import org.apache.shardingsphere.core.database.DatabaseTypes; import org.apache.shardingsphere.core.parse.api.SQLParser; import org.apache.shardingsphere.core.parse.entry.EncryptSQLParseEntry; -import org.apache.shardingsphere.core.parse.integrate.asserts.EncryptParserResultSetLoader; import org.apache.shardingsphere.core.parse.integrate.asserts.EncryptSQLStatementAssert; -import org.apache.shardingsphere.core.parse.integrate.asserts.ParserResultSetLoader; import org.apache.shardingsphere.core.parse.integrate.engine.sharding.AbstractBaseIntegrateSQLParsingTest; +import org.apache.shardingsphere.core.parse.integrate.jaxb.EncryptParserResultSet; +import org.apache.shardingsphere.core.parse.integrate.jaxb.ParserResultSetLoader; import org.apache.shardingsphere.core.parse.integrate.jaxb.root.ParserResult; import org.apache.shardingsphere.core.parse.parser.SQLParserFactory; import org.apache.shardingsphere.core.rule.EncryptRule; @@ -57,7 +57,7 @@ public final class EncryptIntegrateParsingTest extends AbstractBaseIntegrateSQLP private static SQLCasesLoader sqlCasesLoader = EncryptSQLCasesLoader.getInstance(); - private static ParserResultSetLoader parserResultSetLoader = EncryptParserResultSetLoader.getInstance(); + private static ParserResultSetLoader parserResultSetLoader = EncryptParserResultSet.getInstance().getParserResultSetLoader(); private final String sqlCaseId; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/IntegrateSupportedSQLParsingTest.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/IntegrateSupportedSQLParsingTest.java index b74423ef316ad..1bdc6a7c7b291 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/IntegrateSupportedSQLParsingTest.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/IntegrateSupportedSQLParsingTest.java @@ -26,8 +26,9 @@ import org.apache.shardingsphere.core.parse.api.SQLParser; import org.apache.shardingsphere.core.parse.cache.ParsingResultCache; import org.apache.shardingsphere.core.parse.entry.ShardingSQLParseEntry; -import org.apache.shardingsphere.core.parse.integrate.asserts.ParserResultSetLoader; import org.apache.shardingsphere.core.parse.integrate.asserts.SQLStatementAssert; +import org.apache.shardingsphere.core.parse.integrate.jaxb.ParserResultSetLoader; +import org.apache.shardingsphere.core.parse.integrate.jaxb.ShardingParserResultSet; import org.apache.shardingsphere.core.parse.parser.SQLParserFactory; import org.apache.shardingsphere.test.sql.SQLCaseType; import org.apache.shardingsphere.test.sql.SQLCasesLoader; @@ -46,7 +47,7 @@ public final class IntegrateSupportedSQLParsingTest extends AbstractBaseIntegrat private static SQLCasesLoader sqlCasesLoader = SQLCasesLoader.getInstance(); - private static ParserResultSetLoader parserResultSetLoader = ParserResultSetLoader.getInstance(); + private static ParserResultSetLoader parserResultSetLoader = ShardingParserResultSet.getInstance().getParserResultSetLoader(); private final String sqlCaseId; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/EncryptParserResultSetLoader.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/EncryptParserResultSet.java similarity index 66% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/EncryptParserResultSetLoader.java rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/EncryptParserResultSet.java index 812db3d491c84..55fb938ccb6b1 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/EncryptParserResultSetLoader.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/EncryptParserResultSet.java @@ -15,27 +15,28 @@ * limitations under the License. */ -package org.apache.shardingsphere.core.parse.integrate.asserts; +package org.apache.shardingsphere.core.parse.integrate.jaxb; + +import lombok.Getter; /** - * Encrypt parser result set loader. + * Encrypt parser result set. * - * @author duhongjun + * @author zhangliang */ -public class EncryptParserResultSetLoader extends ParserResultSetLoader { +public final class EncryptParserResultSet { - private static final EncryptParserResultSetLoader INSTANCE = new EncryptParserResultSetLoader(); + private static final EncryptParserResultSet INSTANCE = new EncryptParserResultSet(); - protected EncryptParserResultSetLoader() { - parserResultMap = loadParserResultSet("encrypt/"); - } + @Getter + private final ParserResultSetLoader parserResultSetLoader = new ParserResultSetLoader("encrypt/"); /** * Get singleton instance. * * @return singleton instance */ - public static EncryptParserResultSetLoader getInstance() { + public static EncryptParserResultSet getInstance() { return INSTANCE; } } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/ParserResultSetLoader.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/ParserResultSetLoader.java similarity index 82% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/ParserResultSetLoader.java rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/ParserResultSetLoader.java index 7b21bb5326e36..9022002e467ce 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/ParserResultSetLoader.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/ParserResultSetLoader.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.shardingsphere.core.parse.integrate.asserts; +package org.apache.shardingsphere.core.parse.integrate.jaxb; import com.google.common.base.Preconditions; import org.apache.shardingsphere.core.parse.integrate.jaxb.root.ParserResult; @@ -33,26 +33,15 @@ * * @author zhangliang */ -public class ParserResultSetLoader { +public final class ParserResultSetLoader { - private static final ParserResultSetLoader INSTANCE = new ParserResultSetLoader(); + private Map parserResultMap; - protected Map parserResultMap; - - protected ParserResultSetLoader() { - parserResultMap = loadParserResultSet("sharding/"); - } - - /** - * Get singleton instance. - * - * @return singleton instance - */ - public static ParserResultSetLoader getInstance() { - return INSTANCE; + public ParserResultSetLoader(final String rootDirectory) { + parserResultMap = loadParserResultSet(rootDirectory); } - protected Map loadParserResultSet(final String dirName) { + private Map loadParserResultSet(final String dirName) { URL url = ParserResultSetLoader.class.getClassLoader().getResource(dirName); Preconditions.checkNotNull(url, "Cannot found parser test cases."); File[] files = new File(url.getPath()).listFiles(); @@ -64,7 +53,7 @@ protected Map loadParserResultSet(final String dirName) { return result; } - protected Map loadParserResultSet(final File file) { + private Map loadParserResultSet(final File file) { Map result = new HashMap<>(Short.MAX_VALUE, 1); try { if (file.isDirectory()) { diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/ShardingParserResultSet.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/ShardingParserResultSet.java new file mode 100644 index 0000000000000..0e7e191b04f57 --- /dev/null +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/ShardingParserResultSet.java @@ -0,0 +1,42 @@ +/* + * 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.core.parse.integrate.jaxb; + +import lombok.Getter; + +/** + * Sharding parser result set. + * + * @author zhangliang + */ +public final class ShardingParserResultSet { + + private static final ShardingParserResultSet INSTANCE = new ShardingParserResultSet(); + + @Getter + private final ParserResultSetLoader parserResultSetLoader = new ParserResultSetLoader("sharding/"); + + /** + * Get singleton instance. + * + * @return singleton instance + */ + public static ShardingParserResultSet getInstance() { + return INSTANCE; + } +} From caf47a9e8b3c87b5ed2f917f694c6d6e0b81c091 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E7=A6=B9=E5=85=89?= <769213327@qq.com> Date: Sat, 15 Jun 2019 00:05:01 +0800 Subject: [PATCH 233/283] When the key of Map/Set is a custom object, you must override hashCode and equals. --- .../sql/context/selectitem/AggregationDistinctSelectItem.java | 2 ++ .../core/parse/sql/context/selectitem/DistinctSelectItem.java | 2 ++ 2 files changed, 4 insertions(+) diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/context/selectitem/AggregationDistinctSelectItem.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/context/selectitem/AggregationDistinctSelectItem.java index 6d287c6e874b5..dbfccfbb9dc3f 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/context/selectitem/AggregationDistinctSelectItem.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/context/selectitem/AggregationDistinctSelectItem.java @@ -18,6 +18,7 @@ package org.apache.shardingsphere.core.parse.sql.context.selectitem; import com.google.common.base.Optional; +import lombok.EqualsAndHashCode; import lombok.Getter; import org.apache.shardingsphere.core.constant.AggregationType; @@ -27,6 +28,7 @@ * @author panjuan */ @Getter +@EqualsAndHashCode public final class AggregationDistinctSelectItem extends AggregationSelectItem { private final String distinctColumnName; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/context/selectitem/DistinctSelectItem.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/context/selectitem/DistinctSelectItem.java index 757a5205677ad..ecfae52c6e1ab 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/context/selectitem/DistinctSelectItem.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/context/selectitem/DistinctSelectItem.java @@ -19,6 +19,7 @@ import com.google.common.base.Joiner; import com.google.common.base.Optional; +import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.RequiredArgsConstructor; import org.apache.shardingsphere.core.parse.util.SQLUtil; @@ -34,6 +35,7 @@ */ @RequiredArgsConstructor @Getter +@EqualsAndHashCode public final class DistinctSelectItem implements SelectItem { private final Set distinctColumnNames; From ef6358089e8bba6686bf46ea91bbc8cdc6c88e45 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Sat, 15 Jun 2019 00:05:03 +0800 Subject: [PATCH 234/283] for #2556, ParserResultSetLoader => ParserResultSetRegistry --- .../asserts/EncryptSQLStatementAssert.java | 9 +++-- .../integrate/asserts/SQLStatementAssert.java | 13 ++++--- .../asserts/SQLStatementAssertMessage.java | 8 ++--- .../encrypt/EncryptIntegrateParsingTest.java | 10 +++--- .../IntegrateSupportedSQLParsingTest.java | 10 +++--- ...va => EncryptParserResultSetRegistry.java} | 10 +++--- ...ader.java => ParserResultSetRegistry.java} | 34 +++++++++---------- ...a => ShardingParserResultSetRegistry.java} | 10 +++--- 8 files changed, 51 insertions(+), 53 deletions(-) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/{EncryptParserResultSet.java => EncryptParserResultSetRegistry.java} (75%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/{ParserResultSetLoader.java => ParserResultSetRegistry.java} (75%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/{ShardingParserResultSet.java => ShardingParserResultSetRegistry.java} (74%) diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/EncryptSQLStatementAssert.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/EncryptSQLStatementAssert.java index e5e9d5f283f3b..136a259dd91a3 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/EncryptSQLStatementAssert.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/EncryptSQLStatementAssert.java @@ -20,7 +20,7 @@ import org.apache.shardingsphere.core.parse.integrate.asserts.condition.ConditionAssert; import org.apache.shardingsphere.core.parse.integrate.asserts.insert.InsertNamesAndValuesAssert; import org.apache.shardingsphere.core.parse.integrate.asserts.table.TableAssert; -import org.apache.shardingsphere.core.parse.integrate.jaxb.ParserResultSetLoader; +import org.apache.shardingsphere.core.parse.integrate.jaxb.ParserResultSetRegistry; import org.apache.shardingsphere.core.parse.integrate.jaxb.root.ParserResult; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.DMLStatement; @@ -45,11 +45,10 @@ public final class EncryptSQLStatementAssert { private final InsertNamesAndValuesAssert insertNamesAndValuesAssert; - public EncryptSQLStatementAssert(final SQLStatement actual, final String sqlCaseId, - final SQLCaseType sqlCaseType, final SQLCasesLoader sqlLoader, final ParserResultSetLoader parserResultSetLoader) { - SQLStatementAssertMessage assertMessage = new SQLStatementAssertMessage(sqlLoader, parserResultSetLoader, sqlCaseId, sqlCaseType); + public EncryptSQLStatementAssert(final SQLStatement actual, final String sqlCaseId, final SQLCaseType sqlCaseType, final SQLCasesLoader sqlLoader, final ParserResultSetRegistry registry) { + SQLStatementAssertMessage assertMessage = new SQLStatementAssertMessage(sqlLoader, registry, sqlCaseId, sqlCaseType); this.actual = actual; - expected = parserResultSetLoader.getParserResult(sqlCaseId); + expected = registry.get(sqlCaseId); tableAssert = new TableAssert(assertMessage); conditionAssert = new ConditionAssert(assertMessage); insertNamesAndValuesAssert = new InsertNamesAndValuesAssert(assertMessage, sqlCaseType); diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/SQLStatementAssert.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/SQLStatementAssert.java index eae2b30ce1fc5..f446001ba7e3b 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/SQLStatementAssert.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/SQLStatementAssert.java @@ -26,8 +26,8 @@ import org.apache.shardingsphere.core.parse.integrate.asserts.pagination.PaginationAssert; import org.apache.shardingsphere.core.parse.integrate.asserts.table.AlterTableAssert; import org.apache.shardingsphere.core.parse.integrate.asserts.table.TableAssert; -import org.apache.shardingsphere.core.parse.integrate.jaxb.ParserResultSetLoader; -import org.apache.shardingsphere.core.parse.integrate.jaxb.ShardingParserResultSet; +import org.apache.shardingsphere.core.parse.integrate.jaxb.ParserResultSetRegistry; +import org.apache.shardingsphere.core.parse.integrate.jaxb.ShardingParserResultSetRegistry; import org.apache.shardingsphere.core.parse.integrate.jaxb.root.ParserResult; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.sql.statement.ddl.AlterTableStatement; @@ -71,14 +71,13 @@ public final class SQLStatementAssert { private final AlterTableAssert alterTableAssert; public SQLStatementAssert(final SQLStatement actual, final String sqlCaseId, final SQLCaseType sqlCaseType) { - this(actual, sqlCaseId, sqlCaseType, SQLCasesLoader.getInstance(), ShardingParserResultSet.getInstance().getParserResultSetLoader()); + this(actual, sqlCaseId, sqlCaseType, SQLCasesLoader.getInstance(), ShardingParserResultSetRegistry.getInstance().getRegistry()); } - public SQLStatementAssert(final SQLStatement actual, final String sqlCaseId, - final SQLCaseType sqlCaseType, final SQLCasesLoader sqlLoader, final ParserResultSetLoader parserResultSetLoader) { - SQLStatementAssertMessage assertMessage = new SQLStatementAssertMessage(sqlLoader, parserResultSetLoader, sqlCaseId, sqlCaseType); + public SQLStatementAssert(final SQLStatement actual, final String sqlCaseId, final SQLCaseType sqlCaseType, final SQLCasesLoader sqlLoader, final ParserResultSetRegistry registry) { + SQLStatementAssertMessage assertMessage = new SQLStatementAssertMessage(sqlLoader, registry, sqlCaseId, sqlCaseType); this.actual = actual; - expected = parserResultSetLoader.getParserResult(sqlCaseId); + expected = registry.get(sqlCaseId); tableAssert = new TableAssert(assertMessage); conditionAssert = new ConditionAssert(assertMessage); indexAssert = new IndexAssert(sqlCaseType, assertMessage); diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/SQLStatementAssertMessage.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/SQLStatementAssertMessage.java index 747828c63d5ed..8ea45f19e86d3 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/SQLStatementAssertMessage.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/SQLStatementAssertMessage.java @@ -18,7 +18,7 @@ package org.apache.shardingsphere.core.parse.integrate.asserts; import lombok.RequiredArgsConstructor; -import org.apache.shardingsphere.core.parse.integrate.jaxb.ParserResultSetLoader; +import org.apache.shardingsphere.core.parse.integrate.jaxb.ParserResultSetRegistry; import org.apache.shardingsphere.test.sql.SQLCaseType; import org.apache.shardingsphere.test.sql.SQLCasesLoader; @@ -34,7 +34,7 @@ public final class SQLStatementAssertMessage { private final SQLCasesLoader sqlCasesLoader; - private final ParserResultSetLoader parserResultSetLoader; + private final ParserResultSetRegistry parserResultSetRegistry; private final String sqlCaseId; @@ -56,10 +56,10 @@ public String getFullAssertMessage(final String assertMessage) { result.append(sqlCasesLoader.getSupportedSQL(sqlCaseId, sqlCaseType, Collections.emptyList())); result.append(System.getProperty("line.separator")); result.append("SQL Params : "); - result.append(parserResultSetLoader.getParserResult(sqlCaseId).getParameters()); + result.append(parserResultSetRegistry.get(sqlCaseId).getParameters()); result.append(System.getProperty("line.separator")); } else { - result.append(sqlCasesLoader.getSupportedSQL(sqlCaseId, sqlCaseType, parserResultSetLoader.getParserResult(sqlCaseId).getParameters())); + result.append(sqlCasesLoader.getSupportedSQL(sqlCaseId, sqlCaseType, parserResultSetRegistry.get(sqlCaseId).getParameters())); } result.append(System.getProperty("line.separator")); result.append(assertMessage); diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/encrypt/EncryptIntegrateParsingTest.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/encrypt/EncryptIntegrateParsingTest.java index 7733f311dc1dd..854af7c8e743f 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/encrypt/EncryptIntegrateParsingTest.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/encrypt/EncryptIntegrateParsingTest.java @@ -28,8 +28,8 @@ import org.apache.shardingsphere.core.parse.entry.EncryptSQLParseEntry; import org.apache.shardingsphere.core.parse.integrate.asserts.EncryptSQLStatementAssert; import org.apache.shardingsphere.core.parse.integrate.engine.sharding.AbstractBaseIntegrateSQLParsingTest; -import org.apache.shardingsphere.core.parse.integrate.jaxb.EncryptParserResultSet; -import org.apache.shardingsphere.core.parse.integrate.jaxb.ParserResultSetLoader; +import org.apache.shardingsphere.core.parse.integrate.jaxb.EncryptParserResultSetRegistry; +import org.apache.shardingsphere.core.parse.integrate.jaxb.ParserResultSetRegistry; import org.apache.shardingsphere.core.parse.integrate.jaxb.root.ParserResult; import org.apache.shardingsphere.core.parse.parser.SQLParserFactory; import org.apache.shardingsphere.core.rule.EncryptRule; @@ -57,7 +57,7 @@ public final class EncryptIntegrateParsingTest extends AbstractBaseIntegrateSQLP private static SQLCasesLoader sqlCasesLoader = EncryptSQLCasesLoader.getInstance(); - private static ParserResultSetLoader parserResultSetLoader = EncryptParserResultSet.getInstance().getParserResultSetLoader(); + private static ParserResultSetRegistry parserResultSetRegistry = EncryptParserResultSetRegistry.getInstance().getRegistry(); private final String sqlCaseId; @@ -94,12 +94,12 @@ public void syntaxError(final Recognizer recognizer, final Object offendin @Test public void assertSupportedSQL() throws Exception { - ParserResult parserResult = parserResultSetLoader.getParserResult(sqlCaseId); + ParserResult parserResult = parserResultSetRegistry.get(sqlCaseId); if (null != parserResult) { String sql = sqlCasesLoader.getSupportedSQL(sqlCaseId, sqlCaseType, parserResult.getParameters()); EncryptSQLParseEntry encryptSQLParseEntry = new EncryptSQLParseEntry( DatabaseTypes.getActualDatabaseType(databaseType), buildShardingRule(), AbstractBaseIntegrateSQLParsingTest.getShardingTableMetaData()); - new EncryptSQLStatementAssert(encryptSQLParseEntry.parse(sql, false), sqlCaseId, sqlCaseType, sqlCasesLoader, parserResultSetLoader).assertSQLStatement(); + new EncryptSQLStatementAssert(encryptSQLParseEntry.parse(sql, false), sqlCaseId, sqlCaseType, sqlCasesLoader, parserResultSetRegistry).assertSQLStatement(); } } } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/IntegrateSupportedSQLParsingTest.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/IntegrateSupportedSQLParsingTest.java index 1bdc6a7c7b291..6f0f465d26820 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/IntegrateSupportedSQLParsingTest.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/IntegrateSupportedSQLParsingTest.java @@ -27,8 +27,8 @@ import org.apache.shardingsphere.core.parse.cache.ParsingResultCache; import org.apache.shardingsphere.core.parse.entry.ShardingSQLParseEntry; import org.apache.shardingsphere.core.parse.integrate.asserts.SQLStatementAssert; -import org.apache.shardingsphere.core.parse.integrate.jaxb.ParserResultSetLoader; -import org.apache.shardingsphere.core.parse.integrate.jaxb.ShardingParserResultSet; +import org.apache.shardingsphere.core.parse.integrate.jaxb.ParserResultSetRegistry; +import org.apache.shardingsphere.core.parse.integrate.jaxb.ShardingParserResultSetRegistry; import org.apache.shardingsphere.core.parse.parser.SQLParserFactory; import org.apache.shardingsphere.test.sql.SQLCaseType; import org.apache.shardingsphere.test.sql.SQLCasesLoader; @@ -47,7 +47,7 @@ public final class IntegrateSupportedSQLParsingTest extends AbstractBaseIntegrat private static SQLCasesLoader sqlCasesLoader = SQLCasesLoader.getInstance(); - private static ParserResultSetLoader parserResultSetLoader = ShardingParserResultSet.getInstance().getParserResultSetLoader(); + private static ParserResultSetRegistry parserResultSetLoader = ShardingParserResultSetRegistry.getInstance().getRegistry(); private final String sqlCaseId; @@ -57,7 +57,7 @@ public final class IntegrateSupportedSQLParsingTest extends AbstractBaseIntegrat @Parameters(name = "{0} ({2}) -> {1}") public static Collection getTestParameters() { - assertThat(sqlCasesLoader.countAllSupportedSQLCases(), is(parserResultSetLoader.countAllParserTestCases())); + assertThat(sqlCasesLoader.countAllSupportedSQLCases(), is(parserResultSetLoader.countAllTestCases())); return sqlCasesLoader.getSupportedSQLTestParameters(); } @@ -78,7 +78,7 @@ public void syntaxError(final Recognizer recognizer, final Object offendin @Test public void assertSupportedSQL() { - String sql = sqlCasesLoader.getSupportedSQL(sqlCaseId, sqlCaseType, parserResultSetLoader.getParserResult(sqlCaseId).getParameters()); + String sql = sqlCasesLoader.getSupportedSQL(sqlCaseId, sqlCaseType, parserResultSetLoader.get(sqlCaseId).getParameters()); new SQLStatementAssert(new ShardingSQLParseEntry(DatabaseTypes.getTrunkDatabaseType(databaseType), getShardingRule(), getShardingTableMetaData(), new ParsingResultCache()) .parse(sql, false), sqlCaseId, sqlCaseType).assertSQLStatement(); } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/EncryptParserResultSet.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/EncryptParserResultSetRegistry.java similarity index 75% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/EncryptParserResultSet.java rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/EncryptParserResultSetRegistry.java index 55fb938ccb6b1..63f5343d03f51 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/EncryptParserResultSet.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/EncryptParserResultSetRegistry.java @@ -20,23 +20,23 @@ import lombok.Getter; /** - * Encrypt parser result set. + * Encrypt parser result set registry. * * @author zhangliang */ -public final class EncryptParserResultSet { +public final class EncryptParserResultSetRegistry { - private static final EncryptParserResultSet INSTANCE = new EncryptParserResultSet(); + private static final EncryptParserResultSetRegistry INSTANCE = new EncryptParserResultSetRegistry(); @Getter - private final ParserResultSetLoader parserResultSetLoader = new ParserResultSetLoader("encrypt/"); + private final ParserResultSetRegistry registry = new ParserResultSetRegistry("encrypt/"); /** * Get singleton instance. * * @return singleton instance */ - public static EncryptParserResultSet getInstance() { + public static EncryptParserResultSetRegistry getInstance() { return INSTANCE; } } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/ParserResultSetLoader.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/ParserResultSetRegistry.java similarity index 75% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/ParserResultSetLoader.java rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/ParserResultSetRegistry.java index 9022002e467ce..16e0338310058 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/ParserResultSetLoader.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/ParserResultSetRegistry.java @@ -29,38 +29,38 @@ import java.util.Map; /** - * Parser result set loader. + * Parser result set registry. * * @author zhangliang */ -public final class ParserResultSetLoader { +public final class ParserResultSetRegistry { private Map parserResultMap; - public ParserResultSetLoader(final String rootDirectory) { - parserResultMap = loadParserResultSet(rootDirectory); + public ParserResultSetRegistry(final String rootDirectory) { + parserResultMap = load(rootDirectory); } - private Map loadParserResultSet(final String dirName) { - URL url = ParserResultSetLoader.class.getClassLoader().getResource(dirName); - Preconditions.checkNotNull(url, "Cannot found parser test cases."); + private Map load(final String directory) { + URL url = ParserResultSetRegistry.class.getClassLoader().getResource(directory); + Preconditions.checkNotNull(url, "Cannot find parse test cases."); File[] files = new File(url.getPath()).listFiles(); - Preconditions.checkNotNull(files, "Cannot found parser test cases."); + Preconditions.checkNotNull(files, "Cannot find parse test cases."); Map result = new HashMap<>(Short.MAX_VALUE, 1); for (File each : files) { - result.putAll(loadParserResultSet(each)); + result.putAll(load(each)); } return result; } - private Map loadParserResultSet(final File file) { + private Map load(final File file) { Map result = new HashMap<>(Short.MAX_VALUE, 1); try { if (file.isDirectory()) { File[] files = file.listFiles(); if (null != files) { for (File each : files) { - result.putAll(loadParserResultSet(each)); + result.putAll(load(each)); } } } else { @@ -80,22 +80,22 @@ private Map loadParserResultSet(final File file) { } /** - * Get parser assert. + * Get parser result. * * @param sqlCaseId SQL case ID - * @return parser assert + * @return parser result */ - public ParserResult getParserResult(final String sqlCaseId) { + public ParserResult get(final String sqlCaseId) { Preconditions.checkState(parserResultMap.containsKey(sqlCaseId), "Can't find SQL of id: %s", sqlCaseId); return parserResultMap.get(sqlCaseId); } /** - * Count all parser test cases. + * Count all test cases. * - * @return count of all parser test cases + * @return count of all test cases */ - public int countAllParserTestCases() { + public int countAllTestCases() { return parserResultMap.size(); } } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/ShardingParserResultSet.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/ShardingParserResultSetRegistry.java similarity index 74% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/ShardingParserResultSet.java rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/ShardingParserResultSetRegistry.java index 0e7e191b04f57..428cf007e8b2a 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/ShardingParserResultSet.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/ShardingParserResultSetRegistry.java @@ -20,23 +20,23 @@ import lombok.Getter; /** - * Sharding parser result set. + * Sharding parser result set registry. * * @author zhangliang */ -public final class ShardingParserResultSet { +public final class ShardingParserResultSetRegistry { - private static final ShardingParserResultSet INSTANCE = new ShardingParserResultSet(); + private static final ShardingParserResultSetRegistry INSTANCE = new ShardingParserResultSetRegistry(); @Getter - private final ParserResultSetLoader parserResultSetLoader = new ParserResultSetLoader("sharding/"); + private final ParserResultSetRegistry registry = new ParserResultSetRegistry("sharding/"); /** * Get singleton instance. * * @return singleton instance */ - public static ShardingParserResultSet getInstance() { + public static ShardingParserResultSetRegistry getInstance() { return INSTANCE; } } From e144e749b07e9e5c2efcc0889b8f693ab9e1c9c0 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Sat, 15 Jun 2019 00:12:12 +0800 Subject: [PATCH 235/283] for #2556, refactor ParserResultSetRegistry --- .../jaxb/ParserResultSetRegistry.java | 37 ++++++++++--------- .../integrate/jaxb/root/ParserResultSet.java | 4 -- 2 files changed, 20 insertions(+), 21 deletions(-) diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/ParserResultSetRegistry.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/ParserResultSetRegistry.java index 16e0338310058..3183788eb8726 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/ParserResultSetRegistry.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/ParserResultSetRegistry.java @@ -55,27 +55,30 @@ private Map load(final String directory) { private Map load(final File file) { Map result = new HashMap<>(Short.MAX_VALUE, 1); - try { - if (file.isDirectory()) { - File[] files = file.listFiles(); - if (null != files) { - for (File each : files) { - result.putAll(load(each)); - } - } - } else { - ParserResultSet resultSet = (ParserResultSet) JAXBContext.newInstance(ParserResultSet.class).createUnmarshaller().unmarshal(file); - for (ParserResult each : resultSet.getParserResults()) { - if (null != resultSet.getNamespace()) { - result.put(resultSet.getNamespace() + "." + each.getSqlCaseId(), each); - } else { - result.put(each.getSqlCaseId(), each); - } + if (file.isDirectory()) { + File[] files = file.listFiles(); + if (null != files) { + for (File each : files) { + result.putAll(load(each)); } } - } catch (final JAXBException ex) { + } else { + result.putAll(getParserResults(file)); + } + return result; + } + + private Map getParserResults(final File file) { + ParserResultSet resultSet; + try { + resultSet = (ParserResultSet) JAXBContext.newInstance(ParserResultSet.class).createUnmarshaller().unmarshal(file); + } catch (JAXBException ex) { throw new RuntimeException(ex); } + final Map result = new HashMap<>(resultSet.getParserResults().size(), 1); + for (ParserResult each : resultSet.getParserResults()) { + result.put(each.getSqlCaseId(), each); + } return result; } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/root/ParserResultSet.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/root/ParserResultSet.java index 00ffd6c08cba7..2b9a2233b5dea 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/root/ParserResultSet.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/root/ParserResultSet.java @@ -19,7 +19,6 @@ import lombok.Getter; -import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import java.util.LinkedList; @@ -29,9 +28,6 @@ @Getter public final class ParserResultSet { - @XmlAttribute - private String namespace; - @XmlElement(name = "parser-result") private List parserResults = new LinkedList<>(); } From 937939bb98241598fad673e5faa1c5c7253a127d Mon Sep 17 00:00:00 2001 From: terrymanu Date: Sat, 15 Jun 2019 00:14:18 +0800 Subject: [PATCH 236/283] for #2556, SQLStatementAssert => ShardingSQLStatementAssert --- .../integrate/asserts/EncryptSQLStatementAssert.java | 2 +- ...atementAssert.java => ShardingSQLStatementAssert.java} | 8 ++++---- .../engine/sharding/IntegrateSupportedSQLParsingTest.java | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/{SQLStatementAssert.java => ShardingSQLStatementAssert.java} (93%) diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/EncryptSQLStatementAssert.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/EncryptSQLStatementAssert.java index 136a259dd91a3..6b15efb08ff6b 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/EncryptSQLStatementAssert.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/EncryptSQLStatementAssert.java @@ -29,7 +29,7 @@ import org.apache.shardingsphere.test.sql.SQLCasesLoader; /** - * Encrypt SQL statement assert. + * SQL statement assert for encrypt. * * @author duhongjun */ diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/SQLStatementAssert.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/ShardingSQLStatementAssert.java similarity index 93% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/SQLStatementAssert.java rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/ShardingSQLStatementAssert.java index f446001ba7e3b..cb2a78a6101b4 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/SQLStatementAssert.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/ShardingSQLStatementAssert.java @@ -42,11 +42,11 @@ import static org.junit.Assert.assertThat; /** - * SQL statement assert. + * SQL statement assert for sharding. * * @author zhangliang */ -public final class SQLStatementAssert { +public final class ShardingSQLStatementAssert { private final SQLStatement actual; @@ -70,11 +70,11 @@ public final class SQLStatementAssert { private final AlterTableAssert alterTableAssert; - public SQLStatementAssert(final SQLStatement actual, final String sqlCaseId, final SQLCaseType sqlCaseType) { + public ShardingSQLStatementAssert(final SQLStatement actual, final String sqlCaseId, final SQLCaseType sqlCaseType) { this(actual, sqlCaseId, sqlCaseType, SQLCasesLoader.getInstance(), ShardingParserResultSetRegistry.getInstance().getRegistry()); } - public SQLStatementAssert(final SQLStatement actual, final String sqlCaseId, final SQLCaseType sqlCaseType, final SQLCasesLoader sqlLoader, final ParserResultSetRegistry registry) { + public ShardingSQLStatementAssert(final SQLStatement actual, final String sqlCaseId, final SQLCaseType sqlCaseType, final SQLCasesLoader sqlLoader, final ParserResultSetRegistry registry) { SQLStatementAssertMessage assertMessage = new SQLStatementAssertMessage(sqlLoader, registry, sqlCaseId, sqlCaseType); this.actual = actual; expected = registry.get(sqlCaseId); diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/IntegrateSupportedSQLParsingTest.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/IntegrateSupportedSQLParsingTest.java index 6f0f465d26820..3c158a3f1ffff 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/IntegrateSupportedSQLParsingTest.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/IntegrateSupportedSQLParsingTest.java @@ -26,7 +26,7 @@ import org.apache.shardingsphere.core.parse.api.SQLParser; import org.apache.shardingsphere.core.parse.cache.ParsingResultCache; import org.apache.shardingsphere.core.parse.entry.ShardingSQLParseEntry; -import org.apache.shardingsphere.core.parse.integrate.asserts.SQLStatementAssert; +import org.apache.shardingsphere.core.parse.integrate.asserts.ShardingSQLStatementAssert; import org.apache.shardingsphere.core.parse.integrate.jaxb.ParserResultSetRegistry; import org.apache.shardingsphere.core.parse.integrate.jaxb.ShardingParserResultSetRegistry; import org.apache.shardingsphere.core.parse.parser.SQLParserFactory; @@ -79,7 +79,7 @@ public void syntaxError(final Recognizer recognizer, final Object offendin @Test public void assertSupportedSQL() { String sql = sqlCasesLoader.getSupportedSQL(sqlCaseId, sqlCaseType, parserResultSetLoader.get(sqlCaseId).getParameters()); - new SQLStatementAssert(new ShardingSQLParseEntry(DatabaseTypes.getTrunkDatabaseType(databaseType), getShardingRule(), getShardingTableMetaData(), new ParsingResultCache()) + new ShardingSQLStatementAssert(new ShardingSQLParseEntry(DatabaseTypes.getTrunkDatabaseType(databaseType), getShardingRule(), getShardingTableMetaData(), new ParsingResultCache()) .parse(sql, false), sqlCaseId, sqlCaseType).assertSQLStatement(); } } From a9f7ccf294deffd12e033d2dc672a9c8e034e173 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Sat, 15 Jun 2019 00:15:56 +0800 Subject: [PATCH 237/283] for #2556, move package of AbstractBaseIntegrateSQLParsingTest --- .../{sharding => }/AbstractBaseIntegrateSQLParsingTest.java | 2 +- .../engine/encrypt/EncryptIntegrateParsingTest.java | 5 +---- .../engine/sharding/IntegrateSQLParsingExceptionTest.java | 1 + .../engine/sharding/IntegrateSupportedSQLParsingTest.java | 1 + .../engine/sharding/IntegrateUnsupportedSQLParsingTest.java | 1 + 5 files changed, 5 insertions(+), 5 deletions(-) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/{sharding => }/AbstractBaseIntegrateSQLParsingTest.java (98%) diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/AbstractBaseIntegrateSQLParsingTest.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/AbstractBaseIntegrateSQLParsingTest.java similarity index 98% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/AbstractBaseIntegrateSQLParsingTest.java rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/AbstractBaseIntegrateSQLParsingTest.java index c3e66ea8417c0..1d488b88089cd 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/AbstractBaseIntegrateSQLParsingTest.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/AbstractBaseIntegrateSQLParsingTest.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.shardingsphere.core.parse.integrate.engine.sharding; +package org.apache.shardingsphere.core.parse.integrate.engine; import com.google.common.base.Preconditions; import lombok.AccessLevel; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/encrypt/EncryptIntegrateParsingTest.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/encrypt/EncryptIntegrateParsingTest.java index 854af7c8e743f..a71354ee5b4a9 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/encrypt/EncryptIntegrateParsingTest.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/encrypt/EncryptIntegrateParsingTest.java @@ -27,7 +27,7 @@ import org.apache.shardingsphere.core.parse.api.SQLParser; import org.apache.shardingsphere.core.parse.entry.EncryptSQLParseEntry; import org.apache.shardingsphere.core.parse.integrate.asserts.EncryptSQLStatementAssert; -import org.apache.shardingsphere.core.parse.integrate.engine.sharding.AbstractBaseIntegrateSQLParsingTest; +import org.apache.shardingsphere.core.parse.integrate.engine.AbstractBaseIntegrateSQLParsingTest; import org.apache.shardingsphere.core.parse.integrate.jaxb.EncryptParserResultSetRegistry; import org.apache.shardingsphere.core.parse.integrate.jaxb.ParserResultSetRegistry; import org.apache.shardingsphere.core.parse.integrate.jaxb.root.ParserResult; @@ -40,8 +40,6 @@ import org.apache.shardingsphere.test.sql.SQLCaseType; import org.apache.shardingsphere.test.sql.SQLCasesLoader; import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; import java.io.File; @@ -51,7 +49,6 @@ import java.util.Collection; import java.util.Collections; -@RunWith(Parameterized.class) @RequiredArgsConstructor public final class EncryptIntegrateParsingTest extends AbstractBaseIntegrateSQLParsingTest { diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/IntegrateSQLParsingExceptionTest.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/IntegrateSQLParsingExceptionTest.java index 3afc171195c17..89ad66f0b7d82 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/IntegrateSQLParsingExceptionTest.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/IntegrateSQLParsingExceptionTest.java @@ -22,6 +22,7 @@ import org.apache.shardingsphere.core.parse.cache.ParsingResultCache; import org.apache.shardingsphere.core.parse.entry.ShardingSQLParseEntry; import org.apache.shardingsphere.core.parse.exception.SQLParsingException; +import org.apache.shardingsphere.core.parse.integrate.engine.AbstractBaseIntegrateSQLParsingTest; import org.apache.shardingsphere.test.sql.SQLCaseType; import org.apache.shardingsphere.test.sql.SQLCasesLoader; import org.junit.Test; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/IntegrateSupportedSQLParsingTest.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/IntegrateSupportedSQLParsingTest.java index 3c158a3f1ffff..56990ab3f5b86 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/IntegrateSupportedSQLParsingTest.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/IntegrateSupportedSQLParsingTest.java @@ -27,6 +27,7 @@ import org.apache.shardingsphere.core.parse.cache.ParsingResultCache; import org.apache.shardingsphere.core.parse.entry.ShardingSQLParseEntry; import org.apache.shardingsphere.core.parse.integrate.asserts.ShardingSQLStatementAssert; +import org.apache.shardingsphere.core.parse.integrate.engine.AbstractBaseIntegrateSQLParsingTest; import org.apache.shardingsphere.core.parse.integrate.jaxb.ParserResultSetRegistry; import org.apache.shardingsphere.core.parse.integrate.jaxb.ShardingParserResultSetRegistry; import org.apache.shardingsphere.core.parse.parser.SQLParserFactory; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/IntegrateUnsupportedSQLParsingTest.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/IntegrateUnsupportedSQLParsingTest.java index 2475e69af7ed3..eaec4043b62f7 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/IntegrateUnsupportedSQLParsingTest.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/IntegrateUnsupportedSQLParsingTest.java @@ -22,6 +22,7 @@ import org.apache.shardingsphere.core.parse.cache.ParsingResultCache; import org.apache.shardingsphere.core.parse.entry.ShardingSQLParseEntry; import org.apache.shardingsphere.core.parse.exception.SQLParsingException; +import org.apache.shardingsphere.core.parse.integrate.engine.AbstractBaseIntegrateSQLParsingTest; import org.apache.shardingsphere.test.sql.SQLCaseType; import org.apache.shardingsphere.test.sql.SQLCasesLoader; import org.junit.Test; From 7eed8ea9f70b08a4253bda3739d0e38ed6313737 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Sat, 15 Jun 2019 00:18:40 +0800 Subject: [PATCH 238/283] for #2556, XXXIntegrateSQLParsingTest => XXXParameterizedSQLParsingTest --- ...est.java => AbstractBaseParameterizedParsingTest.java} | 4 ++-- ...singTest.java => EncryptParameterizedParsingTest.java} | 8 ++++---- ...ava => ShardingParameterizedParsingExceptionTest.java} | 4 ++-- ...ingTest.java => ShardingParameterizedParsingTest.java} | 4 ++-- ...a => ShardingParameterizedUnsupportedParsingTest.java} | 4 ++-- 5 files changed, 12 insertions(+), 12 deletions(-) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/{AbstractBaseIntegrateSQLParsingTest.java => AbstractBaseParameterizedParsingTest.java} (95%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/encrypt/{EncryptIntegrateParsingTest.java => EncryptParameterizedParsingTest.java} (93%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/{IntegrateSQLParsingExceptionTest.java => ShardingParameterizedParsingExceptionTest.java} (94%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/{IntegrateSupportedSQLParsingTest.java => ShardingParameterizedParsingTest.java} (96%) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/{IntegrateUnsupportedSQLParsingTest.java => ShardingParameterizedUnsupportedParsingTest.java} (94%) diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/AbstractBaseIntegrateSQLParsingTest.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/AbstractBaseParameterizedParsingTest.java similarity index 95% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/AbstractBaseIntegrateSQLParsingTest.java rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/AbstractBaseParameterizedParsingTest.java index 1d488b88089cd..f59d3c1d1b299 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/AbstractBaseIntegrateSQLParsingTest.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/AbstractBaseParameterizedParsingTest.java @@ -39,7 +39,7 @@ import java.util.Map; @RunWith(Parameterized.class) -public abstract class AbstractBaseIntegrateSQLParsingTest { +public abstract class AbstractBaseParameterizedParsingTest { @Getter(AccessLevel.PROTECTED) private static ShardingRule shardingRule; @@ -54,7 +54,7 @@ public static void setUp() throws IOException { } private static ShardingRule buildShardingRule() throws IOException { - URL url = AbstractBaseIntegrateSQLParsingTest.class.getClassLoader().getResource("yaml/sharding-rule.yaml"); + URL url = AbstractBaseParameterizedParsingTest.class.getClassLoader().getResource("yaml/sharding-rule.yaml"); Preconditions.checkNotNull(url, "Cannot find parse rule yaml configuration."); YamlRootShardingConfiguration yamlShardingConfig = YamlEngine.unmarshal(new File(url.getFile()), YamlRootShardingConfiguration.class); return new ShardingRule(new ShardingRuleConfigurationYamlSwapper().swap(yamlShardingConfig.getShardingRule()), yamlShardingConfig.getDataSources().keySet()); diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/encrypt/EncryptIntegrateParsingTest.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/encrypt/EncryptParameterizedParsingTest.java similarity index 93% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/encrypt/EncryptIntegrateParsingTest.java rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/encrypt/EncryptParameterizedParsingTest.java index a71354ee5b4a9..199c70f4ed7ae 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/encrypt/EncryptIntegrateParsingTest.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/encrypt/EncryptParameterizedParsingTest.java @@ -27,7 +27,7 @@ import org.apache.shardingsphere.core.parse.api.SQLParser; import org.apache.shardingsphere.core.parse.entry.EncryptSQLParseEntry; import org.apache.shardingsphere.core.parse.integrate.asserts.EncryptSQLStatementAssert; -import org.apache.shardingsphere.core.parse.integrate.engine.AbstractBaseIntegrateSQLParsingTest; +import org.apache.shardingsphere.core.parse.integrate.engine.AbstractBaseParameterizedParsingTest; import org.apache.shardingsphere.core.parse.integrate.jaxb.EncryptParserResultSetRegistry; import org.apache.shardingsphere.core.parse.integrate.jaxb.ParserResultSetRegistry; import org.apache.shardingsphere.core.parse.integrate.jaxb.root.ParserResult; @@ -50,7 +50,7 @@ import java.util.Collections; @RequiredArgsConstructor -public final class EncryptIntegrateParsingTest extends AbstractBaseIntegrateSQLParsingTest { +public final class EncryptParameterizedParsingTest extends AbstractBaseParameterizedParsingTest { private static SQLCasesLoader sqlCasesLoader = EncryptSQLCasesLoader.getInstance(); @@ -68,7 +68,7 @@ public static Collection getTestParameters() { } private static EncryptRule buildShardingRule() throws IOException { - URL url = AbstractBaseIntegrateSQLParsingTest.class.getClassLoader().getResource("yaml/encrypt-rule.yaml"); + URL url = AbstractBaseParameterizedParsingTest.class.getClassLoader().getResource("yaml/encrypt-rule.yaml"); Preconditions.checkNotNull(url, "Cannot found parser rule yaml configuration."); YamlEncryptRuleConfiguration encryptConfig = YamlEngine.unmarshal(new File(url.getFile()), YamlEncryptRuleConfiguration.class); return new EncryptRule(new EncryptRuleConfigurationYamlSwapper().swap(encryptConfig)); @@ -95,7 +95,7 @@ public void assertSupportedSQL() throws Exception { if (null != parserResult) { String sql = sqlCasesLoader.getSupportedSQL(sqlCaseId, sqlCaseType, parserResult.getParameters()); EncryptSQLParseEntry encryptSQLParseEntry = new EncryptSQLParseEntry( - DatabaseTypes.getActualDatabaseType(databaseType), buildShardingRule(), AbstractBaseIntegrateSQLParsingTest.getShardingTableMetaData()); + DatabaseTypes.getActualDatabaseType(databaseType), buildShardingRule(), AbstractBaseParameterizedParsingTest.getShardingTableMetaData()); new EncryptSQLStatementAssert(encryptSQLParseEntry.parse(sql, false), sqlCaseId, sqlCaseType, sqlCasesLoader, parserResultSetRegistry).assertSQLStatement(); } } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/IntegrateSQLParsingExceptionTest.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedParsingExceptionTest.java similarity index 94% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/IntegrateSQLParsingExceptionTest.java rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedParsingExceptionTest.java index 89ad66f0b7d82..b88be3ef57bf0 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/IntegrateSQLParsingExceptionTest.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedParsingExceptionTest.java @@ -22,7 +22,7 @@ import org.apache.shardingsphere.core.parse.cache.ParsingResultCache; import org.apache.shardingsphere.core.parse.entry.ShardingSQLParseEntry; import org.apache.shardingsphere.core.parse.exception.SQLParsingException; -import org.apache.shardingsphere.core.parse.integrate.engine.AbstractBaseIntegrateSQLParsingTest; +import org.apache.shardingsphere.core.parse.integrate.engine.AbstractBaseParameterizedParsingTest; import org.apache.shardingsphere.test.sql.SQLCaseType; import org.apache.shardingsphere.test.sql.SQLCasesLoader; import org.junit.Test; @@ -32,7 +32,7 @@ import java.util.Collections; @RequiredArgsConstructor -public final class IntegrateSQLParsingExceptionTest extends AbstractBaseIntegrateSQLParsingTest { +public final class ShardingParameterizedParsingExceptionTest extends AbstractBaseParameterizedParsingTest { private static SQLCasesLoader sqlCasesLoader = SQLCasesLoader.getInstance(); diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/IntegrateSupportedSQLParsingTest.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedParsingTest.java similarity index 96% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/IntegrateSupportedSQLParsingTest.java rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedParsingTest.java index 56990ab3f5b86..9c2a2cd3e8f79 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/IntegrateSupportedSQLParsingTest.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedParsingTest.java @@ -27,7 +27,7 @@ import org.apache.shardingsphere.core.parse.cache.ParsingResultCache; import org.apache.shardingsphere.core.parse.entry.ShardingSQLParseEntry; import org.apache.shardingsphere.core.parse.integrate.asserts.ShardingSQLStatementAssert; -import org.apache.shardingsphere.core.parse.integrate.engine.AbstractBaseIntegrateSQLParsingTest; +import org.apache.shardingsphere.core.parse.integrate.engine.AbstractBaseParameterizedParsingTest; import org.apache.shardingsphere.core.parse.integrate.jaxb.ParserResultSetRegistry; import org.apache.shardingsphere.core.parse.integrate.jaxb.ShardingParserResultSetRegistry; import org.apache.shardingsphere.core.parse.parser.SQLParserFactory; @@ -44,7 +44,7 @@ import static org.junit.Assert.assertThat; @RequiredArgsConstructor -public final class IntegrateSupportedSQLParsingTest extends AbstractBaseIntegrateSQLParsingTest { +public final class ShardingParameterizedParsingTest extends AbstractBaseParameterizedParsingTest { private static SQLCasesLoader sqlCasesLoader = SQLCasesLoader.getInstance(); diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/IntegrateUnsupportedSQLParsingTest.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedUnsupportedParsingTest.java similarity index 94% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/IntegrateUnsupportedSQLParsingTest.java rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedUnsupportedParsingTest.java index eaec4043b62f7..e7e1a7aab95cf 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/IntegrateUnsupportedSQLParsingTest.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedUnsupportedParsingTest.java @@ -22,7 +22,7 @@ import org.apache.shardingsphere.core.parse.cache.ParsingResultCache; import org.apache.shardingsphere.core.parse.entry.ShardingSQLParseEntry; import org.apache.shardingsphere.core.parse.exception.SQLParsingException; -import org.apache.shardingsphere.core.parse.integrate.engine.AbstractBaseIntegrateSQLParsingTest; +import org.apache.shardingsphere.core.parse.integrate.engine.AbstractBaseParameterizedParsingTest; import org.apache.shardingsphere.test.sql.SQLCaseType; import org.apache.shardingsphere.test.sql.SQLCasesLoader; import org.junit.Test; @@ -32,7 +32,7 @@ import java.util.Collections; @RequiredArgsConstructor -public final class IntegrateUnsupportedSQLParsingTest extends AbstractBaseIntegrateSQLParsingTest { +public final class ShardingParameterizedUnsupportedParsingTest extends AbstractBaseParameterizedParsingTest { private static SQLCasesLoader sqlCasesLoader = SQLCasesLoader.getInstance(); From 92910b540fbc6211e781b8a384fae79d66cc524d Mon Sep 17 00:00:00 2001 From: terrymanu Date: Sat, 15 Jun 2019 00:30:16 +0800 Subject: [PATCH 239/283] for #2556, remove test case parsingSupportedSQL --- .../EncryptParameterizedParsingTest.java | 23 --------------- ...dingParameterizedParsingExceptionTest.java | 4 +-- .../ShardingParameterizedParsingTest.java | 29 +++---------------- ...ngParameterizedUnsupportedParsingTest.java | 4 +-- 4 files changed, 8 insertions(+), 52 deletions(-) diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/encrypt/EncryptParameterizedParsingTest.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/encrypt/EncryptParameterizedParsingTest.java index 199c70f4ed7ae..8396be0eae0a6 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/encrypt/EncryptParameterizedParsingTest.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/encrypt/EncryptParameterizedParsingTest.java @@ -19,19 +19,13 @@ import com.google.common.base.Preconditions; import lombok.RequiredArgsConstructor; -import org.antlr.v4.runtime.ANTLRErrorListener; -import org.antlr.v4.runtime.BaseErrorListener; -import org.antlr.v4.runtime.RecognitionException; -import org.antlr.v4.runtime.Recognizer; import org.apache.shardingsphere.core.database.DatabaseTypes; -import org.apache.shardingsphere.core.parse.api.SQLParser; import org.apache.shardingsphere.core.parse.entry.EncryptSQLParseEntry; import org.apache.shardingsphere.core.parse.integrate.asserts.EncryptSQLStatementAssert; import org.apache.shardingsphere.core.parse.integrate.engine.AbstractBaseParameterizedParsingTest; import org.apache.shardingsphere.core.parse.integrate.jaxb.EncryptParserResultSetRegistry; import org.apache.shardingsphere.core.parse.integrate.jaxb.ParserResultSetRegistry; import org.apache.shardingsphere.core.parse.integrate.jaxb.root.ParserResult; -import org.apache.shardingsphere.core.parse.parser.SQLParserFactory; import org.apache.shardingsphere.core.rule.EncryptRule; import org.apache.shardingsphere.core.yaml.config.encrypt.YamlEncryptRuleConfiguration; import org.apache.shardingsphere.core.yaml.engine.YamlEngine; @@ -44,10 +38,8 @@ import java.io.File; import java.io.IOException; -import java.lang.reflect.Method; import java.net.URL; import java.util.Collection; -import java.util.Collections; @RequiredArgsConstructor public final class EncryptParameterizedParsingTest extends AbstractBaseParameterizedParsingTest { @@ -74,21 +66,6 @@ private static EncryptRule buildShardingRule() throws IOException { return new EncryptRule(new EncryptRuleConfigurationYamlSwapper().swap(encryptConfig)); } - @Test - public void parsingSupportedSQL() throws Exception { - String sql = sqlCasesLoader.getSupportedSQL(sqlCaseId, sqlCaseType, Collections.emptyList()); - SQLParser sqlParser = SQLParserFactory.newInstance(DatabaseTypes.getTrunkDatabaseType(databaseType), sql); - Method addErrorListener = sqlParser.getClass().getMethod("addErrorListener", ANTLRErrorListener.class); - addErrorListener.invoke(sqlParser, new BaseErrorListener() { - - @Override - public void syntaxError(final Recognizer recognizer, final Object offendingSymbol, final int line, final int charPositionInLine, final String msg, final RecognitionException ex) { - throw new RuntimeException(); - } - }); - sqlParser.execute(); - } - @Test public void assertSupportedSQL() throws Exception { ParserResult parserResult = parserResultSetRegistry.get(sqlCaseId); diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedParsingExceptionTest.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedParsingExceptionTest.java index b88be3ef57bf0..af643a2ff81b0 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedParsingExceptionTest.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedParsingExceptionTest.java @@ -49,7 +49,7 @@ public static Collection getTestParameters() { @Test(expected = SQLParsingException.class) public void assertSQLParsingExceptionSQL() { - new ShardingSQLParseEntry(DatabaseTypes.getTrunkDatabaseType(databaseType), getShardingRule(), getShardingTableMetaData(), new ParsingResultCache()) - .parse(sqlCasesLoader.getSQLParsingErrorSQL(sqlCaseId, sqlCaseType, Collections.emptyList()), false); + String sql = sqlCasesLoader.getSQLParsingErrorSQL(sqlCaseId, sqlCaseType, Collections.emptyList()); + new ShardingSQLParseEntry(DatabaseTypes.getTrunkDatabaseType(databaseType), getShardingRule(), getShardingTableMetaData(), new ParsingResultCache()).parse(sql, false); } } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedParsingTest.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedParsingTest.java index 9c2a2cd3e8f79..5c7b9bb58aa3d 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedParsingTest.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedParsingTest.java @@ -18,27 +18,20 @@ package org.apache.shardingsphere.core.parse.integrate.engine.sharding; import lombok.RequiredArgsConstructor; -import org.antlr.v4.runtime.ANTLRErrorListener; -import org.antlr.v4.runtime.BaseErrorListener; -import org.antlr.v4.runtime.RecognitionException; -import org.antlr.v4.runtime.Recognizer; import org.apache.shardingsphere.core.database.DatabaseTypes; -import org.apache.shardingsphere.core.parse.api.SQLParser; import org.apache.shardingsphere.core.parse.cache.ParsingResultCache; import org.apache.shardingsphere.core.parse.entry.ShardingSQLParseEntry; import org.apache.shardingsphere.core.parse.integrate.asserts.ShardingSQLStatementAssert; import org.apache.shardingsphere.core.parse.integrate.engine.AbstractBaseParameterizedParsingTest; import org.apache.shardingsphere.core.parse.integrate.jaxb.ParserResultSetRegistry; import org.apache.shardingsphere.core.parse.integrate.jaxb.ShardingParserResultSetRegistry; -import org.apache.shardingsphere.core.parse.parser.SQLParserFactory; +import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.test.sql.SQLCaseType; import org.apache.shardingsphere.test.sql.SQLCasesLoader; import org.junit.Test; import org.junit.runners.Parameterized.Parameters; -import java.lang.reflect.Method; import java.util.Collection; -import java.util.Collections; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; @@ -62,25 +55,11 @@ public static Collection getTestParameters() { return sqlCasesLoader.getSupportedSQLTestParameters(); } - @Test - public void parsingSupportedSQL() throws Exception { - String sql = sqlCasesLoader.getSupportedSQL(sqlCaseId, sqlCaseType, Collections.emptyList()); - SQLParser sqlParser = SQLParserFactory.newInstance(DatabaseTypes.getTrunkDatabaseType(databaseType), sql); - Method addErrorListener = sqlParser.getClass().getMethod("addErrorListener", ANTLRErrorListener.class); - addErrorListener.invoke(sqlParser, new BaseErrorListener() { - - @Override - public void syntaxError(final Recognizer recognizer, final Object offendingSymbol, final int line, final int charPositionInLine, final String msg, final RecognitionException ex) { - throw new RuntimeException(); - } - }); - sqlParser.execute(); - } - @Test public void assertSupportedSQL() { String sql = sqlCasesLoader.getSupportedSQL(sqlCaseId, sqlCaseType, parserResultSetLoader.get(sqlCaseId).getParameters()); - new ShardingSQLStatementAssert(new ShardingSQLParseEntry(DatabaseTypes.getTrunkDatabaseType(databaseType), getShardingRule(), getShardingTableMetaData(), new ParsingResultCache()) - .parse(sql, false), sqlCaseId, sqlCaseType).assertSQLStatement(); + SQLStatement sqlStatement = new ShardingSQLParseEntry( + DatabaseTypes.getTrunkDatabaseType(databaseType), getShardingRule(), getShardingTableMetaData(), new ParsingResultCache()).parse(sql, false); + new ShardingSQLStatementAssert(sqlStatement, sqlCaseId, sqlCaseType).assertSQLStatement(); } } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedUnsupportedParsingTest.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedUnsupportedParsingTest.java index e7e1a7aab95cf..934a32632352a 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedUnsupportedParsingTest.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedUnsupportedParsingTest.java @@ -49,7 +49,7 @@ public static Collection getTestParameters() { @Test(expected = SQLParsingException.class) public void assertUnsupportedSQL() { - new ShardingSQLParseEntry(DatabaseTypes.getTrunkDatabaseType(databaseType), getShardingRule(), getShardingTableMetaData(), new ParsingResultCache()) - .parse(sqlCasesLoader.getUnsupportedSQL(sqlCaseId, sqlCaseType, Collections.emptyList()), false); + String sql = sqlCasesLoader.getUnsupportedSQL(sqlCaseId, sqlCaseType, Collections.emptyList()); + new ShardingSQLParseEntry(DatabaseTypes.getTrunkDatabaseType(databaseType), getShardingRule(), getShardingTableMetaData(), new ParsingResultCache()).parse(sql, false); } } From 5dd0b61e3a1df65110dff5bc6fa86f99e1b93f22 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Sat, 15 Jun 2019 00:54:06 +0800 Subject: [PATCH 240/283] for #2556, add ParsingTestCaseFixtureBuilder --- .../ParsingTestCaseFixtureBuilder.java} | 62 +++++++++++-------- .../EncryptParameterizedParsingTest.java | 37 +++++------ ...dingParameterizedParsingExceptionTest.java | 15 ++++- .../ShardingParameterizedParsingTest.java | 15 ++++- ...ngParameterizedUnsupportedParsingTest.java | 15 ++++- 5 files changed, 87 insertions(+), 57 deletions(-) rename sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/{integrate/engine/AbstractBaseParameterizedParsingTest.java => fixture/ParsingTestCaseFixtureBuilder.java} (64%) diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/AbstractBaseParameterizedParsingTest.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/fixture/ParsingTestCaseFixtureBuilder.java similarity index 64% rename from sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/AbstractBaseParameterizedParsingTest.java rename to sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/fixture/ParsingTestCaseFixtureBuilder.java index f59d3c1d1b299..8eaffd0833629 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/AbstractBaseParameterizedParsingTest.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/fixture/ParsingTestCaseFixtureBuilder.java @@ -15,56 +15,68 @@ * limitations under the License. */ -package org.apache.shardingsphere.core.parse.integrate.engine; +package org.apache.shardingsphere.core.parse.fixture; import com.google.common.base.Preconditions; import lombok.AccessLevel; -import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.SneakyThrows; import org.apache.shardingsphere.core.metadata.table.ColumnMetaData; import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; import org.apache.shardingsphere.core.metadata.table.TableMetaData; +import org.apache.shardingsphere.core.rule.EncryptRule; import org.apache.shardingsphere.core.rule.ShardingRule; +import org.apache.shardingsphere.core.yaml.config.encrypt.YamlEncryptRuleConfiguration; import org.apache.shardingsphere.core.yaml.config.sharding.YamlRootShardingConfiguration; import org.apache.shardingsphere.core.yaml.engine.YamlEngine; +import org.apache.shardingsphere.core.yaml.swapper.impl.EncryptRuleConfigurationYamlSwapper; import org.apache.shardingsphere.core.yaml.swapper.impl.ShardingRuleConfigurationYamlSwapper; -import org.junit.BeforeClass; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; import java.io.File; -import java.io.IOException; import java.net.URL; import java.util.Arrays; import java.util.HashMap; import java.util.Map; -@RunWith(Parameterized.class) -public abstract class AbstractBaseParameterizedParsingTest { +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public final class ParsingTestCaseFixtureBuilder { - @Getter(AccessLevel.PROTECTED) - private static ShardingRule shardingRule; - - @Getter(AccessLevel.PROTECTED) - private static ShardingTableMetaData shardingTableMetaData; - - @BeforeClass - public static void setUp() throws IOException { - shardingRule = buildShardingRule(); - shardingTableMetaData = buildShardingTableMetaData(); - } - - private static ShardingRule buildShardingRule() throws IOException { - URL url = AbstractBaseParameterizedParsingTest.class.getClassLoader().getResource("yaml/sharding-rule.yaml"); + /** + * Build sharding rule. + * + * @return sharding rule + */ + @SneakyThrows + public static ShardingRule buildShardingRule() { + URL url = ParsingTestCaseFixtureBuilder.class.getClassLoader().getResource("yaml/sharding-rule.yaml"); Preconditions.checkNotNull(url, "Cannot find parse rule yaml configuration."); YamlRootShardingConfiguration yamlShardingConfig = YamlEngine.unmarshal(new File(url.getFile()), YamlRootShardingConfiguration.class); return new ShardingRule(new ShardingRuleConfigurationYamlSwapper().swap(yamlShardingConfig.getShardingRule()), yamlShardingConfig.getDataSources().keySet()); } - private static ShardingTableMetaData buildShardingTableMetaData() { + /** + * Build encrypt rule. + * + * @return encrypt rule + */ + @SneakyThrows + public static EncryptRule buildEncryptRule() { + URL url = ParsingTestCaseFixtureBuilder.class.getClassLoader().getResource("yaml/encrypt-rule.yaml"); + Preconditions.checkNotNull(url, "Cannot find parse rule yaml configuration."); + YamlEncryptRuleConfiguration encryptConfig = YamlEngine.unmarshal(new File(url.getFile()), YamlEncryptRuleConfiguration.class); + return new EncryptRule(new EncryptRuleConfigurationYamlSwapper().swap(encryptConfig)); + } + + /** + * Build sharding table meta data. + * + * @return sharding table meta data + */ + public static ShardingTableMetaData buildShardingTableMetaData() { Map tableMetaDataMap = new HashMap<>(3, 1); - tableMetaDataMap.put("t_order", + tableMetaDataMap.put("t_order", new TableMetaData(Arrays.asList(new ColumnMetaData("order_id", "int", true), new ColumnMetaData("user_id", "int", false), new ColumnMetaData("status", "int", false)))); - tableMetaDataMap.put("t_order_item", new TableMetaData(Arrays.asList(new ColumnMetaData("item_id", "int", true), new ColumnMetaData("order_id", "int", false), + tableMetaDataMap.put("t_order_item", new TableMetaData(Arrays.asList(new ColumnMetaData("item_id", "int", true), new ColumnMetaData("order_id", "int", false), new ColumnMetaData("user_id", "int", false), new ColumnMetaData("status", "varchar", false), new ColumnMetaData("c_date", "timestamp", false)))); tableMetaDataMap.put("t_encrypt", new TableMetaData(Arrays.asList(new ColumnMetaData("id", "int", true), new ColumnMetaData("name", "varchar", false), new ColumnMetaData("mobile", "varchar", false), new ColumnMetaData("status", "int", false)))); diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/encrypt/EncryptParameterizedParsingTest.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/encrypt/EncryptParameterizedParsingTest.java index 8396be0eae0a6..e8772fa943212 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/encrypt/EncryptParameterizedParsingTest.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/encrypt/EncryptParameterizedParsingTest.java @@ -17,37 +17,38 @@ package org.apache.shardingsphere.core.parse.integrate.engine.encrypt; -import com.google.common.base.Preconditions; import lombok.RequiredArgsConstructor; import org.apache.shardingsphere.core.database.DatabaseTypes; +import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; import org.apache.shardingsphere.core.parse.entry.EncryptSQLParseEntry; +import org.apache.shardingsphere.core.parse.fixture.ParsingTestCaseFixtureBuilder; import org.apache.shardingsphere.core.parse.integrate.asserts.EncryptSQLStatementAssert; -import org.apache.shardingsphere.core.parse.integrate.engine.AbstractBaseParameterizedParsingTest; import org.apache.shardingsphere.core.parse.integrate.jaxb.EncryptParserResultSetRegistry; import org.apache.shardingsphere.core.parse.integrate.jaxb.ParserResultSetRegistry; import org.apache.shardingsphere.core.parse.integrate.jaxb.root.ParserResult; import org.apache.shardingsphere.core.rule.EncryptRule; -import org.apache.shardingsphere.core.yaml.config.encrypt.YamlEncryptRuleConfiguration; -import org.apache.shardingsphere.core.yaml.engine.YamlEngine; -import org.apache.shardingsphere.core.yaml.swapper.impl.EncryptRuleConfigurationYamlSwapper; import org.apache.shardingsphere.test.sql.EncryptSQLCasesLoader; import org.apache.shardingsphere.test.sql.SQLCaseType; import org.apache.shardingsphere.test.sql.SQLCasesLoader; import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; -import java.io.File; -import java.io.IOException; -import java.net.URL; import java.util.Collection; +@RunWith(Parameterized.class) @RequiredArgsConstructor -public final class EncryptParameterizedParsingTest extends AbstractBaseParameterizedParsingTest { +public final class EncryptParameterizedParsingTest { private static SQLCasesLoader sqlCasesLoader = EncryptSQLCasesLoader.getInstance(); private static ParserResultSetRegistry parserResultSetRegistry = EncryptParserResultSetRegistry.getInstance().getRegistry(); + private static EncryptRule encryptRule = ParsingTestCaseFixtureBuilder.buildEncryptRule(); + + private static ShardingTableMetaData shardingTableMetaData = ParsingTestCaseFixtureBuilder.buildShardingTableMetaData(); + private final String sqlCaseId; private final String databaseType; @@ -59,21 +60,11 @@ public static Collection getTestParameters() { return sqlCasesLoader.getSupportedSQLTestParameters(); } - private static EncryptRule buildShardingRule() throws IOException { - URL url = AbstractBaseParameterizedParsingTest.class.getClassLoader().getResource("yaml/encrypt-rule.yaml"); - Preconditions.checkNotNull(url, "Cannot found parser rule yaml configuration."); - YamlEncryptRuleConfiguration encryptConfig = YamlEngine.unmarshal(new File(url.getFile()), YamlEncryptRuleConfiguration.class); - return new EncryptRule(new EncryptRuleConfigurationYamlSwapper().swap(encryptConfig)); - } - @Test - public void assertSupportedSQL() throws Exception { + public void assertSupportedSQL() { ParserResult parserResult = parserResultSetRegistry.get(sqlCaseId); - if (null != parserResult) { - String sql = sqlCasesLoader.getSupportedSQL(sqlCaseId, sqlCaseType, parserResult.getParameters()); - EncryptSQLParseEntry encryptSQLParseEntry = new EncryptSQLParseEntry( - DatabaseTypes.getActualDatabaseType(databaseType), buildShardingRule(), AbstractBaseParameterizedParsingTest.getShardingTableMetaData()); - new EncryptSQLStatementAssert(encryptSQLParseEntry.parse(sql, false), sqlCaseId, sqlCaseType, sqlCasesLoader, parserResultSetRegistry).assertSQLStatement(); - } + String sql = sqlCasesLoader.getSupportedSQL(sqlCaseId, sqlCaseType, parserResult.getParameters()); + EncryptSQLParseEntry encryptSQLParseEntry = new EncryptSQLParseEntry(DatabaseTypes.getActualDatabaseType(databaseType), encryptRule, shardingTableMetaData); + new EncryptSQLStatementAssert(encryptSQLParseEntry.parse(sql, false), sqlCaseId, sqlCaseType, sqlCasesLoader, parserResultSetRegistry).assertSQLStatement(); } } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedParsingExceptionTest.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedParsingExceptionTest.java index af643a2ff81b0..37370df96f03a 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedParsingExceptionTest.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedParsingExceptionTest.java @@ -19,23 +19,32 @@ import lombok.RequiredArgsConstructor; import org.apache.shardingsphere.core.database.DatabaseTypes; +import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; import org.apache.shardingsphere.core.parse.cache.ParsingResultCache; import org.apache.shardingsphere.core.parse.entry.ShardingSQLParseEntry; import org.apache.shardingsphere.core.parse.exception.SQLParsingException; -import org.apache.shardingsphere.core.parse.integrate.engine.AbstractBaseParameterizedParsingTest; +import org.apache.shardingsphere.core.parse.fixture.ParsingTestCaseFixtureBuilder; +import org.apache.shardingsphere.core.rule.ShardingRule; import org.apache.shardingsphere.test.sql.SQLCaseType; import org.apache.shardingsphere.test.sql.SQLCasesLoader; import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; import java.util.Collection; import java.util.Collections; +@RunWith(Parameterized.class) @RequiredArgsConstructor -public final class ShardingParameterizedParsingExceptionTest extends AbstractBaseParameterizedParsingTest { +public final class ShardingParameterizedParsingExceptionTest { private static SQLCasesLoader sqlCasesLoader = SQLCasesLoader.getInstance(); + private static ShardingRule shardingRule = ParsingTestCaseFixtureBuilder.buildShardingRule(); + + private static ShardingTableMetaData shardingTableMetaData = ParsingTestCaseFixtureBuilder.buildShardingTableMetaData(); + private final String sqlCaseId; private final String databaseType; @@ -50,6 +59,6 @@ public static Collection getTestParameters() { @Test(expected = SQLParsingException.class) public void assertSQLParsingExceptionSQL() { String sql = sqlCasesLoader.getSQLParsingErrorSQL(sqlCaseId, sqlCaseType, Collections.emptyList()); - new ShardingSQLParseEntry(DatabaseTypes.getTrunkDatabaseType(databaseType), getShardingRule(), getShardingTableMetaData(), new ParsingResultCache()).parse(sql, false); + new ShardingSQLParseEntry(DatabaseTypes.getTrunkDatabaseType(databaseType), shardingRule, shardingTableMetaData, new ParsingResultCache()).parse(sql, false); } } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedParsingTest.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedParsingTest.java index 5c7b9bb58aa3d..fac81834b6cc0 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedParsingTest.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedParsingTest.java @@ -19,16 +19,20 @@ import lombok.RequiredArgsConstructor; import org.apache.shardingsphere.core.database.DatabaseTypes; +import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; import org.apache.shardingsphere.core.parse.cache.ParsingResultCache; import org.apache.shardingsphere.core.parse.entry.ShardingSQLParseEntry; +import org.apache.shardingsphere.core.parse.fixture.ParsingTestCaseFixtureBuilder; import org.apache.shardingsphere.core.parse.integrate.asserts.ShardingSQLStatementAssert; -import org.apache.shardingsphere.core.parse.integrate.engine.AbstractBaseParameterizedParsingTest; import org.apache.shardingsphere.core.parse.integrate.jaxb.ParserResultSetRegistry; import org.apache.shardingsphere.core.parse.integrate.jaxb.ShardingParserResultSetRegistry; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; +import org.apache.shardingsphere.core.rule.ShardingRule; import org.apache.shardingsphere.test.sql.SQLCaseType; import org.apache.shardingsphere.test.sql.SQLCasesLoader; import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; import java.util.Collection; @@ -36,13 +40,18 @@ import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; +@RunWith(Parameterized.class) @RequiredArgsConstructor -public final class ShardingParameterizedParsingTest extends AbstractBaseParameterizedParsingTest { +public final class ShardingParameterizedParsingTest { private static SQLCasesLoader sqlCasesLoader = SQLCasesLoader.getInstance(); private static ParserResultSetRegistry parserResultSetLoader = ShardingParserResultSetRegistry.getInstance().getRegistry(); + private static ShardingRule shardingRule = ParsingTestCaseFixtureBuilder.buildShardingRule(); + + private static ShardingTableMetaData shardingTableMetaData = ParsingTestCaseFixtureBuilder.buildShardingTableMetaData(); + private final String sqlCaseId; private final String databaseType; @@ -59,7 +68,7 @@ public static Collection getTestParameters() { public void assertSupportedSQL() { String sql = sqlCasesLoader.getSupportedSQL(sqlCaseId, sqlCaseType, parserResultSetLoader.get(sqlCaseId).getParameters()); SQLStatement sqlStatement = new ShardingSQLParseEntry( - DatabaseTypes.getTrunkDatabaseType(databaseType), getShardingRule(), getShardingTableMetaData(), new ParsingResultCache()).parse(sql, false); + DatabaseTypes.getTrunkDatabaseType(databaseType), shardingRule, shardingTableMetaData, new ParsingResultCache()).parse(sql, false); new ShardingSQLStatementAssert(sqlStatement, sqlCaseId, sqlCaseType).assertSQLStatement(); } } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedUnsupportedParsingTest.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedUnsupportedParsingTest.java index 934a32632352a..180ff38ee3c8e 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedUnsupportedParsingTest.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedUnsupportedParsingTest.java @@ -19,23 +19,32 @@ import lombok.RequiredArgsConstructor; import org.apache.shardingsphere.core.database.DatabaseTypes; +import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; import org.apache.shardingsphere.core.parse.cache.ParsingResultCache; import org.apache.shardingsphere.core.parse.entry.ShardingSQLParseEntry; import org.apache.shardingsphere.core.parse.exception.SQLParsingException; -import org.apache.shardingsphere.core.parse.integrate.engine.AbstractBaseParameterizedParsingTest; +import org.apache.shardingsphere.core.parse.fixture.ParsingTestCaseFixtureBuilder; +import org.apache.shardingsphere.core.rule.ShardingRule; import org.apache.shardingsphere.test.sql.SQLCaseType; import org.apache.shardingsphere.test.sql.SQLCasesLoader; import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; import java.util.Collection; import java.util.Collections; +@RunWith(Parameterized.class) @RequiredArgsConstructor -public final class ShardingParameterizedUnsupportedParsingTest extends AbstractBaseParameterizedParsingTest { +public final class ShardingParameterizedUnsupportedParsingTest { private static SQLCasesLoader sqlCasesLoader = SQLCasesLoader.getInstance(); + private static ShardingRule shardingRule = ParsingTestCaseFixtureBuilder.buildShardingRule(); + + private static ShardingTableMetaData shardingTableMetaData = ParsingTestCaseFixtureBuilder.buildShardingTableMetaData(); + private final String sqlCaseId; private final String databaseType; @@ -50,6 +59,6 @@ public static Collection getTestParameters() { @Test(expected = SQLParsingException.class) public void assertUnsupportedSQL() { String sql = sqlCasesLoader.getUnsupportedSQL(sqlCaseId, sqlCaseType, Collections.emptyList()); - new ShardingSQLParseEntry(DatabaseTypes.getTrunkDatabaseType(databaseType), getShardingRule(), getShardingTableMetaData(), new ParsingResultCache()).parse(sql, false); + new ShardingSQLParseEntry(DatabaseTypes.getTrunkDatabaseType(databaseType), shardingRule, shardingTableMetaData, new ParsingResultCache()).parse(sql, false); } } From 495482f5434f0562315a94d8d324a39b85c951b6 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Sat, 15 Jun 2019 00:57:07 +0800 Subject: [PATCH 241/283] for #2556, pull up ParsingResultCache --- .../sharding/ShardingParameterizedParsingExceptionTest.java | 4 +++- .../engine/sharding/ShardingParameterizedParsingTest.java | 4 +++- .../sharding/ShardingParameterizedUnsupportedParsingTest.java | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedParsingExceptionTest.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedParsingExceptionTest.java index 37370df96f03a..71d2690354b24 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedParsingExceptionTest.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedParsingExceptionTest.java @@ -45,6 +45,8 @@ public final class ShardingParameterizedParsingExceptionTest { private static ShardingTableMetaData shardingTableMetaData = ParsingTestCaseFixtureBuilder.buildShardingTableMetaData(); + private static ParsingResultCache parsingResultCache = new ParsingResultCache(); + private final String sqlCaseId; private final String databaseType; @@ -59,6 +61,6 @@ public static Collection getTestParameters() { @Test(expected = SQLParsingException.class) public void assertSQLParsingExceptionSQL() { String sql = sqlCasesLoader.getSQLParsingErrorSQL(sqlCaseId, sqlCaseType, Collections.emptyList()); - new ShardingSQLParseEntry(DatabaseTypes.getTrunkDatabaseType(databaseType), shardingRule, shardingTableMetaData, new ParsingResultCache()).parse(sql, false); + new ShardingSQLParseEntry(DatabaseTypes.getTrunkDatabaseType(databaseType), shardingRule, shardingTableMetaData, parsingResultCache).parse(sql, false); } } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedParsingTest.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedParsingTest.java index fac81834b6cc0..3c22eaa807f71 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedParsingTest.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedParsingTest.java @@ -50,6 +50,8 @@ public final class ShardingParameterizedParsingTest { private static ShardingRule shardingRule = ParsingTestCaseFixtureBuilder.buildShardingRule(); + private static ParsingResultCache parsingResultCache = new ParsingResultCache(); + private static ShardingTableMetaData shardingTableMetaData = ParsingTestCaseFixtureBuilder.buildShardingTableMetaData(); private final String sqlCaseId; @@ -68,7 +70,7 @@ public static Collection getTestParameters() { public void assertSupportedSQL() { String sql = sqlCasesLoader.getSupportedSQL(sqlCaseId, sqlCaseType, parserResultSetLoader.get(sqlCaseId).getParameters()); SQLStatement sqlStatement = new ShardingSQLParseEntry( - DatabaseTypes.getTrunkDatabaseType(databaseType), shardingRule, shardingTableMetaData, new ParsingResultCache()).parse(sql, false); + DatabaseTypes.getTrunkDatabaseType(databaseType), shardingRule, shardingTableMetaData, parsingResultCache).parse(sql, false); new ShardingSQLStatementAssert(sqlStatement, sqlCaseId, sqlCaseType).assertSQLStatement(); } } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedUnsupportedParsingTest.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedUnsupportedParsingTest.java index 180ff38ee3c8e..fdf1ef1bc93ff 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedUnsupportedParsingTest.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedUnsupportedParsingTest.java @@ -45,6 +45,8 @@ public final class ShardingParameterizedUnsupportedParsingTest { private static ShardingTableMetaData shardingTableMetaData = ParsingTestCaseFixtureBuilder.buildShardingTableMetaData(); + private static ParsingResultCache parsingResultCache = new ParsingResultCache(); + private final String sqlCaseId; private final String databaseType; @@ -59,6 +61,6 @@ public static Collection getTestParameters() { @Test(expected = SQLParsingException.class) public void assertUnsupportedSQL() { String sql = sqlCasesLoader.getUnsupportedSQL(sqlCaseId, sqlCaseType, Collections.emptyList()); - new ShardingSQLParseEntry(DatabaseTypes.getTrunkDatabaseType(databaseType), shardingRule, shardingTableMetaData, new ParsingResultCache()).parse(sql, false); + new ShardingSQLParseEntry(DatabaseTypes.getTrunkDatabaseType(databaseType), shardingRule, shardingTableMetaData, parsingResultCache).parse(sql, false); } } From 022b4ace5374224fb3832c59ca342f529b7f26ff Mon Sep 17 00:00:00 2001 From: terrymanu Date: Sat, 15 Jun 2019 01:04:45 +0800 Subject: [PATCH 242/283] for #2556, refactor EncryptSQLStatementAssert & ShardingSQLStatementAssert --- .../integrate/asserts/EncryptSQLStatementAssert.java | 11 ++++++----- .../integrate/asserts/ShardingSQLStatementAssert.java | 9 ++------- .../encrypt/EncryptParameterizedParsingTest.java | 9 ++++----- .../sharding/ShardingParameterizedParsingTest.java | 9 ++++----- 4 files changed, 16 insertions(+), 22 deletions(-) diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/EncryptSQLStatementAssert.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/EncryptSQLStatementAssert.java index 6b15efb08ff6b..f994adf046339 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/EncryptSQLStatementAssert.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/EncryptSQLStatementAssert.java @@ -20,13 +20,13 @@ import org.apache.shardingsphere.core.parse.integrate.asserts.condition.ConditionAssert; import org.apache.shardingsphere.core.parse.integrate.asserts.insert.InsertNamesAndValuesAssert; import org.apache.shardingsphere.core.parse.integrate.asserts.table.TableAssert; -import org.apache.shardingsphere.core.parse.integrate.jaxb.ParserResultSetRegistry; +import org.apache.shardingsphere.core.parse.integrate.jaxb.EncryptParserResultSetRegistry; import org.apache.shardingsphere.core.parse.integrate.jaxb.root.ParserResult; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.DMLStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.InsertStatement; +import org.apache.shardingsphere.test.sql.EncryptSQLCasesLoader; import org.apache.shardingsphere.test.sql.SQLCaseType; -import org.apache.shardingsphere.test.sql.SQLCasesLoader; /** * SQL statement assert for encrypt. @@ -45,10 +45,11 @@ public final class EncryptSQLStatementAssert { private final InsertNamesAndValuesAssert insertNamesAndValuesAssert; - public EncryptSQLStatementAssert(final SQLStatement actual, final String sqlCaseId, final SQLCaseType sqlCaseType, final SQLCasesLoader sqlLoader, final ParserResultSetRegistry registry) { - SQLStatementAssertMessage assertMessage = new SQLStatementAssertMessage(sqlLoader, registry, sqlCaseId, sqlCaseType); + public EncryptSQLStatementAssert(final SQLStatement actual, final String sqlCaseId, final SQLCaseType sqlCaseType) { + SQLStatementAssertMessage assertMessage = new SQLStatementAssertMessage( + EncryptSQLCasesLoader.getInstance(), EncryptParserResultSetRegistry.getInstance().getRegistry(), sqlCaseId, sqlCaseType); this.actual = actual; - expected = registry.get(sqlCaseId); + expected = EncryptParserResultSetRegistry.getInstance().getRegistry().get(sqlCaseId); tableAssert = new TableAssert(assertMessage); conditionAssert = new ConditionAssert(assertMessage); insertNamesAndValuesAssert = new InsertNamesAndValuesAssert(assertMessage, sqlCaseType); diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/ShardingSQLStatementAssert.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/ShardingSQLStatementAssert.java index cb2a78a6101b4..c5123139df405 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/ShardingSQLStatementAssert.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/ShardingSQLStatementAssert.java @@ -26,7 +26,6 @@ import org.apache.shardingsphere.core.parse.integrate.asserts.pagination.PaginationAssert; import org.apache.shardingsphere.core.parse.integrate.asserts.table.AlterTableAssert; import org.apache.shardingsphere.core.parse.integrate.asserts.table.TableAssert; -import org.apache.shardingsphere.core.parse.integrate.jaxb.ParserResultSetRegistry; import org.apache.shardingsphere.core.parse.integrate.jaxb.ShardingParserResultSetRegistry; import org.apache.shardingsphere.core.parse.integrate.jaxb.root.ParserResult; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; @@ -71,13 +70,9 @@ public final class ShardingSQLStatementAssert { private final AlterTableAssert alterTableAssert; public ShardingSQLStatementAssert(final SQLStatement actual, final String sqlCaseId, final SQLCaseType sqlCaseType) { - this(actual, sqlCaseId, sqlCaseType, SQLCasesLoader.getInstance(), ShardingParserResultSetRegistry.getInstance().getRegistry()); - } - - public ShardingSQLStatementAssert(final SQLStatement actual, final String sqlCaseId, final SQLCaseType sqlCaseType, final SQLCasesLoader sqlLoader, final ParserResultSetRegistry registry) { - SQLStatementAssertMessage assertMessage = new SQLStatementAssertMessage(sqlLoader, registry, sqlCaseId, sqlCaseType); + SQLStatementAssertMessage assertMessage = new SQLStatementAssertMessage(SQLCasesLoader.getInstance(), ShardingParserResultSetRegistry.getInstance().getRegistry(), sqlCaseId, sqlCaseType); this.actual = actual; - expected = registry.get(sqlCaseId); + expected = ShardingParserResultSetRegistry.getInstance().getRegistry().get(sqlCaseId); tableAssert = new TableAssert(assertMessage); conditionAssert = new ConditionAssert(assertMessage); indexAssert = new IndexAssert(sqlCaseType, assertMessage); diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/encrypt/EncryptParameterizedParsingTest.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/encrypt/EncryptParameterizedParsingTest.java index e8772fa943212..16373e1f7f915 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/encrypt/EncryptParameterizedParsingTest.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/encrypt/EncryptParameterizedParsingTest.java @@ -25,7 +25,7 @@ import org.apache.shardingsphere.core.parse.integrate.asserts.EncryptSQLStatementAssert; import org.apache.shardingsphere.core.parse.integrate.jaxb.EncryptParserResultSetRegistry; import org.apache.shardingsphere.core.parse.integrate.jaxb.ParserResultSetRegistry; -import org.apache.shardingsphere.core.parse.integrate.jaxb.root.ParserResult; +import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.rule.EncryptRule; import org.apache.shardingsphere.test.sql.EncryptSQLCasesLoader; import org.apache.shardingsphere.test.sql.SQLCaseType; @@ -62,9 +62,8 @@ public static Collection getTestParameters() { @Test public void assertSupportedSQL() { - ParserResult parserResult = parserResultSetRegistry.get(sqlCaseId); - String sql = sqlCasesLoader.getSupportedSQL(sqlCaseId, sqlCaseType, parserResult.getParameters()); - EncryptSQLParseEntry encryptSQLParseEntry = new EncryptSQLParseEntry(DatabaseTypes.getActualDatabaseType(databaseType), encryptRule, shardingTableMetaData); - new EncryptSQLStatementAssert(encryptSQLParseEntry.parse(sql, false), sqlCaseId, sqlCaseType, sqlCasesLoader, parserResultSetRegistry).assertSQLStatement(); + String sql = sqlCasesLoader.getSupportedSQL(sqlCaseId, sqlCaseType, parserResultSetRegistry.get(sqlCaseId).getParameters()); + SQLStatement sqlStatement = new EncryptSQLParseEntry(DatabaseTypes.getActualDatabaseType(databaseType), encryptRule, shardingTableMetaData).parse(sql, false); + new EncryptSQLStatementAssert(sqlStatement, sqlCaseId, sqlCaseType).assertSQLStatement(); } } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedParsingTest.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedParsingTest.java index 3c22eaa807f71..8c7168c9226cf 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedParsingTest.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedParsingTest.java @@ -46,7 +46,7 @@ public final class ShardingParameterizedParsingTest { private static SQLCasesLoader sqlCasesLoader = SQLCasesLoader.getInstance(); - private static ParserResultSetRegistry parserResultSetLoader = ShardingParserResultSetRegistry.getInstance().getRegistry(); + private static ParserResultSetRegistry parserResultSetRegistry = ShardingParserResultSetRegistry.getInstance().getRegistry(); private static ShardingRule shardingRule = ParsingTestCaseFixtureBuilder.buildShardingRule(); @@ -62,15 +62,14 @@ public final class ShardingParameterizedParsingTest { @Parameters(name = "{0} ({2}) -> {1}") public static Collection getTestParameters() { - assertThat(sqlCasesLoader.countAllSupportedSQLCases(), is(parserResultSetLoader.countAllTestCases())); + assertThat(sqlCasesLoader.countAllSupportedSQLCases(), is(parserResultSetRegistry.countAllTestCases())); return sqlCasesLoader.getSupportedSQLTestParameters(); } @Test public void assertSupportedSQL() { - String sql = sqlCasesLoader.getSupportedSQL(sqlCaseId, sqlCaseType, parserResultSetLoader.get(sqlCaseId).getParameters()); - SQLStatement sqlStatement = new ShardingSQLParseEntry( - DatabaseTypes.getTrunkDatabaseType(databaseType), shardingRule, shardingTableMetaData, parsingResultCache).parse(sql, false); + String sql = sqlCasesLoader.getSupportedSQL(sqlCaseId, sqlCaseType, parserResultSetRegistry.get(sqlCaseId).getParameters()); + SQLStatement sqlStatement = new ShardingSQLParseEntry(DatabaseTypes.getTrunkDatabaseType(databaseType), shardingRule, shardingTableMetaData, parsingResultCache).parse(sql, false); new ShardingSQLStatementAssert(sqlStatement, sqlCaseId, sqlCaseType).assertSQLStatement(); } } From ec029c34a3f85e5def3a822624f0ffa2b3e7b8c5 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Sat, 15 Jun 2019 01:48:30 +0800 Subject: [PATCH 243/283] for #2556, refactor SQLCasesLoader --- .../asserts/EncryptSQLStatementAssert.java | 4 +- .../asserts/SQLStatementAssertMessage.java | 6 +- .../asserts/ShardingSQLStatementAssert.java | 5 +- .../EncryptParameterizedParsingTest.java | 10 +- ...dingParameterizedParsingExceptionTest.java | 9 +- .../ShardingParameterizedParsingTest.java | 11 +- ...ngParameterizedUnsupportedParsingTest.java | 9 +- .../shardingsphere/dbtest/engine/BatchIT.java | 4 +- .../dbtest/engine/SingleIT.java | 9 +- .../engine/util/IntegrateTestParameters.java | 13 +-- .../test/sql/{ => loader}/SQLCasesLoader.java | 102 ++++-------------- .../encrypt/EncryptSQLCasesRegistry.java | 47 ++++++++ .../ShardingParseErrorSQLCasesRegistry.java | 47 ++++++++ .../sharding/ShardingSQLCasesRegistry.java} | 24 +++-- .../ShardingUnsupportedSQLCasesRegistry.java | 47 ++++++++ .../test/sql/SQLCasesLoaderTest.java | 48 +++------ 16 files changed, 230 insertions(+), 165 deletions(-) rename sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/{ => loader}/SQLCasesLoader.java (69%) create mode 100644 sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/loader/encrypt/EncryptSQLCasesRegistry.java create mode 100644 sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/loader/sharding/ShardingParseErrorSQLCasesRegistry.java rename sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/{EncryptSQLCasesLoader.java => loader/sharding/ShardingSQLCasesRegistry.java} (62%) create mode 100644 sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/loader/sharding/ShardingUnsupportedSQLCasesRegistry.java diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/EncryptSQLStatementAssert.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/EncryptSQLStatementAssert.java index f994adf046339..8157fdf6c4aac 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/EncryptSQLStatementAssert.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/EncryptSQLStatementAssert.java @@ -25,8 +25,8 @@ import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.DMLStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.InsertStatement; -import org.apache.shardingsphere.test.sql.EncryptSQLCasesLoader; import org.apache.shardingsphere.test.sql.SQLCaseType; +import org.apache.shardingsphere.test.sql.loader.encrypt.EncryptSQLCasesRegistry; /** * SQL statement assert for encrypt. @@ -47,7 +47,7 @@ public final class EncryptSQLStatementAssert { public EncryptSQLStatementAssert(final SQLStatement actual, final String sqlCaseId, final SQLCaseType sqlCaseType) { SQLStatementAssertMessage assertMessage = new SQLStatementAssertMessage( - EncryptSQLCasesLoader.getInstance(), EncryptParserResultSetRegistry.getInstance().getRegistry(), sqlCaseId, sqlCaseType); + EncryptSQLCasesRegistry.getInstance().getSqlCasesLoader(), EncryptParserResultSetRegistry.getInstance().getRegistry(), sqlCaseId, sqlCaseType); this.actual = actual; expected = EncryptParserResultSetRegistry.getInstance().getRegistry().get(sqlCaseId); tableAssert = new TableAssert(assertMessage); diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/SQLStatementAssertMessage.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/SQLStatementAssertMessage.java index 8ea45f19e86d3..f8f1d2a2316b9 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/SQLStatementAssertMessage.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/SQLStatementAssertMessage.java @@ -20,7 +20,7 @@ import lombok.RequiredArgsConstructor; import org.apache.shardingsphere.core.parse.integrate.jaxb.ParserResultSetRegistry; import org.apache.shardingsphere.test.sql.SQLCaseType; -import org.apache.shardingsphere.test.sql.SQLCasesLoader; +import org.apache.shardingsphere.test.sql.loader.SQLCasesLoader; import java.util.Collections; @@ -53,13 +53,13 @@ public String getFullAssertMessage(final String assertMessage) { result.append(System.getProperty("line.separator")); result.append("SQL : "); if (SQLCaseType.Placeholder == sqlCaseType) { - result.append(sqlCasesLoader.getSupportedSQL(sqlCaseId, sqlCaseType, Collections.emptyList())); + result.append(sqlCasesLoader.getSQL(sqlCaseId, sqlCaseType, Collections.emptyList())); result.append(System.getProperty("line.separator")); result.append("SQL Params : "); result.append(parserResultSetRegistry.get(sqlCaseId).getParameters()); result.append(System.getProperty("line.separator")); } else { - result.append(sqlCasesLoader.getSupportedSQL(sqlCaseId, sqlCaseType, parserResultSetRegistry.get(sqlCaseId).getParameters())); + result.append(sqlCasesLoader.getSQL(sqlCaseId, sqlCaseType, parserResultSetRegistry.get(sqlCaseId).getParameters())); } result.append(System.getProperty("line.separator")); result.append(assertMessage); diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/ShardingSQLStatementAssert.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/ShardingSQLStatementAssert.java index c5123139df405..a5616ef1152ad 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/ShardingSQLStatementAssert.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/ShardingSQLStatementAssert.java @@ -35,7 +35,7 @@ import org.apache.shardingsphere.core.parse.sql.statement.dml.SelectStatement; import org.apache.shardingsphere.core.parse.sql.statement.tcl.TCLStatement; import org.apache.shardingsphere.test.sql.SQLCaseType; -import org.apache.shardingsphere.test.sql.SQLCasesLoader; +import org.apache.shardingsphere.test.sql.loader.sharding.ShardingSQLCasesRegistry; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; @@ -70,7 +70,8 @@ public final class ShardingSQLStatementAssert { private final AlterTableAssert alterTableAssert; public ShardingSQLStatementAssert(final SQLStatement actual, final String sqlCaseId, final SQLCaseType sqlCaseType) { - SQLStatementAssertMessage assertMessage = new SQLStatementAssertMessage(SQLCasesLoader.getInstance(), ShardingParserResultSetRegistry.getInstance().getRegistry(), sqlCaseId, sqlCaseType); + SQLStatementAssertMessage assertMessage = new SQLStatementAssertMessage( + ShardingSQLCasesRegistry.getInstance().getSqlCasesLoader(), ShardingParserResultSetRegistry.getInstance().getRegistry(), sqlCaseId, sqlCaseType); this.actual = actual; expected = ShardingParserResultSetRegistry.getInstance().getRegistry().get(sqlCaseId); tableAssert = new TableAssert(assertMessage); diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/encrypt/EncryptParameterizedParsingTest.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/encrypt/EncryptParameterizedParsingTest.java index 16373e1f7f915..c2b3b6819fbef 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/encrypt/EncryptParameterizedParsingTest.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/encrypt/EncryptParameterizedParsingTest.java @@ -27,9 +27,9 @@ import org.apache.shardingsphere.core.parse.integrate.jaxb.ParserResultSetRegistry; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.rule.EncryptRule; -import org.apache.shardingsphere.test.sql.EncryptSQLCasesLoader; import org.apache.shardingsphere.test.sql.SQLCaseType; -import org.apache.shardingsphere.test.sql.SQLCasesLoader; +import org.apache.shardingsphere.test.sql.loader.SQLCasesLoader; +import org.apache.shardingsphere.test.sql.loader.encrypt.EncryptSQLCasesRegistry; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; @@ -41,7 +41,7 @@ @RequiredArgsConstructor public final class EncryptParameterizedParsingTest { - private static SQLCasesLoader sqlCasesLoader = EncryptSQLCasesLoader.getInstance(); + private static SQLCasesLoader sqlCasesLoader = EncryptSQLCasesRegistry.getInstance().getSqlCasesLoader(); private static ParserResultSetRegistry parserResultSetRegistry = EncryptParserResultSetRegistry.getInstance().getRegistry(); @@ -57,12 +57,12 @@ public final class EncryptParameterizedParsingTest { @Parameters(name = "{0} ({2}) -> {1}") public static Collection getTestParameters() { - return sqlCasesLoader.getSupportedSQLTestParameters(); + return sqlCasesLoader.getSQLTestParameters(); } @Test public void assertSupportedSQL() { - String sql = sqlCasesLoader.getSupportedSQL(sqlCaseId, sqlCaseType, parserResultSetRegistry.get(sqlCaseId).getParameters()); + String sql = sqlCasesLoader.getSQL(sqlCaseId, sqlCaseType, parserResultSetRegistry.get(sqlCaseId).getParameters()); SQLStatement sqlStatement = new EncryptSQLParseEntry(DatabaseTypes.getActualDatabaseType(databaseType), encryptRule, shardingTableMetaData).parse(sql, false); new EncryptSQLStatementAssert(sqlStatement, sqlCaseId, sqlCaseType).assertSQLStatement(); } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedParsingExceptionTest.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedParsingExceptionTest.java index 71d2690354b24..2789ecddd5c2b 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedParsingExceptionTest.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedParsingExceptionTest.java @@ -26,7 +26,8 @@ import org.apache.shardingsphere.core.parse.fixture.ParsingTestCaseFixtureBuilder; import org.apache.shardingsphere.core.rule.ShardingRule; import org.apache.shardingsphere.test.sql.SQLCaseType; -import org.apache.shardingsphere.test.sql.SQLCasesLoader; +import org.apache.shardingsphere.test.sql.loader.SQLCasesLoader; +import org.apache.shardingsphere.test.sql.loader.sharding.ShardingParseErrorSQLCasesRegistry; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; @@ -39,7 +40,7 @@ @RequiredArgsConstructor public final class ShardingParameterizedParsingExceptionTest { - private static SQLCasesLoader sqlCasesLoader = SQLCasesLoader.getInstance(); + private static SQLCasesLoader sqlCasesLoader = ShardingParseErrorSQLCasesRegistry.getInstance().getSqlCasesLoader(); private static ShardingRule shardingRule = ParsingTestCaseFixtureBuilder.buildShardingRule(); @@ -55,12 +56,12 @@ public final class ShardingParameterizedParsingExceptionTest { @Parameters(name = "{0} ({2}) -> {1}") public static Collection getTestParameters() { - return sqlCasesLoader.getSQLParsingErrorTestParameters(); + return sqlCasesLoader.getSQLTestParameters(); } @Test(expected = SQLParsingException.class) public void assertSQLParsingExceptionSQL() { - String sql = sqlCasesLoader.getSQLParsingErrorSQL(sqlCaseId, sqlCaseType, Collections.emptyList()); + String sql = sqlCasesLoader.getSQL(sqlCaseId, sqlCaseType, Collections.emptyList()); new ShardingSQLParseEntry(DatabaseTypes.getTrunkDatabaseType(databaseType), shardingRule, shardingTableMetaData, parsingResultCache).parse(sql, false); } } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedParsingTest.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedParsingTest.java index 8c7168c9226cf..8feb283f8a86c 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedParsingTest.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedParsingTest.java @@ -29,7 +29,8 @@ import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.rule.ShardingRule; import org.apache.shardingsphere.test.sql.SQLCaseType; -import org.apache.shardingsphere.test.sql.SQLCasesLoader; +import org.apache.shardingsphere.test.sql.loader.SQLCasesLoader; +import org.apache.shardingsphere.test.sql.loader.sharding.ShardingSQLCasesRegistry; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; @@ -44,7 +45,7 @@ @RequiredArgsConstructor public final class ShardingParameterizedParsingTest { - private static SQLCasesLoader sqlCasesLoader = SQLCasesLoader.getInstance(); + private static SQLCasesLoader sqlCasesLoader = ShardingSQLCasesRegistry.getInstance().getSqlCasesLoader(); private static ParserResultSetRegistry parserResultSetRegistry = ShardingParserResultSetRegistry.getInstance().getRegistry(); @@ -62,13 +63,13 @@ public final class ShardingParameterizedParsingTest { @Parameters(name = "{0} ({2}) -> {1}") public static Collection getTestParameters() { - assertThat(sqlCasesLoader.countAllSupportedSQLCases(), is(parserResultSetRegistry.countAllTestCases())); - return sqlCasesLoader.getSupportedSQLTestParameters(); + assertThat(sqlCasesLoader.countAllSQLCases(), is(parserResultSetRegistry.countAllTestCases())); + return sqlCasesLoader.getSQLTestParameters(); } @Test public void assertSupportedSQL() { - String sql = sqlCasesLoader.getSupportedSQL(sqlCaseId, sqlCaseType, parserResultSetRegistry.get(sqlCaseId).getParameters()); + String sql = sqlCasesLoader.getSQL(sqlCaseId, sqlCaseType, parserResultSetRegistry.get(sqlCaseId).getParameters()); SQLStatement sqlStatement = new ShardingSQLParseEntry(DatabaseTypes.getTrunkDatabaseType(databaseType), shardingRule, shardingTableMetaData, parsingResultCache).parse(sql, false); new ShardingSQLStatementAssert(sqlStatement, sqlCaseId, sqlCaseType).assertSQLStatement(); } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedUnsupportedParsingTest.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedUnsupportedParsingTest.java index fdf1ef1bc93ff..50c24b17a6e86 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedUnsupportedParsingTest.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/engine/sharding/ShardingParameterizedUnsupportedParsingTest.java @@ -26,7 +26,8 @@ import org.apache.shardingsphere.core.parse.fixture.ParsingTestCaseFixtureBuilder; import org.apache.shardingsphere.core.rule.ShardingRule; import org.apache.shardingsphere.test.sql.SQLCaseType; -import org.apache.shardingsphere.test.sql.SQLCasesLoader; +import org.apache.shardingsphere.test.sql.loader.SQLCasesLoader; +import org.apache.shardingsphere.test.sql.loader.sharding.ShardingUnsupportedSQLCasesRegistry; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; @@ -39,7 +40,7 @@ @RequiredArgsConstructor public final class ShardingParameterizedUnsupportedParsingTest { - private static SQLCasesLoader sqlCasesLoader = SQLCasesLoader.getInstance(); + private static SQLCasesLoader sqlCasesLoader = ShardingUnsupportedSQLCasesRegistry.getInstance().getSqlCasesLoader(); private static ShardingRule shardingRule = ParsingTestCaseFixtureBuilder.buildShardingRule(); @@ -55,12 +56,12 @@ public final class ShardingParameterizedUnsupportedParsingTest { @Parameters(name = "{0} ({2}) -> {1}") public static Collection getTestParameters() { - return sqlCasesLoader.getUnsupportedSQLTestParameters(); + return sqlCasesLoader.getSQLTestParameters(); } @Test(expected = SQLParsingException.class) public void assertUnsupportedSQL() { - String sql = sqlCasesLoader.getUnsupportedSQL(sqlCaseId, sqlCaseType, Collections.emptyList()); + String sql = sqlCasesLoader.getSQL(sqlCaseId, sqlCaseType, Collections.emptyList()); new ShardingSQLParseEntry(DatabaseTypes.getTrunkDatabaseType(databaseType), shardingRule, shardingTableMetaData, parsingResultCache).parse(sql, false); } } diff --git a/sharding-integration-test/sharding-jdbc-test/src/test/java/org/apache/shardingsphere/dbtest/engine/BatchIT.java b/sharding-integration-test/sharding-jdbc-test/src/test/java/org/apache/shardingsphere/dbtest/engine/BatchIT.java index 085440542e6f3..ee89a8636409f 100644 --- a/sharding-integration-test/sharding-jdbc-test/src/test/java/org/apache/shardingsphere/dbtest/engine/BatchIT.java +++ b/sharding-integration-test/sharding-jdbc-test/src/test/java/org/apache/shardingsphere/dbtest/engine/BatchIT.java @@ -32,7 +32,7 @@ import org.apache.shardingsphere.dbtest.env.EnvironmentPath; import org.apache.shardingsphere.dbtest.env.dataset.DataSetEnvironmentManager; import org.apache.shardingsphere.test.sql.SQLCaseType; -import org.apache.shardingsphere.test.sql.SQLCasesLoader; +import org.apache.shardingsphere.test.sql.loader.sharding.ShardingSQLCasesRegistry; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; @@ -77,7 +77,7 @@ public BatchIT(final String sqlCaseId, final IntegrateTestCase integrateTestCase final String shardingRuleType, final DatabaseTypeEnvironment databaseTypeEnvironment) throws IOException, JAXBException, SQLException { super(shardingRuleType, databaseTypeEnvironment); this.integrateTestCase = integrateTestCase; - sql = SQLCasesLoader.getInstance().getSupportedSQL(sqlCaseId, SQLCaseType.Placeholder, Collections.emptyList()); + sql = ShardingSQLCasesRegistry.getInstance().getSqlCasesLoader().getSQL(sqlCaseId, SQLCaseType.Placeholder, Collections.emptyList()); expectedDataFiles = new LinkedList<>(); for (IntegrateTestCaseAssertion each : integrateTestCase.getIntegrateTestCaseAssertions()) { expectedDataFiles.add(getExpectedDataFile(integrateTestCase.getPath(), shardingRuleType, databaseTypeEnvironment.getDatabaseType(), each.getExpectedDataFile())); diff --git a/sharding-integration-test/sharding-jdbc-test/src/test/java/org/apache/shardingsphere/dbtest/engine/SingleIT.java b/sharding-integration-test/sharding-jdbc-test/src/test/java/org/apache/shardingsphere/dbtest/engine/SingleIT.java index d7b15b4b0ac07..2d09746aa40c5 100644 --- a/sharding-integration-test/sharding-jdbc-test/src/test/java/org/apache/shardingsphere/dbtest/engine/SingleIT.java +++ b/sharding-integration-test/sharding-jdbc-test/src/test/java/org/apache/shardingsphere/dbtest/engine/SingleIT.java @@ -25,7 +25,7 @@ import org.apache.shardingsphere.dbtest.env.DatabaseTypeEnvironment; import org.apache.shardingsphere.dbtest.env.IntegrateTestEnvironment; import org.apache.shardingsphere.test.sql.SQLCaseType; -import org.apache.shardingsphere.test.sql.SQLCasesLoader; +import org.apache.shardingsphere.test.sql.loader.sharding.ShardingSQLCasesRegistry; import javax.xml.bind.JAXBException; import java.io.IOException; @@ -49,9 +49,8 @@ public abstract class SingleIT extends BaseIT { private final String expectedDataFile; - public SingleIT(final String sqlCaseId, final String path, final IntegrateTestCaseAssertion assertion, final String shardingRuleType, - final DatabaseTypeEnvironment databaseTypeEnvironment, final SQLCaseType caseType) - throws IOException, JAXBException, SQLException, ParseException { + public SingleIT(final String sqlCaseId, final String path, final IntegrateTestCaseAssertion assertion, + final String shardingRuleType, final DatabaseTypeEnvironment databaseTypeEnvironment, final SQLCaseType caseType) throws IOException, JAXBException, SQLException, ParseException { super(shardingRuleType, databaseTypeEnvironment); this.assertion = assertion; this.caseType = caseType; @@ -64,6 +63,6 @@ private String getSQL(final String sqlCaseId) throws ParseException { for (SQLValue each : assertion.getSQLValues()) { parameters.add(each.toString()); } - return SQLCasesLoader.getInstance().getSupportedSQL(sqlCaseId, caseType, parameters); + return ShardingSQLCasesRegistry.getInstance().getSqlCasesLoader().getSQL(sqlCaseId, caseType, parameters); } } diff --git a/sharding-integration-test/sharding-jdbc-test/src/test/java/org/apache/shardingsphere/dbtest/engine/util/IntegrateTestParameters.java b/sharding-integration-test/sharding-jdbc-test/src/test/java/org/apache/shardingsphere/dbtest/engine/util/IntegrateTestParameters.java index 42ed4880fb84b..0413a91d3900b 100644 --- a/sharding-integration-test/sharding-jdbc-test/src/test/java/org/apache/shardingsphere/dbtest/engine/util/IntegrateTestParameters.java +++ b/sharding-integration-test/sharding-jdbc-test/src/test/java/org/apache/shardingsphere/dbtest/engine/util/IntegrateTestParameters.java @@ -30,7 +30,8 @@ import org.apache.shardingsphere.dbtest.env.IntegrateTestEnvironment; import org.apache.shardingsphere.spi.database.DatabaseType; import org.apache.shardingsphere.test.sql.SQLCaseType; -import org.apache.shardingsphere.test.sql.SQLCasesLoader; +import org.apache.shardingsphere.test.sql.loader.SQLCasesLoader; +import org.apache.shardingsphere.test.sql.loader.sharding.ShardingSQLCasesRegistry; import java.util.Collection; import java.util.Collections; @@ -45,7 +46,7 @@ @NoArgsConstructor(access = AccessLevel.PRIVATE) public final class IntegrateTestParameters { - private static SQLCasesLoader sqlCasesLoader = SQLCasesLoader.getInstance(); + private static SQLCasesLoader sqlCasesLoader = ShardingSQLCasesRegistry.getInstance().getSqlCasesLoader(); private static IntegrateTestCasesLoader integrateTestCasesLoader = IntegrateTestCasesLoader.getInstance(); @@ -61,12 +62,12 @@ public static Collection getParametersWithAssertion(final SQLType sqlT // TODO sqlCasesLoader size should eq integrateTestCasesLoader size // assertThat(sqlCasesLoader.countAllSupportedSQLCases(), is(integrateTestCasesLoader.countAllDataSetTestCases())); Collection result = new LinkedList<>(); - for (Object[] each : sqlCasesLoader.getSupportedSQLTestParameters()) { + for (Object[] each : sqlCasesLoader.getSQLTestParameters()) { String sqlCaseId = each[0].toString(); String databaseType = each[1].toString(); SQLCaseType caseType = (SQLCaseType) each[2]; Class sqlStatementClass = new SQLParseEngine(MasterSlaveParseRuleRegistry.getInstance(), - DatabaseTypes.getTrunkDatabaseType(databaseType), sqlCasesLoader.getSupportedSQL(sqlCaseId, SQLCaseType.Placeholder, Collections.emptyList()), null, null).parse().getClass(); + DatabaseTypes.getTrunkDatabaseType(databaseType), sqlCasesLoader.getSQL(sqlCaseId, SQLCaseType.Placeholder, Collections.emptyList()), null, null).parse().getClass(); if (!sqlType.getSqlStatementClass().isAssignableFrom(sqlStatementClass)) { continue; } @@ -114,12 +115,12 @@ public static Collection getParametersWithCase(final SQLType sqlType) // TODO sqlCasesLoader size should eq integrateTestCasesLoader size // assertThat(sqlCasesLoader.countAllSupportedSQLCases(), is(integrateTestCasesLoader.countAllDataSetTestCases())); Collection result = new LinkedList<>(); - for (Object[] each : sqlCasesLoader.getSupportedSQLTestParameters()) { + for (Object[] each : sqlCasesLoader.getSQLTestParameters()) { String sqlCaseId = each[0].toString(); String databaseType = each[1].toString(); SQLCaseType caseType = (SQLCaseType) each[2]; Class sqlStatementClass = new SQLParseEngine(MasterSlaveParseRuleRegistry.getInstance(), - DatabaseTypes.getTrunkDatabaseType(databaseType), sqlCasesLoader.getSupportedSQL(sqlCaseId, SQLCaseType.Placeholder, Collections.emptyList()), null, null).parse().getClass(); + DatabaseTypes.getTrunkDatabaseType(databaseType), sqlCasesLoader.getSQL(sqlCaseId, SQLCaseType.Placeholder, Collections.emptyList()), null, null).parse().getClass(); if (!sqlType.getSqlStatementClass().isAssignableFrom(sqlStatementClass)) { continue; } diff --git a/sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/SQLCasesLoader.java b/sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/loader/SQLCasesLoader.java similarity index 69% rename from sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/SQLCasesLoader.java rename to sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/loader/SQLCasesLoader.java index bb85262ba7d0c..ae0b0cfbd7099 100644 --- a/sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/SQLCasesLoader.java +++ b/sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/loader/SQLCasesLoader.java @@ -15,11 +15,14 @@ * limitations under the License. */ -package org.apache.shardingsphere.test.sql; +package org.apache.shardingsphere.test.sql.loader; import com.google.common.base.Preconditions; import com.google.common.base.Strings; import lombok.SneakyThrows; +import org.apache.shardingsphere.test.sql.SQLCase; +import org.apache.shardingsphere.test.sql.SQLCaseType; +import org.apache.shardingsphere.test.sql.SQLCases; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; @@ -43,33 +46,16 @@ * * @author zhangliang */ -public class SQLCasesLoader { +public final class SQLCasesLoader { - private static final SQLCasesLoader INSTANCE = new SQLCasesLoader(); + private final Map sqlCases; - protected Map supportedSQLCaseMap; - - protected Map unsupportedSQLCaseMap; - - private final Map parseErrorSQLCaseMap; - - protected SQLCasesLoader() { - supportedSQLCaseMap = loadSQLCases("sql"); - unsupportedSQLCaseMap = loadSQLCases("unsupported_sql"); - parseErrorSQLCaseMap = loadSQLCases("parse_error_sql"); - } - - /** - * Get singleton instance. - * - * @return singleton instance - */ - public static SQLCasesLoader getInstance() { - return INSTANCE; + public SQLCasesLoader(final String rootDirection) { + sqlCases = loadSQLCases(rootDirection); } @SneakyThrows - protected static Map loadSQLCases(final String path) { + private static Map loadSQLCases(final String path) { File file = new File(SQLCasesLoader.class.getProtectionDomain().getCodeSource().getLocation().getPath()); return file.isFile() ? loadSQLCasesFromJar(path, file) : loadSQLCasesFromTargetDirectory(path); } @@ -137,47 +123,19 @@ private static void fillSQLMap(final Map sqlCaseMap, final Inpu } /** - * Get supported SQL. - * - * @param sqlCaseId SQL case ID - * @param sqlCaseType SQL case type - * @param parameters SQL parameters - * @return SQL - */ - public String getSupportedSQL(final String sqlCaseId, final SQLCaseType sqlCaseType, final List parameters) { - return getSQL(supportedSQLCaseMap, sqlCaseId, sqlCaseType, parameters); - } - - /** - * Get unsupported SQL. - * - * @param sqlCaseId SQL case ID - * @param sqlCaseType SQL case type - * @param parameters SQL parameters - * @return SQL - */ - public String getUnsupportedSQL(final String sqlCaseId, final SQLCaseType sqlCaseType, final List parameters) { - return getSQL(unsupportedSQLCaseMap, sqlCaseId, sqlCaseType, parameters); - } - - /** - * Get SQLParsingException error's SQL. + * Get SQL. * * @param sqlCaseId SQL case ID * @param sqlCaseType SQL case type * @param parameters SQL parameters * @return SQL */ - public String getSQLParsingErrorSQL(final String sqlCaseId, final SQLCaseType sqlCaseType, final List parameters) { - return getSQL(parseErrorSQLCaseMap, sqlCaseId, sqlCaseType, parameters); - } - - private String getSQL(final Map sqlCaseMap, final String sqlCaseId, final SQLCaseType sqlCaseType, final List parameters) { + public String getSQL(final String sqlCaseId, final SQLCaseType sqlCaseType, final List parameters) { switch (sqlCaseType) { case Literal: - return getLiteralSQL(getSQLFromMap(sqlCaseId, sqlCaseMap), parameters); + return getLiteralSQL(getSQLFromMap(sqlCaseId, sqlCases), parameters); case Placeholder: - return getPlaceholderSQL(getSQLFromMap(sqlCaseId, sqlCaseMap)); + return getPlaceholderSQL(getSQLFromMap(sqlCaseId, sqlCases)); default: throw new UnsupportedOperationException(sqlCaseType.name()); } @@ -201,35 +159,13 @@ private String getLiteralSQL(final String sql, final List parameters) { } /** - * Get test parameters for junit parameterized test case for supported SQL. + * Get test parameters for junit parameterized test cases. * - * @return test parameters for junit parameterized test case for supported SQL + * @return test parameters for junit parameterized test cases */ - public Collection getSupportedSQLTestParameters() { - return getTestParameters(supportedSQLCaseMap); - } - - /** - * Get test parameters for junit parameterized test case for unsupported SQL. - * - * @return test parameters for junit parameterized test case for unsupported SQL - */ - public Collection getUnsupportedSQLTestParameters() { - return getTestParameters(unsupportedSQLCaseMap); - } - - /** - * Get test parameters for junit parameterized test case for sql parsing error SQL. - * - * @return test parameters for junit parameterized test case for parsing error SQL - */ - public Collection getSQLParsingErrorTestParameters() { - return getTestParameters(parseErrorSQLCaseMap); - } - - private Collection getTestParameters(final Map sqlCaseMap) { + public Collection getSQLTestParameters() { Collection result = new LinkedList<>(); - for (SQLCase each : sqlCaseMap.values()) { + for (SQLCase each : sqlCases.values()) { result.addAll(getTestParameters(each)); } return result; @@ -275,7 +211,7 @@ private static Collection getALlDatabaseTypes() { * * @return count of all supported SQL cases */ - public int countAllSupportedSQLCases() { - return supportedSQLCaseMap.size(); + public int countAllSQLCases() { + return sqlCases.size(); } } diff --git a/sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/loader/encrypt/EncryptSQLCasesRegistry.java b/sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/loader/encrypt/EncryptSQLCasesRegistry.java new file mode 100644 index 0000000000000..ff6d25f641a50 --- /dev/null +++ b/sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/loader/encrypt/EncryptSQLCasesRegistry.java @@ -0,0 +1,47 @@ +/* + * 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.test.sql.loader.encrypt; + +import lombok.Getter; +import org.apache.shardingsphere.test.sql.loader.SQLCasesLoader; + +/** + * SQL cases registry for encrypt. + * + * @author zhangliang + */ +public final class EncryptSQLCasesRegistry { + + private static final EncryptSQLCasesRegistry INSTANCE = new EncryptSQLCasesRegistry(); + + @Getter + private SQLCasesLoader sqlCasesLoader; + + private EncryptSQLCasesRegistry() { + sqlCasesLoader = new SQLCasesLoader("encrypt_sql"); + } + + /** + * Get singleton instance. + * + * @return singleton instance + */ + public static EncryptSQLCasesRegistry getInstance() { + return INSTANCE; + } +} diff --git a/sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/loader/sharding/ShardingParseErrorSQLCasesRegistry.java b/sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/loader/sharding/ShardingParseErrorSQLCasesRegistry.java new file mode 100644 index 0000000000000..237ae16a01404 --- /dev/null +++ b/sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/loader/sharding/ShardingParseErrorSQLCasesRegistry.java @@ -0,0 +1,47 @@ +/* + * 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.test.sql.loader.sharding; + +import lombok.Getter; +import org.apache.shardingsphere.test.sql.loader.SQLCasesLoader; + +/** + * SQL cases registry for sharding parse error. + * + * @author zhangliang + */ +public final class ShardingParseErrorSQLCasesRegistry { + + private static final ShardingParseErrorSQLCasesRegistry INSTANCE = new ShardingParseErrorSQLCasesRegistry(); + + @Getter + private SQLCasesLoader sqlCasesLoader; + + private ShardingParseErrorSQLCasesRegistry() { + sqlCasesLoader = new SQLCasesLoader("parse_error_sql"); + } + + /** + * Get singleton instance. + * + * @return singleton instance + */ + public static ShardingParseErrorSQLCasesRegistry getInstance() { + return INSTANCE; + } +} diff --git a/sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/EncryptSQLCasesLoader.java b/sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/loader/sharding/ShardingSQLCasesRegistry.java similarity index 62% rename from sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/EncryptSQLCasesLoader.java rename to sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/loader/sharding/ShardingSQLCasesRegistry.java index 377ea6953d7ba..26f52b301dc6f 100644 --- a/sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/EncryptSQLCasesLoader.java +++ b/sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/loader/sharding/ShardingSQLCasesRegistry.java @@ -15,19 +15,25 @@ * limitations under the License. */ -package org.apache.shardingsphere.test.sql; +package org.apache.shardingsphere.test.sql.loader.sharding; + +import lombok.Getter; +import org.apache.shardingsphere.test.sql.loader.SQLCasesLoader; /** - * Encrypt SQL cases loader. - * - * @author duhongjun + * SQL cases registry for sharding. + * + * @author zhangliang */ -public class EncryptSQLCasesLoader extends SQLCasesLoader { +public final class ShardingSQLCasesRegistry { + + private static final ShardingSQLCasesRegistry INSTANCE = new ShardingSQLCasesRegistry(); - private static final EncryptSQLCasesLoader INSTANCE = new EncryptSQLCasesLoader(); + @Getter + private SQLCasesLoader sqlCasesLoader; - protected EncryptSQLCasesLoader() { - supportedSQLCaseMap = loadSQLCases("encrypt_sql"); + private ShardingSQLCasesRegistry() { + sqlCasesLoader = new SQLCasesLoader("sql"); } /** @@ -35,7 +41,7 @@ protected EncryptSQLCasesLoader() { * * @return singleton instance */ - public static EncryptSQLCasesLoader getInstance() { + public static ShardingSQLCasesRegistry getInstance() { return INSTANCE; } } diff --git a/sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/loader/sharding/ShardingUnsupportedSQLCasesRegistry.java b/sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/loader/sharding/ShardingUnsupportedSQLCasesRegistry.java new file mode 100644 index 0000000000000..1d74769f8a76f --- /dev/null +++ b/sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/loader/sharding/ShardingUnsupportedSQLCasesRegistry.java @@ -0,0 +1,47 @@ +/* + * 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.test.sql.loader.sharding; + +import lombok.Getter; +import org.apache.shardingsphere.test.sql.loader.SQLCasesLoader; + +/** + * SQL cases registry for sharding unsupported. + * + * @author zhangliang + */ +public final class ShardingUnsupportedSQLCasesRegistry { + + private static final ShardingUnsupportedSQLCasesRegistry INSTANCE = new ShardingUnsupportedSQLCasesRegistry(); + + @Getter + private SQLCasesLoader sqlCasesLoader; + + private ShardingUnsupportedSQLCasesRegistry() { + sqlCasesLoader = new SQLCasesLoader("unsupported_sql"); + } + + /** + * Get singleton instance. + * + * @return singleton instance + */ + public static ShardingUnsupportedSQLCasesRegistry getInstance() { + return INSTANCE; + } +} diff --git a/sharding-sql-test/src/test/java/org/apache/shardingsphere/test/sql/SQLCasesLoaderTest.java b/sharding-sql-test/src/test/java/org/apache/shardingsphere/test/sql/SQLCasesLoaderTest.java index bd2a72eea868f..145a6a2c986b7 100644 --- a/sharding-sql-test/src/test/java/org/apache/shardingsphere/test/sql/SQLCasesLoaderTest.java +++ b/sharding-sql-test/src/test/java/org/apache/shardingsphere/test/sql/SQLCasesLoaderTest.java @@ -17,6 +17,7 @@ package org.apache.shardingsphere.test.sql; +import org.apache.shardingsphere.test.sql.loader.sharding.ShardingSQLCasesRegistry; import org.junit.Test; import java.util.Arrays; @@ -32,40 +33,30 @@ public final class SQLCasesLoaderTest { @Test - public void assertGetSupportedSQLForLiteralWithoutParameter() { - assertThat(SQLCasesLoader.getInstance().getSupportedSQL("select_constant_without_table", SQLCaseType.Literal, Collections.emptyList()), is("SELECT 1 as a")); + public void assertGetSQLForLiteralWithoutParameter() { + assertThat(ShardingSQLCasesRegistry.getInstance().getSqlCasesLoader().getSQL("select_constant_without_table", SQLCaseType.Literal, Collections.emptyList()), is("SELECT 1 as a")); } @Test - public void assertGetSupportedSQLForLiteralWithParameters() { - assertThat(SQLCasesLoader.getInstance().getSupportedSQL("select_with_same_table_name_and_alias", SQLCaseType.Literal, Arrays.asList(10, 1000)), + public void assertGetSQLForLiteralWithParameters() { + assertThat(ShardingSQLCasesRegistry.getInstance().getSqlCasesLoader().getSQL("select_with_same_table_name_and_alias", SQLCaseType.Literal, Arrays.asList(10, 1000)), is("SELECT t_order.* FROM t_order t_order WHERE user_id = 10 AND order_id = 1000")); } @Test - public void assertGetSupportedSQLForPlaceholder() { - assertThat(SQLCasesLoader.getInstance().getSupportedSQL("select_with_same_table_name_and_alias", SQLCaseType.Placeholder, Arrays.asList(10, 1000)), + public void assertGetSQLForPlaceholder() { + assertThat(ShardingSQLCasesRegistry.getInstance().getSqlCasesLoader().getSQL("select_with_same_table_name_and_alias", SQLCaseType.Placeholder, Arrays.asList(10, 1000)), is("SELECT t_order.* FROM t_order t_order WHERE user_id = ? AND order_id = ?")); } @Test(expected = IllegalStateException.class) - public void assertGetSupportedSQLWithoutSQLCaseId() { - SQLCasesLoader.getInstance().getSupportedSQL("no_sql_case_id", SQLCaseType.Literal, Collections.emptyList()); - } - -// @Test -// public void assertGetUnsupportedSQLForLiteral() { -// assertThat(SQLCasesLoader.getInstance().getUnsupportedSQL("assertSelectIntoSQL", SQLCaseType.Literal, Collections.emptyList()), is("SELECT * INTO t_order_new FROM t_order")); -// } - - @Test(expected = IllegalStateException.class) - public void assertGetUnsupportedSQLWithoutSQLCaseId() { - SQLCasesLoader.getInstance().getUnsupportedSQL("no_sql_case_id", SQLCaseType.Literal, Collections.emptyList()); + public void assertGetSQLWithoutSQLCaseId() { + ShardingSQLCasesRegistry.getInstance().getSqlCasesLoader().getSQL("no_sql_case_id", SQLCaseType.Literal, Collections.emptyList()); } @Test - public void assertGetSupportedSQLTestParameters() { - Collection actual = SQLCasesLoader.getInstance().getSupportedSQLTestParameters(); + public void assertGetTestParameters() { + Collection actual = ShardingSQLCasesRegistry.getInstance().getSqlCasesLoader().getSQLTestParameters(); assertFalse(actual.isEmpty()); Object[] actualRow = actual.iterator().next(); assertThat(actualRow.length, is(3)); @@ -75,20 +66,7 @@ public void assertGetSupportedSQLTestParameters() { } @Test - public void assertGetUnsupportedSQLTestParameters() { - Collection actual = SQLCasesLoader.getInstance().getUnsupportedSQLTestParameters(); - if (actual.isEmpty()) { - return; - } - Object[] actualRow = actual.iterator().next(); - assertThat(actualRow.length, is(3)); - assertThat(actualRow[0], instanceOf(String.class)); - assertThat(actualRow[1], instanceOf(String.class)); - assertThat(actualRow[2], instanceOf(SQLCaseType.class)); - } - - @Test - public void assertCountAllSupportedSQLCases() { - assertTrue(SQLCasesLoader.getInstance().countAllSupportedSQLCases() > 1); + public void assertCountAllSQLCases() { + assertTrue(ShardingSQLCasesRegistry.getInstance().getSqlCasesLoader().countAllSQLCases() > 0); } } From f986da8c297664a7da69a675e991cddcf580c7eb Mon Sep 17 00:00:00 2001 From: terrymanu Date: Sat, 15 Jun 2019 02:16:18 +0800 Subject: [PATCH 244/283] for #2556, move sql test case xml file's location --- .../main/java/org/apache/shardingsphere/test/sql/SQLCases.java | 2 -- .../apache/shardingsphere/test/sql/loader/SQLCasesLoader.java | 3 --- .../test/sql/loader/encrypt/EncryptSQLCasesRegistry.java | 2 +- .../loader/sharding/ShardingParseErrorSQLCasesRegistry.java | 2 +- .../test/sql/loader/sharding/ShardingSQLCasesRegistry.java | 2 +- .../loader/sharding/ShardingUnsupportedSQLCasesRegistry.java | 2 +- .../src/main/resources/{encrypt_sql => sql/encrypt}/delete.xml | 0 .../src/main/resources/{encrypt_sql => sql/encrypt}/insert.xml | 0 .../src/main/resources/{encrypt_sql => sql/encrypt}/select.xml | 0 .../src/main/resources/{encrypt_sql => sql/encrypt}/update.xml | 0 .../{parse_error_sql => sql/parse_error}/parse_error.xml | 0 .../src/main/resources/sql/{ => sharding}/dal/reset.xml | 0 .../src/main/resources/sql/{ => sharding}/dal/set.xml | 0 .../src/main/resources/sql/{ => sharding}/dal/show.xml | 0 .../src/main/resources/sql/{ => sharding}/dcl/alter_login.xml | 0 .../src/main/resources/sql/{ => sharding}/dcl/alter_role.xml | 0 .../src/main/resources/sql/{ => sharding}/dcl/alter_user.xml | 0 .../src/main/resources/sql/{ => sharding}/dcl/create_login.xml | 0 .../src/main/resources/sql/{ => sharding}/dcl/create_role.xml | 0 .../src/main/resources/sql/{ => sharding}/dcl/create_user.xml | 0 .../src/main/resources/sql/{ => sharding}/dcl/deny_user.xml | 0 .../src/main/resources/sql/{ => sharding}/dcl/drop_login.xml | 0 .../src/main/resources/sql/{ => sharding}/dcl/drop_role.xml | 0 .../src/main/resources/sql/{ => sharding}/dcl/drop_user.xml | 0 .../src/main/resources/sql/{ => sharding}/dcl/grant_user.xml | 0 .../src/main/resources/sql/{ => sharding}/dcl/rename_user.xml | 0 .../src/main/resources/sql/{ => sharding}/dcl/revoke_user.xml | 0 .../main/resources/sql/{ => sharding}/dcl/set_default_role.xml | 0 .../src/main/resources/sql/{ => sharding}/dcl/set_password.xml | 0 .../src/main/resources/sql/{ => sharding}/dcl/set_role.xml | 0 .../src/main/resources/sql/{ => sharding}/ddl/alter.xml | 0 .../src/main/resources/sql/{ => sharding}/ddl/create.xml | 0 .../src/main/resources/sql/{ => sharding}/ddl/drop.xml | 0 .../src/main/resources/sql/{ => sharding}/ddl/truncate.xml | 0 .../src/main/resources/sql/{ => sharding}/dml/delete.xml | 0 .../src/main/resources/sql/{ => sharding}/dml/insert.xml | 0 .../src/main/resources/sql/{ => sharding}/dml/update.xml | 0 .../src/main/resources/sql/{ => sharding}/dql/select.xml | 0 .../main/resources/sql/{ => sharding}/dql/select_aggregate.xml | 0 .../resources/sql/{ => sharding}/dql/select_expression.xml | 0 .../main/resources/sql/{ => sharding}/dql/select_group_by.xml | 0 .../src/main/resources/sql/{ => sharding}/dql/select_or.xml | 0 .../main/resources/sql/{ => sharding}/dql/select_order_by.xml | 0 .../resources/sql/{ => sharding}/dql/select_pagination.xml | 0 .../{ => sharding}/dql/select_pagination_group_by_order_by.xml | 0 .../main/resources/sql/{ => sharding}/dql/select_relation.xml | 0 .../main/resources/sql/{ => sharding}/dql/select_sub_query.xml | 0 .../src/main/resources/sql/{ => sharding}/tcl/tcl.xml | 0 .../{unsupported_sql => sql/unsupported}/unsupported.xml | 0 49 files changed, 4 insertions(+), 9 deletions(-) rename sharding-sql-test/src/main/resources/{encrypt_sql => sql/encrypt}/delete.xml (100%) rename sharding-sql-test/src/main/resources/{encrypt_sql => sql/encrypt}/insert.xml (100%) rename sharding-sql-test/src/main/resources/{encrypt_sql => sql/encrypt}/select.xml (100%) rename sharding-sql-test/src/main/resources/{encrypt_sql => sql/encrypt}/update.xml (100%) rename sharding-sql-test/src/main/resources/{parse_error_sql => sql/parse_error}/parse_error.xml (100%) rename sharding-sql-test/src/main/resources/sql/{ => sharding}/dal/reset.xml (100%) rename sharding-sql-test/src/main/resources/sql/{ => sharding}/dal/set.xml (100%) rename sharding-sql-test/src/main/resources/sql/{ => sharding}/dal/show.xml (100%) rename sharding-sql-test/src/main/resources/sql/{ => sharding}/dcl/alter_login.xml (100%) rename sharding-sql-test/src/main/resources/sql/{ => sharding}/dcl/alter_role.xml (100%) rename sharding-sql-test/src/main/resources/sql/{ => sharding}/dcl/alter_user.xml (100%) rename sharding-sql-test/src/main/resources/sql/{ => sharding}/dcl/create_login.xml (100%) rename sharding-sql-test/src/main/resources/sql/{ => sharding}/dcl/create_role.xml (100%) rename sharding-sql-test/src/main/resources/sql/{ => sharding}/dcl/create_user.xml (100%) rename sharding-sql-test/src/main/resources/sql/{ => sharding}/dcl/deny_user.xml (100%) rename sharding-sql-test/src/main/resources/sql/{ => sharding}/dcl/drop_login.xml (100%) rename sharding-sql-test/src/main/resources/sql/{ => sharding}/dcl/drop_role.xml (100%) rename sharding-sql-test/src/main/resources/sql/{ => sharding}/dcl/drop_user.xml (100%) rename sharding-sql-test/src/main/resources/sql/{ => sharding}/dcl/grant_user.xml (100%) rename sharding-sql-test/src/main/resources/sql/{ => sharding}/dcl/rename_user.xml (100%) rename sharding-sql-test/src/main/resources/sql/{ => sharding}/dcl/revoke_user.xml (100%) rename sharding-sql-test/src/main/resources/sql/{ => sharding}/dcl/set_default_role.xml (100%) rename sharding-sql-test/src/main/resources/sql/{ => sharding}/dcl/set_password.xml (100%) rename sharding-sql-test/src/main/resources/sql/{ => sharding}/dcl/set_role.xml (100%) rename sharding-sql-test/src/main/resources/sql/{ => sharding}/ddl/alter.xml (100%) rename sharding-sql-test/src/main/resources/sql/{ => sharding}/ddl/create.xml (100%) rename sharding-sql-test/src/main/resources/sql/{ => sharding}/ddl/drop.xml (100%) rename sharding-sql-test/src/main/resources/sql/{ => sharding}/ddl/truncate.xml (100%) rename sharding-sql-test/src/main/resources/sql/{ => sharding}/dml/delete.xml (100%) rename sharding-sql-test/src/main/resources/sql/{ => sharding}/dml/insert.xml (100%) rename sharding-sql-test/src/main/resources/sql/{ => sharding}/dml/update.xml (100%) rename sharding-sql-test/src/main/resources/sql/{ => sharding}/dql/select.xml (100%) rename sharding-sql-test/src/main/resources/sql/{ => sharding}/dql/select_aggregate.xml (100%) rename sharding-sql-test/src/main/resources/sql/{ => sharding}/dql/select_expression.xml (100%) rename sharding-sql-test/src/main/resources/sql/{ => sharding}/dql/select_group_by.xml (100%) rename sharding-sql-test/src/main/resources/sql/{ => sharding}/dql/select_or.xml (100%) rename sharding-sql-test/src/main/resources/sql/{ => sharding}/dql/select_order_by.xml (100%) rename sharding-sql-test/src/main/resources/sql/{ => sharding}/dql/select_pagination.xml (100%) rename sharding-sql-test/src/main/resources/sql/{ => sharding}/dql/select_pagination_group_by_order_by.xml (100%) rename sharding-sql-test/src/main/resources/sql/{ => sharding}/dql/select_relation.xml (100%) rename sharding-sql-test/src/main/resources/sql/{ => sharding}/dql/select_sub_query.xml (100%) rename sharding-sql-test/src/main/resources/sql/{ => sharding}/tcl/tcl.xml (100%) rename sharding-sql-test/src/main/resources/{unsupported_sql => sql/unsupported}/unsupported.xml (100%) diff --git a/sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/SQLCases.java b/sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/SQLCases.java index 11652056b7c16..26bcf4a282d7a 100644 --- a/sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/SQLCases.java +++ b/sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/SQLCases.java @@ -33,8 +33,6 @@ @XmlRootElement(name = "sql-cases") @Getter public final class SQLCases { - @XmlAttribute - private String namespace; @XmlAttribute(name = "db-types") private String databaseTypes; diff --git a/sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/loader/SQLCasesLoader.java b/sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/loader/SQLCasesLoader.java index ae0b0cfbd7099..163d6d1d91925 100644 --- a/sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/loader/SQLCasesLoader.java +++ b/sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/loader/SQLCasesLoader.java @@ -115,9 +115,6 @@ private static void fillSQLMap(final Map sqlCaseMap, final Inpu if (null == each.getDatabaseTypes()) { each.setDatabaseTypes(sqlCases.getDatabaseTypes()); } - if (null != sqlCases.getNamespace()) { - each.setId(sqlCases.getNamespace() + "." + each.getId()); - } sqlCaseMap.put(each.getId(), each); } } diff --git a/sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/loader/encrypt/EncryptSQLCasesRegistry.java b/sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/loader/encrypt/EncryptSQLCasesRegistry.java index ff6d25f641a50..eee11a68c75cc 100644 --- a/sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/loader/encrypt/EncryptSQLCasesRegistry.java +++ b/sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/loader/encrypt/EncryptSQLCasesRegistry.java @@ -33,7 +33,7 @@ public final class EncryptSQLCasesRegistry { private SQLCasesLoader sqlCasesLoader; private EncryptSQLCasesRegistry() { - sqlCasesLoader = new SQLCasesLoader("encrypt_sql"); + sqlCasesLoader = new SQLCasesLoader("sql/encrypt"); } /** diff --git a/sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/loader/sharding/ShardingParseErrorSQLCasesRegistry.java b/sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/loader/sharding/ShardingParseErrorSQLCasesRegistry.java index 237ae16a01404..243e3868c9374 100644 --- a/sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/loader/sharding/ShardingParseErrorSQLCasesRegistry.java +++ b/sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/loader/sharding/ShardingParseErrorSQLCasesRegistry.java @@ -33,7 +33,7 @@ public final class ShardingParseErrorSQLCasesRegistry { private SQLCasesLoader sqlCasesLoader; private ShardingParseErrorSQLCasesRegistry() { - sqlCasesLoader = new SQLCasesLoader("parse_error_sql"); + sqlCasesLoader = new SQLCasesLoader("sql/parse_error"); } /** diff --git a/sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/loader/sharding/ShardingSQLCasesRegistry.java b/sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/loader/sharding/ShardingSQLCasesRegistry.java index 26f52b301dc6f..1fe4a364fda02 100644 --- a/sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/loader/sharding/ShardingSQLCasesRegistry.java +++ b/sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/loader/sharding/ShardingSQLCasesRegistry.java @@ -33,7 +33,7 @@ public final class ShardingSQLCasesRegistry { private SQLCasesLoader sqlCasesLoader; private ShardingSQLCasesRegistry() { - sqlCasesLoader = new SQLCasesLoader("sql"); + sqlCasesLoader = new SQLCasesLoader("sql/sharding"); } /** diff --git a/sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/loader/sharding/ShardingUnsupportedSQLCasesRegistry.java b/sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/loader/sharding/ShardingUnsupportedSQLCasesRegistry.java index 1d74769f8a76f..a7ab6969e1a96 100644 --- a/sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/loader/sharding/ShardingUnsupportedSQLCasesRegistry.java +++ b/sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/loader/sharding/ShardingUnsupportedSQLCasesRegistry.java @@ -33,7 +33,7 @@ public final class ShardingUnsupportedSQLCasesRegistry { private SQLCasesLoader sqlCasesLoader; private ShardingUnsupportedSQLCasesRegistry() { - sqlCasesLoader = new SQLCasesLoader("unsupported_sql"); + sqlCasesLoader = new SQLCasesLoader("sql/unsupported"); } /** diff --git a/sharding-sql-test/src/main/resources/encrypt_sql/delete.xml b/sharding-sql-test/src/main/resources/sql/encrypt/delete.xml similarity index 100% rename from sharding-sql-test/src/main/resources/encrypt_sql/delete.xml rename to sharding-sql-test/src/main/resources/sql/encrypt/delete.xml diff --git a/sharding-sql-test/src/main/resources/encrypt_sql/insert.xml b/sharding-sql-test/src/main/resources/sql/encrypt/insert.xml similarity index 100% rename from sharding-sql-test/src/main/resources/encrypt_sql/insert.xml rename to sharding-sql-test/src/main/resources/sql/encrypt/insert.xml diff --git a/sharding-sql-test/src/main/resources/encrypt_sql/select.xml b/sharding-sql-test/src/main/resources/sql/encrypt/select.xml similarity index 100% rename from sharding-sql-test/src/main/resources/encrypt_sql/select.xml rename to sharding-sql-test/src/main/resources/sql/encrypt/select.xml diff --git a/sharding-sql-test/src/main/resources/encrypt_sql/update.xml b/sharding-sql-test/src/main/resources/sql/encrypt/update.xml similarity index 100% rename from sharding-sql-test/src/main/resources/encrypt_sql/update.xml rename to sharding-sql-test/src/main/resources/sql/encrypt/update.xml diff --git a/sharding-sql-test/src/main/resources/parse_error_sql/parse_error.xml b/sharding-sql-test/src/main/resources/sql/parse_error/parse_error.xml similarity index 100% rename from sharding-sql-test/src/main/resources/parse_error_sql/parse_error.xml rename to sharding-sql-test/src/main/resources/sql/parse_error/parse_error.xml diff --git a/sharding-sql-test/src/main/resources/sql/dal/reset.xml b/sharding-sql-test/src/main/resources/sql/sharding/dal/reset.xml similarity index 100% rename from sharding-sql-test/src/main/resources/sql/dal/reset.xml rename to sharding-sql-test/src/main/resources/sql/sharding/dal/reset.xml diff --git a/sharding-sql-test/src/main/resources/sql/dal/set.xml b/sharding-sql-test/src/main/resources/sql/sharding/dal/set.xml similarity index 100% rename from sharding-sql-test/src/main/resources/sql/dal/set.xml rename to sharding-sql-test/src/main/resources/sql/sharding/dal/set.xml diff --git a/sharding-sql-test/src/main/resources/sql/dal/show.xml b/sharding-sql-test/src/main/resources/sql/sharding/dal/show.xml similarity index 100% rename from sharding-sql-test/src/main/resources/sql/dal/show.xml rename to sharding-sql-test/src/main/resources/sql/sharding/dal/show.xml diff --git a/sharding-sql-test/src/main/resources/sql/dcl/alter_login.xml b/sharding-sql-test/src/main/resources/sql/sharding/dcl/alter_login.xml similarity index 100% rename from sharding-sql-test/src/main/resources/sql/dcl/alter_login.xml rename to sharding-sql-test/src/main/resources/sql/sharding/dcl/alter_login.xml diff --git a/sharding-sql-test/src/main/resources/sql/dcl/alter_role.xml b/sharding-sql-test/src/main/resources/sql/sharding/dcl/alter_role.xml similarity index 100% rename from sharding-sql-test/src/main/resources/sql/dcl/alter_role.xml rename to sharding-sql-test/src/main/resources/sql/sharding/dcl/alter_role.xml diff --git a/sharding-sql-test/src/main/resources/sql/dcl/alter_user.xml b/sharding-sql-test/src/main/resources/sql/sharding/dcl/alter_user.xml similarity index 100% rename from sharding-sql-test/src/main/resources/sql/dcl/alter_user.xml rename to sharding-sql-test/src/main/resources/sql/sharding/dcl/alter_user.xml diff --git a/sharding-sql-test/src/main/resources/sql/dcl/create_login.xml b/sharding-sql-test/src/main/resources/sql/sharding/dcl/create_login.xml similarity index 100% rename from sharding-sql-test/src/main/resources/sql/dcl/create_login.xml rename to sharding-sql-test/src/main/resources/sql/sharding/dcl/create_login.xml diff --git a/sharding-sql-test/src/main/resources/sql/dcl/create_role.xml b/sharding-sql-test/src/main/resources/sql/sharding/dcl/create_role.xml similarity index 100% rename from sharding-sql-test/src/main/resources/sql/dcl/create_role.xml rename to sharding-sql-test/src/main/resources/sql/sharding/dcl/create_role.xml diff --git a/sharding-sql-test/src/main/resources/sql/dcl/create_user.xml b/sharding-sql-test/src/main/resources/sql/sharding/dcl/create_user.xml similarity index 100% rename from sharding-sql-test/src/main/resources/sql/dcl/create_user.xml rename to sharding-sql-test/src/main/resources/sql/sharding/dcl/create_user.xml diff --git a/sharding-sql-test/src/main/resources/sql/dcl/deny_user.xml b/sharding-sql-test/src/main/resources/sql/sharding/dcl/deny_user.xml similarity index 100% rename from sharding-sql-test/src/main/resources/sql/dcl/deny_user.xml rename to sharding-sql-test/src/main/resources/sql/sharding/dcl/deny_user.xml diff --git a/sharding-sql-test/src/main/resources/sql/dcl/drop_login.xml b/sharding-sql-test/src/main/resources/sql/sharding/dcl/drop_login.xml similarity index 100% rename from sharding-sql-test/src/main/resources/sql/dcl/drop_login.xml rename to sharding-sql-test/src/main/resources/sql/sharding/dcl/drop_login.xml diff --git a/sharding-sql-test/src/main/resources/sql/dcl/drop_role.xml b/sharding-sql-test/src/main/resources/sql/sharding/dcl/drop_role.xml similarity index 100% rename from sharding-sql-test/src/main/resources/sql/dcl/drop_role.xml rename to sharding-sql-test/src/main/resources/sql/sharding/dcl/drop_role.xml diff --git a/sharding-sql-test/src/main/resources/sql/dcl/drop_user.xml b/sharding-sql-test/src/main/resources/sql/sharding/dcl/drop_user.xml similarity index 100% rename from sharding-sql-test/src/main/resources/sql/dcl/drop_user.xml rename to sharding-sql-test/src/main/resources/sql/sharding/dcl/drop_user.xml diff --git a/sharding-sql-test/src/main/resources/sql/dcl/grant_user.xml b/sharding-sql-test/src/main/resources/sql/sharding/dcl/grant_user.xml similarity index 100% rename from sharding-sql-test/src/main/resources/sql/dcl/grant_user.xml rename to sharding-sql-test/src/main/resources/sql/sharding/dcl/grant_user.xml diff --git a/sharding-sql-test/src/main/resources/sql/dcl/rename_user.xml b/sharding-sql-test/src/main/resources/sql/sharding/dcl/rename_user.xml similarity index 100% rename from sharding-sql-test/src/main/resources/sql/dcl/rename_user.xml rename to sharding-sql-test/src/main/resources/sql/sharding/dcl/rename_user.xml diff --git a/sharding-sql-test/src/main/resources/sql/dcl/revoke_user.xml b/sharding-sql-test/src/main/resources/sql/sharding/dcl/revoke_user.xml similarity index 100% rename from sharding-sql-test/src/main/resources/sql/dcl/revoke_user.xml rename to sharding-sql-test/src/main/resources/sql/sharding/dcl/revoke_user.xml diff --git a/sharding-sql-test/src/main/resources/sql/dcl/set_default_role.xml b/sharding-sql-test/src/main/resources/sql/sharding/dcl/set_default_role.xml similarity index 100% rename from sharding-sql-test/src/main/resources/sql/dcl/set_default_role.xml rename to sharding-sql-test/src/main/resources/sql/sharding/dcl/set_default_role.xml diff --git a/sharding-sql-test/src/main/resources/sql/dcl/set_password.xml b/sharding-sql-test/src/main/resources/sql/sharding/dcl/set_password.xml similarity index 100% rename from sharding-sql-test/src/main/resources/sql/dcl/set_password.xml rename to sharding-sql-test/src/main/resources/sql/sharding/dcl/set_password.xml diff --git a/sharding-sql-test/src/main/resources/sql/dcl/set_role.xml b/sharding-sql-test/src/main/resources/sql/sharding/dcl/set_role.xml similarity index 100% rename from sharding-sql-test/src/main/resources/sql/dcl/set_role.xml rename to sharding-sql-test/src/main/resources/sql/sharding/dcl/set_role.xml diff --git a/sharding-sql-test/src/main/resources/sql/ddl/alter.xml b/sharding-sql-test/src/main/resources/sql/sharding/ddl/alter.xml similarity index 100% rename from sharding-sql-test/src/main/resources/sql/ddl/alter.xml rename to sharding-sql-test/src/main/resources/sql/sharding/ddl/alter.xml diff --git a/sharding-sql-test/src/main/resources/sql/ddl/create.xml b/sharding-sql-test/src/main/resources/sql/sharding/ddl/create.xml similarity index 100% rename from sharding-sql-test/src/main/resources/sql/ddl/create.xml rename to sharding-sql-test/src/main/resources/sql/sharding/ddl/create.xml diff --git a/sharding-sql-test/src/main/resources/sql/ddl/drop.xml b/sharding-sql-test/src/main/resources/sql/sharding/ddl/drop.xml similarity index 100% rename from sharding-sql-test/src/main/resources/sql/ddl/drop.xml rename to sharding-sql-test/src/main/resources/sql/sharding/ddl/drop.xml diff --git a/sharding-sql-test/src/main/resources/sql/ddl/truncate.xml b/sharding-sql-test/src/main/resources/sql/sharding/ddl/truncate.xml similarity index 100% rename from sharding-sql-test/src/main/resources/sql/ddl/truncate.xml rename to sharding-sql-test/src/main/resources/sql/sharding/ddl/truncate.xml diff --git a/sharding-sql-test/src/main/resources/sql/dml/delete.xml b/sharding-sql-test/src/main/resources/sql/sharding/dml/delete.xml similarity index 100% rename from sharding-sql-test/src/main/resources/sql/dml/delete.xml rename to sharding-sql-test/src/main/resources/sql/sharding/dml/delete.xml diff --git a/sharding-sql-test/src/main/resources/sql/dml/insert.xml b/sharding-sql-test/src/main/resources/sql/sharding/dml/insert.xml similarity index 100% rename from sharding-sql-test/src/main/resources/sql/dml/insert.xml rename to sharding-sql-test/src/main/resources/sql/sharding/dml/insert.xml diff --git a/sharding-sql-test/src/main/resources/sql/dml/update.xml b/sharding-sql-test/src/main/resources/sql/sharding/dml/update.xml similarity index 100% rename from sharding-sql-test/src/main/resources/sql/dml/update.xml rename to sharding-sql-test/src/main/resources/sql/sharding/dml/update.xml diff --git a/sharding-sql-test/src/main/resources/sql/dql/select.xml b/sharding-sql-test/src/main/resources/sql/sharding/dql/select.xml similarity index 100% rename from sharding-sql-test/src/main/resources/sql/dql/select.xml rename to sharding-sql-test/src/main/resources/sql/sharding/dql/select.xml diff --git a/sharding-sql-test/src/main/resources/sql/dql/select_aggregate.xml b/sharding-sql-test/src/main/resources/sql/sharding/dql/select_aggregate.xml similarity index 100% rename from sharding-sql-test/src/main/resources/sql/dql/select_aggregate.xml rename to sharding-sql-test/src/main/resources/sql/sharding/dql/select_aggregate.xml diff --git a/sharding-sql-test/src/main/resources/sql/dql/select_expression.xml b/sharding-sql-test/src/main/resources/sql/sharding/dql/select_expression.xml similarity index 100% rename from sharding-sql-test/src/main/resources/sql/dql/select_expression.xml rename to sharding-sql-test/src/main/resources/sql/sharding/dql/select_expression.xml diff --git a/sharding-sql-test/src/main/resources/sql/dql/select_group_by.xml b/sharding-sql-test/src/main/resources/sql/sharding/dql/select_group_by.xml similarity index 100% rename from sharding-sql-test/src/main/resources/sql/dql/select_group_by.xml rename to sharding-sql-test/src/main/resources/sql/sharding/dql/select_group_by.xml diff --git a/sharding-sql-test/src/main/resources/sql/dql/select_or.xml b/sharding-sql-test/src/main/resources/sql/sharding/dql/select_or.xml similarity index 100% rename from sharding-sql-test/src/main/resources/sql/dql/select_or.xml rename to sharding-sql-test/src/main/resources/sql/sharding/dql/select_or.xml diff --git a/sharding-sql-test/src/main/resources/sql/dql/select_order_by.xml b/sharding-sql-test/src/main/resources/sql/sharding/dql/select_order_by.xml similarity index 100% rename from sharding-sql-test/src/main/resources/sql/dql/select_order_by.xml rename to sharding-sql-test/src/main/resources/sql/sharding/dql/select_order_by.xml diff --git a/sharding-sql-test/src/main/resources/sql/dql/select_pagination.xml b/sharding-sql-test/src/main/resources/sql/sharding/dql/select_pagination.xml similarity index 100% rename from sharding-sql-test/src/main/resources/sql/dql/select_pagination.xml rename to sharding-sql-test/src/main/resources/sql/sharding/dql/select_pagination.xml diff --git a/sharding-sql-test/src/main/resources/sql/dql/select_pagination_group_by_order_by.xml b/sharding-sql-test/src/main/resources/sql/sharding/dql/select_pagination_group_by_order_by.xml similarity index 100% rename from sharding-sql-test/src/main/resources/sql/dql/select_pagination_group_by_order_by.xml rename to sharding-sql-test/src/main/resources/sql/sharding/dql/select_pagination_group_by_order_by.xml diff --git a/sharding-sql-test/src/main/resources/sql/dql/select_relation.xml b/sharding-sql-test/src/main/resources/sql/sharding/dql/select_relation.xml similarity index 100% rename from sharding-sql-test/src/main/resources/sql/dql/select_relation.xml rename to sharding-sql-test/src/main/resources/sql/sharding/dql/select_relation.xml diff --git a/sharding-sql-test/src/main/resources/sql/dql/select_sub_query.xml b/sharding-sql-test/src/main/resources/sql/sharding/dql/select_sub_query.xml similarity index 100% rename from sharding-sql-test/src/main/resources/sql/dql/select_sub_query.xml rename to sharding-sql-test/src/main/resources/sql/sharding/dql/select_sub_query.xml diff --git a/sharding-sql-test/src/main/resources/sql/tcl/tcl.xml b/sharding-sql-test/src/main/resources/sql/sharding/tcl/tcl.xml similarity index 100% rename from sharding-sql-test/src/main/resources/sql/tcl/tcl.xml rename to sharding-sql-test/src/main/resources/sql/sharding/tcl/tcl.xml diff --git a/sharding-sql-test/src/main/resources/unsupported_sql/unsupported.xml b/sharding-sql-test/src/main/resources/sql/unsupported/unsupported.xml similarity index 100% rename from sharding-sql-test/src/main/resources/unsupported_sql/unsupported.xml rename to sharding-sql-test/src/main/resources/sql/unsupported/unsupported.xml From 7727215acb79c850569a6a25e5f55b9da7e75b51 Mon Sep 17 00:00:00 2001 From: tristaZero Date: Sat, 15 Jun 2019 08:06:45 +0800 Subject: [PATCH 245/283] Merge branch 'dev' of ssh://github.com/shardingjdbc/sharding-jdbc into dev # Conflicts: # sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/fixture/ParsingTestCaseFixtureBuilder.java --- .../ShardingDataSourceMetaDataTest.java | 4 ++-- .../test/resources/yaml/sharding-rule.yaml | 1 - .../sharding/dml/InsertOptimizeEngine.java | 2 +- .../sharding/InsertOptimizeEngineTest.java | 24 +++++++++---------- .../ParsingTestCaseFixtureBuilder.java | 9 ++++--- 5 files changed, 21 insertions(+), 19 deletions(-) diff --git a/sharding-core/sharding-core-common/src/test/java/org/apache/shardingsphere/core/metadata/datasource/ShardingDataSourceMetaDataTest.java b/sharding-core/sharding-core-common/src/test/java/org/apache/shardingsphere/core/metadata/datasource/ShardingDataSourceMetaDataTest.java index 99cdb7cfd4824..7d6bfacc753c3 100644 --- a/sharding-core/sharding-core-common/src/test/java/org/apache/shardingsphere/core/metadata/datasource/ShardingDataSourceMetaDataTest.java +++ b/sharding-core/sharding-core-common/src/test/java/org/apache/shardingsphere/core/metadata/datasource/ShardingDataSourceMetaDataTest.java @@ -74,12 +74,12 @@ private ShardingRule getShardingRule() { @Test public void assertGetAllInstanceDataSourceNamesForMasterSlaveShardingRule() { - assertEquals(masterSlaveShardingDataSourceMetaData.getAllInstanceDataSourceNames(), Lists.newArrayList("single", "ms_2")); + assertEquals(masterSlaveShardingDataSourceMetaData.getAllInstanceDataSourceNames(), Lists.newArrayList("ms_0", "ms_2")); } @Test public void assertGetAllInstanceDataSourceNamesForShardingRule() { - assertEquals(shardingDataSourceMetaData.getAllInstanceDataSourceNames(), Lists.newArrayList("ds_0")); + assertEquals(shardingDataSourceMetaData.getAllInstanceDataSourceNames(), Lists.newArrayList("ds_1")); } @Test diff --git a/sharding-core/sharding-core-common/src/test/resources/yaml/sharding-rule.yaml b/sharding-core/sharding-core-common/src/test/resources/yaml/sharding-rule.yaml index 81602261637f3..73963628730d0 100644 --- a/sharding-core/sharding-core-common/src/test/resources/yaml/sharding-rule.yaml +++ b/sharding-core/sharding-core-common/src/test/resources/yaml/sharding-rule.yaml @@ -83,7 +83,6 @@ shardingRule: column: order_id props: worker.id: 123 - logicIndex: order_index t_order_item: actualDataNodes: ds_${0..1}.t_order_item_${0..1} tableStrategy: diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/InsertOptimizeEngine.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/InsertOptimizeEngine.java index ae012f4b50086..2fa5af1c387a9 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/InsertOptimizeEngine.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/InsertOptimizeEngine.java @@ -51,7 +51,7 @@ * @author panjuan */ @RequiredArgsConstructor -public final class ShardingInsertOptimizeEngine implements OptimizeEngine { +public final class InsertOptimizeEngine implements OptimizeEngine { private final ShardingRule shardingRule; diff --git a/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/InsertOptimizeEngineTest.java b/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/InsertOptimizeEngineTest.java index 356517b05e350..9d324fc547279 100644 --- a/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/InsertOptimizeEngineTest.java +++ b/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/InsertOptimizeEngineTest.java @@ -19,7 +19,7 @@ import com.google.common.base.Preconditions; import org.apache.shardingsphere.core.optimize.GeneratedKey; -import org.apache.shardingsphere.core.optimize.engine.sharding.dml.ShardingInsertOptimizeEngine; +import org.apache.shardingsphere.core.optimize.engine.sharding.dml.InsertOptimizeEngine; import org.apache.shardingsphere.core.optimize.result.OptimizeResult; import org.apache.shardingsphere.core.parse.sql.context.condition.AndCondition; import org.apache.shardingsphere.core.parse.sql.context.condition.Column; @@ -52,7 +52,7 @@ import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; -public final class ShardingInsertOptimizeEngineTest { +public final class InsertOptimizeEngineTest { private ShardingRule shardingRule; @@ -78,7 +78,7 @@ public final class ShardingInsertOptimizeEngineTest { @Before public void setUp() throws IOException { - URL url = ShardingInsertOptimizeEngineTest.class.getClassLoader().getResource("yaml/optimize-rule.yaml"); + URL url = InsertOptimizeEngineTest.class.getClassLoader().getResource("yaml/optimize-rule.yaml"); Preconditions.checkNotNull(url, "Cannot found rewrite rule yaml configuration."); YamlRootShardingConfiguration yamlShardingConfig = YamlEngine.unmarshal(new File(url.getFile()), YamlRootShardingConfiguration.class); shardingRule = new ShardingRule(new ShardingRuleConfigurationYamlSwapper().swap(yamlShardingConfig.getShardingRule()), yamlShardingConfig.getDataSources().keySet()); @@ -201,7 +201,7 @@ public void assertOptimizeInsertValuesWithPlaceholderWithGeneratedKey() { GeneratedKey generatedKey = new GeneratedKey("order_id"); generatedKey.getGeneratedKeys().add(1); generatedKey.getGeneratedKeys().add(2); - OptimizeResult actual = new ShardingInsertOptimizeEngine(shardingRule, insertValuesStatementWithPlaceholder, insertValuesParameters, generatedKey).optimize(); + OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertValuesStatementWithPlaceholder, insertValuesParameters, generatedKey).optimize(); assertFalse(actual.getShardingConditions().isAlwaysFalse()); assertThat(actual.getShardingConditions().getShardingConditions().size(), is(2)); assertTrue(actual.getInsertOptimizeResult().isPresent()); @@ -226,7 +226,7 @@ public void assertOptimizeInsertValuesWithPlaceholderWithGeneratedKeyWithEncrypt GeneratedKey generatedKey = new GeneratedKey("order_id"); generatedKey.getGeneratedKeys().add(1); generatedKey.getGeneratedKeys().add(2); - OptimizeResult actual = new ShardingInsertOptimizeEngine(shardingRule, insertValuesStatementWithPlaceholderWithEncrypt, insertValuesParameters, generatedKey).optimize(); + OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertValuesStatementWithPlaceholderWithEncrypt, insertValuesParameters, generatedKey).optimize(); assertFalse(actual.getShardingConditions().isAlwaysFalse()); assertThat(actual.getShardingConditions().getShardingConditions().size(), is(2)); assertTrue(actual.getInsertOptimizeResult().isPresent()); @@ -250,7 +250,7 @@ public void assertOptimizeInsertValuesWithPlaceholderWithoutGeneratedKey() { GeneratedKey generatedKey = new GeneratedKey("order_id"); generatedKey.getGeneratedKeys().add(1); generatedKey.getGeneratedKeys().add(1); - OptimizeResult actual = new ShardingInsertOptimizeEngine(shardingRule, insertValuesStatementWithPlaceholder, insertValuesParameters, generatedKey).optimize(); + OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertValuesStatementWithPlaceholder, insertValuesParameters, generatedKey).optimize(); assertFalse(actual.getShardingConditions().isAlwaysFalse()); assertThat(actual.getShardingConditions().getShardingConditions().size(), is(2)); assertTrue(actual.getInsertOptimizeResult().isPresent()); @@ -274,7 +274,7 @@ public void assertOptimizeInsertValuesWithoutPlaceholderWithGeneratedKeyWithQuer insertValuesStatementWithoutPlaceholderWithQueryEncrypt.getColumnNames().add("status"); insertValuesStatementWithoutPlaceholderWithQueryEncrypt.getValues().add( new InsertValue(Arrays.asList(new LiteralExpressionSegment(1, 2, 12), new LiteralExpressionSegment(3, 4, "a")))); - OptimizeResult actual = new ShardingInsertOptimizeEngine(shardingRule, insertValuesStatementWithoutPlaceholderWithQueryEncrypt, Collections.emptyList(), generatedKey).optimize(); + OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertValuesStatementWithoutPlaceholderWithQueryEncrypt, Collections.emptyList(), generatedKey).optimize(); assertThat(actual.getShardingConditions().getShardingConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(0)); @@ -289,7 +289,7 @@ public void assertOptimizeInsertValuesWithoutPlaceholderWithGeneratedKey() { insertValuesStatementWithoutPlaceholder.getColumnNames().add("user_id"); insertValuesStatementWithoutPlaceholder.getColumnNames().add("status"); insertValuesStatementWithoutPlaceholder.getValues().add(new InsertValue(Arrays.asList(new LiteralExpressionSegment(1, 2, 12), new LiteralExpressionSegment(3, 4, "a")))); - OptimizeResult actual = new ShardingInsertOptimizeEngine(shardingRule, insertValuesStatementWithoutPlaceholder, Collections.emptyList(), generatedKey).optimize(); + OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertValuesStatementWithoutPlaceholder, Collections.emptyList(), generatedKey).optimize(); assertThat(actual.getShardingConditions().getShardingConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(0)); @@ -303,7 +303,7 @@ public void assertOptimizeInsertSetWithPlaceholderWithGeneratedKey() { generatedKey.getGeneratedKeys().add(1); insertSetStatementWithPlaceholder.getValues().add( new InsertValue(Arrays.asList(new ParameterMarkerExpressionSegment(1, 2, 0), new ParameterMarkerExpressionSegment(3, 4, 1)))); - OptimizeResult actual = new ShardingInsertOptimizeEngine(shardingRule, insertSetStatementWithPlaceholder, insertSetParameters, generatedKey).optimize(); + OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertSetStatementWithPlaceholder, insertSetParameters, generatedKey).optimize(); assertThat(actual.getShardingConditions().getShardingConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(3)); @@ -319,7 +319,7 @@ public void assertOptimizeInsertSetWithPlaceholderWithGeneratedKeyWithQueryEncry generatedKey.getGeneratedKeys().add(1); InsertValue insertValue = new InsertValue(Arrays.asList(new ParameterMarkerExpressionSegment(1, 2, 0), new ParameterMarkerExpressionSegment(3, 4, 1))); insertSetStatementWithPlaceholderWithQueryEncrypt.getValues().add(insertValue); - OptimizeResult actual = new ShardingInsertOptimizeEngine(shardingRule, insertSetStatementWithPlaceholderWithQueryEncrypt, insertSetParameters, generatedKey).optimize(); + OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertSetStatementWithPlaceholderWithQueryEncrypt, insertSetParameters, generatedKey).optimize(); assertThat(actual.getShardingConditions().getShardingConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(4)); @@ -335,7 +335,7 @@ public void assertOptimizeInsertSetWithoutPlaceholderWithGeneratedKey() { GeneratedKey generatedKey = new GeneratedKey("order_id"); generatedKey.getGeneratedKeys().add(1); insertSetStatementWithoutPlaceholder.getValues().add(new InsertValue(Arrays.asList(new LiteralExpressionSegment(1, 2, 12), new LiteralExpressionSegment(3, 4, "a")))); - OptimizeResult actual = new ShardingInsertOptimizeEngine(shardingRule, insertSetStatementWithoutPlaceholder, Collections.emptyList(), generatedKey).optimize(); + OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertSetStatementWithoutPlaceholder, Collections.emptyList(), generatedKey).optimize(); assertThat(actual.getShardingConditions().getShardingConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(0)); @@ -349,7 +349,7 @@ public void assertOptimizeInsertSetWithoutPlaceholderWithGeneratedKeyWithEncrypt generatedKey.getGeneratedKeys().add(1); insertSetStatementWithoutPlaceholderWithEncrypt.getValues().add( new InsertValue(Arrays.asList(new LiteralExpressionSegment(1, 2, 12), new LiteralExpressionSegment(3, 4, "a")))); - OptimizeResult actual = new ShardingInsertOptimizeEngine(shardingRule, insertSetStatementWithoutPlaceholderWithEncrypt, Collections.emptyList(), generatedKey).optimize(); + OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertSetStatementWithoutPlaceholderWithEncrypt, Collections.emptyList(), generatedKey).optimize(); assertThat(actual.getShardingConditions().getShardingConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(0)); diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/fixture/ParsingTestCaseFixtureBuilder.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/fixture/ParsingTestCaseFixtureBuilder.java index 8eaffd0833629..b32b2caeb31e1 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/fixture/ParsingTestCaseFixtureBuilder.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/fixture/ParsingTestCaseFixtureBuilder.java @@ -35,6 +35,7 @@ import java.io.File; import java.net.URL; import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -75,11 +76,13 @@ public static EncryptRule buildEncryptRule() { public static ShardingTableMetaData buildShardingTableMetaData() { Map tableMetaDataMap = new HashMap<>(3, 1); tableMetaDataMap.put("t_order", - new TableMetaData(Arrays.asList(new ColumnMetaData("order_id", "int", true), new ColumnMetaData("user_id", "int", false), new ColumnMetaData("status", "int", false)))); + new TableMetaData(Arrays.asList(new ColumnMetaData("order_id", "int", true), new ColumnMetaData("user_id", "int", false), + new ColumnMetaData("status", "int", false)), Collections.emptySet())); tableMetaDataMap.put("t_order_item", new TableMetaData(Arrays.asList(new ColumnMetaData("item_id", "int", true), new ColumnMetaData("order_id", "int", false), - new ColumnMetaData("user_id", "int", false), new ColumnMetaData("status", "varchar", false), new ColumnMetaData("c_date", "timestamp", false)))); + new ColumnMetaData("user_id", "int", false), new ColumnMetaData("status", "varchar", false), + new ColumnMetaData("c_date", "timestamp", false)), Collections.emptySet())); tableMetaDataMap.put("t_encrypt", new TableMetaData(Arrays.asList(new ColumnMetaData("id", "int", true), new ColumnMetaData("name", "varchar", false), - new ColumnMetaData("mobile", "varchar", false), new ColumnMetaData("status", "int", false)))); + new ColumnMetaData("mobile", "varchar", false), new ColumnMetaData("status", "int", false)), Collections.emptySet())); return new ShardingTableMetaData(tableMetaDataMap); } } From 78c7432b9232f60c7fdbb6bcd376f8a33e241093 Mon Sep 17 00:00:00 2001 From: tristaZero Date: Sat, 15 Jun 2019 08:36:18 +0800 Subject: [PATCH 246/283] USE synchronizedMap --- .../core/metadata/table/TableMetaData.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/metadata/table/TableMetaData.java b/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/metadata/table/TableMetaData.java index 8a2994fea5b5e..49a073e64d004 100644 --- a/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/metadata/table/TableMetaData.java +++ b/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/metadata/table/TableMetaData.java @@ -22,11 +22,13 @@ import lombok.ToString; import java.util.Collection; +import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CopyOnWriteArraySet; +import static java.util.Collections.synchronizedMap; + /** * Table metadata. * @@ -47,11 +49,10 @@ public TableMetaData(final Collection columnMetaDataList, final } private Map getColumns(final Collection columnMetaDataList) { - final Map columns; - columns = new ConcurrentHashMap<>(columnMetaDataList.size(), 1); + Map columns = new LinkedHashMap<>(columnMetaDataList.size(), 1); for (ColumnMetaData each : columnMetaDataList) { columns.put(each.getColumnName(), each); } - return columns; + return synchronizedMap(columns); } } From 8022b861419d8bfc9efa1c50d534c498efbff09f Mon Sep 17 00:00:00 2001 From: tristaZero Date: Sat, 15 Jun 2019 08:39:16 +0800 Subject: [PATCH 247/283] new ConcurrentHashMap<>(dataSourceURLs.size(), 1) --- .../core/metadata/datasource/ShardingDataSourceMetaData.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/metadata/datasource/ShardingDataSourceMetaData.java b/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/metadata/datasource/ShardingDataSourceMetaData.java index 870451bcff7bc..455bd104c7a83 100644 --- a/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/metadata/datasource/ShardingDataSourceMetaData.java +++ b/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/metadata/datasource/ShardingDataSourceMetaData.java @@ -49,7 +49,7 @@ private Map getDataSourceMetaDataMap(final Map getDataSourceMetaDataMapForSharding(final Map dataSourceURLs, final DatabaseType databaseType) { - Map result = new ConcurrentHashMap<>(dataSourceURLs.size()); + Map result = new ConcurrentHashMap<>(dataSourceURLs.size(), 1); for (Entry entry : dataSourceURLs.entrySet()) { result.put(entry.getKey(), databaseType.getDataSourceMetaData(entry.getValue())); } From f098b3172f102dd9935f50a88516db6af14e1668 Mon Sep 17 00:00:00 2001 From: tristaZero Date: Sat, 15 Jun 2019 08:42:34 +0800 Subject: [PATCH 248/283] reverse config --- .../main/resources/conf/config-sharding.yaml | 98 +++++++++---------- 1 file changed, 49 insertions(+), 49 deletions(-) diff --git a/sharding-proxy/sharding-proxy-bootstrap/src/main/resources/conf/config-sharding.yaml b/sharding-proxy/sharding-proxy-bootstrap/src/main/resources/conf/config-sharding.yaml index 1e97387855096..7d09b6a67ec77 100644 --- a/sharding-proxy/sharding-proxy-bootstrap/src/main/resources/conf/config-sharding.yaml +++ b/sharding-proxy/sharding-proxy-bootstrap/src/main/resources/conf/config-sharding.yaml @@ -26,55 +26,55 @@ # ###################################################################################################### # -schemaName: sharding_db - -dataSources: - ds_0: - url: jdbc:postgresql://127.0.0.1:5432/demo_ds_0?serverTimezone=UTC&useSSL=false - username: postgres - password: postgres - connectionTimeoutMilliseconds: 30000 - idleTimeoutMilliseconds: 60000 - maxLifetimeMilliseconds: 1800000 - maxPoolSize: 50 - ds_1: - url: jdbc:postgresql://127.0.0.1:5432/demo_ds_1?serverTimezone=UTC&useSSL=false - username: postgres - password: postgres - connectionTimeoutMilliseconds: 30000 - idleTimeoutMilliseconds: 60000 - maxLifetimeMilliseconds: 1800000 - maxPoolSize: 50 - -shardingRule: - tables: - t_order: - actualDataNodes: ds_${0..1}.t_order_${0..1} - tableStrategy: - inline: - shardingColumn: order_id - algorithmExpression: t_order_${order_id % 2} - keyGenerator: - type: SNOWFLAKE - column: order_id - t_order_item: - actualDataNodes: ds_${0..1}.t_order_item_${0..1} - tableStrategy: - inline: - shardingColumn: order_id - algorithmExpression: t_order_item_${order_id % 2} - keyGenerator: - type: SNOWFLAKE - column: order_item_id - bindingTables: - - t_order,t_order_item - defaultDatabaseStrategy: - inline: - shardingColumn: user_id - algorithmExpression: ds_${user_id % 2} - defaultTableStrategy: - none: - +#schemaName: sharding_db +# +#dataSources: +# ds_0: +# url: jdbc:postgresql://127.0.0.1:5432/demo_ds_0?serverTimezone=UTC&useSSL=false +# username: postgres +# password: postgres +# connectionTimeoutMilliseconds: 30000 +# idleTimeoutMilliseconds: 60000 +# maxLifetimeMilliseconds: 1800000 +# maxPoolSize: 50 +# ds_1: +# url: jdbc:postgresql://127.0.0.1:5432/demo_ds_1?serverTimezone=UTC&useSSL=false +# username: postgres +# password: postgres +# connectionTimeoutMilliseconds: 30000 +# idleTimeoutMilliseconds: 60000 +# maxLifetimeMilliseconds: 1800000 +# maxPoolSize: 50 +# +#shardingRule: +# tables: +# t_order: +# actualDataNodes: ds_${0..1}.t_order_${0..1} +# tableStrategy: +# inline: +# shardingColumn: order_id +# algorithmExpression: t_order_${order_id % 2} +# keyGenerator: +# type: SNOWFLAKE +# column: order_id +# t_order_item: +# actualDataNodes: ds_${0..1}.t_order_item_${0..1} +# tableStrategy: +# inline: +# shardingColumn: order_id +# algorithmExpression: t_order_item_${order_id % 2} +# keyGenerator: +# type: SNOWFLAKE +# column: order_item_id +# bindingTables: +# - t_order,t_order_item +# defaultDatabaseStrategy: +# inline: +# shardingColumn: user_id +# algorithmExpression: ds_${user_id % 2} +# defaultTableStrategy: +# none: +# ###################################################################################################### # # If you want to connect to MySQL, you should manually copy MySQL driver to lib directory. From 67233dbf3263cd567da450e601625dd9fbe9cdc7 Mon Sep 17 00:00:00 2001 From: Liang Zhang Date: Sat, 15 Jun 2019 12:32:18 +0800 Subject: [PATCH 249/283] Revert "When the key of Map/Set is a custom object, you must override hashCode and equals." --- .../sql/context/selectitem/AggregationDistinctSelectItem.java | 2 -- .../core/parse/sql/context/selectitem/DistinctSelectItem.java | 2 -- 2 files changed, 4 deletions(-) diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/context/selectitem/AggregationDistinctSelectItem.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/context/selectitem/AggregationDistinctSelectItem.java index dbfccfbb9dc3f..6d287c6e874b5 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/context/selectitem/AggregationDistinctSelectItem.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/context/selectitem/AggregationDistinctSelectItem.java @@ -18,7 +18,6 @@ package org.apache.shardingsphere.core.parse.sql.context.selectitem; import com.google.common.base.Optional; -import lombok.EqualsAndHashCode; import lombok.Getter; import org.apache.shardingsphere.core.constant.AggregationType; @@ -28,7 +27,6 @@ * @author panjuan */ @Getter -@EqualsAndHashCode public final class AggregationDistinctSelectItem extends AggregationSelectItem { private final String distinctColumnName; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/context/selectitem/DistinctSelectItem.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/context/selectitem/DistinctSelectItem.java index ecfae52c6e1ab..757a5205677ad 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/context/selectitem/DistinctSelectItem.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/context/selectitem/DistinctSelectItem.java @@ -19,7 +19,6 @@ import com.google.common.base.Joiner; import com.google.common.base.Optional; -import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.RequiredArgsConstructor; import org.apache.shardingsphere.core.parse.util.SQLUtil; @@ -35,7 +34,6 @@ */ @RequiredArgsConstructor @Getter -@EqualsAndHashCode public final class DistinctSelectItem implements SelectItem { private final Set distinctColumnNames; From ff36339aa6f144e4d527cd0ff05359bd4236e5ff Mon Sep 17 00:00:00 2001 From: terrymanu Date: Sat, 15 Jun 2019 12:59:52 +0800 Subject: [PATCH 250/283] fix #2561 --- .../src/main/antlr4/imports/mysql/BaseRule.g4 | 9 +++++++-- .../src/main/antlr4/imports/mysql/DALStatement.g4 | 2 +- .../src/main/antlr4/imports/mysql/MySQLKeyword.g4 | 4 ++++ .../src/main/antlr4/imports/mysql/TCLStatement.g4 | 6 +++--- .../extractor/tcl/MySQLSetAutoCommitExtractor.java | 10 ++++++++-- .../integrate/asserts/ShardingSQLStatementAssert.java | 4 ++++ .../core/parse/integrate/jaxb/root/ParserResult.java | 9 ++++++--- .../src/test/resources/sharding/tcl/tcl.xml | 10 ++++++---- .../src/main/resources/sql/sharding/tcl/tcl.xml | 2 ++ 9 files changed, 41 insertions(+), 15 deletions(-) diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/antlr4/imports/mysql/BaseRule.g4 b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/antlr4/imports/mysql/BaseRule.g4 index 512a2685387b7..c92abdfe8a004 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/antlr4/imports/mysql/BaseRule.g4 +++ b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/antlr4/imports/mysql/BaseRule.g4 @@ -67,7 +67,12 @@ identifier_ ; variable_ - : (AT_ AT_)? (GLOBAL | PERSIST | PERSIST_ONLY | SESSION)? DOT_? identifier_ + : (AT_? AT_)? (GLOBAL | PERSIST | PERSIST_ONLY | SESSION)? DOT_? identifier_ + ; + +scope_ + : (GLOBAL | PERSIST | PERSIST_ONLY | SESSION) + | AT_ AT_ (GLOBAL | PERSIST | PERSIST_ONLY | SESSION) DOT_ ; unreservedWord_ @@ -93,7 +98,7 @@ unreservedWord_ | BOOLEAN | MAX | MIN | SUM | COUNT | AVG | BIT_AND | BIT_OR | BIT_XOR | GROUP_CONCAT | JSON_ARRAYAGG | JSON_OBJECTAGG | STD | STDDEV | STDDEV_POP | STDDEV_SAMP | VAR_POP | VAR_SAMP | VARIANCE | EXTENDED | STATUS - | FIELDS | INDEXES | USER | ROLE | OJ | AUTOCOMMIT + | FIELDS | INDEXES | USER | ROLE | OJ | AUTOCOMMIT | OFF ; schemaName diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/antlr4/imports/mysql/DALStatement.g4 b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/antlr4/imports/mysql/DALStatement.g4 index 58135b3878ade..2761fd3df2833 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/antlr4/imports/mysql/DALStatement.g4 +++ b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/antlr4/imports/mysql/DALStatement.g4 @@ -72,5 +72,5 @@ showWhereClause_ ; setVariable - : SET + : SET variable_? ; \ No newline at end of file diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/antlr4/imports/mysql/MySQLKeyword.g4 b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/antlr4/imports/mysql/MySQLKeyword.g4 index e6981c18c9a42..71e1832dc160c 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/antlr4/imports/mysql/MySQLKeyword.g4 +++ b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/antlr4/imports/mysql/MySQLKeyword.g4 @@ -243,6 +243,10 @@ UNKNOWN : U N K N O W N ; +OFF + : O F F + ; + ALWAYS : A L W A Y S ; diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/antlr4/imports/mysql/TCLStatement.g4 b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/antlr4/imports/mysql/TCLStatement.g4 index e0058c7f6238c..2f6e04be205ab 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/antlr4/imports/mysql/TCLStatement.g4 +++ b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/antlr4/imports/mysql/TCLStatement.g4 @@ -20,15 +20,15 @@ grammar TCLStatement; import Symbol, Keyword, MySQLKeyword, Literals, BaseRule; setTransaction - : SET (GLOBAL | SESSION)? TRANSACTION + : SET scope_? TRANSACTION ; setAutoCommit - : SET AUTOCOMMIT EQ_ autoCommitValue + : SET scope_? AUTOCOMMIT EQ_ autoCommitValue ; autoCommitValue - : NUMBER_ + : NUMBER_ | ON | OFF ; beginTransaction diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/java/org/apache/shardingsphere/core/parse/extractor/tcl/MySQLSetAutoCommitExtractor.java b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/java/org/apache/shardingsphere/core/parse/extractor/tcl/MySQLSetAutoCommitExtractor.java index e33d67ca5d377..84c2a74a5d7e0 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/java/org/apache/shardingsphere/core/parse/extractor/tcl/MySQLSetAutoCommitExtractor.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/java/org/apache/shardingsphere/core/parse/extractor/tcl/MySQLSetAutoCommitExtractor.java @@ -31,6 +31,7 @@ * Set auto commit extractor for MySQL. * * @author maxiaoguang + * @author zhangliang */ public final class MySQLSetAutoCommitExtractor implements OptionalSQLSegmentExtractor { @@ -38,7 +39,12 @@ public final class MySQLSetAutoCommitExtractor implements OptionalSQLSegmentExtr public Optional extract(final ParserRuleContext ancestorNode, final Map parameterMarkerIndexes) { Optional autoCommitValueNode = ExtractorUtils.findFirstChildNode(ancestorNode, RuleName.AUTO_COMMIT_VALUE); return autoCommitValueNode.isPresent() - ? Optional.of(new AutoCommitSegment(autoCommitValueNode.get().getStart().getStartIndex(), autoCommitValueNode.get().getStop().getStopIndex(), - "1".equals(SQLUtil.getExactlyValue(autoCommitValueNode.get().getText())))) : Optional.absent(); + ? Optional.of(new AutoCommitSegment(autoCommitValueNode.get().getStart().getStartIndex(), autoCommitValueNode.get().getStop().getStopIndex(), isAutoCommit(autoCommitValueNode.get()))) + : Optional.absent(); + } + + private boolean isAutoCommit(final ParserRuleContext autoCommitValueNode) { + String autoCommitValue = SQLUtil.getExactlyValue(autoCommitValueNode.getText()); + return "1".equals(autoCommitValue) || "ON".equals(autoCommitValue); } } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/ShardingSQLStatementAssert.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/ShardingSQLStatementAssert.java index a5616ef1152ad..f8ea155a70c7a 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/ShardingSQLStatementAssert.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/asserts/ShardingSQLStatementAssert.java @@ -33,6 +33,7 @@ import org.apache.shardingsphere.core.parse.sql.statement.ddl.CreateTableStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.DMLStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.SelectStatement; +import org.apache.shardingsphere.core.parse.sql.statement.tcl.SetAutoCommitStatement; import org.apache.shardingsphere.core.parse.sql.statement.tcl.TCLStatement; import org.apache.shardingsphere.test.sql.SQLCaseType; import org.apache.shardingsphere.test.sql.loader.sharding.ShardingSQLCasesRegistry; @@ -129,5 +130,8 @@ private void assertAlterTableStatement(final AlterTableStatement actual) { private void assertTCLStatement(final TCLStatement actual) { assertThat(actual.getClass().getName(), is(expected.getTclActualStatementClassType())); + if (actual instanceof SetAutoCommitStatement) { + assertThat(((SetAutoCommitStatement) actual).isAutoCommit(), is(expected.isAutoCommit())); + } } } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/root/ParserResult.java b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/root/ParserResult.java index 7ddbb390d9815..73207108d3576 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/root/ParserResult.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/java/org/apache/shardingsphere/core/parse/integrate/jaxb/root/ParserResult.java @@ -88,15 +88,18 @@ public final class ParserResult { @XmlElement(name = "alter-table") private ExpectedAlterTable alterTable; - @XmlAttribute(name = "tcl-actual-statement-class-type") - private String tclActualStatementClassType; - @XmlElement(name = "encrypt-conditions") private ExpectedConditions encryptConditions = new ExpectedConditions(); @XmlElement(name = "insert-columns-and-values") private ExpectedInsertColumnsAndValues insertColumnsAndValues = new ExpectedInsertColumnsAndValues(); + @XmlAttribute(name = "tcl-actual-statement-class-type") + private String tclActualStatementClassType; + + @XmlAttribute(name = "auto-commit") + private boolean autoCommit; + /** * Get parameters. * diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/tcl/tcl.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/tcl/tcl.xml index 89b23c982a2d2..e81087981c8c1 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/tcl/tcl.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/tcl/tcl.xml @@ -30,10 +30,12 @@ - - - - + + + + + + diff --git a/sharding-sql-test/src/main/resources/sql/sharding/tcl/tcl.xml b/sharding-sql-test/src/main/resources/sql/sharding/tcl/tcl.xml index 94321815300b8..b18a90988b3b3 100644 --- a/sharding-sql-test/src/main/resources/sql/sharding/tcl/tcl.xml +++ b/sharding-sql-test/src/main/resources/sql/sharding/tcl/tcl.xml @@ -31,7 +31,9 @@ + + From 87ca9b3e04da8a47eb21e6861774827ded4c7c37 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Sat, 15 Jun 2019 20:47:01 +0800 Subject: [PATCH 251/283] for #2563, Use parse engine to parse AUTO_COMMIT SQL on TextProtocolBackendHandlerFactory --- .../mysql/extractor-rule-definition.xml | 22 +++++++++++++++++++ .../encrypt/mysql/filler-rule-definition.xml | 2 ++ .../mysql/sql-statement-rule-definition.xml | 2 +- .../mysql/extractor-rule-definition.xml | 1 + .../mysql/filler-rule-definition.xml | 21 ++++++++++++++++++ .../mysql/sql-statement-rule-definition.xml | 2 +- .../TextProtocolBackendHandlerFactory.java | 19 ++++++++++------ ...TextProtocolBackendHandlerFactoryTest.java | 13 ++++++++--- 8 files changed, 70 insertions(+), 12 deletions(-) create mode 100644 sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/encrypt/mysql/extractor-rule-definition.xml create mode 100644 sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/masterslave/mysql/filler-rule-definition.xml diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/encrypt/mysql/extractor-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/encrypt/mysql/extractor-rule-definition.xml new file mode 100644 index 0000000000000..a56a679c0576a --- /dev/null +++ b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/encrypt/mysql/extractor-rule-definition.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/encrypt/mysql/filler-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/encrypt/mysql/filler-rule-definition.xml index cbf990b4c63e6..32f4e32bc0ace 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/encrypt/mysql/filler-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/encrypt/mysql/filler-rule-definition.xml @@ -20,4 +20,6 @@ + + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/encrypt/mysql/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/encrypt/mysql/sql-statement-rule-definition.xml index 57d9045ecbbc8..205e61d41837a 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/encrypt/mysql/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/encrypt/mysql/sql-statement-rule-definition.xml @@ -31,7 +31,7 @@ - + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/masterslave/mysql/extractor-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/masterslave/mysql/extractor-rule-definition.xml index 2f2813de1c49a..a56a679c0576a 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/masterslave/mysql/extractor-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/masterslave/mysql/extractor-rule-definition.xml @@ -18,4 +18,5 @@ + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/masterslave/mysql/filler-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/masterslave/mysql/filler-rule-definition.xml new file mode 100644 index 0000000000000..64eb63cc0d9ef --- /dev/null +++ b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/masterslave/mysql/filler-rule-definition.xml @@ -0,0 +1,21 @@ + + + + + + diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/masterslave/mysql/sql-statement-rule-definition.xml b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/masterslave/mysql/sql-statement-rule-definition.xml index 72c8eba96da04..c1d265b20f9e4 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/masterslave/mysql/sql-statement-rule-definition.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/resources/META-INF/parsing-rule-definition/masterslave/mysql/sql-statement-rule-definition.xml @@ -31,7 +31,7 @@ - + diff --git a/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/text/TextProtocolBackendHandlerFactory.java b/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/text/TextProtocolBackendHandlerFactory.java index 2edd29f26d595..7d2c4c7e12ec5 100644 --- a/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/text/TextProtocolBackendHandlerFactory.java +++ b/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/text/TextProtocolBackendHandlerFactory.java @@ -26,6 +26,8 @@ import org.apache.shardingsphere.core.parse.sql.statement.dal.DALStatement; import org.apache.shardingsphere.core.parse.sql.statement.dal.dialect.mysql.ShowDatabasesStatement; import org.apache.shardingsphere.core.parse.sql.statement.dal.dialect.mysql.UseStatement; +import org.apache.shardingsphere.core.parse.sql.statement.tcl.SetAutoCommitStatement; +import org.apache.shardingsphere.core.parse.sql.statement.tcl.TCLStatement; import org.apache.shardingsphere.shardingproxy.backend.communication.jdbc.connection.BackendConnection; import org.apache.shardingsphere.shardingproxy.backend.text.admin.BroadcastBackendHandler; import org.apache.shardingsphere.shardingproxy.backend.text.admin.ShowDatabasesBackendHandler; @@ -39,9 +41,7 @@ import org.apache.shardingsphere.transaction.core.TransactionOperationType; import java.util.Arrays; -import java.util.HashSet; import java.util.List; -import java.util.Set; /** * Text protocol backend handler factory. @@ -51,8 +51,6 @@ @NoArgsConstructor(access = AccessLevel.PRIVATE) public final class TextProtocolBackendHandlerFactory { - private static final Set AUTO_COMMIT = new HashSet<>(Arrays.asList("SET AUTOCOMMIT=1", "SET @@SESSION.AUTOCOMMIT = ON")); - private static final List GUI_SQL = Arrays.asList("SET", "SHOW VARIABLES LIKE", "SHOW CHARACTER SET", "SHOW COLLATION"); /** @@ -72,13 +70,20 @@ public static TextProtocolBackendHandler newInstance(final DatabaseType database if (transactionOperationType.isPresent()) { return new TransactionBackendHandler(transactionOperationType.get(), backendConnection); } - if (AUTO_COMMIT.contains(sql.toUpperCase())) { - return backendConnection.getStateHandler().isInTransaction() ? new TransactionBackendHandler(TransactionOperationType.COMMIT, backendConnection) : new SkipBackendHandler(); - } SQLStatement sqlStatement = new SQLParseEngine(MasterSlaveParseRuleRegistry.getInstance(), databaseType, sql, null, null).parse(); + if (sqlStatement instanceof TCLStatement) { + return createTCLBackendHandler((TCLStatement) sqlStatement, backendConnection); + } return sqlStatement instanceof DALStatement ? createDALBackendHandler(sqlStatement, sql, backendConnection) : new QueryBackendHandler(sql, backendConnection); } + private static TextProtocolBackendHandler createTCLBackendHandler(final TCLStatement tclStatement, final BackendConnection backendConnection) { + if (tclStatement instanceof SetAutoCommitStatement && ((SetAutoCommitStatement) tclStatement).isAutoCommit()) { + return backendConnection.getStateHandler().isInTransaction() ? new TransactionBackendHandler(TransactionOperationType.COMMIT, backendConnection) : new SkipBackendHandler(); + } + return new SkipBackendHandler(); + } + private static TextProtocolBackendHandler createDALBackendHandler(final SQLStatement sqlStatement, final String sql, final BackendConnection backendConnection) { // TODO we should refactor the broadcast logic in future, exclude those broadcast SQL temporary. for (String each : GUI_SQL) { diff --git a/sharding-proxy/sharding-proxy-backend/src/test/java/org/apache/shardingsphere/shardingproxy/backend/TextProtocolBackendHandlerFactoryTest.java b/sharding-proxy/sharding-proxy-backend/src/test/java/org/apache/shardingsphere/shardingproxy/backend/TextProtocolBackendHandlerFactoryTest.java index a103792001a3f..6fcb0a5b34753 100644 --- a/sharding-proxy/sharding-proxy-backend/src/test/java/org/apache/shardingsphere/shardingproxy/backend/TextProtocolBackendHandlerFactoryTest.java +++ b/sharding-proxy/sharding-proxy-backend/src/test/java/org/apache/shardingsphere/shardingproxy/backend/TextProtocolBackendHandlerFactoryTest.java @@ -77,15 +77,22 @@ public void assertNewTransactionInstance() { } @Test - public void assertNewTransactionBackendHandlerInstanceOfCommitOperate() { + public void assertNewTransactionBackendHandlerInstanceOfCommit() { ConnectionStateHandler stateHandler = mock(ConnectionStateHandler.class); when(backendConnection.getStateHandler()).thenReturn(stateHandler); when(stateHandler.isInTransaction()).thenReturn(true); String sql = "SET AUTOCOMMIT=1"; TextProtocolBackendHandler actual = TextProtocolBackendHandlerFactory.newInstance(DatabaseTypes.getActualDatabaseType("MySQL"), sql, backendConnection); assertThat(actual, instanceOf(TransactionBackendHandler.class)); - sql = "SET @@SESSION.AUTOCOMMIT = ON"; - actual = TextProtocolBackendHandlerFactory.newInstance(DatabaseTypes.getActualDatabaseType("MySQL"), sql, backendConnection); + } + + @Test + public void assertNewTransactionBackendHandlerInstanceOfCommitWithScope() { + ConnectionStateHandler stateHandler = mock(ConnectionStateHandler.class); + when(backendConnection.getStateHandler()).thenReturn(stateHandler); + when(stateHandler.isInTransaction()).thenReturn(true); + String sql = "SET @@SESSION.AUTOCOMMIT = ON"; + TextProtocolBackendHandler actual = TextProtocolBackendHandlerFactory.newInstance(DatabaseTypes.getActualDatabaseType("MySQL"), sql, backendConnection); assertThat(actual, instanceOf(TransactionBackendHandler.class)); } From 2fb882eb42dfd1f1657114aebf5165f4475dd59c Mon Sep 17 00:00:00 2001 From: terrymanu Date: Sat, 15 Jun 2019 21:25:39 +0800 Subject: [PATCH 252/283] for #2563, Use parse engine to parse transaction SQL on TextProtocolBackendHandlerFactory --- .../TextProtocolBackendHandlerFactory.java | 27 ++++++++++++------- ...TextProtocolBackendHandlerFactoryTest.java | 27 ++++++++++--------- .../core/TransactionOperationType.java | 27 +------------------ 3 files changed, 34 insertions(+), 47 deletions(-) diff --git a/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/text/TextProtocolBackendHandlerFactory.java b/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/text/TextProtocolBackendHandlerFactory.java index 7d2c4c7e12ec5..bdca01524e62d 100644 --- a/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/text/TextProtocolBackendHandlerFactory.java +++ b/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/text/TextProtocolBackendHandlerFactory.java @@ -17,7 +17,6 @@ package org.apache.shardingsphere.shardingproxy.backend.text; -import com.google.common.base.Optional; import lombok.AccessLevel; import lombok.NoArgsConstructor; import org.apache.shardingsphere.core.parse.SQLParseEngine; @@ -26,6 +25,9 @@ import org.apache.shardingsphere.core.parse.sql.statement.dal.DALStatement; import org.apache.shardingsphere.core.parse.sql.statement.dal.dialect.mysql.ShowDatabasesStatement; import org.apache.shardingsphere.core.parse.sql.statement.dal.dialect.mysql.UseStatement; +import org.apache.shardingsphere.core.parse.sql.statement.tcl.BeginTransactionStatement; +import org.apache.shardingsphere.core.parse.sql.statement.tcl.CommitStatement; +import org.apache.shardingsphere.core.parse.sql.statement.tcl.RollbackStatement; import org.apache.shardingsphere.core.parse.sql.statement.tcl.SetAutoCommitStatement; import org.apache.shardingsphere.core.parse.sql.statement.tcl.TCLStatement; import org.apache.shardingsphere.shardingproxy.backend.communication.jdbc.connection.BackendConnection; @@ -65,11 +67,6 @@ public static TextProtocolBackendHandler newInstance(final DatabaseType database if (sql.toUpperCase().startsWith(ShardingCTLBackendHandlerFactory.SCTL)) { return ShardingCTLBackendHandlerFactory.newInstance(sql, backendConnection); } - // TODO use sql parser engine instead of string compare - Optional transactionOperationType = TransactionOperationType.getOperationType(sql.toUpperCase()); - if (transactionOperationType.isPresent()) { - return new TransactionBackendHandler(transactionOperationType.get(), backendConnection); - } SQLStatement sqlStatement = new SQLParseEngine(MasterSlaveParseRuleRegistry.getInstance(), databaseType, sql, null, null).parse(); if (sqlStatement instanceof TCLStatement) { return createTCLBackendHandler((TCLStatement) sqlStatement, backendConnection); @@ -78,10 +75,22 @@ public static TextProtocolBackendHandler newInstance(final DatabaseType database } private static TextProtocolBackendHandler createTCLBackendHandler(final TCLStatement tclStatement, final BackendConnection backendConnection) { - if (tclStatement instanceof SetAutoCommitStatement && ((SetAutoCommitStatement) tclStatement).isAutoCommit()) { - return backendConnection.getStateHandler().isInTransaction() ? new TransactionBackendHandler(TransactionOperationType.COMMIT, backendConnection) : new SkipBackendHandler(); + if (tclStatement instanceof BeginTransactionStatement) { + return new TransactionBackendHandler(TransactionOperationType.BEGIN, backendConnection); + } + if (tclStatement instanceof SetAutoCommitStatement) { + if (((SetAutoCommitStatement) tclStatement).isAutoCommit()) { + return backendConnection.getStateHandler().isInTransaction() ? new TransactionBackendHandler(TransactionOperationType.COMMIT, backendConnection) : new SkipBackendHandler(); + } + return new TransactionBackendHandler(TransactionOperationType.BEGIN, backendConnection); + } + if (tclStatement instanceof CommitStatement) { + return new TransactionBackendHandler(TransactionOperationType.COMMIT, backendConnection); + } + if (tclStatement instanceof RollbackStatement) { + return new TransactionBackendHandler(TransactionOperationType.ROLLBACK, backendConnection); } - return new SkipBackendHandler(); + return new BroadcastBackendHandler(tclStatement.getLogicSQL(), backendConnection); } private static TextProtocolBackendHandler createDALBackendHandler(final SQLStatement sqlStatement, final String sql, final BackendConnection backendConnection) { diff --git a/sharding-proxy/sharding-proxy-backend/src/test/java/org/apache/shardingsphere/shardingproxy/backend/TextProtocolBackendHandlerFactoryTest.java b/sharding-proxy/sharding-proxy-backend/src/test/java/org/apache/shardingsphere/shardingproxy/backend/TextProtocolBackendHandlerFactoryTest.java index 6fcb0a5b34753..2bda24432fd52 100644 --- a/sharding-proxy/sharding-proxy-backend/src/test/java/org/apache/shardingsphere/shardingproxy/backend/TextProtocolBackendHandlerFactoryTest.java +++ b/sharding-proxy/sharding-proxy-backend/src/test/java/org/apache/shardingsphere/shardingproxy/backend/TextProtocolBackendHandlerFactoryTest.java @@ -31,6 +31,7 @@ import org.apache.shardingsphere.shardingproxy.backend.text.sctl.set.ShardingCTLSetBackendHandler; import org.apache.shardingsphere.shardingproxy.backend.text.transaction.SkipBackendHandler; import org.apache.shardingsphere.shardingproxy.backend.text.transaction.TransactionBackendHandler; +import org.apache.shardingsphere.spi.database.DatabaseType; import org.apache.shardingsphere.transaction.ShardingTransactionManagerEngine; import org.apache.shardingsphere.transaction.core.TransactionType; import org.junit.Before; @@ -47,6 +48,8 @@ @RunWith(MockitoJUnitRunner.class) public final class TextProtocolBackendHandlerFactoryTest { + private final DatabaseType databaseType = DatabaseTypes.getActualDatabaseType("MySQL"); + @Mock private BackendConnection backendConnection; @@ -63,16 +66,16 @@ public void setUp() { @Test public void assertNewTransactionInstance() { String sql = "BEGIN"; - TextProtocolBackendHandler actual = TextProtocolBackendHandlerFactory.newInstance(DatabaseTypes.getActualDatabaseType("MySQL"), sql, backendConnection); + TextProtocolBackendHandler actual = TextProtocolBackendHandlerFactory.newInstance(databaseType, sql, backendConnection); assertThat(actual, instanceOf(TransactionBackendHandler.class)); sql = "START TRANSACTION"; - actual = TextProtocolBackendHandlerFactory.newInstance(DatabaseTypes.getActualDatabaseType("MySQL"), sql, backendConnection); + actual = TextProtocolBackendHandlerFactory.newInstance(databaseType, sql, backendConnection); assertThat(actual, instanceOf(TransactionBackendHandler.class)); sql = "SET AUTOCOMMIT=0"; - actual = TextProtocolBackendHandlerFactory.newInstance(DatabaseTypes.getActualDatabaseType("MySQL"), sql, backendConnection); + actual = TextProtocolBackendHandlerFactory.newInstance(databaseType, sql, backendConnection); assertThat(actual, instanceOf(TransactionBackendHandler.class)); sql = "SET @@SESSION.AUTOCOMMIT = OFF"; - actual = TextProtocolBackendHandlerFactory.newInstance(DatabaseTypes.getActualDatabaseType("MySQL"), sql, backendConnection); + actual = TextProtocolBackendHandlerFactory.newInstance(databaseType, sql, backendConnection); assertThat(actual, instanceOf(TransactionBackendHandler.class)); } @@ -82,7 +85,7 @@ public void assertNewTransactionBackendHandlerInstanceOfCommit() { when(backendConnection.getStateHandler()).thenReturn(stateHandler); when(stateHandler.isInTransaction()).thenReturn(true); String sql = "SET AUTOCOMMIT=1"; - TextProtocolBackendHandler actual = TextProtocolBackendHandlerFactory.newInstance(DatabaseTypes.getActualDatabaseType("MySQL"), sql, backendConnection); + TextProtocolBackendHandler actual = TextProtocolBackendHandlerFactory.newInstance(databaseType, sql, backendConnection); assertThat(actual, instanceOf(TransactionBackendHandler.class)); } @@ -92,7 +95,7 @@ public void assertNewTransactionBackendHandlerInstanceOfCommitWithScope() { when(backendConnection.getStateHandler()).thenReturn(stateHandler); when(stateHandler.isInTransaction()).thenReturn(true); String sql = "SET @@SESSION.AUTOCOMMIT = ON"; - TextProtocolBackendHandler actual = TextProtocolBackendHandlerFactory.newInstance(DatabaseTypes.getActualDatabaseType("MySQL"), sql, backendConnection); + TextProtocolBackendHandler actual = TextProtocolBackendHandlerFactory.newInstance(databaseType, sql, backendConnection); assertThat(actual, instanceOf(TransactionBackendHandler.class)); } @@ -102,42 +105,42 @@ public void assertNewIgnoreBackendHandlerInstance() { ConnectionStateHandler stateHandler = mock(ConnectionStateHandler.class); when(backendConnection.getStateHandler()).thenReturn(stateHandler); when(stateHandler.isInTransaction()).thenReturn(false); - TextProtocolBackendHandler actual = TextProtocolBackendHandlerFactory.newInstance(DatabaseTypes.getActualDatabaseType("MySQL"), sql, backendConnection); + TextProtocolBackendHandler actual = TextProtocolBackendHandlerFactory.newInstance(databaseType, sql, backendConnection); assertThat(actual, instanceOf(SkipBackendHandler.class)); } @Test public void assertNewShardingCTLBackendHandlerInstance() { String sql = "sctl:set transaction_type=XA"; - TextProtocolBackendHandler actual = TextProtocolBackendHandlerFactory.newInstance(DatabaseTypes.getActualDatabaseType("MySQL"), sql, backendConnection); + TextProtocolBackendHandler actual = TextProtocolBackendHandlerFactory.newInstance(databaseType, sql, backendConnection); assertThat(actual, instanceOf(ShardingCTLSetBackendHandler.class)); } @Test public void assertNewSchemaBroadcastBackendHandlerInstance() { String sql = "set @num=1"; - TextProtocolBackendHandler actual = TextProtocolBackendHandlerFactory.newInstance(DatabaseTypes.getActualDatabaseType("MySQL"), sql, backendConnection); + TextProtocolBackendHandler actual = TextProtocolBackendHandlerFactory.newInstance(databaseType, sql, backendConnection); assertThat(actual, instanceOf(BroadcastBackendHandler.class)); } @Test public void assertNewUseSchemaBackendHandlerInstance() { String sql = "use sharding_db"; - TextProtocolBackendHandler actual = TextProtocolBackendHandlerFactory.newInstance(DatabaseTypes.getActualDatabaseType("MySQL"), sql, backendConnection); + TextProtocolBackendHandler actual = TextProtocolBackendHandlerFactory.newInstance(databaseType, sql, backendConnection); assertThat(actual, instanceOf(UseDatabaseBackendHandler.class)); } @Test public void assertNewShowDatabasesBackendHandlerInstance() { String sql = "show databases;"; - TextProtocolBackendHandler actual = TextProtocolBackendHandlerFactory.newInstance(DatabaseTypes.getActualDatabaseType("MySQL"), sql, backendConnection); + TextProtocolBackendHandler actual = TextProtocolBackendHandlerFactory.newInstance(databaseType, sql, backendConnection); assertThat(actual, instanceOf(ShowDatabasesBackendHandler.class)); } @Test public void assertNewDefaultInstance() { String sql = "select * from t_order limit 1"; - TextProtocolBackendHandler actual = TextProtocolBackendHandlerFactory.newInstance(DatabaseTypes.getActualDatabaseType("MySQL"), sql, backendConnection); + TextProtocolBackendHandler actual = TextProtocolBackendHandlerFactory.newInstance(databaseType, sql, backendConnection); assertThat(actual, instanceOf(QueryBackendHandler.class)); } } diff --git a/sharding-transaction/sharding-transaction-core/src/main/java/org/apache/shardingsphere/transaction/core/TransactionOperationType.java b/sharding-transaction/sharding-transaction-core/src/main/java/org/apache/shardingsphere/transaction/core/TransactionOperationType.java index 214ba9b16fd88..4c72da980a28f 100644 --- a/sharding-transaction/sharding-transaction-core/src/main/java/org/apache/shardingsphere/transaction/core/TransactionOperationType.java +++ b/sharding-transaction/sharding-transaction-core/src/main/java/org/apache/shardingsphere/transaction/core/TransactionOperationType.java @@ -17,8 +17,6 @@ package org.apache.shardingsphere.transaction.core; -import com.google.common.base.Optional; - /** * Transaction operation type. * @@ -27,28 +25,5 @@ */ public enum TransactionOperationType { - BEGIN, COMMIT, ROLLBACK, SET_TRANSACTION, IGNORE; - - /** - * Get operation type. - * - * @param sql SQL - * @return transaction operation type - */ - // TODO :hongjun move to TCLParser, need parse comment etc - public static Optional getOperationType(final String sql) { - switch (sql.toUpperCase()) { - case "BEGIN": - case "START TRANSACTION": - case "SET AUTOCOMMIT=0": - case "SET @@SESSION.AUTOCOMMIT = OFF": - return Optional.of(TransactionOperationType.BEGIN); - case "COMMIT": - return Optional.of(TransactionOperationType.COMMIT); - case "ROLLBACK": - return Optional.of(TransactionOperationType.ROLLBACK); - default: - return Optional.absent(); - } - } + BEGIN, COMMIT, ROLLBACK } From c8233c652769a9f3c5811242f7bce1c0ce409262 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Sat, 15 Jun 2019 22:09:38 +0800 Subject: [PATCH 253/283] for #2563, Use parse engine to parse GUI_SQL on TextProtocolBackendHandlerFactory --- .../TextProtocolBackendHandlerFactory.java | 30 ++++---- ...TextProtocolBackendHandlerFactoryTest.java | 71 +++++++++++++------ 2 files changed, 62 insertions(+), 39 deletions(-) diff --git a/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/text/TextProtocolBackendHandlerFactory.java b/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/text/TextProtocolBackendHandlerFactory.java index bdca01524e62d..f5ffa4bde5564 100644 --- a/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/text/TextProtocolBackendHandlerFactory.java +++ b/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/text/TextProtocolBackendHandlerFactory.java @@ -23,8 +23,11 @@ import org.apache.shardingsphere.core.parse.rule.registry.MasterSlaveParseRuleRegistry; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.sql.statement.dal.DALStatement; +import org.apache.shardingsphere.core.parse.sql.statement.dal.SetStatement; import org.apache.shardingsphere.core.parse.sql.statement.dal.dialect.mysql.ShowDatabasesStatement; +import org.apache.shardingsphere.core.parse.sql.statement.dal.dialect.mysql.ShowOtherStatement; import org.apache.shardingsphere.core.parse.sql.statement.dal.dialect.mysql.UseStatement; +import org.apache.shardingsphere.core.parse.sql.statement.dal.dialect.postgresql.ShowStatement; import org.apache.shardingsphere.core.parse.sql.statement.tcl.BeginTransactionStatement; import org.apache.shardingsphere.core.parse.sql.statement.tcl.CommitStatement; import org.apache.shardingsphere.core.parse.sql.statement.tcl.RollbackStatement; @@ -42,9 +45,6 @@ import org.apache.shardingsphere.spi.database.DatabaseType; import org.apache.shardingsphere.transaction.core.TransactionOperationType; -import java.util.Arrays; -import java.util.List; - /** * Text protocol backend handler factory. * @@ -53,8 +53,6 @@ @NoArgsConstructor(access = AccessLevel.PRIVATE) public final class TextProtocolBackendHandlerFactory { - private static final List GUI_SQL = Arrays.asList("SET", "SHOW VARIABLES LIKE", "SHOW CHARACTER SET", "SHOW COLLATION"); - /** * Create new instance of text protocol backend handler. * @@ -71,7 +69,10 @@ public static TextProtocolBackendHandler newInstance(final DatabaseType database if (sqlStatement instanceof TCLStatement) { return createTCLBackendHandler((TCLStatement) sqlStatement, backendConnection); } - return sqlStatement instanceof DALStatement ? createDALBackendHandler(sqlStatement, sql, backendConnection) : new QueryBackendHandler(sql, backendConnection); + if (sqlStatement instanceof DALStatement) { + return createDALBackendHandler((DALStatement) sqlStatement, sql, backendConnection); + } + return new QueryBackendHandler(sql, backendConnection); } private static TextProtocolBackendHandler createTCLBackendHandler(final TCLStatement tclStatement, final BackendConnection backendConnection) { @@ -93,19 +94,16 @@ private static TextProtocolBackendHandler createTCLBackendHandler(final TCLState return new BroadcastBackendHandler(tclStatement.getLogicSQL(), backendConnection); } - private static TextProtocolBackendHandler createDALBackendHandler(final SQLStatement sqlStatement, final String sql, final BackendConnection backendConnection) { - // TODO we should refactor the broadcast logic in future, exclude those broadcast SQL temporary. - for (String each : GUI_SQL) { - if (sql.toUpperCase().startsWith(each)) { - return new BroadcastBackendHandler(sql, backendConnection); - } - } - if (sqlStatement instanceof UseStatement) { - return new UseDatabaseBackendHandler((UseStatement) sqlStatement, backendConnection); + private static TextProtocolBackendHandler createDALBackendHandler(final DALStatement dalStatement, final String sql, final BackendConnection backendConnection) { + if (dalStatement instanceof UseStatement) { + return new UseDatabaseBackendHandler((UseStatement) dalStatement, backendConnection); } - if (sqlStatement instanceof ShowDatabasesStatement) { + if (dalStatement instanceof ShowDatabasesStatement) { return new ShowDatabasesBackendHandler(backendConnection); } + if (dalStatement instanceof SetStatement || dalStatement instanceof ShowOtherStatement || dalStatement instanceof ShowStatement) { + return new BroadcastBackendHandler(sql, backendConnection); + } return new UnicastBackendHandler(sql, backendConnection); } } diff --git a/sharding-proxy/sharding-proxy-backend/src/test/java/org/apache/shardingsphere/shardingproxy/backend/TextProtocolBackendHandlerFactoryTest.java b/sharding-proxy/sharding-proxy-backend/src/test/java/org/apache/shardingsphere/shardingproxy/backend/TextProtocolBackendHandlerFactoryTest.java index 2bda24432fd52..f9e71b547912a 100644 --- a/sharding-proxy/sharding-proxy-backend/src/test/java/org/apache/shardingsphere/shardingproxy/backend/TextProtocolBackendHandlerFactoryTest.java +++ b/sharding-proxy/sharding-proxy-backend/src/test/java/org/apache/shardingsphere/shardingproxy/backend/TextProtocolBackendHandlerFactoryTest.java @@ -64,23 +64,42 @@ public void setUp() { } @Test - public void assertNewTransactionInstance() { + public void assertNewInstanceWithSCTL() { + String sql = "sctl:set transaction_type=XA"; + TextProtocolBackendHandler actual = TextProtocolBackendHandlerFactory.newInstance(databaseType, sql, backendConnection); + assertThat(actual, instanceOf(ShardingCTLSetBackendHandler.class)); + } + + @Test + public void assertNewInstanceWithBegin() { String sql = "BEGIN"; TextProtocolBackendHandler actual = TextProtocolBackendHandlerFactory.newInstance(databaseType, sql, backendConnection); assertThat(actual, instanceOf(TransactionBackendHandler.class)); - sql = "START TRANSACTION"; - actual = TextProtocolBackendHandlerFactory.newInstance(databaseType, sql, backendConnection); + } + + @Test + public void assertNewInstanceWithStartTransaction() { + String sql = "START TRANSACTION"; + TextProtocolBackendHandler actual = TextProtocolBackendHandlerFactory.newInstance(databaseType, sql, backendConnection); assertThat(actual, instanceOf(TransactionBackendHandler.class)); - sql = "SET AUTOCOMMIT=0"; - actual = TextProtocolBackendHandlerFactory.newInstance(databaseType, sql, backendConnection); + } + + @Test + public void assertNewInstanceWithSetAutoCommitToOff() { + String sql = "SET AUTOCOMMIT=0"; + TextProtocolBackendHandler actual = TextProtocolBackendHandlerFactory.newInstance(databaseType, sql, backendConnection); assertThat(actual, instanceOf(TransactionBackendHandler.class)); - sql = "SET @@SESSION.AUTOCOMMIT = OFF"; - actual = TextProtocolBackendHandlerFactory.newInstance(databaseType, sql, backendConnection); + } + + @Test + public void assertNewInstanceWithScopeSetAutoCommitToOff() { + String sql = "SET @@SESSION.AUTOCOMMIT = OFF"; + TextProtocolBackendHandler actual = TextProtocolBackendHandlerFactory.newInstance(databaseType, sql, backendConnection); assertThat(actual, instanceOf(TransactionBackendHandler.class)); } @Test - public void assertNewTransactionBackendHandlerInstanceOfCommit() { + public void assertNewInstanceWithSetAutoCommitToOnForInTransaction() { ConnectionStateHandler stateHandler = mock(ConnectionStateHandler.class); when(backendConnection.getStateHandler()).thenReturn(stateHandler); when(stateHandler.isInTransaction()).thenReturn(true); @@ -90,7 +109,7 @@ public void assertNewTransactionBackendHandlerInstanceOfCommit() { } @Test - public void assertNewTransactionBackendHandlerInstanceOfCommitWithScope() { + public void assertNewInstanceWithScopeSetAutoCommitToOnForInTransaction() { ConnectionStateHandler stateHandler = mock(ConnectionStateHandler.class); when(backendConnection.getStateHandler()).thenReturn(stateHandler); when(stateHandler.isInTransaction()).thenReturn(true); @@ -100,7 +119,7 @@ public void assertNewTransactionBackendHandlerInstanceOfCommitWithScope() { } @Test - public void assertNewIgnoreBackendHandlerInstance() { + public void assertNewInstanceWithSetAutoCommitToOnForNotInTransaction() { String sql = "SET AUTOCOMMIT=1"; ConnectionStateHandler stateHandler = mock(ConnectionStateHandler.class); when(backendConnection.getStateHandler()).thenReturn(stateHandler); @@ -110,35 +129,41 @@ public void assertNewIgnoreBackendHandlerInstance() { } @Test - public void assertNewShardingCTLBackendHandlerInstance() { - String sql = "sctl:set transaction_type=XA"; + public void assertNewInstanceWithUse() { + String sql = "use sharding_db"; TextProtocolBackendHandler actual = TextProtocolBackendHandlerFactory.newInstance(databaseType, sql, backendConnection); - assertThat(actual, instanceOf(ShardingCTLSetBackendHandler.class)); + assertThat(actual, instanceOf(UseDatabaseBackendHandler.class)); } @Test - public void assertNewSchemaBroadcastBackendHandlerInstance() { - String sql = "set @num=1"; + public void assertNewInstanceWithShowDatabase() { + String sql = "show databases"; TextProtocolBackendHandler actual = TextProtocolBackendHandlerFactory.newInstance(databaseType, sql, backendConnection); - assertThat(actual, instanceOf(BroadcastBackendHandler.class)); + assertThat(actual, instanceOf(ShowDatabasesBackendHandler.class)); } @Test - public void assertNewUseSchemaBackendHandlerInstance() { - String sql = "use sharding_db"; + public void assertNewInstanceWithSet() { + String sql = "set @num=1"; TextProtocolBackendHandler actual = TextProtocolBackendHandlerFactory.newInstance(databaseType, sql, backendConnection); - assertThat(actual, instanceOf(UseDatabaseBackendHandler.class)); + assertThat(actual, instanceOf(BroadcastBackendHandler.class)); } @Test - public void assertNewShowDatabasesBackendHandlerInstance() { - String sql = "show databases;"; + public void assertNewInstanceWithShow() { + String sql = "SHOW VARIABLES LIKE %x%"; TextProtocolBackendHandler actual = TextProtocolBackendHandlerFactory.newInstance(databaseType, sql, backendConnection); - assertThat(actual, instanceOf(ShowDatabasesBackendHandler.class)); + assertThat(actual, instanceOf(BroadcastBackendHandler.class)); + sql = "SHOW CHARACTER SET"; + actual = TextProtocolBackendHandlerFactory.newInstance(databaseType, sql, backendConnection); + assertThat(actual, instanceOf(BroadcastBackendHandler.class)); + sql = "SHOW COLLATION"; + actual = TextProtocolBackendHandlerFactory.newInstance(databaseType, sql, backendConnection); + assertThat(actual, instanceOf(BroadcastBackendHandler.class)); } @Test - public void assertNewDefaultInstance() { + public void assertNewInstanceWithQuery() { String sql = "select * from t_order limit 1"; TextProtocolBackendHandler actual = TextProtocolBackendHandlerFactory.newInstance(databaseType, sql, backendConnection); assertThat(actual, instanceOf(QueryBackendHandler.class)); From 41efcf6d5d1cf1ca8e4cf349561d991bcb309e4e Mon Sep 17 00:00:00 2001 From: KomachiSion <263976490@qq.com> Date: Mon, 17 Jun 2019 09:13:30 +0800 Subject: [PATCH 254/283] For #2144, Add Renew event for sharding-proxy EncryptSchema --- .../backend/schema/EncryptSchema.java | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/schema/EncryptSchema.java b/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/schema/EncryptSchema.java index 8e1603a59b3f0..0e79e941f36da 100644 --- a/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/schema/EncryptSchema.java +++ b/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/schema/EncryptSchema.java @@ -17,7 +17,9 @@ package org.apache.shardingsphere.shardingproxy.backend.schema; +import com.google.common.eventbus.Subscribe; import lombok.Getter; +import lombok.SneakyThrows; import org.apache.shardingsphere.api.config.encryptor.EncryptRuleConfiguration; import org.apache.shardingsphere.api.config.sharding.ShardingRuleConfiguration; import org.apache.shardingsphere.core.metadata.ShardingMetaData; @@ -26,6 +28,7 @@ import org.apache.shardingsphere.core.parse.entry.EncryptSQLParseEntry; import org.apache.shardingsphere.core.rule.EncryptRule; import org.apache.shardingsphere.core.rule.ShardingRule; +import org.apache.shardingsphere.orchestration.internal.registry.config.event.EncryptRuleChangedEvent; import org.apache.shardingsphere.shardingproxy.config.yaml.YamlDataSourceParameter; import java.util.Map; @@ -38,13 +41,13 @@ @Getter public final class EncryptSchema extends LogicSchema { - private final EncryptRule encryptRule; - private final ShardingMetaData metaData; private final ShardingRule shardingRule; - private final EncryptSQLParseEntry parseEngine; + private EncryptRule encryptRule; + + private EncryptSQLParseEntry parseEngine; public EncryptSchema(final String name, final Map dataSources, final EncryptRuleConfiguration encryptRuleConfiguration) { super(name, dataSources); @@ -59,4 +62,16 @@ private ShardingMetaData createShardingMetaData() { ShardingTableMetaData shardingTableMetaData = new ShardingTableMetaData(getTableMetaDataInitializer(shardingDataSourceMetaData).load(shardingRule)); return new ShardingMetaData(shardingDataSourceMetaData, shardingTableMetaData); } + + /** + * Renew encrypt rule. + * + * @param encryptRuleChangedEvent encrypt configuration changed event + */ + @Subscribe + @SneakyThrows + public final synchronized void renew(final EncryptRuleChangedEvent encryptRuleChangedEvent) { + encryptRule = new EncryptRule(encryptRuleChangedEvent.getEncryptRuleConfiguration()); + parseEngine = new EncryptSQLParseEntry(LogicSchemas.getInstance().getDatabaseType(), encryptRule, metaData.getTable()); + } } From 4bb7a7bbf2d1d5e09fa9c027584e031d4e9c8953 Mon Sep 17 00:00:00 2001 From: KomachiSion <263976490@qq.com> Date: Mon, 17 Jun 2019 09:46:23 +0800 Subject: [PATCH 255/283] for checkstyle --- .../shardingproxy/backend/schema/EncryptSchema.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/schema/EncryptSchema.java b/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/schema/EncryptSchema.java index 0e79e941f36da..d49ed465f452d 100644 --- a/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/schema/EncryptSchema.java +++ b/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/schema/EncryptSchema.java @@ -70,7 +70,7 @@ private ShardingMetaData createShardingMetaData() { */ @Subscribe @SneakyThrows - public final synchronized void renew(final EncryptRuleChangedEvent encryptRuleChangedEvent) { + public synchronized void renew(final EncryptRuleChangedEvent encryptRuleChangedEvent) { encryptRule = new EncryptRule(encryptRuleChangedEvent.getEncryptRuleConfiguration()); parseEngine = new EncryptSQLParseEntry(LogicSchemas.getInstance().getDatabaseType(), encryptRule, metaData.getTable()); } From ed17dac1a6c5bdbca39d836caed03c2dfbbdafba Mon Sep 17 00:00:00 2001 From: KomachiSion <263976490@qq.com> Date: Mon, 17 Jun 2019 11:00:22 +0800 Subject: [PATCH 256/283] Fix spelling errors --- .../api/OrchestrationEncryptDataSourceFactory.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sharding-jdbc/sharding-jdbc-orchestration/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/api/OrchestrationEncryptDataSourceFactory.java b/sharding-jdbc/sharding-jdbc-orchestration/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/api/OrchestrationEncryptDataSourceFactory.java index 25558b1e17646..14c882a953089 100644 --- a/sharding-jdbc/sharding-jdbc-orchestration/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/api/OrchestrationEncryptDataSourceFactory.java +++ b/sharding-jdbc/sharding-jdbc-orchestration/src/main/java/org/apache/shardingsphere/shardingjdbc/orchestration/api/OrchestrationEncryptDataSourceFactory.java @@ -26,7 +26,7 @@ import java.util.Properties; /** - * Orchhestration encrypt data source factory. + * Orchestration encrypt data source factory. * * @author yangyi */ From 776e596a5766689e3a67b65034d45db9cba493c8 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Mon, 17 Jun 2019 11:17:56 +0800 Subject: [PATCH 257/283] for #2563, remove useless GUICompatibilityBackendHandler --- .../admin/GUICompatibilityBackendHandler.java | 46 ------------------- 1 file changed, 46 deletions(-) delete mode 100644 sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/text/admin/GUICompatibilityBackendHandler.java diff --git a/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/text/admin/GUICompatibilityBackendHandler.java b/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/text/admin/GUICompatibilityBackendHandler.java deleted file mode 100644 index 3bf72e6036c41..0000000000000 --- a/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/text/admin/GUICompatibilityBackendHandler.java +++ /dev/null @@ -1,46 +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.shardingproxy.backend.text.admin; - -import org.apache.shardingsphere.shardingproxy.backend.response.BackendResponse; -import org.apache.shardingsphere.shardingproxy.backend.response.query.QueryData; -import org.apache.shardingsphere.shardingproxy.backend.response.update.UpdateResponse; -import org.apache.shardingsphere.shardingproxy.backend.text.TextProtocolBackendHandler; - -/** - * GUI compatibility backend handler. - * - * @author zhangyonglun - */ -public final class GUICompatibilityBackendHandler implements TextProtocolBackendHandler { - - @Override - public BackendResponse execute() { - return new UpdateResponse(); - } - - @Override - public boolean next() { - return false; - } - - @Override - public QueryData getQueryData() { - return null; - } -} From abf0bb59fe9ab2f474f9991e85681d90468e7e7b Mon Sep 17 00:00:00 2001 From: terrymanu Date: Mon, 17 Jun 2019 12:36:02 +0800 Subject: [PATCH 258/283] for #2567, Move generatedKey process to sharding-core-optimize --- .../core/optimize/OptimizeEngineFactory.java | 8 ++-- .../sharding/dml/InsertOptimizeEngine.java | 13 +++-- .../core/optimize/result/OptimizeResult.java | 12 +++++ .../sharding/InsertOptimizeEngineTest.java | 48 +++++-------------- .../fixture/TestShardingKeyGenerator.java | 44 +++++++++++++++++ ...dingsphere.spi.keygen.ShardingKeyGenerator | 18 +++++++ .../test/resources/yaml/optimize-rule.yaml | 15 ++---- .../router/sharding/ParsingSQLRouter.java | 6 +-- 8 files changed, 103 insertions(+), 61 deletions(-) create mode 100644 sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/fixture/TestShardingKeyGenerator.java create mode 100644 sharding-core/sharding-core-optimize/src/test/resources/META-INF/services/org.apache.shardingsphere.spi.keygen.ShardingKeyGenerator diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java index c982f19c15f1a..918e9afeec418 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java @@ -24,8 +24,8 @@ import org.apache.shardingsphere.core.optimize.engine.encrypt.EncryptDefaultOptimizeEngine; import org.apache.shardingsphere.core.optimize.engine.encrypt.EncryptInsertOptimizeEngine; import org.apache.shardingsphere.core.optimize.engine.sharding.ddl.DDLOptimizeEngine; -import org.apache.shardingsphere.core.optimize.engine.sharding.dql.QueryOptimizeEngine; import org.apache.shardingsphere.core.optimize.engine.sharding.dml.InsertOptimizeEngine; +import org.apache.shardingsphere.core.optimize.engine.sharding.dql.QueryOptimizeEngine; import org.apache.shardingsphere.core.parse.sql.context.condition.Conditions; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.sql.statement.ddl.DDLStatement; @@ -52,14 +52,12 @@ public final class OptimizeEngineFactory { * @param shardingRule sharding rule * @param sqlStatement SQL statement * @param parameters parameters - * @param generatedKey generated key * @param shardingTableMetaData sharding table metadata * @return optimize engine instance */ - public static OptimizeEngine newInstance(final ShardingRule shardingRule, - final SQLStatement sqlStatement, final List parameters, final GeneratedKey generatedKey, final ShardingTableMetaData shardingTableMetaData) { + public static OptimizeEngine newInstance(final ShardingRule shardingRule, final SQLStatement sqlStatement, final List parameters, final ShardingTableMetaData shardingTableMetaData) { if (sqlStatement instanceof InsertStatement) { - return new InsertOptimizeEngine(shardingRule, (InsertStatement) sqlStatement, parameters, generatedKey); + return new InsertOptimizeEngine(shardingRule, (InsertStatement) sqlStatement, parameters); } if (sqlStatement instanceof DMLStatement) { return new QueryOptimizeEngine(sqlStatement, parameters, ((DMLStatement) sqlStatement).getShardingConditions()); diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/InsertOptimizeEngine.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/InsertOptimizeEngine.java index 2fa5af1c387a9..f62194f9a7f76 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/InsertOptimizeEngine.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/InsertOptimizeEngine.java @@ -59,12 +59,11 @@ public final class InsertOptimizeEngine implements OptimizeEngine { private final List parameters; - private final GeneratedKey generatedKey; - @Override public OptimizeResult optimize() { List andConditions = insertStatement.getShardingConditions().getOrConditions(); - Iterator> generatedKeys = createGeneratedKeys(); + Optional generatedKey = GeneratedKey.getGenerateKey(shardingRule, parameters, insertStatement); + Iterator> generatedKeys = generatedKey.isPresent() ? createGeneratedKeys(generatedKey.get()) : null; List shardingConditions = new ArrayList<>(andConditions.size()); InsertOptimizeResult insertOptimizeResult = new InsertOptimizeResult(insertStatement.getColumnNames()); int parametersCount = 0; @@ -86,10 +85,14 @@ public OptimizeResult optimize() { } shardingConditions.add(shardingCondition); } - return new OptimizeResult(new ShardingConditions(shardingConditions), insertOptimizeResult); + OptimizeResult result = new OptimizeResult(new ShardingConditions(shardingConditions), insertOptimizeResult); + if (generatedKey.isPresent()) { + result.setGeneratedKey(generatedKey.get()); + } + return result; } - private Iterator> createGeneratedKeys() { + private Iterator> createGeneratedKeys(final GeneratedKey generatedKey) { return isNeededToAppendGeneratedKey() ? generatedKey.getGeneratedKeys().iterator() : null; } diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/result/OptimizeResult.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/result/OptimizeResult.java index 058bd1d07116f..77170f5c3c4a9 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/result/OptimizeResult.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/result/OptimizeResult.java @@ -22,6 +22,7 @@ import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.Setter; +import org.apache.shardingsphere.core.optimize.GeneratedKey; import org.apache.shardingsphere.core.optimize.condition.ShardingCondition; import org.apache.shardingsphere.core.optimize.condition.ShardingConditions; import org.apache.shardingsphere.core.optimize.pagination.Pagination; @@ -46,6 +47,8 @@ public final class OptimizeResult { private Pagination pagination; + private GeneratedKey generatedKey; + private String logicTableNameForDropIndex; public OptimizeResult(final ShardingConditions shardingConditions) { @@ -65,6 +68,15 @@ public Optional getInsertOptimizeResult() { return Optional.fromNullable(insertOptimizeResult); } + /** + * Get generated key. + * + * @return generated key + */ + public Optional getGeneratedKey() { + return Optional.fromNullable(generatedKey); + } + /** * Get logic table name for drop index. * diff --git a/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/InsertOptimizeEngineTest.java b/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/InsertOptimizeEngineTest.java index 9d324fc547279..28ba6fce921d5 100644 --- a/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/InsertOptimizeEngineTest.java +++ b/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/InsertOptimizeEngineTest.java @@ -18,7 +18,6 @@ package org.apache.shardingsphere.core.optimize.engine.sharding; import com.google.common.base.Preconditions; -import org.apache.shardingsphere.core.optimize.GeneratedKey; import org.apache.shardingsphere.core.optimize.engine.sharding.dml.InsertOptimizeEngine; import org.apache.shardingsphere.core.optimize.result.OptimizeResult; import org.apache.shardingsphere.core.parse.sql.context.condition.AndCondition; @@ -198,10 +197,7 @@ private void initializeInsertSetWithoutPlaceholderWithEncrypt() { @Test public void assertOptimizeInsertValuesWithPlaceholderWithGeneratedKey() { - GeneratedKey generatedKey = new GeneratedKey("order_id"); - generatedKey.getGeneratedKeys().add(1); - generatedKey.getGeneratedKeys().add(2); - OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertValuesStatementWithPlaceholder, insertValuesParameters, generatedKey).optimize(); + OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertValuesStatementWithPlaceholder, insertValuesParameters).optimize(); assertFalse(actual.getShardingConditions().isAlwaysFalse()); assertThat(actual.getShardingConditions().getShardingConditions().size(), is(2)); assertTrue(actual.getInsertOptimizeResult().isPresent()); @@ -212,21 +208,18 @@ public void assertOptimizeInsertValuesWithPlaceholderWithGeneratedKey() { assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters()[2], CoreMatchers.is(1)); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(1).getParameters()[0], CoreMatchers.is(11)); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(1).getParameters()[1], CoreMatchers.is("init")); - assertThat(actual.getInsertOptimizeResult().get().getUnits().get(1).getParameters()[2], CoreMatchers.is(2)); + assertThat(actual.getInsertOptimizeResult().get().getUnits().get(1).getParameters()[2], CoreMatchers.is(1)); assertThat(actual.getShardingConditions().getShardingConditions().get(0).getShardingValues().size(), is(2)); assertThat(actual.getShardingConditions().getShardingConditions().get(1).getShardingValues().size(), is(2)); assertShardingValue((ListRouteValue) actual.getShardingConditions().getShardingConditions().get(0).getShardingValues().get(0), 10); assertShardingValue((ListRouteValue) actual.getShardingConditions().getShardingConditions().get(0).getShardingValues().get(1), 1); assertShardingValue((ListRouteValue) actual.getShardingConditions().getShardingConditions().get(1).getShardingValues().get(0), 11); - assertShardingValue((ListRouteValue) actual.getShardingConditions().getShardingConditions().get(1).getShardingValues().get(1), 2); + assertShardingValue((ListRouteValue) actual.getShardingConditions().getShardingConditions().get(1).getShardingValues().get(1), 1); } @Test public void assertOptimizeInsertValuesWithPlaceholderWithGeneratedKeyWithEncrypt() { - GeneratedKey generatedKey = new GeneratedKey("order_id"); - generatedKey.getGeneratedKeys().add(1); - generatedKey.getGeneratedKeys().add(2); - OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertValuesStatementWithPlaceholderWithEncrypt, insertValuesParameters, generatedKey).optimize(); + OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertValuesStatementWithPlaceholderWithEncrypt, insertValuesParameters).optimize(); assertFalse(actual.getShardingConditions().isAlwaysFalse()); assertThat(actual.getShardingConditions().getShardingConditions().size(), is(2)); assertTrue(actual.getInsertOptimizeResult().isPresent()); @@ -236,21 +229,18 @@ public void assertOptimizeInsertValuesWithPlaceholderWithGeneratedKeyWithEncrypt assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters()[2], CoreMatchers.is(1)); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(1).getParameters()[0], CoreMatchers.is(11)); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(1).getParameters()[1], CoreMatchers.is("init")); - assertThat(actual.getInsertOptimizeResult().get().getUnits().get(1).getParameters()[2], CoreMatchers.is(2)); + assertThat(actual.getInsertOptimizeResult().get().getUnits().get(1).getParameters()[2], CoreMatchers.is(1)); assertThat(actual.getShardingConditions().getShardingConditions().get(0).getShardingValues().size(), is(2)); assertThat(actual.getShardingConditions().getShardingConditions().get(1).getShardingValues().size(), is(2)); assertShardingValue((ListRouteValue) actual.getShardingConditions().getShardingConditions().get(0).getShardingValues().get(0), 10); assertShardingValue((ListRouteValue) actual.getShardingConditions().getShardingConditions().get(0).getShardingValues().get(1), 1); assertShardingValue((ListRouteValue) actual.getShardingConditions().getShardingConditions().get(1).getShardingValues().get(0), 11); - assertShardingValue((ListRouteValue) actual.getShardingConditions().getShardingConditions().get(1).getShardingValues().get(1), 2); + assertShardingValue((ListRouteValue) actual.getShardingConditions().getShardingConditions().get(1).getShardingValues().get(1), 1); } @Test public void assertOptimizeInsertValuesWithPlaceholderWithoutGeneratedKey() { - GeneratedKey generatedKey = new GeneratedKey("order_id"); - generatedKey.getGeneratedKeys().add(1); - generatedKey.getGeneratedKeys().add(1); - OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertValuesStatementWithPlaceholder, insertValuesParameters, generatedKey).optimize(); + OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertValuesStatementWithPlaceholder, insertValuesParameters).optimize(); assertFalse(actual.getShardingConditions().isAlwaysFalse()); assertThat(actual.getShardingConditions().getShardingConditions().size(), is(2)); assertTrue(actual.getInsertOptimizeResult().isPresent()); @@ -268,13 +258,11 @@ public void assertOptimizeInsertValuesWithPlaceholderWithoutGeneratedKey() { @Test public void assertOptimizeInsertValuesWithoutPlaceholderWithGeneratedKeyWithQueryEncrypt() { - GeneratedKey generatedKey = new GeneratedKey("order_id"); - generatedKey.getGeneratedKeys().add(1); insertValuesStatementWithoutPlaceholderWithQueryEncrypt.getColumnNames().add("user_id"); insertValuesStatementWithoutPlaceholderWithQueryEncrypt.getColumnNames().add("status"); insertValuesStatementWithoutPlaceholderWithQueryEncrypt.getValues().add( new InsertValue(Arrays.asList(new LiteralExpressionSegment(1, 2, 12), new LiteralExpressionSegment(3, 4, "a")))); - OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertValuesStatementWithoutPlaceholderWithQueryEncrypt, Collections.emptyList(), generatedKey).optimize(); + OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertValuesStatementWithoutPlaceholderWithQueryEncrypt, Collections.emptyList()).optimize(); assertThat(actual.getShardingConditions().getShardingConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(0)); @@ -284,12 +272,10 @@ public void assertOptimizeInsertValuesWithoutPlaceholderWithGeneratedKeyWithQuer @Test public void assertOptimizeInsertValuesWithoutPlaceholderWithGeneratedKey() { - GeneratedKey generatedKey = new GeneratedKey("order_id"); - generatedKey.getGeneratedKeys().add(1); insertValuesStatementWithoutPlaceholder.getColumnNames().add("user_id"); insertValuesStatementWithoutPlaceholder.getColumnNames().add("status"); insertValuesStatementWithoutPlaceholder.getValues().add(new InsertValue(Arrays.asList(new LiteralExpressionSegment(1, 2, 12), new LiteralExpressionSegment(3, 4, "a")))); - OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertValuesStatementWithoutPlaceholder, Collections.emptyList(), generatedKey).optimize(); + OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertValuesStatementWithoutPlaceholder, Collections.emptyList()).optimize(); assertThat(actual.getShardingConditions().getShardingConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(0)); @@ -299,11 +285,9 @@ public void assertOptimizeInsertValuesWithoutPlaceholderWithGeneratedKey() { @Test public void assertOptimizeInsertSetWithPlaceholderWithGeneratedKey() { - GeneratedKey generatedKey = new GeneratedKey("order_id"); - generatedKey.getGeneratedKeys().add(1); insertSetStatementWithPlaceholder.getValues().add( new InsertValue(Arrays.asList(new ParameterMarkerExpressionSegment(1, 2, 0), new ParameterMarkerExpressionSegment(3, 4, 1)))); - OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertSetStatementWithPlaceholder, insertSetParameters, generatedKey).optimize(); + OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertSetStatementWithPlaceholder, insertSetParameters).optimize(); assertThat(actual.getShardingConditions().getShardingConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(3)); @@ -315,11 +299,9 @@ public void assertOptimizeInsertSetWithPlaceholderWithGeneratedKey() { @Test public void assertOptimizeInsertSetWithPlaceholderWithGeneratedKeyWithQueryEncrypt() { - GeneratedKey generatedKey = new GeneratedKey("order_id"); - generatedKey.getGeneratedKeys().add(1); InsertValue insertValue = new InsertValue(Arrays.asList(new ParameterMarkerExpressionSegment(1, 2, 0), new ParameterMarkerExpressionSegment(3, 4, 1))); insertSetStatementWithPlaceholderWithQueryEncrypt.getValues().add(insertValue); - OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertSetStatementWithPlaceholderWithQueryEncrypt, insertSetParameters, generatedKey).optimize(); + OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertSetStatementWithPlaceholderWithQueryEncrypt, insertSetParameters).optimize(); assertThat(actual.getShardingConditions().getShardingConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(4)); @@ -332,10 +314,8 @@ public void assertOptimizeInsertSetWithPlaceholderWithGeneratedKeyWithQueryEncry @Test public void assertOptimizeInsertSetWithoutPlaceholderWithGeneratedKey() { - GeneratedKey generatedKey = new GeneratedKey("order_id"); - generatedKey.getGeneratedKeys().add(1); insertSetStatementWithoutPlaceholder.getValues().add(new InsertValue(Arrays.asList(new LiteralExpressionSegment(1, 2, 12), new LiteralExpressionSegment(3, 4, "a")))); - OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertSetStatementWithoutPlaceholder, Collections.emptyList(), generatedKey).optimize(); + OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertSetStatementWithoutPlaceholder, Collections.emptyList()).optimize(); assertThat(actual.getShardingConditions().getShardingConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(0)); @@ -345,11 +325,9 @@ public void assertOptimizeInsertSetWithoutPlaceholderWithGeneratedKey() { @Test public void assertOptimizeInsertSetWithoutPlaceholderWithGeneratedKeyWithEncrypt() { - GeneratedKey generatedKey = new GeneratedKey("order_id"); - generatedKey.getGeneratedKeys().add(1); insertSetStatementWithoutPlaceholderWithEncrypt.getValues().add( new InsertValue(Arrays.asList(new LiteralExpressionSegment(1, 2, 12), new LiteralExpressionSegment(3, 4, "a")))); - OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertSetStatementWithoutPlaceholderWithEncrypt, Collections.emptyList(), generatedKey).optimize(); + OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertSetStatementWithoutPlaceholderWithEncrypt, Collections.emptyList()).optimize(); assertThat(actual.getShardingConditions().getShardingConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(0)); diff --git a/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/fixture/TestShardingKeyGenerator.java b/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/fixture/TestShardingKeyGenerator.java new file mode 100644 index 0000000000000..ede40ff79be12 --- /dev/null +++ b/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/fixture/TestShardingKeyGenerator.java @@ -0,0 +1,44 @@ +/* + * 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.core.optimize.fixture; + +import org.apache.shardingsphere.spi.keygen.ShardingKeyGenerator; + +import java.util.Properties; + +public final class TestShardingKeyGenerator implements ShardingKeyGenerator { + + @Override + public String getType() { + return "TEST-OPTIMIZE"; + } + + @Override + public Properties getProperties() { + return new Properties(); + } + + @Override + public void setProperties(final Properties properties) { + } + + @Override + public Comparable generateKey() { + return 1; + } +} diff --git a/sharding-core/sharding-core-optimize/src/test/resources/META-INF/services/org.apache.shardingsphere.spi.keygen.ShardingKeyGenerator b/sharding-core/sharding-core-optimize/src/test/resources/META-INF/services/org.apache.shardingsphere.spi.keygen.ShardingKeyGenerator new file mode 100644 index 0000000000000..68d7ed7dd9e1f --- /dev/null +++ b/sharding-core/sharding-core-optimize/src/test/resources/META-INF/services/org.apache.shardingsphere.spi.keygen.ShardingKeyGenerator @@ -0,0 +1,18 @@ +# +# 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. +# + +org.apache.shardingsphere.core.optimize.fixture.TestShardingKeyGenerator diff --git a/sharding-core/sharding-core-optimize/src/test/resources/yaml/optimize-rule.yaml b/sharding-core/sharding-core-optimize/src/test/resources/yaml/optimize-rule.yaml index 5a96b8091a353..e667bef983f7a 100644 --- a/sharding-core/sharding-core-optimize/src/test/resources/yaml/optimize-rule.yaml +++ b/sharding-core/sharding-core-optimize/src/test/resources/yaml/optimize-rule.yaml @@ -40,10 +40,8 @@ shardingRule: shardingColumn: order_id algorithmExpression: t_order_${order_id % 2} keyGenerator: - type: SNOWFLAKE + type: TEST-OPTIMIZE column: order_id - props: - worker.id: 123 t_encrypt: actualDataNodes: ds_${0..1}.t_encrypt_${0..1} databaseStrategy: @@ -55,10 +53,8 @@ shardingRule: shardingColumn: order_id algorithmExpression: t_encrypt_${order_id % 2} keyGenerator: - type: SNOWFLAKE + type: TEST-OPTIMIZE column: order_id - props: - worker.id: 123 t_encrypt_query: actualDataNodes: ds_${0..1}.t_encrypt_query${0..1} databaseStrategy: @@ -70,10 +66,8 @@ shardingRule: shardingColumn: order_id algorithmExpression: t_encrypt_query${order_id % 2} keyGenerator: - type: SNOWFLAKE + type: TEST-OPTIMIZE column: order_id - props: - worker.id: 123 encryptRule: encryptors: t_encryptor: @@ -83,6 +77,3 @@ shardingRule: type: assistedTest qualifiedColumns: t_encrypt_query.user_id assistedQueryColumns: t_encrypt_query.assisted_user_id - - - diff --git a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java index 7d01f977b8276..851bb8558bb75 100644 --- a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java +++ b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java @@ -32,7 +32,6 @@ import org.apache.shardingsphere.core.parse.hook.ParsingHook; import org.apache.shardingsphere.core.parse.hook.SPIParsingHook; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; -import org.apache.shardingsphere.core.parse.sql.statement.dml.InsertStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.SelectStatement; import org.apache.shardingsphere.core.route.SQLRouteResult; import org.apache.shardingsphere.core.route.type.RoutingResult; @@ -86,10 +85,9 @@ public SQLStatement parse(final String logicSQL, final boolean useCache) { @Override public SQLRouteResult route(final SQLStatement sqlStatement, final List parameters) { - Optional generatedKey = sqlStatement instanceof InsertStatement - ? GeneratedKey.getGenerateKey(shardingRule, parameters, (InsertStatement) sqlStatement) : Optional.absent(); + OptimizeResult optimizeResult = OptimizeEngineFactory.newInstance(shardingRule, sqlStatement, parameters, shardingMetaData.getTable()).optimize(); + Optional generatedKey = optimizeResult.getGeneratedKey(); SQLRouteResult result = new SQLRouteResult(sqlStatement, generatedKey.orNull()); - OptimizeResult optimizeResult = OptimizeEngineFactory.newInstance(shardingRule, sqlStatement, parameters, generatedKey.orNull(), shardingMetaData.getTable()).optimize(); if (generatedKey.isPresent()) { setGeneratedKeys(result, generatedKey.get()); } From 5f639831b13dec511119d7fcd47073c011aead44 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Mon, 17 Jun 2019 13:09:17 +0800 Subject: [PATCH 259/283] for #2567, remove SQLRouteResult.generatedKey --- .../shardingsphere/core/route/SQLRouteResult.java | 7 ------- .../core/route/router/sharding/ParsingSQLRouter.java | 11 ++++++----- .../core/statement/ShardingPreparedStatement.java | 6 ++++-- .../jdbc/core/statement/ShardingStatement.java | 6 ++++-- 4 files changed, 14 insertions(+), 16 deletions(-) diff --git a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/SQLRouteResult.java b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/SQLRouteResult.java index e34df2655b8ea..8646898965064 100644 --- a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/SQLRouteResult.java +++ b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/SQLRouteResult.java @@ -20,7 +20,6 @@ import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.Setter; -import org.apache.shardingsphere.core.optimize.GeneratedKey; import org.apache.shardingsphere.core.optimize.result.OptimizeResult; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.route.type.RoutingResult; @@ -42,15 +41,9 @@ public final class SQLRouteResult { private final SQLStatement sqlStatement; - private final GeneratedKey generatedKey; - private RoutingResult routingResult; private OptimizeResult optimizeResult; private final Collection routeUnits = new LinkedHashSet<>(); - - public SQLRouteResult(final SQLStatement sqlStatement) { - this(sqlStatement, null); - } } diff --git a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java index 851bb8558bb75..9f1941fcb8dc9 100644 --- a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java +++ b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java @@ -87,9 +87,8 @@ public SQLStatement parse(final String logicSQL, final boolean useCache) { public SQLRouteResult route(final SQLStatement sqlStatement, final List parameters) { OptimizeResult optimizeResult = OptimizeEngineFactory.newInstance(shardingRule, sqlStatement, parameters, shardingMetaData.getTable()).optimize(); Optional generatedKey = optimizeResult.getGeneratedKey(); - SQLRouteResult result = new SQLRouteResult(sqlStatement, generatedKey.orNull()); if (generatedKey.isPresent()) { - setGeneratedKeys(result, generatedKey.get()); + setGeneratedKeys(optimizeResult, generatedKey.get()); } boolean needMerge = false; if (sqlStatement instanceof SelectStatement) { @@ -103,15 +102,17 @@ public SQLRouteResult route(final SQLStatement sqlStatement, final List if (needMerge) { Preconditions.checkState(1 == routingResult.getRoutingUnits().size(), "Must have one sharding with subquery."); } + SQLRouteResult result = new SQLRouteResult(sqlStatement); result.setRoutingResult(routingResult); result.setOptimizeResult(optimizeResult); return result; } - private void setGeneratedKeys(final SQLRouteResult sqlRouteResult, final GeneratedKey generatedKey) { + private void setGeneratedKeys(final OptimizeResult optimizeResult, final GeneratedKey generatedKey) { generatedKeys.addAll(generatedKey.getGeneratedKeys()); - sqlRouteResult.getGeneratedKey().getGeneratedKeys().clear(); - sqlRouteResult.getGeneratedKey().getGeneratedKeys().addAll(generatedKeys); + Preconditions.checkState(optimizeResult.getGeneratedKey().isPresent()); + optimizeResult.getGeneratedKey().get().getGeneratedKeys().clear(); + optimizeResult.getGeneratedKey().get().getGeneratedKeys().addAll(generatedKeys); } private boolean isNeedMergeShardingValues(final SelectStatement selectStatement) { diff --git a/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/statement/ShardingPreparedStatement.java b/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/statement/ShardingPreparedStatement.java index 4db79b597cf00..f1603660ea741 100644 --- a/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/statement/ShardingPreparedStatement.java +++ b/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/statement/ShardingPreparedStatement.java @@ -19,6 +19,7 @@ import com.google.common.base.Function; import com.google.common.base.Optional; +import com.google.common.base.Preconditions; import com.google.common.collect.Collections2; import lombok.Getter; import org.apache.shardingsphere.core.PreparedQueryShardingEngine; @@ -176,7 +177,8 @@ public boolean execute() throws SQLException { public ResultSet getGeneratedKeys() throws SQLException { Optional generatedKey = getGeneratedKey(); if (preparedStatementExecutor.isReturnGeneratedKeys() && generatedKey.isPresent()) { - return new GeneratedKeysResultSet(routeResult.getGeneratedKey().getGeneratedKeys().iterator(), generatedKey.get().getColumnName(), this); + Preconditions.checkState(routeResult.getOptimizeResult().getGeneratedKey().isPresent()); + return new GeneratedKeysResultSet(routeResult.getOptimizeResult().getGeneratedKey().get().getGeneratedKeys().iterator(), generatedKey.get().getColumnName(), this); } if (1 == preparedStatementExecutor.getStatements().size()) { return preparedStatementExecutor.getStatements().iterator().next().getGeneratedKeys(); @@ -186,7 +188,7 @@ public ResultSet getGeneratedKeys() throws SQLException { private Optional getGeneratedKey() { if (null != routeResult && routeResult.getSqlStatement() instanceof InsertStatement) { - return Optional.fromNullable(routeResult.getGeneratedKey()); + return routeResult.getOptimizeResult().getGeneratedKey(); } return Optional.absent(); } diff --git a/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/statement/ShardingStatement.java b/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/statement/ShardingStatement.java index 991e4e1934c4b..1195dc80bd2aa 100644 --- a/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/statement/ShardingStatement.java +++ b/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/statement/ShardingStatement.java @@ -18,6 +18,7 @@ package org.apache.shardingsphere.shardingjdbc.jdbc.core.statement; import com.google.common.base.Optional; +import com.google.common.base.Preconditions; import lombok.Getter; import org.apache.shardingsphere.core.SimpleQueryShardingEngine; import org.apache.shardingsphere.core.execute.sql.execute.result.QueryResult; @@ -288,7 +289,8 @@ public Collection getRoutedStatements() { public ResultSet getGeneratedKeys() throws SQLException { Optional generatedKey = getGeneratedKey(); if (returnGeneratedKeys && generatedKey.isPresent()) { - return new GeneratedKeysResultSet(routeResult.getGeneratedKey().getGeneratedKeys().iterator(), generatedKey.get().getColumnName(), this); + Preconditions.checkState(routeResult.getOptimizeResult().getGeneratedKey().isPresent()); + return new GeneratedKeysResultSet(routeResult.getOptimizeResult().getGeneratedKey().get().getGeneratedKeys().iterator(), generatedKey.get().getColumnName(), this); } if (1 == getRoutedStatements().size()) { return getRoutedStatements().iterator().next().getGeneratedKeys(); @@ -298,7 +300,7 @@ public ResultSet getGeneratedKeys() throws SQLException { private Optional getGeneratedKey() { if (null != routeResult && routeResult.getSqlStatement() instanceof InsertStatement) { - return Optional.fromNullable(routeResult.getGeneratedKey()); + return routeResult.getOptimizeResult().getGeneratedKey(); } return Optional.absent(); } From b0c49b231849730edee48d2733b655654bf4ff58 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Mon, 17 Jun 2019 15:08:14 +0800 Subject: [PATCH 260/283] for #2567, refactor ParsingSQLRouter.setGeneratedKeys() --- .../route/router/sharding/ParsingSQLRouter.java | 17 +++++++---------- .../statement/ShardingPreparedStatement.java | 5 +---- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java index 9f1941fcb8dc9..17e7bdd290664 100644 --- a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java +++ b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java @@ -22,7 +22,6 @@ import lombok.RequiredArgsConstructor; import org.apache.shardingsphere.api.hint.HintManager; import org.apache.shardingsphere.core.metadata.ShardingMetaData; -import org.apache.shardingsphere.core.optimize.GeneratedKey; import org.apache.shardingsphere.core.optimize.OptimizeEngineFactory; import org.apache.shardingsphere.core.optimize.condition.ShardingCondition; import org.apache.shardingsphere.core.optimize.condition.ShardingConditions; @@ -86,10 +85,6 @@ public SQLStatement parse(final String logicSQL, final boolean useCache) { @Override public SQLRouteResult route(final SQLStatement sqlStatement, final List parameters) { OptimizeResult optimizeResult = OptimizeEngineFactory.newInstance(shardingRule, sqlStatement, parameters, shardingMetaData.getTable()).optimize(); - Optional generatedKey = optimizeResult.getGeneratedKey(); - if (generatedKey.isPresent()) { - setGeneratedKeys(optimizeResult, generatedKey.get()); - } boolean needMerge = false; if (sqlStatement instanceof SelectStatement) { needMerge = isNeedMergeShardingValues((SelectStatement) sqlStatement); @@ -104,15 +99,17 @@ public SQLRouteResult route(final SQLStatement sqlStatement, final List } SQLRouteResult result = new SQLRouteResult(sqlStatement); result.setRoutingResult(routingResult); + setGeneratedKeys(optimizeResult); result.setOptimizeResult(optimizeResult); return result; } - private void setGeneratedKeys(final OptimizeResult optimizeResult, final GeneratedKey generatedKey) { - generatedKeys.addAll(generatedKey.getGeneratedKeys()); - Preconditions.checkState(optimizeResult.getGeneratedKey().isPresent()); - optimizeResult.getGeneratedKey().get().getGeneratedKeys().clear(); - optimizeResult.getGeneratedKey().get().getGeneratedKeys().addAll(generatedKeys); + private void setGeneratedKeys(final OptimizeResult optimizeResult) { + if (optimizeResult.getGeneratedKey().isPresent()) { + generatedKeys.addAll(optimizeResult.getGeneratedKey().get().getGeneratedKeys()); + optimizeResult.getGeneratedKey().get().getGeneratedKeys().clear(); + optimizeResult.getGeneratedKey().get().getGeneratedKeys().addAll(generatedKeys); + } } private boolean isNeedMergeShardingValues(final SelectStatement selectStatement) { diff --git a/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/statement/ShardingPreparedStatement.java b/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/statement/ShardingPreparedStatement.java index f1603660ea741..5a44b9dfb6a68 100644 --- a/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/statement/ShardingPreparedStatement.java +++ b/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/statement/ShardingPreparedStatement.java @@ -187,10 +187,7 @@ public ResultSet getGeneratedKeys() throws SQLException { } private Optional getGeneratedKey() { - if (null != routeResult && routeResult.getSqlStatement() instanceof InsertStatement) { - return routeResult.getOptimizeResult().getGeneratedKey(); - } - return Optional.absent(); + return null != routeResult && routeResult.getSqlStatement() instanceof InsertStatement ? routeResult.getOptimizeResult().getGeneratedKey() : Optional.absent(); } private void initPreparedStatementExecutor() throws SQLException { From f03be89c3438456dc6759a586c7e164375d10469 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Mon, 17 Jun 2019 15:19:00 +0800 Subject: [PATCH 261/283] for #2567, add ParsingSQLRouter.setOptimizeResult() --- .../router/sharding/ParsingSQLRouter.java | 26 +++++++++---------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java index 17e7bdd290664..9c68832f89f28 100644 --- a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java +++ b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java @@ -63,7 +63,7 @@ public final class ParsingSQLRouter implements ShardingRouter { private final ParsingResultCache parsingResultCache; - private final List> generatedKeys = new LinkedList<>(); + private final List> recordedGeneratedKeys = new LinkedList<>(); private final ParsingHook parsingHook = new SPIParsingHook(); @@ -85,35 +85,33 @@ public SQLStatement parse(final String logicSQL, final boolean useCache) { @Override public SQLRouteResult route(final SQLStatement sqlStatement, final List parameters) { OptimizeResult optimizeResult = OptimizeEngineFactory.newInstance(shardingRule, sqlStatement, parameters, shardingMetaData.getTable()).optimize(); - boolean needMerge = false; - if (sqlStatement instanceof SelectStatement) { - needMerge = isNeedMergeShardingValues((SelectStatement) sqlStatement); - } - if (needMerge) { + boolean needMergeShardingValues = isNeedMergeShardingValues(sqlStatement); + if (needMergeShardingValues) { checkSubqueryShardingValues(sqlStatement, optimizeResult.getShardingConditions()); mergeShardingValues(optimizeResult.getShardingConditions()); } RoutingResult routingResult = RoutingEngineFactory.newInstance(shardingRule, shardingMetaData.getDataSource(), sqlStatement, optimizeResult).route(); - if (needMerge) { + if (needMergeShardingValues) { Preconditions.checkState(1 == routingResult.getRoutingUnits().size(), "Must have one sharding with subquery."); } SQLRouteResult result = new SQLRouteResult(sqlStatement); result.setRoutingResult(routingResult); - setGeneratedKeys(optimizeResult); - result.setOptimizeResult(optimizeResult); + setOptimizeResult(optimizeResult, result); return result; } - private void setGeneratedKeys(final OptimizeResult optimizeResult) { + private void setOptimizeResult(final OptimizeResult optimizeResult, final SQLRouteResult sqlRouteResult) { if (optimizeResult.getGeneratedKey().isPresent()) { - generatedKeys.addAll(optimizeResult.getGeneratedKey().get().getGeneratedKeys()); + recordedGeneratedKeys.addAll(optimizeResult.getGeneratedKey().get().getGeneratedKeys()); optimizeResult.getGeneratedKey().get().getGeneratedKeys().clear(); - optimizeResult.getGeneratedKey().get().getGeneratedKeys().addAll(generatedKeys); + optimizeResult.getGeneratedKey().get().getGeneratedKeys().addAll(recordedGeneratedKeys); } + sqlRouteResult.setOptimizeResult(optimizeResult); } - private boolean isNeedMergeShardingValues(final SelectStatement selectStatement) { - return !selectStatement.getSubqueryShardingConditions().isEmpty() && !shardingRule.getShardingLogicTableNames(selectStatement.getTables().getTableNames()).isEmpty(); + private boolean isNeedMergeShardingValues(final SQLStatement sqlStatement) { + return sqlStatement instanceof SelectStatement + && !((SelectStatement) sqlStatement).getSubqueryShardingConditions().isEmpty() && !shardingRule.getShardingLogicTableNames(sqlStatement.getTables().getTableNames()).isEmpty(); } private void checkSubqueryShardingValues(final SQLStatement sqlStatement, final ShardingConditions shardingConditions) { From 819fae93cc36cd0590c5f4173b54cbe1a755143b Mon Sep 17 00:00:00 2001 From: tuohai666 Date: Mon, 17 Jun 2019 16:07:02 +0800 Subject: [PATCH 262/283] fix SHOW statement --- .../text/TextProtocolBackendHandlerFactory.java | 4 +--- .../backend/TextProtocolBackendHandlerFactoryTest.java | 10 +++++++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/text/TextProtocolBackendHandlerFactory.java b/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/text/TextProtocolBackendHandlerFactory.java index f5ffa4bde5564..e11bd9a582095 100644 --- a/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/text/TextProtocolBackendHandlerFactory.java +++ b/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/text/TextProtocolBackendHandlerFactory.java @@ -25,9 +25,7 @@ import org.apache.shardingsphere.core.parse.sql.statement.dal.DALStatement; import org.apache.shardingsphere.core.parse.sql.statement.dal.SetStatement; import org.apache.shardingsphere.core.parse.sql.statement.dal.dialect.mysql.ShowDatabasesStatement; -import org.apache.shardingsphere.core.parse.sql.statement.dal.dialect.mysql.ShowOtherStatement; import org.apache.shardingsphere.core.parse.sql.statement.dal.dialect.mysql.UseStatement; -import org.apache.shardingsphere.core.parse.sql.statement.dal.dialect.postgresql.ShowStatement; import org.apache.shardingsphere.core.parse.sql.statement.tcl.BeginTransactionStatement; import org.apache.shardingsphere.core.parse.sql.statement.tcl.CommitStatement; import org.apache.shardingsphere.core.parse.sql.statement.tcl.RollbackStatement; @@ -101,7 +99,7 @@ private static TextProtocolBackendHandler createDALBackendHandler(final DALState if (dalStatement instanceof ShowDatabasesStatement) { return new ShowDatabasesBackendHandler(backendConnection); } - if (dalStatement instanceof SetStatement || dalStatement instanceof ShowOtherStatement || dalStatement instanceof ShowStatement) { + if (dalStatement instanceof SetStatement) { return new BroadcastBackendHandler(sql, backendConnection); } return new UnicastBackendHandler(sql, backendConnection); diff --git a/sharding-proxy/sharding-proxy-backend/src/test/java/org/apache/shardingsphere/shardingproxy/backend/TextProtocolBackendHandlerFactoryTest.java b/sharding-proxy/sharding-proxy-backend/src/test/java/org/apache/shardingsphere/shardingproxy/backend/TextProtocolBackendHandlerFactoryTest.java index f9e71b547912a..d0daf973ffdba 100644 --- a/sharding-proxy/sharding-proxy-backend/src/test/java/org/apache/shardingsphere/shardingproxy/backend/TextProtocolBackendHandlerFactoryTest.java +++ b/sharding-proxy/sharding-proxy-backend/src/test/java/org/apache/shardingsphere/shardingproxy/backend/TextProtocolBackendHandlerFactoryTest.java @@ -26,6 +26,7 @@ import org.apache.shardingsphere.shardingproxy.backend.text.TextProtocolBackendHandlerFactory; import org.apache.shardingsphere.shardingproxy.backend.text.admin.BroadcastBackendHandler; import org.apache.shardingsphere.shardingproxy.backend.text.admin.ShowDatabasesBackendHandler; +import org.apache.shardingsphere.shardingproxy.backend.text.admin.UnicastBackendHandler; import org.apache.shardingsphere.shardingproxy.backend.text.admin.UseDatabaseBackendHandler; import org.apache.shardingsphere.shardingproxy.backend.text.query.QueryBackendHandler; import org.apache.shardingsphere.shardingproxy.backend.text.sctl.set.ShardingCTLSetBackendHandler; @@ -153,13 +154,16 @@ public void assertNewInstanceWithSet() { public void assertNewInstanceWithShow() { String sql = "SHOW VARIABLES LIKE %x%"; TextProtocolBackendHandler actual = TextProtocolBackendHandlerFactory.newInstance(databaseType, sql, backendConnection); - assertThat(actual, instanceOf(BroadcastBackendHandler.class)); + assertThat(actual, instanceOf(UnicastBackendHandler.class)); + sql = "SHOW VARIABLES WHERE Variable_name ='language'"; + actual = TextProtocolBackendHandlerFactory.newInstance(databaseType, sql, backendConnection); + assertThat(actual, instanceOf(UnicastBackendHandler.class)); sql = "SHOW CHARACTER SET"; actual = TextProtocolBackendHandlerFactory.newInstance(databaseType, sql, backendConnection); - assertThat(actual, instanceOf(BroadcastBackendHandler.class)); + assertThat(actual, instanceOf(UnicastBackendHandler.class)); sql = "SHOW COLLATION"; actual = TextProtocolBackendHandlerFactory.newInstance(databaseType, sql, backendConnection); - assertThat(actual, instanceOf(BroadcastBackendHandler.class)); + assertThat(actual, instanceOf(UnicastBackendHandler.class)); } @Test From 596ee304b87d335d2517805795f21349bda430cf Mon Sep 17 00:00:00 2001 From: tuohai666 Date: Mon, 17 Jun 2019 16:20:02 +0800 Subject: [PATCH 263/283] fix travis --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 93dc08c31fd6b..e3ed595a988d2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,9 +5,9 @@ cache: language: java jdk: - - oraclejdk8 +# - oraclejdk8 # - oraclejdk7 -# - openjdk7 + - openjdk8 before_script: - echo "MAVEN_OPTS='-Xmx1024m -XX:MaxPermSize=256m'" > ~/.mavenrc From ef9b48c9fc6cf3268e7a34abc4c8d530749be38d Mon Sep 17 00:00:00 2001 From: terrymanu Date: Mon, 17 Jun 2019 17:06:06 +0800 Subject: [PATCH 264/283] for #2567, add InsertStatement.containsDefaultValues() --- .../core/optimize/GeneratedKey.java | 24 +++++++------- .../sharding/dml/InsertOptimizeEngine.java | 33 ++++++++----------- .../core/optimize/GeneratedKeyTest.java | 10 +++--- .../sql/statement/dml/InsertStatement.java | 11 +++++++ .../router/sharding/ParsingSQLRouter.java | 8 ++--- .../statement/ShardingPreparedStatement.java | 2 +- .../core/statement/ShardingStatement.java | 2 +- 7 files changed, 47 insertions(+), 43 deletions(-) diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/GeneratedKey.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/GeneratedKey.java index 8bfd779b0f232..d8b9e72179ebe 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/GeneratedKey.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/GeneratedKey.java @@ -46,7 +46,9 @@ public final class GeneratedKey { private final String columnName; - private final List> generatedKeys = new LinkedList<>(); + private final boolean generated; + + private final List> generatedValues = new LinkedList<>(); /** * Get generate key. @@ -61,25 +63,24 @@ public static Optional getGenerateKey(final ShardingRule shardingR if (!generateKeyColumnName.isPresent()) { return Optional.absent(); } - return isContainsGenerateKeyColumn(insertStatement, generateKeyColumnName.get()) + return containsGenerateKeyColumn(insertStatement, generateKeyColumnName.get()) ? findGeneratedKey(parameters, insertStatement, generateKeyColumnName.get()) : Optional.of(createGeneratedKey(shardingRule, insertStatement, generateKeyColumnName.get())); } - private static boolean isContainsGenerateKeyColumn(final InsertStatement insertStatement, final String generateKeyColumnName) { - int valuesCount = insertStatement.getValues().isEmpty() ? 0 : insertStatement.getValues().get(0).getAssignments().size(); - return valuesCount == insertStatement.getColumnNames().size() && insertStatement.getColumnNames().contains(generateKeyColumnName); + private static boolean containsGenerateKeyColumn(final InsertStatement insertStatement, final String generateKeyColumnName) { + return insertStatement.getColumnNames().contains(generateKeyColumnName) && !insertStatement.containsDefaultValues(); } private static Optional findGeneratedKey(final List parameters, final InsertStatement insertStatement, final String generateKeyColumnName) { GeneratedKey result = null; for (ExpressionSegment each : findGenerateKeyExpressionSegments(insertStatement, generateKeyColumnName)) { if (null == result) { - result = new GeneratedKey(generateKeyColumnName); + result = new GeneratedKey(generateKeyColumnName, false); } if (each instanceof ParameterMarkerExpressionSegment) { - result.getGeneratedKeys().add((Comparable) parameters.get(((ParameterMarkerExpressionSegment) each).getParameterMarkerIndex())); + result.getGeneratedValues().add((Comparable) parameters.get(((ParameterMarkerExpressionSegment) each).getParameterMarkerIndex())); } else if (each instanceof LiteralExpressionSegment) { - result.getGeneratedKeys().add((Comparable) ((LiteralExpressionSegment) each).getLiterals()); + result.getGeneratedValues().add((Comparable) ((LiteralExpressionSegment) each).getLiterals()); } } return Optional.fromNullable(result); @@ -98,9 +99,8 @@ private static Collection findGenerateKeyExpressionSegments(f } private static Collection getColumnNames(final InsertStatement insertStatement, final String generateKeyColumnName) { - int valuesCount = insertStatement.getValues().isEmpty() ? 0 : insertStatement.getValues().get(0).getAssignments().size(); Collection result = new ArrayList<>(insertStatement.getColumnNames()); - if (valuesCount != insertStatement.getColumnNames().size()) { + if (insertStatement.containsDefaultValues()) { result.remove(generateKeyColumnName); } return result; @@ -117,9 +117,9 @@ private static Optional findGenerateKeyExpressionSegment(fina private static GeneratedKey createGeneratedKey(final ShardingRule shardingRule, final InsertStatement insertStatement, final String generateKeyColumnName) { String tableName = insertStatement.getTables().getSingleTableName(); - GeneratedKey result = new GeneratedKey(generateKeyColumnName); + GeneratedKey result = new GeneratedKey(generateKeyColumnName, true); for (int i = 0; i < insertStatement.getValues().size(); i++) { - result.getGeneratedKeys().add(shardingRule.generateKey(tableName)); + result.getGeneratedValues().add(shardingRule.generateKey(tableName)); } return result; } diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/InsertOptimizeEngine.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/InsertOptimizeEngine.java index f62194f9a7f76..53709cb996273 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/InsertOptimizeEngine.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/InsertOptimizeEngine.java @@ -63,19 +63,19 @@ public final class InsertOptimizeEngine implements OptimizeEngine { public OptimizeResult optimize() { List andConditions = insertStatement.getShardingConditions().getOrConditions(); Optional generatedKey = GeneratedKey.getGenerateKey(shardingRule, parameters, insertStatement); - Iterator> generatedKeys = generatedKey.isPresent() ? createGeneratedKeys(generatedKey.get()) : null; + Iterator> generatedValues = generatedKey.isPresent() ? createGeneratedValues(generatedKey.get()) : null; List shardingConditions = new ArrayList<>(andConditions.size()); InsertOptimizeResult insertOptimizeResult = new InsertOptimizeResult(insertStatement.getColumnNames()); int parametersCount = 0; for (int i = 0; i < andConditions.size(); i++) { InsertValue insertValue = insertStatement.getValues().get(i); - ExpressionSegment[] currentColumnValues = createCurrentColumnValues(insertValue); - Object[] currentParameters = createCurrentParameters(parametersCount, insertValue); + ExpressionSegment[] currentColumnValues = createCurrentColumnValues(generatedKey.orNull(), insertValue); + Object[] currentParameters = createCurrentParameters(generatedKey.orNull(), parametersCount, insertValue); parametersCount = parametersCount + insertValue.getParametersCount(); ShardingCondition shardingCondition = createShardingCondition(andConditions.get(i)); insertOptimizeResult.addUnit(currentColumnValues, currentParameters, insertValue.getParametersCount()); - if (isNeededToAppendGeneratedKey()) { - Comparable currentGeneratedKey = generatedKeys.next(); + if (generatedKey.isPresent() && generatedKey.get().isGenerated()) { + Comparable currentGeneratedKey = generatedValues.next(); fillWithGeneratedKeyName(insertOptimizeResult); fillInsertOptimizeResultUnit(insertOptimizeResult.getUnits().get(i), currentGeneratedKey); fillShardingCondition(shardingCondition, currentGeneratedKey); @@ -92,28 +92,28 @@ public OptimizeResult optimize() { return result; } - private Iterator> createGeneratedKeys(final GeneratedKey generatedKey) { - return isNeededToAppendGeneratedKey() ? generatedKey.getGeneratedKeys().iterator() : null; + private Iterator> createGeneratedValues(final GeneratedKey generatedKey) { + return generatedKey.isGenerated() ? generatedKey.getGeneratedValues().iterator() : null; } - private ExpressionSegment[] createCurrentColumnValues(final InsertValue insertValue) { - ExpressionSegment[] result = new ExpressionSegment[insertValue.getAssignments().size() + getIncrement()]; + private ExpressionSegment[] createCurrentColumnValues(final GeneratedKey generatedKey, final InsertValue insertValue) { + ExpressionSegment[] result = new ExpressionSegment[insertValue.getAssignments().size() + getIncrement(generatedKey)]; insertValue.getAssignments().toArray(result); return result; } - private Object[] createCurrentParameters(final int beginIndex, final InsertValue insertValue) { + private Object[] createCurrentParameters(final GeneratedKey generatedKey, final int beginIndex, final InsertValue insertValue) { if (0 == insertValue.getParametersCount()) { return new Object[0]; } - Object[] result = new Object[insertValue.getParametersCount() + getIncrement()]; + Object[] result = new Object[insertValue.getParametersCount() + getIncrement(generatedKey)]; parameters.subList(beginIndex, beginIndex + insertValue.getParametersCount()).toArray(result); return result; } - private int getIncrement() { + private int getIncrement(final GeneratedKey generatedKey) { int result = 0; - if (isNeededToAppendGeneratedKey()) { + if (null != generatedKey && generatedKey.isGenerated()) { result += 1; } if (isNeededToAppendQueryAssistedColumn()) { @@ -122,13 +122,6 @@ private int getIncrement() { return result; } - private boolean isNeededToAppendGeneratedKey() { - String tableName = insertStatement.getTables().getSingleTableName(); - Optional generateKeyColumn = shardingRule.findGenerateKeyColumnName(tableName); - int valueSize = insertStatement.getValues().isEmpty() ? 0 : insertStatement.getValues().get(0).getAssignments().size(); - return insertStatement.getColumnNames().size() != valueSize || generateKeyColumn.isPresent() && !insertStatement.getColumnNames().contains(generateKeyColumn.get()); - } - private ShardingCondition createShardingCondition(final AndCondition andCondition) { ShardingCondition result = new ShardingCondition(); result.getShardingValues().addAll(getShardingValues(andCondition)); diff --git a/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/GeneratedKeyTest.java b/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/GeneratedKeyTest.java index 5d1673c64d47c..1818206a89bc6 100644 --- a/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/GeneratedKeyTest.java +++ b/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/GeneratedKeyTest.java @@ -66,7 +66,7 @@ public void assertGetGenerateKeyWhenCreateWithGenerateKeyColumnConfiguration() { when(shardingRule.findGenerateKeyColumnName("tbl")).thenReturn(Optional.of("id1")); Optional actual = GeneratedKey.getGenerateKey(shardingRule, Collections.singletonList(1), insertStatement); assertTrue(actual.isPresent()); - assertThat(actual.get().getGeneratedKeys().size(), is(1)); + assertThat(actual.get().getGeneratedValues().size(), is(1)); } @Test @@ -78,10 +78,10 @@ public void assertGetGenerateKeyWhenFind() { when(shardingRule.findGenerateKeyColumnName("tbl")).thenReturn(Optional.of("id")); Optional actual = GeneratedKey.getGenerateKey(shardingRule, Collections.singletonList(1), insertStatement); assertTrue(actual.isPresent()); - assertThat(actual.get().getGeneratedKeys().size(), is(3)); - assertThat(actual.get().getGeneratedKeys().get(0), is((Comparable) 1)); - assertThat(actual.get().getGeneratedKeys().get(1), is((Comparable) 100)); - assertThat(actual.get().getGeneratedKeys().get(2), is((Comparable) "value")); + assertThat(actual.get().getGeneratedValues().size(), is(3)); + assertThat(actual.get().getGeneratedValues().get(0), is((Comparable) 1)); + assertThat(actual.get().getGeneratedValues().get(1), is((Comparable) 100)); + assertThat(actual.get().getGeneratedValues().get(2), is((Comparable) "value")); assertTrue(GeneratedKey.getGenerateKey(shardingRule, Collections.singletonList(1), insertStatement).isPresent()); } } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/statement/dml/InsertStatement.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/statement/dml/InsertStatement.java index 58b9da44c19c6..7c1fec11423db 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/statement/dml/InsertStatement.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/statement/dml/InsertStatement.java @@ -17,6 +17,7 @@ package org.apache.shardingsphere.core.parse.sql.statement.dml; +import com.google.common.base.Preconditions; import lombok.Getter; import lombok.Setter; import lombok.ToString; @@ -41,4 +42,14 @@ public final class InsertStatement extends DMLStatement { private final Collection columnNames = new LinkedList<>(); private final List values = new LinkedList<>(); + + /** + * Judge contains default values or not. + * + * @return contains default values or not + */ + public boolean containsDefaultValues() { + Preconditions.checkState(!values.isEmpty()); + return columnNames.size() != values.get(0).getAssignments().size(); + } } diff --git a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java index 9c68832f89f28..136b209d1316c 100644 --- a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java +++ b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java @@ -63,7 +63,7 @@ public final class ParsingSQLRouter implements ShardingRouter { private final ParsingResultCache parsingResultCache; - private final List> recordedGeneratedKeys = new LinkedList<>(); + private final List> generatedValues = new LinkedList<>(); private final ParsingHook parsingHook = new SPIParsingHook(); @@ -102,9 +102,9 @@ public SQLRouteResult route(final SQLStatement sqlStatement, final List private void setOptimizeResult(final OptimizeResult optimizeResult, final SQLRouteResult sqlRouteResult) { if (optimizeResult.getGeneratedKey().isPresent()) { - recordedGeneratedKeys.addAll(optimizeResult.getGeneratedKey().get().getGeneratedKeys()); - optimizeResult.getGeneratedKey().get().getGeneratedKeys().clear(); - optimizeResult.getGeneratedKey().get().getGeneratedKeys().addAll(recordedGeneratedKeys); + generatedValues.addAll(optimizeResult.getGeneratedKey().get().getGeneratedValues()); + optimizeResult.getGeneratedKey().get().getGeneratedValues().clear(); + optimizeResult.getGeneratedKey().get().getGeneratedValues().addAll(generatedValues); } sqlRouteResult.setOptimizeResult(optimizeResult); } diff --git a/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/statement/ShardingPreparedStatement.java b/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/statement/ShardingPreparedStatement.java index 5a44b9dfb6a68..ee27f8689a5eb 100644 --- a/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/statement/ShardingPreparedStatement.java +++ b/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/statement/ShardingPreparedStatement.java @@ -178,7 +178,7 @@ public ResultSet getGeneratedKeys() throws SQLException { Optional generatedKey = getGeneratedKey(); if (preparedStatementExecutor.isReturnGeneratedKeys() && generatedKey.isPresent()) { Preconditions.checkState(routeResult.getOptimizeResult().getGeneratedKey().isPresent()); - return new GeneratedKeysResultSet(routeResult.getOptimizeResult().getGeneratedKey().get().getGeneratedKeys().iterator(), generatedKey.get().getColumnName(), this); + return new GeneratedKeysResultSet(routeResult.getOptimizeResult().getGeneratedKey().get().getGeneratedValues().iterator(), generatedKey.get().getColumnName(), this); } if (1 == preparedStatementExecutor.getStatements().size()) { return preparedStatementExecutor.getStatements().iterator().next().getGeneratedKeys(); diff --git a/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/statement/ShardingStatement.java b/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/statement/ShardingStatement.java index 1195dc80bd2aa..068d3d9e9f325 100644 --- a/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/statement/ShardingStatement.java +++ b/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/statement/ShardingStatement.java @@ -290,7 +290,7 @@ public ResultSet getGeneratedKeys() throws SQLException { Optional generatedKey = getGeneratedKey(); if (returnGeneratedKeys && generatedKey.isPresent()) { Preconditions.checkState(routeResult.getOptimizeResult().getGeneratedKey().isPresent()); - return new GeneratedKeysResultSet(routeResult.getOptimizeResult().getGeneratedKey().get().getGeneratedKeys().iterator(), generatedKey.get().getColumnName(), this); + return new GeneratedKeysResultSet(routeResult.getOptimizeResult().getGeneratedKey().get().getGeneratedValues().iterator(), generatedKey.get().getColumnName(), this); } if (1 == getRoutedStatements().size()) { return getRoutedStatements().iterator().next().getGeneratedKeys(); From de8b2e7e4f88fe766ec7686196e9394638f52bf7 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Mon, 17 Jun 2019 18:24:55 +0800 Subject: [PATCH 265/283] for #2567, ShardingCondition => RouteCondition --- .../core/BaseShardingEngineTest.java | 6 +- .../core/merge/dql/DQLMergeEngineTest.java | 6 +- .../GroupByMemoryMergedResultTest.java | 6 +- .../GroupByStreamMergedResultTest.java | 6 +- .../IteratorStreamMergedResultTest.java | 6 +- .../OrderByStreamMergedResultTest.java | 6 +- .../LimitDecoratorMergedResultTest.java | 6 +- .../RowNumberDecoratorMergedResultTest.java | 6 +- ...AndRowNumberDecoratorMergedResultTest.java | 6 +- ...dingCondition.java => RouteCondition.java} | 6 +- ...ngConditions.java => RouteConditions.java} | 14 ++-- .../sharding/ddl/DDLOptimizeEngine.java | 6 +- .../sharding/dml/InsertOptimizeEngine.java | 65 +++++++-------- ...on.java => AlwaysFalseRouteCondition.java} | 6 +- .../sharding/dql/QueryOptimizeEngine.java | 18 ++--- .../core/optimize/result/OptimizeResult.java | 12 +-- .../sharding/InsertOptimizeEngineTest.java | 76 +++++++++--------- .../sharding/QueryOptimizeEngineTest.java | 40 +++++----- .../rewriter/ShardingSQLRewriterTest.java | 80 +++++++++---------- .../router/sharding/ParsingSQLRouter.java | 42 +++++----- .../router/sharding/RoutingEngineFactory.java | 2 +- .../type/standard/StandardRoutingEngine.java | 30 +++---- .../complex/ComplexRoutingEngineTest.java | 28 +++---- .../standard/StandardRoutingEngineTest.java | 16 ++-- 24 files changed, 243 insertions(+), 252 deletions(-) rename sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/condition/{ShardingCondition.java => RouteCondition.java} (89%) rename sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/condition/{ShardingConditions.java => RouteConditions.java} (80%) rename sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dql/{AlwaysFalseShardingCondition.java => AlwaysFalseRouteCondition.java} (82%) diff --git a/sharding-core/sharding-core-entry/src/test/java/org/apache/shardingsphere/core/BaseShardingEngineTest.java b/sharding-core/sharding-core-entry/src/test/java/org/apache/shardingsphere/core/BaseShardingEngineTest.java index 7786a10f860ef..cb28e69b99683 100644 --- a/sharding-core/sharding-core-entry/src/test/java/org/apache/shardingsphere/core/BaseShardingEngineTest.java +++ b/sharding-core/sharding-core-entry/src/test/java/org/apache/shardingsphere/core/BaseShardingEngineTest.java @@ -22,8 +22,8 @@ import org.apache.shardingsphere.api.hint.HintManager; import org.apache.shardingsphere.core.constant.properties.ShardingProperties; import org.apache.shardingsphere.core.constant.properties.ShardingPropertiesConstant; -import org.apache.shardingsphere.core.optimize.condition.ShardingCondition; -import org.apache.shardingsphere.core.optimize.condition.ShardingConditions; +import org.apache.shardingsphere.core.optimize.condition.RouteCondition; +import org.apache.shardingsphere.core.optimize.condition.RouteConditions; import org.apache.shardingsphere.core.optimize.result.OptimizeResult; import org.apache.shardingsphere.core.parse.sql.statement.dml.SelectStatement; import org.apache.shardingsphere.core.route.RouteUnit; @@ -58,7 +58,7 @@ protected final SQLRouteResult createSQLRouteResult() { RoutingResult routingResult = new RoutingResult(); routingResult.getRoutingUnits().add(new RoutingUnit("ds")); result.setRoutingResult(routingResult); - result.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + result.setOptimizeResult(new OptimizeResult(new RouteConditions(Collections.emptyList()))); return result; } diff --git a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/DQLMergeEngineTest.java b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/DQLMergeEngineTest.java index 8eff09e10d031..92b0529fdf1a4 100644 --- a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/DQLMergeEngineTest.java +++ b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/DQLMergeEngineTest.java @@ -32,8 +32,8 @@ import org.apache.shardingsphere.core.merge.dql.pagination.RowNumberDecoratorMergedResult; import org.apache.shardingsphere.core.merge.dql.pagination.TopAndRowNumberDecoratorMergedResult; import org.apache.shardingsphere.core.merge.fixture.TestQueryResult; -import org.apache.shardingsphere.core.optimize.condition.ShardingCondition; -import org.apache.shardingsphere.core.optimize.condition.ShardingConditions; +import org.apache.shardingsphere.core.optimize.condition.RouteCondition; +import org.apache.shardingsphere.core.optimize.condition.RouteConditions; import org.apache.shardingsphere.core.optimize.pagination.Pagination; import org.apache.shardingsphere.core.optimize.result.OptimizeResult; import org.apache.shardingsphere.core.parse.sql.context.selectitem.AggregationSelectItem; @@ -83,7 +83,7 @@ public void setUp() throws SQLException { } selectStatement = new SelectStatement(); routeResult = new SQLRouteResult(selectStatement); - routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.setOptimizeResult(new OptimizeResult(new RouteConditions(Collections.emptyList()))); } @Test diff --git a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/groupby/GroupByMemoryMergedResultTest.java b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/groupby/GroupByMemoryMergedResultTest.java index 4e29cea1dba63..888c83e993c29 100644 --- a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/groupby/GroupByMemoryMergedResultTest.java +++ b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/groupby/GroupByMemoryMergedResultTest.java @@ -26,8 +26,8 @@ import org.apache.shardingsphere.core.merge.MergedResult; import org.apache.shardingsphere.core.merge.dql.DQLMergeEngine; import org.apache.shardingsphere.core.merge.fixture.TestQueryResult; -import org.apache.shardingsphere.core.optimize.condition.ShardingCondition; -import org.apache.shardingsphere.core.optimize.condition.ShardingConditions; +import org.apache.shardingsphere.core.optimize.condition.RouteCondition; +import org.apache.shardingsphere.core.optimize.condition.RouteConditions; import org.apache.shardingsphere.core.optimize.result.OptimizeResult; import org.apache.shardingsphere.core.parse.sql.context.selectitem.AggregationSelectItem; import org.apache.shardingsphere.core.parse.sql.segment.dml.order.item.IndexOrderByItemSegment; @@ -84,7 +84,7 @@ public void setUp() throws SQLException { selectStatement.getGroupByItems().add(new IndexOrderByItemSegment(0, 0, 3, OrderDirection.ASC, OrderDirection.ASC)); selectStatement.getOrderByItems().add(new IndexOrderByItemSegment(0, 0, 3, OrderDirection.DESC, OrderDirection.ASC)); routeResult = new SQLRouteResult(selectStatement); - routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.setOptimizeResult(new OptimizeResult(new RouteConditions(Collections.emptyList()))); } private ResultSet mockResultSet() throws SQLException { diff --git a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/groupby/GroupByStreamMergedResultTest.java b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/groupby/GroupByStreamMergedResultTest.java index 9f3b5c3a67c1c..1a9bcc42fb315 100644 --- a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/groupby/GroupByStreamMergedResultTest.java +++ b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/groupby/GroupByStreamMergedResultTest.java @@ -26,8 +26,8 @@ import org.apache.shardingsphere.core.merge.MergedResult; import org.apache.shardingsphere.core.merge.dql.DQLMergeEngine; import org.apache.shardingsphere.core.merge.fixture.TestQueryResult; -import org.apache.shardingsphere.core.optimize.condition.ShardingCondition; -import org.apache.shardingsphere.core.optimize.condition.ShardingConditions; +import org.apache.shardingsphere.core.optimize.condition.RouteCondition; +import org.apache.shardingsphere.core.optimize.condition.RouteConditions; import org.apache.shardingsphere.core.optimize.result.OptimizeResult; import org.apache.shardingsphere.core.parse.sql.context.selectitem.AggregationSelectItem; import org.apache.shardingsphere.core.parse.sql.segment.dml.order.item.IndexOrderByItemSegment; @@ -86,7 +86,7 @@ public void setUp() throws SQLException { selectStatement.getGroupByItems().add(new IndexOrderByItemSegment(0, 0, 3, OrderDirection.ASC, OrderDirection.ASC)); selectStatement.getOrderByItems().add(new IndexOrderByItemSegment(0, 0, 3, OrderDirection.ASC, OrderDirection.ASC)); routeResult = new SQLRouteResult(selectStatement); - routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.setOptimizeResult(new OptimizeResult(new RouteConditions(Collections.emptyList()))); } private ResultSet mockResultSet() throws SQLException { diff --git a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/iterator/IteratorStreamMergedResultTest.java b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/iterator/IteratorStreamMergedResultTest.java index 1c49d190a72dd..ed485abb7d726 100644 --- a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/iterator/IteratorStreamMergedResultTest.java +++ b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/iterator/IteratorStreamMergedResultTest.java @@ -23,8 +23,8 @@ import org.apache.shardingsphere.core.merge.MergedResult; import org.apache.shardingsphere.core.merge.dql.DQLMergeEngine; import org.apache.shardingsphere.core.merge.fixture.TestQueryResult; -import org.apache.shardingsphere.core.optimize.condition.ShardingCondition; -import org.apache.shardingsphere.core.optimize.condition.ShardingConditions; +import org.apache.shardingsphere.core.optimize.condition.RouteCondition; +import org.apache.shardingsphere.core.optimize.condition.RouteConditions; import org.apache.shardingsphere.core.optimize.result.OptimizeResult; import org.apache.shardingsphere.core.parse.sql.statement.dml.SelectStatement; import org.apache.shardingsphere.core.route.SQLRouteResult; @@ -57,7 +57,7 @@ public void setUp() throws SQLException { when(resultSet.getMetaData()).thenReturn(resultSetMetaData); queryResults = Lists.newArrayList(new TestQueryResult(resultSet), new TestQueryResult(mock(ResultSet.class)), new TestQueryResult(mock(ResultSet.class))); routeResult = new SQLRouteResult(new SelectStatement()); - routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.setOptimizeResult(new OptimizeResult(new RouteConditions(Collections.emptyList()))); } @Test diff --git a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/orderby/OrderByStreamMergedResultTest.java b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/orderby/OrderByStreamMergedResultTest.java index 90ec1eae0a60b..93033388b42c4 100644 --- a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/orderby/OrderByStreamMergedResultTest.java +++ b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/orderby/OrderByStreamMergedResultTest.java @@ -24,8 +24,8 @@ import org.apache.shardingsphere.core.merge.MergedResult; import org.apache.shardingsphere.core.merge.dql.DQLMergeEngine; import org.apache.shardingsphere.core.merge.fixture.TestQueryResult; -import org.apache.shardingsphere.core.optimize.condition.ShardingCondition; -import org.apache.shardingsphere.core.optimize.condition.ShardingConditions; +import org.apache.shardingsphere.core.optimize.condition.RouteCondition; +import org.apache.shardingsphere.core.optimize.condition.RouteConditions; import org.apache.shardingsphere.core.optimize.result.OptimizeResult; import org.apache.shardingsphere.core.parse.sql.segment.dml.order.item.IndexOrderByItemSegment; import org.apache.shardingsphere.core.parse.sql.statement.dml.SelectStatement; @@ -64,7 +64,7 @@ public void setUp() throws SQLException { SelectStatement selectStatement = new SelectStatement(); selectStatement.getOrderByItems().add(new IndexOrderByItemSegment(0, 0, 1, OrderDirection.ASC, OrderDirection.ASC)); routeResult = new SQLRouteResult(selectStatement); - routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.setOptimizeResult(new OptimizeResult(new RouteConditions(Collections.emptyList()))); } @Test diff --git a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/pagination/LimitDecoratorMergedResultTest.java b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/pagination/LimitDecoratorMergedResultTest.java index c12ce94bdf6dc..d607b0e189040 100644 --- a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/pagination/LimitDecoratorMergedResultTest.java +++ b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/pagination/LimitDecoratorMergedResultTest.java @@ -23,8 +23,8 @@ import org.apache.shardingsphere.core.merge.MergedResult; import org.apache.shardingsphere.core.merge.dql.DQLMergeEngine; import org.apache.shardingsphere.core.merge.fixture.TestQueryResult; -import org.apache.shardingsphere.core.optimize.condition.ShardingCondition; -import org.apache.shardingsphere.core.optimize.condition.ShardingConditions; +import org.apache.shardingsphere.core.optimize.condition.RouteCondition; +import org.apache.shardingsphere.core.optimize.condition.RouteConditions; import org.apache.shardingsphere.core.optimize.pagination.Pagination; import org.apache.shardingsphere.core.optimize.result.OptimizeResult; import org.apache.shardingsphere.core.parse.sql.segment.dml.pagination.limit.NumberLiteralLimitValueSegment; @@ -68,7 +68,7 @@ public void setUp() throws SQLException { } SelectStatement selectStatement = new SelectStatement(); routeResult = new SQLRouteResult(selectStatement); - routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.setOptimizeResult(new OptimizeResult(new RouteConditions(Collections.emptyList()))); routeResult.getOptimizeResult().setPagination(new Pagination(null, null, Collections.emptyList())); } diff --git a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/pagination/RowNumberDecoratorMergedResultTest.java b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/pagination/RowNumberDecoratorMergedResultTest.java index 1aaa85cab98fe..11bf2f92a5970 100644 --- a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/pagination/RowNumberDecoratorMergedResultTest.java +++ b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/pagination/RowNumberDecoratorMergedResultTest.java @@ -23,8 +23,8 @@ import org.apache.shardingsphere.core.merge.MergedResult; import org.apache.shardingsphere.core.merge.dql.DQLMergeEngine; import org.apache.shardingsphere.core.merge.fixture.TestQueryResult; -import org.apache.shardingsphere.core.optimize.condition.ShardingCondition; -import org.apache.shardingsphere.core.optimize.condition.ShardingConditions; +import org.apache.shardingsphere.core.optimize.condition.RouteCondition; +import org.apache.shardingsphere.core.optimize.condition.RouteConditions; import org.apache.shardingsphere.core.optimize.pagination.Pagination; import org.apache.shardingsphere.core.optimize.result.OptimizeResult; import org.apache.shardingsphere.core.parse.sql.segment.dml.pagination.rownum.NumberLiteralRowNumberValueSegment; @@ -67,7 +67,7 @@ public void setUp() throws SQLException { queryResults.add(new TestQueryResult(each)); } routeResult = new SQLRouteResult(new SelectStatement()); - routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.setOptimizeResult(new OptimizeResult(new RouteConditions(Collections.emptyList()))); } @Test diff --git a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/pagination/TopAndRowNumberDecoratorMergedResultTest.java b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/pagination/TopAndRowNumberDecoratorMergedResultTest.java index c9a33edd243b2..18a745482659c 100644 --- a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/pagination/TopAndRowNumberDecoratorMergedResultTest.java +++ b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/pagination/TopAndRowNumberDecoratorMergedResultTest.java @@ -23,8 +23,8 @@ import org.apache.shardingsphere.core.merge.MergedResult; import org.apache.shardingsphere.core.merge.dql.DQLMergeEngine; import org.apache.shardingsphere.core.merge.fixture.TestQueryResult; -import org.apache.shardingsphere.core.optimize.condition.ShardingCondition; -import org.apache.shardingsphere.core.optimize.condition.ShardingConditions; +import org.apache.shardingsphere.core.optimize.condition.RouteCondition; +import org.apache.shardingsphere.core.optimize.condition.RouteConditions; import org.apache.shardingsphere.core.optimize.pagination.Pagination; import org.apache.shardingsphere.core.optimize.result.OptimizeResult; import org.apache.shardingsphere.core.parse.sql.segment.dml.pagination.limit.NumberLiteralLimitValueSegment; @@ -68,7 +68,7 @@ public void setUp() throws SQLException { queryResults.add(new TestQueryResult(each)); } routeResult = new SQLRouteResult(new SelectStatement()); - routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.setOptimizeResult(new OptimizeResult(new RouteConditions(Collections.emptyList()))); } @Test diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/condition/ShardingCondition.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/condition/RouteCondition.java similarity index 89% rename from sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/condition/ShardingCondition.java rename to sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/condition/RouteCondition.java index 6fbf806b5392a..32beef8b81799 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/condition/ShardingCondition.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/condition/RouteCondition.java @@ -25,13 +25,13 @@ import java.util.List; /** - * Sharding condition. + * Route condition. * * @author maxiaoguang */ @Getter @ToString -public class ShardingCondition { +public class RouteCondition { - private final List shardingValues = new LinkedList<>(); + private final List routeValues = new LinkedList<>(); } diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/condition/ShardingConditions.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/condition/RouteConditions.java similarity index 80% rename from sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/condition/ShardingConditions.java rename to sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/condition/RouteConditions.java index ae328f665c844..6f24385527bfb 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/condition/ShardingConditions.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/condition/RouteConditions.java @@ -19,21 +19,21 @@ import lombok.Getter; import lombok.RequiredArgsConstructor; -import org.apache.shardingsphere.core.optimize.engine.sharding.dql.AlwaysFalseShardingCondition; +import org.apache.shardingsphere.core.optimize.engine.sharding.dql.AlwaysFalseRouteCondition; import java.util.List; /** - * Sharding conditions. + * Route conditions. * * @author zhangliang * @author maxiaoguang */ @RequiredArgsConstructor @Getter -public final class ShardingConditions { +public final class RouteConditions { - private final List shardingConditions; + private final List routeConditions; /** * Judge sharding conditions is always false or not. @@ -41,11 +41,11 @@ public final class ShardingConditions { * @return sharding conditions is always false or not */ public boolean isAlwaysFalse() { - if (shardingConditions.isEmpty()) { + if (routeConditions.isEmpty()) { return false; } - for (ShardingCondition each : shardingConditions) { - if (!(each instanceof AlwaysFalseShardingCondition)) { + for (RouteCondition each : routeConditions) { + if (!(each instanceof AlwaysFalseRouteCondition)) { return false; } } diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/ddl/DDLOptimizeEngine.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/ddl/DDLOptimizeEngine.java index 2d83f7e72753e..60f2982c08b73 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/ddl/DDLOptimizeEngine.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/ddl/DDLOptimizeEngine.java @@ -20,8 +20,8 @@ import com.google.common.base.Optional; import lombok.RequiredArgsConstructor; import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; -import org.apache.shardingsphere.core.optimize.condition.ShardingCondition; -import org.apache.shardingsphere.core.optimize.condition.ShardingConditions; +import org.apache.shardingsphere.core.optimize.condition.RouteCondition; +import org.apache.shardingsphere.core.optimize.condition.RouteConditions; import org.apache.shardingsphere.core.optimize.engine.OptimizeEngine; import org.apache.shardingsphere.core.optimize.result.OptimizeResult; import org.apache.shardingsphere.core.parse.sql.statement.ddl.DDLStatement; @@ -43,7 +43,7 @@ public final class DDLOptimizeEngine implements OptimizeEngine { @Override public OptimizeResult optimize() { - OptimizeResult result = new OptimizeResult(new ShardingConditions(Collections.emptyList())); + OptimizeResult result = new OptimizeResult(new RouteConditions(Collections.emptyList())); if (isDropIndexWithoutTable()) { setLogicTableName(result); } diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/InsertOptimizeEngine.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/InsertOptimizeEngine.java index 53709cb996273..427311c877b03 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/InsertOptimizeEngine.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/InsertOptimizeEngine.java @@ -20,8 +20,8 @@ import com.google.common.base.Optional; import lombok.RequiredArgsConstructor; import org.apache.shardingsphere.core.optimize.GeneratedKey; -import org.apache.shardingsphere.core.optimize.condition.ShardingCondition; -import org.apache.shardingsphere.core.optimize.condition.ShardingConditions; +import org.apache.shardingsphere.core.optimize.condition.RouteCondition; +import org.apache.shardingsphere.core.optimize.condition.RouteConditions; import org.apache.shardingsphere.core.optimize.engine.OptimizeEngine; import org.apache.shardingsphere.core.optimize.result.OptimizeResult; import org.apache.shardingsphere.core.optimize.result.insert.InsertOptimizeResult; @@ -61,74 +61,65 @@ public final class InsertOptimizeEngine implements OptimizeEngine { @Override public OptimizeResult optimize() { + InsertOptimizeResult insertOptimizeResult = new InsertOptimizeResult(insertStatement.getColumnNames()); List andConditions = insertStatement.getShardingConditions().getOrConditions(); + List routeConditions = new ArrayList<>(andConditions.size()); Optional generatedKey = GeneratedKey.getGenerateKey(shardingRule, parameters, insertStatement); - Iterator> generatedValues = generatedKey.isPresent() ? createGeneratedValues(generatedKey.get()) : null; - List shardingConditions = new ArrayList<>(andConditions.size()); - InsertOptimizeResult insertOptimizeResult = new InsertOptimizeResult(insertStatement.getColumnNames()); + Iterator> generatedValues = generatedKey.isPresent() && generatedKey.get().isGenerated() ? generatedKey.get().getGeneratedValues().iterator() : null; int parametersCount = 0; for (int i = 0; i < andConditions.size(); i++) { InsertValue insertValue = insertStatement.getValues().get(i); - ExpressionSegment[] currentColumnValues = createCurrentColumnValues(generatedKey.orNull(), insertValue); - Object[] currentParameters = createCurrentParameters(generatedKey.orNull(), parametersCount, insertValue); - parametersCount = parametersCount + insertValue.getParametersCount(); - ShardingCondition shardingCondition = createShardingCondition(andConditions.get(i)); - insertOptimizeResult.addUnit(currentColumnValues, currentParameters, insertValue.getParametersCount()); + boolean isGeneratedValue = generatedKey.isPresent() && generatedKey.get().isGenerated(); + ExpressionSegment[] currentInsertValues = createCurrentInsertValues(insertValue, isGeneratedValue); + Object[] currentParameters = createCurrentParameters(insertValue, parametersCount, isGeneratedValue); + parametersCount += insertValue.getParametersCount(); + RouteCondition routeCondition = createShardingCondition(andConditions.get(i)); + insertOptimizeResult.addUnit(currentInsertValues, currentParameters, insertValue.getParametersCount()); if (generatedKey.isPresent() && generatedKey.get().isGenerated()) { Comparable currentGeneratedKey = generatedValues.next(); fillWithGeneratedKeyName(insertOptimizeResult); fillInsertOptimizeResultUnit(insertOptimizeResult.getUnits().get(i), currentGeneratedKey); - fillShardingCondition(shardingCondition, currentGeneratedKey); + fillRouteCondition(routeCondition, currentGeneratedKey); } if (isNeededToAppendQueryAssistedColumn()) { fillWithQueryAssistedColumn(insertOptimizeResult, i); } - shardingConditions.add(shardingCondition); + routeConditions.add(routeCondition); } - OptimizeResult result = new OptimizeResult(new ShardingConditions(shardingConditions), insertOptimizeResult); + OptimizeResult result = new OptimizeResult(new RouteConditions(routeConditions), insertOptimizeResult); if (generatedKey.isPresent()) { result.setGeneratedKey(generatedKey.get()); } return result; } - private Iterator> createGeneratedValues(final GeneratedKey generatedKey) { - return generatedKey.isGenerated() ? generatedKey.getGeneratedValues().iterator() : null; - } - - private ExpressionSegment[] createCurrentColumnValues(final GeneratedKey generatedKey, final InsertValue insertValue) { - ExpressionSegment[] result = new ExpressionSegment[insertValue.getAssignments().size() + getIncrement(generatedKey)]; + private ExpressionSegment[] createCurrentInsertValues(final InsertValue insertValue, final boolean isGeneratedValue) { + ExpressionSegment[] result = new ExpressionSegment[insertValue.getAssignments().size() + getDerivedColumnsCount(isGeneratedValue)]; insertValue.getAssignments().toArray(result); return result; } - private Object[] createCurrentParameters(final GeneratedKey generatedKey, final int beginIndex, final InsertValue insertValue) { + private Object[] createCurrentParameters(final InsertValue insertValue, final int parametersBeginIndex, final boolean isGeneratedValue) { if (0 == insertValue.getParametersCount()) { return new Object[0]; } - Object[] result = new Object[insertValue.getParametersCount() + getIncrement(generatedKey)]; - parameters.subList(beginIndex, beginIndex + insertValue.getParametersCount()).toArray(result); + Object[] result = new Object[insertValue.getParametersCount() + getDerivedColumnsCount(isGeneratedValue)]; + parameters.subList(parametersBeginIndex, parametersBeginIndex + insertValue.getParametersCount()).toArray(result); return result; } - private int getIncrement(final GeneratedKey generatedKey) { - int result = 0; - if (null != generatedKey && generatedKey.isGenerated()) { - result += 1; - } - if (isNeededToAppendQueryAssistedColumn()) { - result += shardingRule.getEncryptRule().getEncryptorEngine().getAssistedQueryColumnCount(insertStatement.getTables().getSingleTableName()); - } - return result; + private int getDerivedColumnsCount(final boolean isGeneratedValue) { + int assistedQueryColumnsCount = shardingRule.getEncryptRule().getEncryptorEngine().getAssistedQueryColumnCount(insertStatement.getTables().getSingleTableName()); + return isGeneratedValue ? assistedQueryColumnsCount + 1 : assistedQueryColumnsCount; } - private ShardingCondition createShardingCondition(final AndCondition andCondition) { - ShardingCondition result = new ShardingCondition(); - result.getShardingValues().addAll(getShardingValues(andCondition)); + private RouteCondition createShardingCondition(final AndCondition andCondition) { + RouteCondition result = new RouteCondition(); + result.getRouteValues().addAll(getRouteValues(andCondition)); return result; } - private Collection getShardingValues(final AndCondition andCondition) { + private Collection getRouteValues(final AndCondition andCondition) { Collection result = new LinkedList<>(); for (Condition each : andCondition.getConditions()) { result.add(new ListRouteValue<>(each.getColumn().getName(), each.getColumn().getTableName(), each.getConditionValues(parameters))); @@ -141,11 +132,11 @@ private void fillWithGeneratedKeyName(final InsertOptimizeResult insertOptimizeR insertOptimizeResult.getColumnNames().add(generateKeyColumnName); } - private void fillShardingCondition(final ShardingCondition shardingCondition, final Comparable currentGeneratedKey) { + private void fillRouteCondition(final RouteCondition routeCondition, final Comparable currentGeneratedKey) { String tableName = insertStatement.getTables().getSingleTableName(); String generateKeyColumnName = shardingRule.findGenerateKeyColumnName(tableName).get(); if (shardingRule.isShardingColumn(generateKeyColumnName, tableName)) { - shardingCondition.getShardingValues().add(new ListRouteValue<>(generateKeyColumnName, tableName, Collections.>singletonList(currentGeneratedKey))); + routeCondition.getRouteValues().add(new ListRouteValue<>(generateKeyColumnName, tableName, Collections.>singletonList(currentGeneratedKey))); } } diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dql/AlwaysFalseShardingCondition.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dql/AlwaysFalseRouteCondition.java similarity index 82% rename from sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dql/AlwaysFalseShardingCondition.java rename to sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dql/AlwaysFalseRouteCondition.java index 4818ce78ff493..b1fdf6371038a 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dql/AlwaysFalseShardingCondition.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dql/AlwaysFalseRouteCondition.java @@ -17,12 +17,12 @@ package org.apache.shardingsphere.core.optimize.engine.sharding.dql; -import org.apache.shardingsphere.core.optimize.condition.ShardingCondition; +import org.apache.shardingsphere.core.optimize.condition.RouteCondition; /** - * Always false sharding condition. + * Always false route condition. * * @author maxiaoguang */ -public final class AlwaysFalseShardingCondition extends ShardingCondition { +public final class AlwaysFalseRouteCondition extends RouteCondition { } diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dql/QueryOptimizeEngine.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dql/QueryOptimizeEngine.java index fef5ef94e439c..b81b964f93a2d 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dql/QueryOptimizeEngine.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dql/QueryOptimizeEngine.java @@ -23,8 +23,8 @@ import lombok.RequiredArgsConstructor; import org.apache.shardingsphere.core.constant.ShardingOperator; import org.apache.shardingsphere.core.exception.ShardingException; -import org.apache.shardingsphere.core.optimize.condition.ShardingCondition; -import org.apache.shardingsphere.core.optimize.condition.ShardingConditions; +import org.apache.shardingsphere.core.optimize.condition.RouteCondition; +import org.apache.shardingsphere.core.optimize.condition.RouteConditions; import org.apache.shardingsphere.core.optimize.engine.OptimizeEngine; import org.apache.shardingsphere.core.optimize.pagination.Pagination; import org.apache.shardingsphere.core.optimize.result.OptimizeResult; @@ -61,24 +61,24 @@ public final class QueryOptimizeEngine implements OptimizeEngine { @Override public OptimizeResult optimize() { - List shardingConditions = new ArrayList<>(conditions.getOrConditions().size()); + List routeConditions = new ArrayList<>(conditions.getOrConditions().size()); for (AndCondition each : conditions.getOrConditions()) { - shardingConditions.add(optimize(each.getConditionsMap())); + routeConditions.add(optimize(each.getConditionsMap())); } - OptimizeResult result = new OptimizeResult(new ShardingConditions(shardingConditions)); + OptimizeResult result = new OptimizeResult(new RouteConditions(routeConditions)); result.setPagination(getPagination().orNull()); return result; } - private ShardingCondition optimize(final Map> conditionsMap) { - ShardingCondition result = new ShardingCondition(); + private RouteCondition optimize(final Map> conditionsMap) { + RouteCondition result = new RouteCondition(); for (Entry> entry : conditionsMap.entrySet()) { try { RouteValue shardingValue = optimize(entry.getKey(), entry.getValue()); if (shardingValue instanceof AlwaysFalseShardingValue) { - return new AlwaysFalseShardingCondition(); + return new AlwaysFalseRouteCondition(); } - result.getShardingValues().add(shardingValue); + result.getRouteValues().add(shardingValue); } catch (final ClassCastException ex) { throw new ShardingException("Found different types for sharding value `%s`.", entry.getKey()); } diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/result/OptimizeResult.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/result/OptimizeResult.java index 77170f5c3c4a9..57a7674ecf54c 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/result/OptimizeResult.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/result/OptimizeResult.java @@ -23,8 +23,8 @@ import lombok.RequiredArgsConstructor; import lombok.Setter; import org.apache.shardingsphere.core.optimize.GeneratedKey; -import org.apache.shardingsphere.core.optimize.condition.ShardingCondition; -import org.apache.shardingsphere.core.optimize.condition.ShardingConditions; +import org.apache.shardingsphere.core.optimize.condition.RouteCondition; +import org.apache.shardingsphere.core.optimize.condition.RouteConditions; import org.apache.shardingsphere.core.optimize.pagination.Pagination; import org.apache.shardingsphere.core.optimize.result.insert.InsertOptimizeResult; @@ -40,7 +40,7 @@ @Setter public final class OptimizeResult { - private final ShardingConditions shardingConditions; + private final RouteConditions routeConditions; @Getter(AccessLevel.NONE) private final InsertOptimizeResult insertOptimizeResult; @@ -51,12 +51,12 @@ public final class OptimizeResult { private String logicTableNameForDropIndex; - public OptimizeResult(final ShardingConditions shardingConditions) { - this(shardingConditions, null); + public OptimizeResult(final RouteConditions routeConditions) { + this(routeConditions, null); } public OptimizeResult(final InsertOptimizeResult insertOptimizeResult) { - this(new ShardingConditions(Collections.emptyList()), insertOptimizeResult); + this(new RouteConditions(Collections.emptyList()), insertOptimizeResult); } /** diff --git a/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/InsertOptimizeEngineTest.java b/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/InsertOptimizeEngineTest.java index 28ba6fce921d5..c62581774202c 100644 --- a/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/InsertOptimizeEngineTest.java +++ b/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/InsertOptimizeEngineTest.java @@ -198,8 +198,8 @@ private void initializeInsertSetWithoutPlaceholderWithEncrypt() { @Test public void assertOptimizeInsertValuesWithPlaceholderWithGeneratedKey() { OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertValuesStatementWithPlaceholder, insertValuesParameters).optimize(); - assertFalse(actual.getShardingConditions().isAlwaysFalse()); - assertThat(actual.getShardingConditions().getShardingConditions().size(), is(2)); + assertFalse(actual.getRouteConditions().isAlwaysFalse()); + assertThat(actual.getRouteConditions().getRouteConditions().size(), is(2)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(3)); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(1).getParameters().length, is(3)); @@ -209,19 +209,19 @@ public void assertOptimizeInsertValuesWithPlaceholderWithGeneratedKey() { assertThat(actual.getInsertOptimizeResult().get().getUnits().get(1).getParameters()[0], CoreMatchers.is(11)); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(1).getParameters()[1], CoreMatchers.is("init")); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(1).getParameters()[2], CoreMatchers.is(1)); - assertThat(actual.getShardingConditions().getShardingConditions().get(0).getShardingValues().size(), is(2)); - assertThat(actual.getShardingConditions().getShardingConditions().get(1).getShardingValues().size(), is(2)); - assertShardingValue((ListRouteValue) actual.getShardingConditions().getShardingConditions().get(0).getShardingValues().get(0), 10); - assertShardingValue((ListRouteValue) actual.getShardingConditions().getShardingConditions().get(0).getShardingValues().get(1), 1); - assertShardingValue((ListRouteValue) actual.getShardingConditions().getShardingConditions().get(1).getShardingValues().get(0), 11); - assertShardingValue((ListRouteValue) actual.getShardingConditions().getShardingConditions().get(1).getShardingValues().get(1), 1); + assertThat(actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().size(), is(2)); + assertThat(actual.getRouteConditions().getRouteConditions().get(1).getRouteValues().size(), is(2)); + assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().get(0), 10); + assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().get(1), 1); + assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(1).getRouteValues().get(0), 11); + assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(1).getRouteValues().get(1), 1); } @Test public void assertOptimizeInsertValuesWithPlaceholderWithGeneratedKeyWithEncrypt() { OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertValuesStatementWithPlaceholderWithEncrypt, insertValuesParameters).optimize(); - assertFalse(actual.getShardingConditions().isAlwaysFalse()); - assertThat(actual.getShardingConditions().getShardingConditions().size(), is(2)); + assertFalse(actual.getRouteConditions().isAlwaysFalse()); + assertThat(actual.getRouteConditions().getRouteConditions().size(), is(2)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(1).getParameters().length, is(3)); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters()[0], CoreMatchers.is(10)); @@ -230,19 +230,19 @@ public void assertOptimizeInsertValuesWithPlaceholderWithGeneratedKeyWithEncrypt assertThat(actual.getInsertOptimizeResult().get().getUnits().get(1).getParameters()[0], CoreMatchers.is(11)); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(1).getParameters()[1], CoreMatchers.is("init")); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(1).getParameters()[2], CoreMatchers.is(1)); - assertThat(actual.getShardingConditions().getShardingConditions().get(0).getShardingValues().size(), is(2)); - assertThat(actual.getShardingConditions().getShardingConditions().get(1).getShardingValues().size(), is(2)); - assertShardingValue((ListRouteValue) actual.getShardingConditions().getShardingConditions().get(0).getShardingValues().get(0), 10); - assertShardingValue((ListRouteValue) actual.getShardingConditions().getShardingConditions().get(0).getShardingValues().get(1), 1); - assertShardingValue((ListRouteValue) actual.getShardingConditions().getShardingConditions().get(1).getShardingValues().get(0), 11); - assertShardingValue((ListRouteValue) actual.getShardingConditions().getShardingConditions().get(1).getShardingValues().get(1), 1); + assertThat(actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().size(), is(2)); + assertThat(actual.getRouteConditions().getRouteConditions().get(1).getRouteValues().size(), is(2)); + assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().get(0), 10); + assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().get(1), 1); + assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(1).getRouteValues().get(0), 11); + assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(1).getRouteValues().get(1), 1); } @Test public void assertOptimizeInsertValuesWithPlaceholderWithoutGeneratedKey() { OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertValuesStatementWithPlaceholder, insertValuesParameters).optimize(); - assertFalse(actual.getShardingConditions().isAlwaysFalse()); - assertThat(actual.getShardingConditions().getShardingConditions().size(), is(2)); + assertFalse(actual.getRouteConditions().isAlwaysFalse()); + assertThat(actual.getRouteConditions().getRouteConditions().size(), is(2)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(3)); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(1).getParameters().length, is(3)); @@ -250,10 +250,10 @@ public void assertOptimizeInsertValuesWithPlaceholderWithoutGeneratedKey() { assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters()[1], CoreMatchers.is("init")); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(1).getParameters()[0], CoreMatchers.is(11)); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(1).getParameters()[1], CoreMatchers.is("init")); - assertThat(actual.getShardingConditions().getShardingConditions().get(0).getShardingValues().size(), is(2)); - assertThat(actual.getShardingConditions().getShardingConditions().get(1).getShardingValues().size(), is(2)); - assertShardingValue((ListRouteValue) actual.getShardingConditions().getShardingConditions().get(0).getShardingValues().get(0), 10); - assertShardingValue((ListRouteValue) actual.getShardingConditions().getShardingConditions().get(1).getShardingValues().get(0), 11); + assertThat(actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().size(), is(2)); + assertThat(actual.getRouteConditions().getRouteConditions().get(1).getRouteValues().size(), is(2)); + assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().get(0), 10); + assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(1).getRouteValues().get(0), 11); } @Test @@ -263,11 +263,11 @@ public void assertOptimizeInsertValuesWithoutPlaceholderWithGeneratedKeyWithQuer insertValuesStatementWithoutPlaceholderWithQueryEncrypt.getValues().add( new InsertValue(Arrays.asList(new LiteralExpressionSegment(1, 2, 12), new LiteralExpressionSegment(3, 4, "a")))); OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertValuesStatementWithoutPlaceholderWithQueryEncrypt, Collections.emptyList()).optimize(); - assertThat(actual.getShardingConditions().getShardingConditions().size(), is(1)); + assertThat(actual.getRouteConditions().getRouteConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(0)); - assertShardingValue((ListRouteValue) actual.getShardingConditions().getShardingConditions().get(0).getShardingValues().get(0), 12); - assertShardingValue((ListRouteValue) actual.getShardingConditions().getShardingConditions().get(0).getShardingValues().get(1), 1); + assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().get(0), 12); + assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().get(1), 1); } @Test @@ -276,11 +276,11 @@ public void assertOptimizeInsertValuesWithoutPlaceholderWithGeneratedKey() { insertValuesStatementWithoutPlaceholder.getColumnNames().add("status"); insertValuesStatementWithoutPlaceholder.getValues().add(new InsertValue(Arrays.asList(new LiteralExpressionSegment(1, 2, 12), new LiteralExpressionSegment(3, 4, "a")))); OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertValuesStatementWithoutPlaceholder, Collections.emptyList()).optimize(); - assertThat(actual.getShardingConditions().getShardingConditions().size(), is(1)); + assertThat(actual.getRouteConditions().getRouteConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(0)); - assertShardingValue((ListRouteValue) actual.getShardingConditions().getShardingConditions().get(0).getShardingValues().get(0), 12); - assertShardingValue((ListRouteValue) actual.getShardingConditions().getShardingConditions().get(0).getShardingValues().get(1), 1); + assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().get(0), 12); + assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().get(1), 1); } @Test @@ -288,13 +288,13 @@ public void assertOptimizeInsertSetWithPlaceholderWithGeneratedKey() { insertSetStatementWithPlaceholder.getValues().add( new InsertValue(Arrays.asList(new ParameterMarkerExpressionSegment(1, 2, 0), new ParameterMarkerExpressionSegment(3, 4, 1)))); OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertSetStatementWithPlaceholder, insertSetParameters).optimize(); - assertThat(actual.getShardingConditions().getShardingConditions().size(), is(1)); + assertThat(actual.getRouteConditions().getRouteConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(3)); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters()[0], CoreMatchers.is(12)); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters()[1], CoreMatchers.is("a")); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters()[2], CoreMatchers.is(1)); - assertShardingValue((ListRouteValue) actual.getShardingConditions().getShardingConditions().get(0).getShardingValues().get(0), 12); + assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().get(0), 12); } @Test @@ -302,25 +302,25 @@ public void assertOptimizeInsertSetWithPlaceholderWithGeneratedKeyWithQueryEncry InsertValue insertValue = new InsertValue(Arrays.asList(new ParameterMarkerExpressionSegment(1, 2, 0), new ParameterMarkerExpressionSegment(3, 4, 1))); insertSetStatementWithPlaceholderWithQueryEncrypt.getValues().add(insertValue); OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertSetStatementWithPlaceholderWithQueryEncrypt, insertSetParameters).optimize(); - assertThat(actual.getShardingConditions().getShardingConditions().size(), is(1)); + assertThat(actual.getRouteConditions().getRouteConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(4)); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters()[0], CoreMatchers.is(12)); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters()[1], CoreMatchers.is("a")); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters()[2], CoreMatchers.is(1)); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters()[3], CoreMatchers.is(12)); - assertShardingValue((ListRouteValue) actual.getShardingConditions().getShardingConditions().get(0).getShardingValues().get(0), 12); + assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().get(0), 12); } @Test public void assertOptimizeInsertSetWithoutPlaceholderWithGeneratedKey() { insertSetStatementWithoutPlaceholder.getValues().add(new InsertValue(Arrays.asList(new LiteralExpressionSegment(1, 2, 12), new LiteralExpressionSegment(3, 4, "a")))); OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertSetStatementWithoutPlaceholder, Collections.emptyList()).optimize(); - assertThat(actual.getShardingConditions().getShardingConditions().size(), is(1)); + assertThat(actual.getRouteConditions().getRouteConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(0)); - assertShardingValue((ListRouteValue) actual.getShardingConditions().getShardingConditions().get(0).getShardingValues().get(0), 12); - assertShardingValue((ListRouteValue) actual.getShardingConditions().getShardingConditions().get(0).getShardingValues().get(1), 1); + assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().get(0), 12); + assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().get(1), 1); } @Test @@ -328,11 +328,11 @@ public void assertOptimizeInsertSetWithoutPlaceholderWithGeneratedKeyWithEncrypt insertSetStatementWithoutPlaceholderWithEncrypt.getValues().add( new InsertValue(Arrays.asList(new LiteralExpressionSegment(1, 2, 12), new LiteralExpressionSegment(3, 4, "a")))); OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertSetStatementWithoutPlaceholderWithEncrypt, Collections.emptyList()).optimize(); - assertThat(actual.getShardingConditions().getShardingConditions().size(), is(1)); + assertThat(actual.getRouteConditions().getRouteConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(0)); - assertShardingValue((ListRouteValue) actual.getShardingConditions().getShardingConditions().get(0).getShardingValues().get(0), 12); - assertShardingValue((ListRouteValue) actual.getShardingConditions().getShardingConditions().get(0).getShardingValues().get(1), 1); + assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().get(0), 12); + assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().get(1), 1); } private void assertShardingValue(final ListRouteValue actual, final int expected) { diff --git a/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/QueryOptimizeEngineTest.java b/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/QueryOptimizeEngineTest.java index cc190a60b71c0..718b252833690 100644 --- a/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/QueryOptimizeEngineTest.java +++ b/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/QueryOptimizeEngineTest.java @@ -18,8 +18,8 @@ package org.apache.shardingsphere.core.optimize.engine.sharding; import com.google.common.collect.Range; -import org.apache.shardingsphere.core.optimize.condition.ShardingCondition; -import org.apache.shardingsphere.core.optimize.condition.ShardingConditions; +import org.apache.shardingsphere.core.optimize.condition.RouteCondition; +import org.apache.shardingsphere.core.optimize.condition.RouteConditions; import org.apache.shardingsphere.core.optimize.engine.sharding.dql.QueryOptimizeEngine; import org.apache.shardingsphere.core.parse.sql.context.condition.AndCondition; import org.apache.shardingsphere.core.parse.sql.context.condition.Column; @@ -54,8 +54,8 @@ public void assertOptimizeAlwaysFalseListConditions() { andCondition.getConditions().add(condition2); Conditions conditions = new Conditions(); conditions.getOrConditions().add(andCondition); - ShardingConditions shardingConditions = new QueryOptimizeEngine(new SelectStatement(), Collections.emptyList(), conditions).optimize().getShardingConditions(); - assertTrue(shardingConditions.isAlwaysFalse()); + RouteConditions routeConditions = new QueryOptimizeEngine(new SelectStatement(), Collections.emptyList(), conditions).optimize().getRouteConditions(); + assertTrue(routeConditions.isAlwaysFalse()); } @Test @@ -67,8 +67,8 @@ public void assertOptimizeAlwaysFalseRangeConditions() { andCondition.getConditions().add(condition2); Conditions conditions = new Conditions(); conditions.getOrConditions().add(andCondition); - ShardingConditions shardingConditions = new QueryOptimizeEngine(new SelectStatement(), Collections.emptyList(), conditions).optimize().getShardingConditions(); - assertTrue(shardingConditions.isAlwaysFalse()); + RouteConditions routeConditions = new QueryOptimizeEngine(new SelectStatement(), Collections.emptyList(), conditions).optimize().getRouteConditions(); + assertTrue(routeConditions.isAlwaysFalse()); } @Test @@ -80,8 +80,8 @@ public void assertOptimizeAlwaysFalseListConditionsAndRangeConditions() { andCondition.getConditions().add(condition2); Conditions conditions = new Conditions(); conditions.getOrConditions().add(andCondition); - ShardingConditions shardingConditions = new QueryOptimizeEngine(new SelectStatement(), Collections.emptyList(), conditions).optimize().getShardingConditions(); - assertTrue(shardingConditions.isAlwaysFalse()); + RouteConditions routeConditions = new QueryOptimizeEngine(new SelectStatement(), Collections.emptyList(), conditions).optimize().getRouteConditions(); + assertTrue(routeConditions.isAlwaysFalse()); } @SuppressWarnings("unchecked") @@ -94,10 +94,10 @@ public void assertOptimizeListConditions() { andCondition.getConditions().add(condition2); Conditions conditions = new Conditions(); conditions.getOrConditions().add(andCondition); - ShardingConditions shardingConditions = new QueryOptimizeEngine(new SelectStatement(), Collections.emptyList(), conditions).optimize().getShardingConditions(); - assertFalse(shardingConditions.isAlwaysFalse()); - ShardingCondition shardingCondition = shardingConditions.getShardingConditions().get(0); - RouteValue shardingValue = shardingCondition.getShardingValues().get(0); + RouteConditions routeConditions = new QueryOptimizeEngine(new SelectStatement(), Collections.emptyList(), conditions).optimize().getRouteConditions(); + assertFalse(routeConditions.isAlwaysFalse()); + RouteCondition routeCondition = routeConditions.getRouteConditions().get(0); + RouteValue shardingValue = routeCondition.getRouteValues().get(0); Collection> values = ((ListRouteValue>) shardingValue).getValues(); assertThat(values.size(), is(1)); assertTrue(values.containsAll(Collections.singleton(1))); @@ -113,10 +113,10 @@ public void assertOptimizeRangeConditions() { andCondition.getConditions().add(condition2); Conditions parseCondition = new Conditions(); parseCondition.getOrConditions().add(andCondition); - ShardingConditions shardingConditions = new QueryOptimizeEngine(new SelectStatement(), Collections.emptyList(), parseCondition).optimize().getShardingConditions(); - assertFalse(shardingConditions.isAlwaysFalse()); - ShardingCondition shardingCondition = shardingConditions.getShardingConditions().get(0); - RouteValue shardingValue = shardingCondition.getShardingValues().get(0); + RouteConditions routeConditions = new QueryOptimizeEngine(new SelectStatement(), Collections.emptyList(), parseCondition).optimize().getRouteConditions(); + assertFalse(routeConditions.isAlwaysFalse()); + RouteCondition routeCondition = routeConditions.getRouteConditions().get(0); + RouteValue shardingValue = routeCondition.getRouteValues().get(0); Range> values = ((BetweenRouteValue>) shardingValue).getValueRange(); assertThat(values.lowerEndpoint(), CoreMatchers.is(1)); assertThat(values.upperEndpoint(), CoreMatchers.is(2)); @@ -132,10 +132,10 @@ public void assertOptimizeListConditionsAndRangeConditions() { andCondition.getConditions().add(condition2); Conditions parseCondition = new Conditions(); parseCondition.getOrConditions().add(andCondition); - ShardingConditions shardingConditions = new QueryOptimizeEngine(new SelectStatement(), Collections.emptyList(), parseCondition).optimize().getShardingConditions(); - assertFalse(shardingConditions.isAlwaysFalse()); - ShardingCondition shardingCondition = shardingConditions.getShardingConditions().get(0); - RouteValue shardingValue = shardingCondition.getShardingValues().get(0); + RouteConditions routeConditions = new QueryOptimizeEngine(new SelectStatement(), Collections.emptyList(), parseCondition).optimize().getRouteConditions(); + assertFalse(routeConditions.isAlwaysFalse()); + RouteCondition routeCondition = routeConditions.getRouteConditions().get(0); + RouteValue shardingValue = routeCondition.getRouteValues().get(0); Collection> values = ((ListRouteValue>) shardingValue).getValues(); assertThat(values.size(), is(2)); assertTrue(values.containsAll(Arrays.asList(1, 2))); diff --git a/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/core/rewrite/rewriter/ShardingSQLRewriterTest.java b/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/core/rewrite/rewriter/ShardingSQLRewriterTest.java index ce72600c8bb8d..2cb79ac96ffbc 100644 --- a/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/core/rewrite/rewriter/ShardingSQLRewriterTest.java +++ b/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/core/rewrite/rewriter/ShardingSQLRewriterTest.java @@ -22,8 +22,8 @@ import lombok.SneakyThrows; import org.apache.shardingsphere.core.constant.AggregationType; import org.apache.shardingsphere.core.constant.OrderDirection; -import org.apache.shardingsphere.core.optimize.condition.ShardingCondition; -import org.apache.shardingsphere.core.optimize.condition.ShardingConditions; +import org.apache.shardingsphere.core.optimize.condition.RouteCondition; +import org.apache.shardingsphere.core.optimize.condition.RouteConditions; import org.apache.shardingsphere.core.optimize.pagination.Pagination; import org.apache.shardingsphere.core.optimize.result.OptimizeResult; import org.apache.shardingsphere.core.optimize.result.insert.InsertOptimizeResult; @@ -134,7 +134,7 @@ public void setUp() throws IOException { public void assertRewriteWithoutChange() { routeResult = new SQLRouteResult(selectStatement); routeResult.setRoutingResult(new RoutingResult()); - routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.setOptimizeResult(new OptimizeResult(new RouteConditions(Collections.emptyList()))); selectStatement.setLogicSQL("SELECT table_y.id FROM table_y WHERE table_y.id=?"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.singletonList(1)); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is("SELECT table_y.id FROM table_y WHERE table_y.id=?")); @@ -150,7 +150,7 @@ public void assertRewriteForTableName() { selectStatement.getSQLSegments().add(new TableSegment(47, 53, "table_x")); routeResult = new SQLRouteResult(selectStatement); routeResult.setRoutingResult(new RoutingResult()); - routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.setOptimizeResult(new OptimizeResult(new RouteConditions(Collections.emptyList()))); selectStatement.setLogicSQL("SELECT table_x.id, x.name FROM table_x x WHERE table_x.id=? AND x.name=?"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(parameters); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is("SELECT table_1.id, x.name FROM table_1 x WHERE table_1.id=? AND x.name=?")); @@ -166,7 +166,7 @@ public void assertRewriteForOrderByAndGroupByDerivedColumns() { selectStatement.setSelectListStopIndex(11); routeResult = new SQLRouteResult(selectStatement); routeResult.setRoutingResult(new RoutingResult()); - routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.setOptimizeResult(new OptimizeResult(new RouteConditions(Collections.emptyList()))); selectStatement.setLogicSQL("SELECT x.age FROM table_x x GROUP BY x.id ORDER BY x.name"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is( @@ -185,7 +185,7 @@ public void assertRewriteForAggregationDerivedColumns() { selectStatement.setSelectListStopIndex(16); routeResult = new SQLRouteResult(selectStatement); routeResult.setRoutingResult(new RoutingResult()); - routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.setOptimizeResult(new OptimizeResult(new RouteConditions(Collections.emptyList()))); selectStatement.setLogicSQL("SELECT AVG(x.age) FROM table_x x"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is( @@ -355,7 +355,7 @@ public void assertRewriteForLimit() { selectStatement.getSQLSegments().add(new TableSegment(17, 23, "table_x")); routeResult = new SQLRouteResult(selectStatement); routeResult.setRoutingResult(new RoutingResult()); - routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.setOptimizeResult(new OptimizeResult(new RouteConditions(Collections.emptyList()))); routeResult.getOptimizeResult().setPagination(new Pagination(offsetSegment, rowCountSegment, Collections.emptyList())); selectStatement.setLogicSQL("SELECT x.id FROM table_x x LIMIT 2, 2"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); @@ -371,7 +371,7 @@ public void assertRewriteForRowNumber() { selectStatement.getSQLSegments().add(new TableSegment(68, 74, "table_x")); routeResult = new SQLRouteResult(selectStatement); routeResult.setRoutingResult(new RoutingResult()); - routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.setOptimizeResult(new OptimizeResult(new RouteConditions(Collections.emptyList()))); routeResult.getOptimizeResult().setPagination(new Pagination(offsetSegment, rowCountSegment, Collections.emptyList())); selectStatement.setLogicSQL("SELECT * FROM (SELECT row_.*, rownum rownum_ FROM (SELECT x.id FROM table_x x) row_ WHERE rownum<=4) t WHERE t.rownum_>2"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); @@ -388,7 +388,7 @@ public void assertRewriteForTopAndRowNumber() { selectStatement.getSQLSegments().add(new TableSegment(85, 91, "table_x")); routeResult = new SQLRouteResult(selectStatement); routeResult.setRoutingResult(new RoutingResult()); - routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.setOptimizeResult(new OptimizeResult(new RouteConditions(Collections.emptyList()))); routeResult.getOptimizeResult().setPagination(new Pagination(offsetSegment, rowCountSegment, Collections.emptyList())); selectStatement.setLogicSQL("SELECT * FROM (SELECT TOP(4) row_number() OVER (ORDER BY x.id) AS rownum_, x.id FROM table_x x) AS row_ WHERE row_.rownum_>2"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); @@ -409,7 +409,7 @@ public void assertRewriteForLimitForMemoryGroupBy() { selectStatement.getSQLSegments().add(new TableSegment(17, 23, "table_x")); routeResult = new SQLRouteResult(selectStatement); routeResult.setRoutingResult(new RoutingResult()); - routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.setOptimizeResult(new OptimizeResult(new RouteConditions(Collections.emptyList()))); routeResult.getOptimizeResult().setPagination(new Pagination(offsetSegment, rowCountSegment, Collections.emptyList())); selectStatement.setLogicSQL("SELECT x.id FROM table_x x LIMIT 2, 2"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); @@ -429,7 +429,7 @@ public void assertRewriteForRowNumForMemoryGroupBy() { selectStatement.getGroupByItems().add(new ColumnOrderByItemSegment(0, 0, columnSegment, OrderDirection.DESC, OrderDirection.ASC)); routeResult = new SQLRouteResult(selectStatement); routeResult.setRoutingResult(new RoutingResult()); - routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.setOptimizeResult(new OptimizeResult(new RouteConditions(Collections.emptyList()))); routeResult.getOptimizeResult().setPagination(new Pagination(offsetSegment, rowCountSegment, Collections.emptyList())); selectStatement.setLogicSQL("SELECT * FROM (SELECT row_.*, rownum rownum_ FROM (SELECT x.id FROM table_x x) row_ WHERE rownum<=4) t WHERE t.rownum_>2"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); @@ -450,7 +450,7 @@ public void assertRewriteForTopAndRowNumberForMemoryGroupBy() { selectStatement.getGroupByItems().add(new ColumnOrderByItemSegment(0, 0, columnSegment, OrderDirection.DESC, OrderDirection.ASC)); routeResult = new SQLRouteResult(selectStatement); routeResult.setRoutingResult(new RoutingResult()); - routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.setOptimizeResult(new OptimizeResult(new RouteConditions(Collections.emptyList()))); routeResult.getOptimizeResult().setPagination(new Pagination(offsetSegment, rowCountSegment, Collections.emptyList())); selectStatement.setLogicSQL("SELECT * FROM (SELECT TOP(4) row_number() OVER (ORDER BY x.id) AS rownum_, x.id FROM table_x x) AS row_ WHERE row_.rownum_>2"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); @@ -469,7 +469,7 @@ public void assertRewriteForLimitForNotRewritePagination() { RoutingResult routingResult = new RoutingResult(); routingResult.getRoutingUnits().add(new RoutingUnit("ds")); routeResult.setRoutingResult(routingResult); - routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.setOptimizeResult(new OptimizeResult(new RouteConditions(Collections.emptyList()))); routeResult.getOptimizeResult().setPagination(new Pagination(offsetSegment, rowCountSegment, Collections.emptyList())); selectStatement.setLogicSQL("SELECT x.id FROM table_x x LIMIT 2, 2"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); @@ -487,7 +487,7 @@ public void assertRewriteForRowNumForNotRewritePagination() { RoutingResult routingResult = new RoutingResult(); routingResult.getRoutingUnits().add(new RoutingUnit("ds")); routeResult.setRoutingResult(routingResult); - routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.setOptimizeResult(new OptimizeResult(new RouteConditions(Collections.emptyList()))); routeResult.getOptimizeResult().setPagination(new Pagination(offsetSegment, rowCountSegment, Collections.emptyList())); selectStatement.setLogicSQL("SELECT * FROM (SELECT row_.*, rownum rownum_ FROM (SELECT x.id FROM table_x x) row_ WHERE rownum<=4) t WHERE t.rownum_>2"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); @@ -506,7 +506,7 @@ public void assertRewriteForTopAndRowNumberForNotRewritePagination() { RoutingResult routingResult = new RoutingResult(); routingResult.getRoutingUnits().add(new RoutingUnit("ds")); routeResult.setRoutingResult(routingResult); - routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.setOptimizeResult(new OptimizeResult(new RouteConditions(Collections.emptyList()))); routeResult.getOptimizeResult().setPagination(new Pagination(offsetSegment, rowCountSegment, Collections.emptyList())); selectStatement.setLogicSQL("SELECT * FROM (SELECT TOP(4) row_number() OVER (ORDER BY x.id) AS rownum_, x.id FROM table_x x) AS row_ WHERE row_.rownum_>2"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); @@ -529,7 +529,7 @@ public void assertRewriteForDerivedOrderBy() { selectStatement.getSQLSegments().add(new TableSegment(25, 31, "table_x")); routeResult = new SQLRouteResult(selectStatement); routeResult.setRoutingResult(new RoutingResult()); - routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.setOptimizeResult(new OptimizeResult(new RouteConditions(Collections.emptyList()))); selectStatement.setLogicSQL("SELECT x.id, x.name FROM table_x x GROUP BY x.id, x.name DESC"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is("SELECT x.id, x.name FROM table_1 x GROUP BY x.id, x.name DESC ORDER BY x.id ASC,x.name DESC ")); @@ -544,7 +544,7 @@ public void assertGenerateSQL() { selectStatement.getTables().add(new Table("table_y", "y")); routeResult = new SQLRouteResult(selectStatement); routeResult.setRoutingResult(new RoutingResult()); - routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.setOptimizeResult(new OptimizeResult(new RouteConditions(Collections.emptyList()))); selectStatement.setLogicSQL("SELECT table_x.id, x.name FROM table_x x, table_y y WHERE table_x.id=? AND x.name=?"); SQLRewriteEngine rewriteEngine = new SQLRewriteEngine(shardingRule, routeResult.getSqlStatement(), parameters, routeResult.getRoutingResult().isSingleRouting()); rewriteEngine.init(Collections.singletonList(new ShardingParameterRewriter(routeResult)), @@ -562,7 +562,7 @@ public void assertIndexTokenForIndexNameTableName() { selectStatement.getSQLSegments().add(new TableSegment(27, 33, "table_x")); routeResult = new SQLRouteResult(selectStatement); routeResult.setRoutingResult(new RoutingResult()); - routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.setOptimizeResult(new OptimizeResult(new RouteConditions(Collections.emptyList()))); selectStatement.setLogicSQL("CREATE INDEX index_name ON table_x ('column')"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is("CREATE INDEX index_name_table_1 ON table_1 ('column')")); @@ -589,7 +589,7 @@ public void assertIndexTokenForIndexNameTableNameWithoutLogicTableName() { selectStatement.getSQLSegments().add(new TableSegment(28, 34, "table_x")); routeResult = new SQLRouteResult(selectStatement); routeResult.setRoutingResult(new RoutingResult()); - routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.setOptimizeResult(new OptimizeResult(new RouteConditions(Collections.emptyList()))); selectStatement.setLogicSQL("CREATE INDEX logic_index ON table_x ('column')"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is("CREATE INDEX logic_index_table_1 ON table_1 ('column')")); @@ -602,7 +602,7 @@ public void assertTableTokenWithoutBackQuoteForShow() { RoutingResult routingResult = new RoutingResult(); routingResult.getRoutingUnits().add(new RoutingUnit("ds")); routeResult.setRoutingResult(routingResult); - routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.setOptimizeResult(new OptimizeResult(new RouteConditions(Collections.emptyList()))); showTablesStatement.setLogicSQL("SHOW COLUMNS FROM table_x"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is("SHOW COLUMNS FROM table_1")); @@ -616,7 +616,7 @@ public void assertTableTokenWithoutBackQuoteFromSchemaForShow() { RoutingResult routingResult = new RoutingResult(); routingResult.getRoutingUnits().add(new RoutingUnit("ds")); routeResult.setRoutingResult(routingResult); - routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.setOptimizeResult(new OptimizeResult(new RouteConditions(Collections.emptyList()))); showTablesStatement.setLogicSQL("SHOW COLUMNS FROM table_x FROM 'sharding_db'"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); Map logicAndActualTableMap = new LinkedHashMap<>(); @@ -631,7 +631,7 @@ public void assertTableTokenWithBackQuoteForShow() { RoutingResult routingResult = new RoutingResult(); routingResult.getRoutingUnits().add(new RoutingUnit("ds")); routeResult.setRoutingResult(routingResult); - routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.setOptimizeResult(new OptimizeResult(new RouteConditions(Collections.emptyList()))); showTablesStatement.setLogicSQL("SHOW COLUMNS FROM `table_x`"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is("SHOW COLUMNS FROM `table_1`")); @@ -644,7 +644,7 @@ public void assertTableTokenWithBackQuoteFromSchemaForShow() { RoutingResult routingResult = new RoutingResult(); routingResult.getRoutingUnits().add(new RoutingUnit("ds")); routeResult.setRoutingResult(routingResult); - routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.setOptimizeResult(new OptimizeResult(new RouteConditions(Collections.emptyList()))); showTablesStatement.setLogicSQL("SHOW COLUMNS FROM `table_x` FROM 'sharding_db'"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is("SHOW COLUMNS FROM `table_1` FROM 'sharding_db'")); @@ -657,7 +657,7 @@ public void assertTableTokenWithSchemaForShow() { RoutingResult routingResult = new RoutingResult(); routingResult.getRoutingUnits().add(new RoutingUnit("ds")); routeResult.setRoutingResult(routingResult); - routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.setOptimizeResult(new OptimizeResult(new RouteConditions(Collections.emptyList()))); showTablesStatement.setLogicSQL("SHOW COLUMNS FROM sharding_db.table_x"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is("SHOW COLUMNS FROM table_1")); @@ -670,7 +670,7 @@ public void assertTableTokenWithSchemaFromSchemaForShow() { RoutingResult routingResult = new RoutingResult(); routingResult.getRoutingUnits().add(new RoutingUnit("ds")); routeResult.setRoutingResult(routingResult); - routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.setOptimizeResult(new OptimizeResult(new RouteConditions(Collections.emptyList()))); showTablesStatement.setLogicSQL("SHOW COLUMNS FROM sharding_db.table_x FROM sharding_db"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is("SHOW COLUMNS FROM table_1 FROM sharding_db")); @@ -683,7 +683,7 @@ public void assertTableTokenWithBackQuoteWithSchemaForShow() { RoutingResult routingResult = new RoutingResult(); routingResult.getRoutingUnits().add(new RoutingUnit("ds")); routeResult.setRoutingResult(routingResult); - routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.setOptimizeResult(new OptimizeResult(new RouteConditions(Collections.emptyList()))); showTablesStatement.setLogicSQL("SHOW COLUMNS FROM sharding_db.`table_x`"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is("SHOW COLUMNS FROM `table_1`")); @@ -696,7 +696,7 @@ public void assertTableTokenWithBackQuoteWithSchemaFromSchemaForShow() { RoutingResult routingResult = new RoutingResult(); routingResult.getRoutingUnits().add(new RoutingUnit("ds")); routeResult.setRoutingResult(routingResult); - routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.setOptimizeResult(new OptimizeResult(new RouteConditions(Collections.emptyList()))); showTablesStatement.setLogicSQL("SHOW COLUMNS FROM sharding_db.`table_x` FROM sharding_db"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is("SHOW COLUMNS FROM `table_1` FROM sharding_db")); @@ -709,7 +709,7 @@ public void assertTableTokenWithSchemaWithBackQuoteForShow() { RoutingResult routingResult = new RoutingResult(); routingResult.getRoutingUnits().add(new RoutingUnit("ds")); routeResult.setRoutingResult(routingResult); - routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.setOptimizeResult(new OptimizeResult(new RouteConditions(Collections.emptyList()))); showTablesStatement.setLogicSQL("SHOW COLUMNS FROM `sharding_db`.`table_x`"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is("SHOW COLUMNS FROM `table_1`")); @@ -722,7 +722,7 @@ public void assertTableTokenWithSchemaWithBackQuoteFromSchemaForShow() { RoutingResult routingResult = new RoutingResult(); routingResult.getRoutingUnits().add(new RoutingUnit("ds")); routeResult.setRoutingResult(routingResult); - routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.setOptimizeResult(new OptimizeResult(new RouteConditions(Collections.emptyList()))); showTablesStatement.setLogicSQL("SHOW COLUMNS FROM `sharding_db`.`table_x` FROM sharding_db"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is("SHOW COLUMNS FROM `table_1` FROM sharding_db")); @@ -738,7 +738,7 @@ public void assertTableTokenWithSchemaForSelect() { RoutingResult routingResult = new RoutingResult(); routingResult.getRoutingUnits().add(new RoutingUnit("ds")); routeResult.setRoutingResult(routingResult); - routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.setOptimizeResult(new OptimizeResult(new RouteConditions(Collections.emptyList()))); selectStatement.setLogicSQL("SELECT * FROM sharding_db.table_x"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is("SELECT * FROM table_1")); @@ -749,7 +749,7 @@ public void assertTableTokenWithSchemaForInsert() { insertStatement.getSQLSegments().add(new TableSegment(12, 30, "table_x")); routeResult = new SQLRouteResult(insertStatement); routeResult.setRoutingResult(new RoutingResult()); - routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.setOptimizeResult(new OptimizeResult(new RouteConditions(Collections.emptyList()))); insertStatement.setLogicSQL("INSERT INTO sharding_db.table_x (order_id, user_id, status) values (1, 1, 'OK')"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL( @@ -761,7 +761,7 @@ public void assertTableTokenWithSchemaForUpdate() { updateStatement.getSQLSegments().add(new TableSegment(7, 27, "table_x")); routeResult = new SQLRouteResult(updateStatement); routeResult.setRoutingResult(new RoutingResult()); - routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.setOptimizeResult(new OptimizeResult(new RouteConditions(Collections.emptyList()))); updateStatement.setLogicSQL("UPDATE `sharding_db`.table_x SET user_id=1 WHERE order_id=1"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is("UPDATE table_1 SET user_id=1 WHERE order_id=1")); @@ -774,7 +774,7 @@ public void assertTableTokenWithSchemaForDelete() { RoutingResult routingResult = new RoutingResult(); routingResult.getRoutingUnits().add(new RoutingUnit("ds")); routeResult.setRoutingResult(routingResult); - routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.setOptimizeResult(new OptimizeResult(new RouteConditions(Collections.emptyList()))); deleteStatement.setLogicSQL("DELETE FROM `sharding_db`.`table_x` WHERE user_id=1"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is("DELETE FROM `table_1` WHERE user_id=1")); @@ -792,7 +792,7 @@ public void assertSelectEqualWithShardingEncryptor() { new Condition(column, new PredicateSegment(29, 32, null, null), new ParameterMarkerExpressionSegment(0, 0, 0))); routeResult = new SQLRouteResult(selectStatement); routeResult.setRoutingResult(new RoutingResult()); - routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.setOptimizeResult(new OptimizeResult(new RouteConditions(Collections.emptyList()))); selectStatement.setLogicSQL("SELECT id FROM table_z WHERE id=? AND name=?"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(parameters); assertThat(getSQLBuilder(rewriteEngine).toSQL(), is("SELECT id FROM table_z WHERE id = ? AND name=?")); @@ -810,7 +810,7 @@ public void assertSelectInWithShardingEncryptor() { selectStatement.getEncryptConditions().getOrConditions().get(0).getConditions().add(new Condition(column, new PredicateSegment(29, 39, null, null), expressionSegments)); routeResult = new SQLRouteResult(selectStatement); routeResult.setRoutingResult(new RoutingResult()); - routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.setOptimizeResult(new OptimizeResult(new RouteConditions(Collections.emptyList()))); selectStatement.setLogicSQL("SELECT id FROM table_z WHERE id in (3,5)"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is("SELECT id FROM table_z WHERE id IN ('encryptValue', 'encryptValue')")); @@ -832,7 +832,7 @@ public void assertSelectInWithShardingEncryptorWithParameter() { selectStatement.getEncryptConditions().getOrConditions().get(0).getConditions().add(new Condition(column, new PredicateSegment(45, 50, null, null), new LiteralExpressionSegment(0, 0, 3))); routeResult = new SQLRouteResult(selectStatement); routeResult.setRoutingResult(new RoutingResult()); - routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.setOptimizeResult(new OptimizeResult(new RouteConditions(Collections.emptyList()))); selectStatement.setLogicSQL("SELECT id FROM table_z WHERE id in (?, ?) or id = 3"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(parameters); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is("SELECT id FROM table_z WHERE id IN (?, ?) or id = 'encryptValue'")); @@ -852,7 +852,7 @@ public void assertSelectEqualWithQueryAssistedShardingEncryptor() { new Condition(column, new PredicateSegment(29, 32, null, null), new ParameterMarkerExpressionSegment(0, 0, 0))); routeResult = new SQLRouteResult(selectStatement); routeResult.setRoutingResult(new RoutingResult()); - routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.setOptimizeResult(new OptimizeResult(new RouteConditions(Collections.emptyList()))); selectStatement.setLogicSQL("SELECT id FROM table_k WHERE id=? AND name=?"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(parameters); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is("SELECT id FROM table_k WHERE query_id = ? AND name=?")); @@ -870,7 +870,7 @@ public void assertSelectInWithQueryAssistedShardingEncryptor() { selectStatement.getEncryptConditions().getOrConditions().get(0).getConditions().add(new Condition(column, new PredicateSegment(29, 39, null, null), expressionSegments)); routeResult = new SQLRouteResult(selectStatement); routeResult.setRoutingResult(new RoutingResult()); - routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.setOptimizeResult(new OptimizeResult(new RouteConditions(Collections.emptyList()))); selectStatement.setLogicSQL("SELECT id FROM table_k WHERE id in (3,5)"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), @@ -889,7 +889,7 @@ public void assertUpdateWithShardingEncryptor() { updateStatement.getEncryptConditions().getOrConditions().get(0).getConditions().add(new Condition(column, new PredicateSegment(32, 37, null, null), new LiteralExpressionSegment(0, 0, 2))); routeResult = new SQLRouteResult(updateStatement); routeResult.setRoutingResult(new RoutingResult()); - routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.setOptimizeResult(new OptimizeResult(new RouteConditions(Collections.emptyList()))); updateStatement.setLogicSQL("UPDATE table_z SET id = 1 WHERE id = 2"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is("UPDATE table_z SET id = 'encryptValue' WHERE id = 'encryptValue'")); @@ -931,7 +931,7 @@ public void assertSelectInWithAggregationDistinct() { selectStatement.getSQLSegments().add(selectItemsSegment); routeResult = new SQLRouteResult(selectStatement); routeResult.setRoutingResult(new RoutingResult()); - routeResult.setOptimizeResult(new OptimizeResult(new ShardingConditions(Collections.emptyList()))); + routeResult.setOptimizeResult(new OptimizeResult(new RouteConditions(Collections.emptyList()))); selectStatement.setLogicSQL("SELECT COUNT(DISTINCT id), SUM(DISTINCT id) FROM table_z WHERE id in (3,5)"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList()); assertThat(getSQLBuilder(rewriteEngine).toSQL(null, tableTokens), is("SELECT DISTINCT id, id FROM table_z WHERE id in (3,5)")); diff --git a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java index 136b209d1316c..16bbbec7d34c1 100644 --- a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java +++ b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java @@ -23,8 +23,8 @@ import org.apache.shardingsphere.api.hint.HintManager; import org.apache.shardingsphere.core.metadata.ShardingMetaData; import org.apache.shardingsphere.core.optimize.OptimizeEngineFactory; -import org.apache.shardingsphere.core.optimize.condition.ShardingCondition; -import org.apache.shardingsphere.core.optimize.condition.ShardingConditions; +import org.apache.shardingsphere.core.optimize.condition.RouteCondition; +import org.apache.shardingsphere.core.optimize.condition.RouteConditions; import org.apache.shardingsphere.core.optimize.result.OptimizeResult; import org.apache.shardingsphere.core.parse.cache.ParsingResultCache; import org.apache.shardingsphere.core.parse.entry.ShardingSQLParseEntry; @@ -87,8 +87,8 @@ public SQLRouteResult route(final SQLStatement sqlStatement, final List OptimizeResult optimizeResult = OptimizeEngineFactory.newInstance(shardingRule, sqlStatement, parameters, shardingMetaData.getTable()).optimize(); boolean needMergeShardingValues = isNeedMergeShardingValues(sqlStatement); if (needMergeShardingValues) { - checkSubqueryShardingValues(sqlStatement, optimizeResult.getShardingConditions()); - mergeShardingValues(optimizeResult.getShardingConditions()); + checkSubqueryShardingValues(sqlStatement, optimizeResult.getRouteConditions()); + mergeShardingValues(optimizeResult.getRouteConditions()); } RoutingResult routingResult = RoutingEngineFactory.newInstance(shardingRule, shardingMetaData.getDataSource(), sqlStatement, optimizeResult).route(); if (needMergeShardingValues) { @@ -114,7 +114,7 @@ private boolean isNeedMergeShardingValues(final SQLStatement sqlStatement) { && !((SelectStatement) sqlStatement).getSubqueryShardingConditions().isEmpty() && !shardingRule.getShardingLogicTableNames(sqlStatement.getTables().getTableNames()).isEmpty(); } - private void checkSubqueryShardingValues(final SQLStatement sqlStatement, final ShardingConditions shardingConditions) { + private void checkSubqueryShardingValues(final SQLStatement sqlStatement, final RouteConditions routeConditions) { for (String each : sqlStatement.getTables().getTableNames()) { Optional tableRule = shardingRule.findTableRule(each); if (tableRule.isPresent() && shardingRule.isRoutingByHint(tableRule.get()) && !HintManager.getDatabaseShardingValues(each).isEmpty() @@ -122,15 +122,15 @@ private void checkSubqueryShardingValues(final SQLStatement sqlStatement, final return; } } - Preconditions.checkState(null != shardingConditions.getShardingConditions() && !shardingConditions.getShardingConditions().isEmpty(), "Must have sharding column with subquery."); - if (shardingConditions.getShardingConditions().size() > 1) { - Preconditions.checkState(isSameShardingCondition(shardingConditions), "Sharding value must same with subquery."); + Preconditions.checkState(null != routeConditions.getRouteConditions() && !routeConditions.getRouteConditions().isEmpty(), "Must have sharding column with subquery."); + if (routeConditions.getRouteConditions().size() > 1) { + Preconditions.checkState(isSameShardingCondition(routeConditions), "Sharding value must same with subquery."); } } - private boolean isSameShardingCondition(final ShardingConditions shardingConditions) { - ShardingCondition example = shardingConditions.getShardingConditions().remove(shardingConditions.getShardingConditions().size() - 1); - for (ShardingCondition each : shardingConditions.getShardingConditions()) { + private boolean isSameShardingCondition(final RouteConditions routeConditions) { + RouteCondition example = routeConditions.getRouteConditions().remove(routeConditions.getRouteConditions().size() - 1); + for (RouteCondition each : routeConditions.getRouteConditions()) { if (!isSameShardingCondition(example, each)) { return false; } @@ -138,13 +138,13 @@ private boolean isSameShardingCondition(final ShardingConditions shardingConditi return true; } - private boolean isSameShardingCondition(final ShardingCondition shardingCondition1, final ShardingCondition shardingCondition2) { - if (shardingCondition1.getShardingValues().size() != shardingCondition2.getShardingValues().size()) { + private boolean isSameShardingCondition(final RouteCondition routeCondition1, final RouteCondition routeCondition2) { + if (routeCondition1.getRouteValues().size() != routeCondition2.getRouteValues().size()) { return false; } - for (int i = 0; i < shardingCondition1.getShardingValues().size(); i++) { - RouteValue shardingValue1 = shardingCondition1.getShardingValues().get(i); - RouteValue shardingValue2 = shardingCondition2.getShardingValues().get(i); + for (int i = 0; i < routeCondition1.getRouteValues().size(); i++) { + RouteValue shardingValue1 = routeCondition1.getRouteValues().get(i); + RouteValue shardingValue2 = routeCondition2.getRouteValues().get(i); if (!isSameShardingValue((ListRouteValue) shardingValue1, (ListRouteValue) shardingValue2)) { return false; } @@ -166,11 +166,11 @@ private boolean isBindingTable(final ListRouteValue shardingValue1, final ListRo return bindingRule.isPresent() && bindingRule.get().hasLogicTable(shardingValue2.getTableName()); } - private void mergeShardingValues(final ShardingConditions shardingConditions) { - if (shardingConditions.getShardingConditions().size() > 1) { - ShardingCondition shardingCondition = shardingConditions.getShardingConditions().remove(shardingConditions.getShardingConditions().size() - 1); - shardingConditions.getShardingConditions().clear(); - shardingConditions.getShardingConditions().add(shardingCondition); + private void mergeShardingValues(final RouteConditions routeConditions) { + if (routeConditions.getRouteConditions().size() > 1) { + RouteCondition routeCondition = routeConditions.getRouteConditions().remove(routeConditions.getRouteConditions().size() - 1); + routeConditions.getRouteConditions().clear(); + routeConditions.getRouteConditions().add(routeCondition); } } } diff --git a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/RoutingEngineFactory.java b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/RoutingEngineFactory.java index 749975384f5da..9d484ef1c4b0b 100644 --- a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/RoutingEngineFactory.java +++ b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/RoutingEngineFactory.java @@ -83,7 +83,7 @@ public static RoutingEngine newInstance(final ShardingRule shardingRule, if (shardingRule.isAllBroadcastTables(tableNames)) { return sqlStatement instanceof SelectStatement ? new UnicastRoutingEngine(shardingRule, tableNames) : new DatabaseBroadcastRoutingEngine(shardingRule); } - if (optimizeResult.getShardingConditions().isAlwaysFalse() || tableNames.isEmpty()) { + if (optimizeResult.getRouteConditions().isAlwaysFalse() || tableNames.isEmpty()) { return new UnicastRoutingEngine(shardingRule, tableNames); } Collection shardingTableNames = shardingRule.getShardingLogicTableNames(tableNames); diff --git a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/type/standard/StandardRoutingEngine.java b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/type/standard/StandardRoutingEngine.java index eb904ce6260b0..6c1500ef6a996 100644 --- a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/type/standard/StandardRoutingEngine.java +++ b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/type/standard/StandardRoutingEngine.java @@ -21,7 +21,7 @@ import com.google.common.base.Preconditions; import lombok.RequiredArgsConstructor; import org.apache.shardingsphere.api.hint.HintManager; -import org.apache.shardingsphere.core.optimize.condition.ShardingCondition; +import org.apache.shardingsphere.core.optimize.condition.RouteCondition; import org.apache.shardingsphere.core.optimize.result.OptimizeResult; import org.apache.shardingsphere.core.optimize.result.insert.InsertOptimizeResultUnit; import org.apache.shardingsphere.core.parse.exception.SQLParsingException; @@ -110,13 +110,13 @@ private boolean isRoutingByShardingConditions(final TableRule tableRule) { } private Collection routeByShardingConditions(final TableRule tableRule) { - return optimizeResult.getShardingConditions().getShardingConditions().isEmpty() ? route(tableRule, Collections.emptyList(), Collections.emptyList()) + return optimizeResult.getRouteConditions().getRouteConditions().isEmpty() ? route(tableRule, Collections.emptyList(), Collections.emptyList()) : routeByShardingConditionsWithCondition(tableRule); } private Collection routeByShardingConditionsWithCondition(final TableRule tableRule) { Collection result = new LinkedList<>(); - for (ShardingCondition each : optimizeResult.getShardingConditions().getShardingConditions()) { + for (RouteCondition each : optimizeResult.getRouteConditions().getRouteConditions()) { Collection dataNodes = route(tableRule, getShardingValuesFromShardingConditions(shardingRule.getDatabaseShardingStrategy(tableRule).getShardingColumns(), each), getShardingValuesFromShardingConditions(shardingRule.getTableShardingStrategy(tableRule).getShardingColumns(), each)); reviseInsertOptimizeResult(each, dataNodes); @@ -126,12 +126,12 @@ private Collection routeByShardingConditionsWithCondition(final TableR } private Collection routeByMixedConditions(final TableRule tableRule) { - return optimizeResult.getShardingConditions().getShardingConditions().isEmpty() ? routeByMixedConditionsWithHint(tableRule) : routeByMixedConditionsWithCondition(tableRule); + return optimizeResult.getRouteConditions().getRouteConditions().isEmpty() ? routeByMixedConditionsWithHint(tableRule) : routeByMixedConditionsWithCondition(tableRule); } private Collection routeByMixedConditionsWithCondition(final TableRule tableRule) { Collection result = new LinkedList<>(); - for (ShardingCondition each : optimizeResult.getShardingConditions().getShardingConditions()) { + for (RouteCondition each : optimizeResult.getRouteConditions().getRouteConditions()) { Collection dataNodes = route(tableRule, getDatabaseShardingValues(tableRule, each), getTableShardingValues(tableRule, each)); reviseInsertOptimizeResult(each, dataNodes); result.addAll(dataNodes); @@ -146,16 +146,16 @@ private Collection routeByMixedConditionsWithHint(final TableRule tabl return route(tableRule, Collections.emptyList(), getTableShardingValuesFromHint()); } - private List getDatabaseShardingValues(final TableRule tableRule, final ShardingCondition shardingCondition) { + private List getDatabaseShardingValues(final TableRule tableRule, final RouteCondition routeCondition) { ShardingStrategy dataBaseShardingStrategy = shardingRule.getDatabaseShardingStrategy(tableRule); return isGettingShardingValuesFromHint(dataBaseShardingStrategy) - ? getDatabaseShardingValuesFromHint() : getShardingValuesFromShardingConditions(dataBaseShardingStrategy.getShardingColumns(), shardingCondition); + ? getDatabaseShardingValuesFromHint() : getShardingValuesFromShardingConditions(dataBaseShardingStrategy.getShardingColumns(), routeCondition); } - private List getTableShardingValues(final TableRule tableRule, final ShardingCondition shardingCondition) { + private List getTableShardingValues(final TableRule tableRule, final RouteCondition routeCondition) { ShardingStrategy tableShardingStrategy = shardingRule.getTableShardingStrategy(tableRule); return isGettingShardingValuesFromHint(tableShardingStrategy) - ? getTableShardingValuesFromHint() : getShardingValuesFromShardingConditions(tableShardingStrategy.getShardingColumns(), shardingCondition); + ? getTableShardingValuesFromHint() : getShardingValuesFromShardingConditions(tableShardingStrategy.getShardingColumns(), routeCondition); } private boolean isGettingShardingValuesFromHint(final ShardingStrategy shardingStrategy) { @@ -174,9 +174,9 @@ private List getRouteValues(final Collection> sharding return shardingValue.isEmpty() ? Collections.emptyList() : Collections.singletonList(new ListRouteValue<>("", logicTableName, shardingValue)); } - private List getShardingValuesFromShardingConditions(final Collection shardingColumns, final ShardingCondition shardingCondition) { + private List getShardingValuesFromShardingConditions(final Collection shardingColumns, final RouteCondition routeCondition) { List result = new ArrayList<>(shardingColumns.size()); - for (RouteValue each : shardingCondition.getShardingValues()) { + for (RouteValue each : routeCondition.getRouteValues()) { Optional bindingTableRule = shardingRule.findBindingTableRule(logicTableName); if ((logicTableName.equals(each.getTableName()) || bindingTableRule.isPresent() && bindingTableRule.get().hasLogicTable(logicTableName)) && shardingColumns.contains(each.getColumnName())) { @@ -228,18 +228,18 @@ private Collection removeNonExistNodes(final Collection rout return result; } - private void reviseInsertOptimizeResult(final ShardingCondition shardingCondition, final Collection dataNodes) { + private void reviseInsertOptimizeResult(final RouteCondition routeCondition, final Collection dataNodes) { if (sqlStatement instanceof InsertStatement) { for (InsertOptimizeResultUnit each : optimizeResult.getInsertOptimizeResult().get().getUnits()) { - if (isQualifiedInsertOptimizeResultUnit(each, shardingCondition)) { + if (isQualifiedInsertOptimizeResultUnit(each, routeCondition)) { each.getDataNodes().addAll(dataNodes); } } } } - private boolean isQualifiedInsertOptimizeResultUnit(final InsertOptimizeResultUnit unit, final ShardingCondition shardingCondition) { - for (RouteValue each : shardingCondition.getShardingValues()) { + private boolean isQualifiedInsertOptimizeResultUnit(final InsertOptimizeResultUnit unit, final RouteCondition routeCondition) { + for (RouteValue each : routeCondition.getRouteValues()) { Object columnValue = unit.getColumnValue(each.getColumnName()); if (!columnValue.equals(((ListRouteValue) each).getValues().iterator().next())) { return false; diff --git a/sharding-core/sharding-core-route/src/test/java/org/apache/shardingsphere/core/route/type/complex/ComplexRoutingEngineTest.java b/sharding-core/sharding-core-route/src/test/java/org/apache/shardingsphere/core/route/type/complex/ComplexRoutingEngineTest.java index afc0bb0878a5f..9a0f25a249642 100644 --- a/sharding-core/sharding-core-route/src/test/java/org/apache/shardingsphere/core/route/type/complex/ComplexRoutingEngineTest.java +++ b/sharding-core/sharding-core-route/src/test/java/org/apache/shardingsphere/core/route/type/complex/ComplexRoutingEngineTest.java @@ -20,8 +20,8 @@ import org.apache.shardingsphere.api.config.sharding.ShardingRuleConfiguration; import org.apache.shardingsphere.api.config.sharding.TableRuleConfiguration; import org.apache.shardingsphere.api.config.sharding.strategy.InlineShardingStrategyConfiguration; -import org.apache.shardingsphere.core.optimize.condition.ShardingCondition; -import org.apache.shardingsphere.core.optimize.condition.ShardingConditions; +import org.apache.shardingsphere.core.optimize.condition.RouteCondition; +import org.apache.shardingsphere.core.optimize.condition.RouteConditions; import org.apache.shardingsphere.core.optimize.result.OptimizeResult; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.route.type.RoutingResult; @@ -63,15 +63,15 @@ public void setEngineContext() { @Test public void assertRoutingForBindingTables() { - List shardingConditions = new ArrayList<>(); + List routeConditions = new ArrayList<>(); RouteValue shardingValue1 = new ListRouteValue<>("user_id", "t_order", Collections.singleton(1L)); RouteValue shardingValue2 = new ListRouteValue<>("order_id", "t_order", Collections.singleton(1L)); - ShardingCondition shardingCondition = new ShardingCondition(); - shardingCondition.getShardingValues().add(shardingValue1); - shardingCondition.getShardingValues().add(shardingValue2); - shardingConditions.add(shardingCondition); + RouteCondition routeCondition = new RouteCondition(); + routeCondition.getRouteValues().add(shardingValue1); + routeCondition.getRouteValues().add(shardingValue2); + routeConditions.add(routeCondition); ComplexRoutingEngine complexRoutingEngine = new ComplexRoutingEngine( - mock(SQLStatement.class), shardingRule, Arrays.asList("t_order", "t_order_item"), new OptimizeResult(new ShardingConditions(shardingConditions))); + mock(SQLStatement.class), shardingRule, Arrays.asList("t_order", "t_order_item"), new OptimizeResult(new RouteConditions(routeConditions))); RoutingResult routingResult = complexRoutingEngine.route(); List tableUnitList = new ArrayList<>(routingResult.getRoutingUnits()); assertThat(routingResult, instanceOf(RoutingResult.class)); @@ -84,15 +84,15 @@ public void assertRoutingForBindingTables() { @Test public void assertRoutingForShardingTableJoinBroadcastTable() { - List shardingConditions = new ArrayList<>(); + List routeConditions = new ArrayList<>(); RouteValue shardingValue1 = new ListRouteValue<>("user_id", "t_order", Collections.singleton(1L)); RouteValue shardingValue2 = new ListRouteValue<>("order_id", "t_order", Collections.singleton(1L)); - ShardingCondition shardingCondition = new ShardingCondition(); - shardingCondition.getShardingValues().add(shardingValue1); - shardingCondition.getShardingValues().add(shardingValue2); - shardingConditions.add(shardingCondition); + RouteCondition routeCondition = new RouteCondition(); + routeCondition.getRouteValues().add(shardingValue1); + routeCondition.getRouteValues().add(shardingValue2); + routeConditions.add(routeCondition); ComplexRoutingEngine complexRoutingEngine = - new ComplexRoutingEngine(mock(SQLStatement.class), shardingRule, Arrays.asList("t_order", "t_config"), new OptimizeResult(new ShardingConditions(shardingConditions))); + new ComplexRoutingEngine(mock(SQLStatement.class), shardingRule, Arrays.asList("t_order", "t_config"), new OptimizeResult(new RouteConditions(routeConditions))); RoutingResult routingResult = complexRoutingEngine.route(); List tableUnitList = new ArrayList<>(routingResult.getRoutingUnits()); assertThat(routingResult, instanceOf(RoutingResult.class)); diff --git a/sharding-core/sharding-core-route/src/test/java/org/apache/shardingsphere/core/route/type/standard/StandardRoutingEngineTest.java b/sharding-core/sharding-core-route/src/test/java/org/apache/shardingsphere/core/route/type/standard/StandardRoutingEngineTest.java index a222c81cd55fd..2027604cd78fe 100644 --- a/sharding-core/sharding-core-route/src/test/java/org/apache/shardingsphere/core/route/type/standard/StandardRoutingEngineTest.java +++ b/sharding-core/sharding-core-route/src/test/java/org/apache/shardingsphere/core/route/type/standard/StandardRoutingEngineTest.java @@ -20,8 +20,8 @@ import org.apache.shardingsphere.api.config.sharding.ShardingRuleConfiguration; import org.apache.shardingsphere.api.config.sharding.TableRuleConfiguration; import org.apache.shardingsphere.api.config.sharding.strategy.InlineShardingStrategyConfiguration; -import org.apache.shardingsphere.core.optimize.condition.ShardingCondition; -import org.apache.shardingsphere.core.optimize.condition.ShardingConditions; +import org.apache.shardingsphere.core.optimize.condition.RouteCondition; +import org.apache.shardingsphere.core.optimize.condition.RouteConditions; import org.apache.shardingsphere.core.optimize.result.OptimizeResult; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.route.type.RoutingResult; @@ -52,15 +52,15 @@ public void setEngineContext() { shardingRuleConfig.getTableRuleConfigs().add(new TableRuleConfiguration("t_order", "ds_${0..1}.t_order_${0..1}")); shardingRuleConfig.setDefaultDatabaseShardingStrategyConfig(new InlineShardingStrategyConfiguration("user_id", "ds_${user_id % 2}")); shardingRuleConfig.setDefaultTableShardingStrategyConfig(new InlineShardingStrategyConfiguration("order_id", "t_order_${order_id % 2}")); - List shardingConditions = new ArrayList<>(); + List routeConditions = new ArrayList<>(); RouteValue shardingValue1 = new ListRouteValue<>("user_id", "t_order", Collections.singleton(1L)); RouteValue shardingValue2 = new ListRouteValue<>("order_id", "t_order", Collections.singleton(1L)); - ShardingCondition shardingCondition = new ShardingCondition(); - shardingCondition.getShardingValues().add(shardingValue1); - shardingCondition.getShardingValues().add(shardingValue2); - shardingConditions.add(shardingCondition); + RouteCondition routeCondition = new RouteCondition(); + routeCondition.getRouteValues().add(shardingValue1); + routeCondition.getRouteValues().add(shardingValue2); + routeConditions.add(routeCondition); ShardingRule shardingRule = new ShardingRule(shardingRuleConfig, Arrays.asList("ds_0", "ds_1")); - standardRoutingEngine = new StandardRoutingEngine(mock(SQLStatement.class), shardingRule, "t_order", new OptimizeResult(new ShardingConditions(shardingConditions))); + standardRoutingEngine = new StandardRoutingEngine(mock(SQLStatement.class), shardingRule, "t_order", new OptimizeResult(new RouteConditions(routeConditions))); } @Test From 27ab79d73bd63d5134bd8a5779aa6d16ed88e3c2 Mon Sep 17 00:00:00 2001 From: tuohai666 Date: Mon, 17 Jun 2019 18:41:23 +0800 Subject: [PATCH 266/283] #2564, support SUBSTRING function --- .../src/main/antlr4/imports/mysql/BaseRule.g4 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/antlr4/imports/mysql/BaseRule.g4 b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/antlr4/imports/mysql/BaseRule.g4 index c92abdfe8a004..f4bcedbf95b9c 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/antlr4/imports/mysql/BaseRule.g4 +++ b/sharding-core/sharding-core-parse/sharding-core-parse-mysql/src/main/antlr4/imports/mysql/BaseRule.g4 @@ -315,7 +315,7 @@ regularFunction_ ; regularFunctionName_ - : identifier_ | IF | CURRENT_TIMESTAMP | LOCALTIME | LOCALTIMESTAMP | NOW | REPLACE | INTERVAL + : identifier_ | IF | CURRENT_TIMESTAMP | LOCALTIME | LOCALTIMESTAMP | NOW | REPLACE | INTERVAL | SUBSTRING ; matchExpression_ From e75afb69cdd27686f7e0e9405f1e7f71e5bb6d24 Mon Sep 17 00:00:00 2001 From: tuohai666 Date: Mon, 17 Jun 2019 20:28:48 +0800 Subject: [PATCH 267/283] mvn --quiet --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 93dc08c31fd6b..b143c47e7328d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,4 +14,4 @@ before_script: script: - mvn clean install cobertura:cobertura coveralls:report -DrepoToken="${COVERALLS_REPO_TOKEN}" -Dmaven.javadoc.skip=true -install: travis_wait 30 mvn install +install: travis_wait 30 mvn install --quiet From 5c843ce8e28a037a627aad61133c5039b767be44 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Mon, 17 Jun 2019 21:03:11 +0800 Subject: [PATCH 268/283] for #2567, refactor InsertOptimizeEngine.optimize() --- .../sharding/dml/InsertOptimizeEngine.java | 83 +++++++------------ .../result/insert/InsertOptimizeResult.java | 11 ++- 2 files changed, 36 insertions(+), 58 deletions(-) diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/InsertOptimizeEngine.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/InsertOptimizeEngine.java index 427311c877b03..f3920ae26d29e 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/InsertOptimizeEngine.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/InsertOptimizeEngine.java @@ -62,27 +62,40 @@ public final class InsertOptimizeEngine implements OptimizeEngine { @Override public OptimizeResult optimize() { InsertOptimizeResult insertOptimizeResult = new InsertOptimizeResult(insertStatement.getColumnNames()); + String tableName = insertStatement.getTables().getSingleTableName(); List andConditions = insertStatement.getShardingConditions().getOrConditions(); List routeConditions = new ArrayList<>(andConditions.size()); Optional generatedKey = GeneratedKey.getGenerateKey(shardingRule, parameters, insertStatement); - Iterator> generatedValues = generatedKey.isPresent() && generatedKey.get().isGenerated() ? generatedKey.get().getGeneratedValues().iterator() : null; + boolean isGeneratedValue = generatedKey.isPresent() && generatedKey.get().isGenerated(); + if (isGeneratedValue) { + insertOptimizeResult.getColumnNames().add(generatedKey.get().getColumnName()); + } + for (String each : shardingRule.getEncryptRule().getEncryptorEngine().getAssistedQueryColumns(insertStatement.getTables().getSingleTableName())) { + insertOptimizeResult.getColumnNames().add(each); + } + Iterator> generatedValues = isGeneratedValue ? generatedKey.get().getGeneratedValues().iterator() : null; int parametersCount = 0; for (int i = 0; i < andConditions.size(); i++) { InsertValue insertValue = insertStatement.getValues().get(i); - boolean isGeneratedValue = generatedKey.isPresent() && generatedKey.get().isGenerated(); ExpressionSegment[] currentInsertValues = createCurrentInsertValues(insertValue, isGeneratedValue); Object[] currentParameters = createCurrentParameters(insertValue, parametersCount, isGeneratedValue); parametersCount += insertValue.getParametersCount(); - RouteCondition routeCondition = createShardingCondition(andConditions.get(i)); - insertOptimizeResult.addUnit(currentInsertValues, currentParameters, insertValue.getParametersCount()); - if (generatedKey.isPresent() && generatedKey.get().isGenerated()) { - Comparable currentGeneratedKey = generatedValues.next(); - fillWithGeneratedKeyName(insertOptimizeResult); - fillInsertOptimizeResultUnit(insertOptimizeResult.getUnits().get(i), currentGeneratedKey); - fillRouteCondition(routeCondition, currentGeneratedKey); + InsertOptimizeResultUnit unit = insertOptimizeResult.addUnit(currentInsertValues, currentParameters, insertValue.getParametersCount()); + RouteCondition routeCondition = new RouteCondition(); + routeCondition.getRouteValues().addAll(getRouteValues(andConditions.get(i))); + if (isGeneratedValue) { + Comparable generatedValue = generatedValues.next(); + fillInsertOptimizeResultUnit(unit, generatedValue); + if (shardingRule.isShardingColumn(generatedKey.get().getColumnName(), tableName)) { + routeCondition.getRouteValues().add(new ListRouteValue<>(generatedKey.get().getColumnName(), tableName, Collections.>singletonList(generatedValue))); + } } - if (isNeededToAppendQueryAssistedColumn()) { - fillWithQueryAssistedColumn(insertOptimizeResult, i); + if (shardingRule.getEncryptRule().getEncryptorEngine().isHasShardingQueryAssistedEncryptor(tableName)) { + for (String each : insertOptimizeResult.getColumnNames()) { + if (shardingRule.getEncryptRule().getEncryptorEngine().getAssistedQueryColumn(insertStatement.getTables().getSingleTableName(), each).isPresent()) { + fillInsertOptimizeResultUnit(unit, (Comparable) unit.getColumnValue(each)); + } + } } routeConditions.add(routeCondition); } @@ -113,12 +126,6 @@ private int getDerivedColumnsCount(final boolean isGeneratedValue) { return isGeneratedValue ? assistedQueryColumnsCount + 1 : assistedQueryColumnsCount; } - private RouteCondition createShardingCondition(final AndCondition andCondition) { - RouteCondition result = new RouteCondition(); - result.getRouteValues().addAll(getRouteValues(andCondition)); - return result; - } - private Collection getRouteValues(final AndCondition andCondition) { Collection result = new LinkedList<>(); for (Condition each : andCondition.getConditions()) { @@ -127,46 +134,14 @@ private Collection getRouteValues(final AndCondition andConditio return result; } - private void fillWithGeneratedKeyName(final InsertOptimizeResult insertOptimizeResult) { - String generateKeyColumnName = shardingRule.findGenerateKeyColumnName(insertStatement.getTables().getSingleTableName()).get(); - insertOptimizeResult.getColumnNames().add(generateKeyColumnName); - } - - private void fillRouteCondition(final RouteCondition routeCondition, final Comparable currentGeneratedKey) { - String tableName = insertStatement.getTables().getSingleTableName(); - String generateKeyColumnName = shardingRule.findGenerateKeyColumnName(tableName).get(); - if (shardingRule.isShardingColumn(generateKeyColumnName, tableName)) { - routeCondition.getRouteValues().add(new ListRouteValue<>(generateKeyColumnName, tableName, Collections.>singletonList(currentGeneratedKey))); - } - } - - private boolean isNeededToAppendQueryAssistedColumn() { - return shardingRule.getEncryptRule().getEncryptorEngine().isHasShardingQueryAssistedEncryptor(insertStatement.getTables().getSingleTableName()); - } - - private void fillWithQueryAssistedColumn(final InsertOptimizeResult insertOptimizeResult, final int insertOptimizeResultIndex) { - Collection assistedColumnNames = new LinkedList<>(); - for (String each : insertOptimizeResult.getColumnNames()) { - InsertOptimizeResultUnit unit = insertOptimizeResult.getUnits().get(insertOptimizeResultIndex); - Optional assistedColumnName = shardingRule.getEncryptRule().getEncryptorEngine().getAssistedQueryColumn(insertStatement.getTables().getSingleTableName(), each); - if (assistedColumnName.isPresent()) { - assistedColumnNames.add(assistedColumnName.get()); - fillInsertOptimizeResultUnit(unit, (Comparable) unit.getColumnValue(each)); - } - } - if (!assistedColumnNames.isEmpty()) { - insertOptimizeResult.getColumnNames().addAll(assistedColumnNames); - } - } - - private void fillInsertOptimizeResultUnit(final InsertOptimizeResultUnit unit, final Comparable columnValue) { - if (!parameters.isEmpty()) { + private void fillInsertOptimizeResultUnit(final InsertOptimizeResultUnit unit, final Comparable insertValue) { + if (parameters.isEmpty()) { // TODO fix start index and stop index - unit.addColumnValue(new ParameterMarkerExpressionSegment(0, 0, parameters.size() - 1)); - unit.addColumnParameter(columnValue); + unit.addColumnValue(new LiteralExpressionSegment(0, 0, insertValue)); } else { // TODO fix start index and stop index - unit.addColumnValue(new LiteralExpressionSegment(0, 0, columnValue)); + unit.addColumnValue(new ParameterMarkerExpressionSegment(0, 0, parameters.size() - 1)); + unit.addColumnParameter(insertValue); } } } diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/result/insert/InsertOptimizeResult.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/result/insert/InsertOptimizeResult.java index e7cca0fef949c..563f34fe26477 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/result/insert/InsertOptimizeResult.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/result/insert/InsertOptimizeResult.java @@ -44,11 +44,14 @@ public InsertOptimizeResult(final Collection columnNames) { /** * Add insert optimize result uint. * - * @param columnValues column values - * @param columnParameters column parameters + * @param insertValues insert values + * @param parameters SQL parameters * @param startIndexOfAppendedParameters start index of appended parameters + * @return insert optimize result unit */ - public void addUnit(final ExpressionSegment[] columnValues, final Object[] columnParameters, final int startIndexOfAppendedParameters) { - this.units.add(new InsertOptimizeResultUnit(columnNames, columnValues, columnParameters, startIndexOfAppendedParameters)); + public InsertOptimizeResultUnit addUnit(final ExpressionSegment[] insertValues, final Object[] parameters, final int startIndexOfAppendedParameters) { + InsertOptimizeResultUnit result = new InsertOptimizeResultUnit(columnNames, insertValues, parameters, startIndexOfAppendedParameters); + units.add(result); + return result; } } From e9855561960e1c54d76caee719419d4f2d6b2982 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Mon, 17 Jun 2019 22:11:30 +0800 Subject: [PATCH 269/283] for #2567, InsertOptimizeEngine => ShardingInsertOptimizeEngine --- .../core/optimize/OptimizeEngineFactory.java | 4 +- ...java => ShardingInsertOptimizeEngine.java} | 83 ++++++++++++------- ... => ShardingInsertOptimizeEngineTest.java} | 24 +++--- 3 files changed, 66 insertions(+), 45 deletions(-) rename sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/{InsertOptimizeEngine.java => ShardingInsertOptimizeEngine.java} (68%) rename sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/{InsertOptimizeEngineTest.java => ShardingInsertOptimizeEngineTest.java} (93%) diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java index 918e9afeec418..73138aa780482 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java @@ -24,7 +24,7 @@ import org.apache.shardingsphere.core.optimize.engine.encrypt.EncryptDefaultOptimizeEngine; import org.apache.shardingsphere.core.optimize.engine.encrypt.EncryptInsertOptimizeEngine; import org.apache.shardingsphere.core.optimize.engine.sharding.ddl.DDLOptimizeEngine; -import org.apache.shardingsphere.core.optimize.engine.sharding.dml.InsertOptimizeEngine; +import org.apache.shardingsphere.core.optimize.engine.sharding.dml.ShardingInsertOptimizeEngine; import org.apache.shardingsphere.core.optimize.engine.sharding.dql.QueryOptimizeEngine; import org.apache.shardingsphere.core.parse.sql.context.condition.Conditions; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; @@ -57,7 +57,7 @@ public final class OptimizeEngineFactory { */ public static OptimizeEngine newInstance(final ShardingRule shardingRule, final SQLStatement sqlStatement, final List parameters, final ShardingTableMetaData shardingTableMetaData) { if (sqlStatement instanceof InsertStatement) { - return new InsertOptimizeEngine(shardingRule, (InsertStatement) sqlStatement, parameters); + return new ShardingInsertOptimizeEngine(shardingRule, (InsertStatement) sqlStatement, parameters); } if (sqlStatement instanceof DMLStatement) { return new QueryOptimizeEngine(sqlStatement, parameters, ((DMLStatement) sqlStatement).getShardingConditions()); diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/InsertOptimizeEngine.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/ShardingInsertOptimizeEngine.java similarity index 68% rename from sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/InsertOptimizeEngine.java rename to sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/ShardingInsertOptimizeEngine.java index f3920ae26d29e..31c673f08d61c 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/InsertOptimizeEngine.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/ShardingInsertOptimizeEngine.java @@ -51,7 +51,7 @@ * @author panjuan */ @RequiredArgsConstructor -public final class InsertOptimizeEngine implements OptimizeEngine { +public final class ShardingInsertOptimizeEngine implements OptimizeEngine { private final ShardingRule shardingRule; @@ -62,57 +62,56 @@ public final class InsertOptimizeEngine implements OptimizeEngine { @Override public OptimizeResult optimize() { InsertOptimizeResult insertOptimizeResult = new InsertOptimizeResult(insertStatement.getColumnNames()); - String tableName = insertStatement.getTables().getSingleTableName(); List andConditions = insertStatement.getShardingConditions().getOrConditions(); List routeConditions = new ArrayList<>(andConditions.size()); Optional generatedKey = GeneratedKey.getGenerateKey(shardingRule, parameters, insertStatement); boolean isGeneratedValue = generatedKey.isPresent() && generatedKey.get().isGenerated(); - if (isGeneratedValue) { - insertOptimizeResult.getColumnNames().add(generatedKey.get().getColumnName()); - } - for (String each : shardingRule.getEncryptRule().getEncryptorEngine().getAssistedQueryColumns(insertStatement.getTables().getSingleTableName())) { - insertOptimizeResult.getColumnNames().add(each); - } Iterator> generatedValues = isGeneratedValue ? generatedKey.get().getGeneratedValues().iterator() : null; + if (generatedKey.isPresent()) { + appendGeneratedKeyColumn(generatedKey.get(), insertOptimizeResult); + } + appendAssistedQueryColumns(insertOptimizeResult); int parametersCount = 0; for (int i = 0; i < andConditions.size(); i++) { + AndCondition andCondition = andConditions.get(i); InsertValue insertValue = insertStatement.getValues().get(i); - ExpressionSegment[] currentInsertValues = createCurrentInsertValues(insertValue, isGeneratedValue); - Object[] currentParameters = createCurrentParameters(insertValue, parametersCount, isGeneratedValue); - parametersCount += insertValue.getParametersCount(); - InsertOptimizeResultUnit unit = insertOptimizeResult.addUnit(currentInsertValues, currentParameters, insertValue.getParametersCount()); + ExpressionSegment[] eachInsertValues = createEachInsertValues(insertValue, isGeneratedValue); + Object[] eachParameters = createEachParameters(insertValue, parametersCount, isGeneratedValue); + InsertOptimizeResultUnit unit = insertOptimizeResult.addUnit(eachInsertValues, eachParameters, insertValue.getParametersCount()); RouteCondition routeCondition = new RouteCondition(); - routeCondition.getRouteValues().addAll(getRouteValues(andConditions.get(i))); + routeCondition.getRouteValues().addAll(getRouteValues(andCondition)); if (isGeneratedValue) { - Comparable generatedValue = generatedValues.next(); - fillInsertOptimizeResultUnit(unit, generatedValue); - if (shardingRule.isShardingColumn(generatedKey.get().getColumnName(), tableName)) { - routeCondition.getRouteValues().add(new ListRouteValue<>(generatedKey.get().getColumnName(), tableName, Collections.>singletonList(generatedValue))); - } + fillGeneratedKeyUnit(generatedKey.get().getColumnName(), generatedValues.next(), unit, routeCondition); } - if (shardingRule.getEncryptRule().getEncryptorEngine().isHasShardingQueryAssistedEncryptor(tableName)) { - for (String each : insertOptimizeResult.getColumnNames()) { - if (shardingRule.getEncryptRule().getEncryptorEngine().getAssistedQueryColumn(insertStatement.getTables().getSingleTableName(), each).isPresent()) { - fillInsertOptimizeResultUnit(unit, (Comparable) unit.getColumnValue(each)); - } - } + if (shardingRule.getEncryptRule().getEncryptorEngine().isHasShardingQueryAssistedEncryptor(insertStatement.getTables().getSingleTableName())) { + fillAssistedQueryUnit(insertOptimizeResult.getColumnNames(), unit); } routeConditions.add(routeCondition); + parametersCount += insertValue.getParametersCount(); } - OptimizeResult result = new OptimizeResult(new RouteConditions(routeConditions), insertOptimizeResult); - if (generatedKey.isPresent()) { - result.setGeneratedKey(generatedKey.get()); + return generatedKey.isPresent() + ? createOptimizeResult(insertOptimizeResult, routeConditions, generatedKey.get()) : new OptimizeResult(new RouteConditions(routeConditions), insertOptimizeResult); + } + + private void appendGeneratedKeyColumn(final GeneratedKey generatedKey, final InsertOptimizeResult insertOptimizeResult) { + if (generatedKey.isGenerated()) { + insertOptimizeResult.getColumnNames().add(generatedKey.getColumnName()); } - return result; } - private ExpressionSegment[] createCurrentInsertValues(final InsertValue insertValue, final boolean isGeneratedValue) { + private void appendAssistedQueryColumns(final InsertOptimizeResult insertOptimizeResult) { + for (String each : shardingRule.getEncryptRule().getEncryptorEngine().getAssistedQueryColumns(insertStatement.getTables().getSingleTableName())) { + insertOptimizeResult.getColumnNames().add(each); + } + } + + private ExpressionSegment[] createEachInsertValues(final InsertValue insertValue, final boolean isGeneratedValue) { ExpressionSegment[] result = new ExpressionSegment[insertValue.getAssignments().size() + getDerivedColumnsCount(isGeneratedValue)]; insertValue.getAssignments().toArray(result); return result; } - private Object[] createCurrentParameters(final InsertValue insertValue, final int parametersBeginIndex, final boolean isGeneratedValue) { + private Object[] createEachParameters(final InsertValue insertValue, final int parametersBeginIndex, final boolean isGeneratedValue) { if (0 == insertValue.getParametersCount()) { return new Object[0]; } @@ -134,7 +133,23 @@ private Collection getRouteValues(final AndCondition andConditio return result; } - private void fillInsertOptimizeResultUnit(final InsertOptimizeResultUnit unit, final Comparable insertValue) { + private void fillGeneratedKeyUnit(final String generatedKeyColumnName, final Comparable generatedValue, final InsertOptimizeResultUnit unit, final RouteCondition routeCondition) { + fillUnit(generatedValue, unit); + String tableName = insertStatement.getTables().getSingleTableName(); + if (shardingRule.isShardingColumn(generatedKeyColumnName, tableName)) { + routeCondition.getRouteValues().add(new ListRouteValue<>(generatedKeyColumnName, tableName, Collections.>singletonList(generatedValue))); + } + } + + private void fillAssistedQueryUnit(final Collection columnNames, final InsertOptimizeResultUnit unit) { + for (String each : columnNames) { + if (shardingRule.getEncryptRule().getEncryptorEngine().getAssistedQueryColumn(insertStatement.getTables().getSingleTableName(), each).isPresent()) { + fillUnit((Comparable) unit.getColumnValue(each), unit); + } + } + } + + private void fillUnit(final Comparable insertValue, final InsertOptimizeResultUnit unit) { if (parameters.isEmpty()) { // TODO fix start index and stop index unit.addColumnValue(new LiteralExpressionSegment(0, 0, insertValue)); @@ -144,4 +159,10 @@ private void fillInsertOptimizeResultUnit(final InsertOptimizeResultUnit unit, f unit.addColumnParameter(insertValue); } } + + private OptimizeResult createOptimizeResult(final InsertOptimizeResult insertOptimizeResult, final List routeConditions, final GeneratedKey generatedKey) { + OptimizeResult result = new OptimizeResult(new RouteConditions(routeConditions), insertOptimizeResult); + result.setGeneratedKey(generatedKey); + return result; + } } diff --git a/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/InsertOptimizeEngineTest.java b/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/ShardingInsertOptimizeEngineTest.java similarity index 93% rename from sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/InsertOptimizeEngineTest.java rename to sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/ShardingInsertOptimizeEngineTest.java index c62581774202c..97f15c31f59e1 100644 --- a/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/InsertOptimizeEngineTest.java +++ b/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/ShardingInsertOptimizeEngineTest.java @@ -18,7 +18,7 @@ package org.apache.shardingsphere.core.optimize.engine.sharding; import com.google.common.base.Preconditions; -import org.apache.shardingsphere.core.optimize.engine.sharding.dml.InsertOptimizeEngine; +import org.apache.shardingsphere.core.optimize.engine.sharding.dml.ShardingInsertOptimizeEngine; import org.apache.shardingsphere.core.optimize.result.OptimizeResult; import org.apache.shardingsphere.core.parse.sql.context.condition.AndCondition; import org.apache.shardingsphere.core.parse.sql.context.condition.Column; @@ -51,7 +51,7 @@ import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; -public final class InsertOptimizeEngineTest { +public final class ShardingInsertOptimizeEngineTest { private ShardingRule shardingRule; @@ -77,7 +77,7 @@ public final class InsertOptimizeEngineTest { @Before public void setUp() throws IOException { - URL url = InsertOptimizeEngineTest.class.getClassLoader().getResource("yaml/optimize-rule.yaml"); + URL url = ShardingInsertOptimizeEngineTest.class.getClassLoader().getResource("yaml/optimize-rule.yaml"); Preconditions.checkNotNull(url, "Cannot found rewrite rule yaml configuration."); YamlRootShardingConfiguration yamlShardingConfig = YamlEngine.unmarshal(new File(url.getFile()), YamlRootShardingConfiguration.class); shardingRule = new ShardingRule(new ShardingRuleConfigurationYamlSwapper().swap(yamlShardingConfig.getShardingRule()), yamlShardingConfig.getDataSources().keySet()); @@ -197,7 +197,7 @@ private void initializeInsertSetWithoutPlaceholderWithEncrypt() { @Test public void assertOptimizeInsertValuesWithPlaceholderWithGeneratedKey() { - OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertValuesStatementWithPlaceholder, insertValuesParameters).optimize(); + OptimizeResult actual = new ShardingInsertOptimizeEngine(shardingRule, insertValuesStatementWithPlaceholder, insertValuesParameters).optimize(); assertFalse(actual.getRouteConditions().isAlwaysFalse()); assertThat(actual.getRouteConditions().getRouteConditions().size(), is(2)); assertTrue(actual.getInsertOptimizeResult().isPresent()); @@ -219,7 +219,7 @@ public void assertOptimizeInsertValuesWithPlaceholderWithGeneratedKey() { @Test public void assertOptimizeInsertValuesWithPlaceholderWithGeneratedKeyWithEncrypt() { - OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertValuesStatementWithPlaceholderWithEncrypt, insertValuesParameters).optimize(); + OptimizeResult actual = new ShardingInsertOptimizeEngine(shardingRule, insertValuesStatementWithPlaceholderWithEncrypt, insertValuesParameters).optimize(); assertFalse(actual.getRouteConditions().isAlwaysFalse()); assertThat(actual.getRouteConditions().getRouteConditions().size(), is(2)); assertTrue(actual.getInsertOptimizeResult().isPresent()); @@ -240,7 +240,7 @@ public void assertOptimizeInsertValuesWithPlaceholderWithGeneratedKeyWithEncrypt @Test public void assertOptimizeInsertValuesWithPlaceholderWithoutGeneratedKey() { - OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertValuesStatementWithPlaceholder, insertValuesParameters).optimize(); + OptimizeResult actual = new ShardingInsertOptimizeEngine(shardingRule, insertValuesStatementWithPlaceholder, insertValuesParameters).optimize(); assertFalse(actual.getRouteConditions().isAlwaysFalse()); assertThat(actual.getRouteConditions().getRouteConditions().size(), is(2)); assertTrue(actual.getInsertOptimizeResult().isPresent()); @@ -262,7 +262,7 @@ public void assertOptimizeInsertValuesWithoutPlaceholderWithGeneratedKeyWithQuer insertValuesStatementWithoutPlaceholderWithQueryEncrypt.getColumnNames().add("status"); insertValuesStatementWithoutPlaceholderWithQueryEncrypt.getValues().add( new InsertValue(Arrays.asList(new LiteralExpressionSegment(1, 2, 12), new LiteralExpressionSegment(3, 4, "a")))); - OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertValuesStatementWithoutPlaceholderWithQueryEncrypt, Collections.emptyList()).optimize(); + OptimizeResult actual = new ShardingInsertOptimizeEngine(shardingRule, insertValuesStatementWithoutPlaceholderWithQueryEncrypt, Collections.emptyList()).optimize(); assertThat(actual.getRouteConditions().getRouteConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(0)); @@ -275,7 +275,7 @@ public void assertOptimizeInsertValuesWithoutPlaceholderWithGeneratedKey() { insertValuesStatementWithoutPlaceholder.getColumnNames().add("user_id"); insertValuesStatementWithoutPlaceholder.getColumnNames().add("status"); insertValuesStatementWithoutPlaceholder.getValues().add(new InsertValue(Arrays.asList(new LiteralExpressionSegment(1, 2, 12), new LiteralExpressionSegment(3, 4, "a")))); - OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertValuesStatementWithoutPlaceholder, Collections.emptyList()).optimize(); + OptimizeResult actual = new ShardingInsertOptimizeEngine(shardingRule, insertValuesStatementWithoutPlaceholder, Collections.emptyList()).optimize(); assertThat(actual.getRouteConditions().getRouteConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(0)); @@ -287,7 +287,7 @@ public void assertOptimizeInsertValuesWithoutPlaceholderWithGeneratedKey() { public void assertOptimizeInsertSetWithPlaceholderWithGeneratedKey() { insertSetStatementWithPlaceholder.getValues().add( new InsertValue(Arrays.asList(new ParameterMarkerExpressionSegment(1, 2, 0), new ParameterMarkerExpressionSegment(3, 4, 1)))); - OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertSetStatementWithPlaceholder, insertSetParameters).optimize(); + OptimizeResult actual = new ShardingInsertOptimizeEngine(shardingRule, insertSetStatementWithPlaceholder, insertSetParameters).optimize(); assertThat(actual.getRouteConditions().getRouteConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(3)); @@ -301,7 +301,7 @@ public void assertOptimizeInsertSetWithPlaceholderWithGeneratedKey() { public void assertOptimizeInsertSetWithPlaceholderWithGeneratedKeyWithQueryEncrypt() { InsertValue insertValue = new InsertValue(Arrays.asList(new ParameterMarkerExpressionSegment(1, 2, 0), new ParameterMarkerExpressionSegment(3, 4, 1))); insertSetStatementWithPlaceholderWithQueryEncrypt.getValues().add(insertValue); - OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertSetStatementWithPlaceholderWithQueryEncrypt, insertSetParameters).optimize(); + OptimizeResult actual = new ShardingInsertOptimizeEngine(shardingRule, insertSetStatementWithPlaceholderWithQueryEncrypt, insertSetParameters).optimize(); assertThat(actual.getRouteConditions().getRouteConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(4)); @@ -315,7 +315,7 @@ public void assertOptimizeInsertSetWithPlaceholderWithGeneratedKeyWithQueryEncry @Test public void assertOptimizeInsertSetWithoutPlaceholderWithGeneratedKey() { insertSetStatementWithoutPlaceholder.getValues().add(new InsertValue(Arrays.asList(new LiteralExpressionSegment(1, 2, 12), new LiteralExpressionSegment(3, 4, "a")))); - OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertSetStatementWithoutPlaceholder, Collections.emptyList()).optimize(); + OptimizeResult actual = new ShardingInsertOptimizeEngine(shardingRule, insertSetStatementWithoutPlaceholder, Collections.emptyList()).optimize(); assertThat(actual.getRouteConditions().getRouteConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(0)); @@ -327,7 +327,7 @@ public void assertOptimizeInsertSetWithoutPlaceholderWithGeneratedKey() { public void assertOptimizeInsertSetWithoutPlaceholderWithGeneratedKeyWithEncrypt() { insertSetStatementWithoutPlaceholderWithEncrypt.getValues().add( new InsertValue(Arrays.asList(new LiteralExpressionSegment(1, 2, 12), new LiteralExpressionSegment(3, 4, "a")))); - OptimizeResult actual = new InsertOptimizeEngine(shardingRule, insertSetStatementWithoutPlaceholderWithEncrypt, Collections.emptyList()).optimize(); + OptimizeResult actual = new ShardingInsertOptimizeEngine(shardingRule, insertSetStatementWithoutPlaceholderWithEncrypt, Collections.emptyList()).optimize(); assertThat(actual.getRouteConditions().getRouteConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(0)); From 293295a4f20d7b56736c7332a5f92aa7ef3564fe Mon Sep 17 00:00:00 2001 From: terrymanu Date: Mon, 17 Jun 2019 22:31:26 +0800 Subject: [PATCH 270/283] for #2567, move ShardingInsertOptimizeEngine.addInsertValue() to InsertOptimizeResultUnit --- .../dml/ShardingInsertOptimizeEngine.java | 39 +++---------------- .../insert/InsertOptimizeResultUnit.java | 17 ++++++++ .../sql/context/insertvalue/InsertValue.java | 31 +++++++++++++++ 3 files changed, 53 insertions(+), 34 deletions(-) diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/ShardingInsertOptimizeEngine.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/ShardingInsertOptimizeEngine.java index 31c673f08d61c..5c5aeb791d585 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/ShardingInsertOptimizeEngine.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/ShardingInsertOptimizeEngine.java @@ -29,9 +29,6 @@ import org.apache.shardingsphere.core.parse.sql.context.condition.AndCondition; import org.apache.shardingsphere.core.parse.sql.context.condition.Condition; import org.apache.shardingsphere.core.parse.sql.context.insertvalue.InsertValue; -import org.apache.shardingsphere.core.parse.sql.segment.dml.expr.ExpressionSegment; -import org.apache.shardingsphere.core.parse.sql.segment.dml.expr.simple.LiteralExpressionSegment; -import org.apache.shardingsphere.core.parse.sql.segment.dml.expr.simple.ParameterMarkerExpressionSegment; import org.apache.shardingsphere.core.parse.sql.statement.dml.InsertStatement; import org.apache.shardingsphere.core.rule.ShardingRule; import org.apache.shardingsphere.core.strategy.route.value.ListRouteValue; @@ -75,9 +72,9 @@ public OptimizeResult optimize() { for (int i = 0; i < andConditions.size(); i++) { AndCondition andCondition = andConditions.get(i); InsertValue insertValue = insertStatement.getValues().get(i); - ExpressionSegment[] eachInsertValues = createEachInsertValues(insertValue, isGeneratedValue); - Object[] eachParameters = createEachParameters(insertValue, parametersCount, isGeneratedValue); - InsertOptimizeResultUnit unit = insertOptimizeResult.addUnit(eachInsertValues, eachParameters, insertValue.getParametersCount()); + int derivedColumnsCount = getDerivedColumnsCount(isGeneratedValue); + InsertOptimizeResultUnit unit = insertOptimizeResult.addUnit( + insertValue.getValues(derivedColumnsCount), insertValue.getParameters(parameters, parametersCount, derivedColumnsCount), insertValue.getParametersCount()); RouteCondition routeCondition = new RouteCondition(); routeCondition.getRouteValues().addAll(getRouteValues(andCondition)); if (isGeneratedValue) { @@ -105,21 +102,6 @@ private void appendAssistedQueryColumns(final InsertOptimizeResult insertOptimiz } } - private ExpressionSegment[] createEachInsertValues(final InsertValue insertValue, final boolean isGeneratedValue) { - ExpressionSegment[] result = new ExpressionSegment[insertValue.getAssignments().size() + getDerivedColumnsCount(isGeneratedValue)]; - insertValue.getAssignments().toArray(result); - return result; - } - - private Object[] createEachParameters(final InsertValue insertValue, final int parametersBeginIndex, final boolean isGeneratedValue) { - if (0 == insertValue.getParametersCount()) { - return new Object[0]; - } - Object[] result = new Object[insertValue.getParametersCount() + getDerivedColumnsCount(isGeneratedValue)]; - parameters.subList(parametersBeginIndex, parametersBeginIndex + insertValue.getParametersCount()).toArray(result); - return result; - } - private int getDerivedColumnsCount(final boolean isGeneratedValue) { int assistedQueryColumnsCount = shardingRule.getEncryptRule().getEncryptorEngine().getAssistedQueryColumnCount(insertStatement.getTables().getSingleTableName()); return isGeneratedValue ? assistedQueryColumnsCount + 1 : assistedQueryColumnsCount; @@ -134,7 +116,7 @@ private Collection getRouteValues(final AndCondition andConditio } private void fillGeneratedKeyUnit(final String generatedKeyColumnName, final Comparable generatedValue, final InsertOptimizeResultUnit unit, final RouteCondition routeCondition) { - fillUnit(generatedValue, unit); + unit.addInsertValue(generatedValue, parameters); String tableName = insertStatement.getTables().getSingleTableName(); if (shardingRule.isShardingColumn(generatedKeyColumnName, tableName)) { routeCondition.getRouteValues().add(new ListRouteValue<>(generatedKeyColumnName, tableName, Collections.>singletonList(generatedValue))); @@ -144,22 +126,11 @@ private void fillGeneratedKeyUnit(final String generatedKeyColumnName, final Com private void fillAssistedQueryUnit(final Collection columnNames, final InsertOptimizeResultUnit unit) { for (String each : columnNames) { if (shardingRule.getEncryptRule().getEncryptorEngine().getAssistedQueryColumn(insertStatement.getTables().getSingleTableName(), each).isPresent()) { - fillUnit((Comparable) unit.getColumnValue(each), unit); + unit.addInsertValue((Comparable) unit.getColumnValue(each), parameters); } } } - private void fillUnit(final Comparable insertValue, final InsertOptimizeResultUnit unit) { - if (parameters.isEmpty()) { - // TODO fix start index and stop index - unit.addColumnValue(new LiteralExpressionSegment(0, 0, insertValue)); - } else { - // TODO fix start index and stop index - unit.addColumnValue(new ParameterMarkerExpressionSegment(0, 0, parameters.size() - 1)); - unit.addColumnParameter(insertValue); - } - } - private OptimizeResult createOptimizeResult(final InsertOptimizeResult insertOptimizeResult, final List routeConditions, final GeneratedKey generatedKey) { OptimizeResult result = new OptimizeResult(new RouteConditions(routeConditions), insertOptimizeResult); result.setGeneratedKey(generatedKey); diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/result/insert/InsertOptimizeResultUnit.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/result/insert/InsertOptimizeResultUnit.java index 93bd26de804e4..16a868460dd1c 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/result/insert/InsertOptimizeResultUnit.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/result/insert/InsertOptimizeResultUnit.java @@ -131,4 +131,21 @@ public Object getColumnValue(final String columnName) { public ExpressionSegment getColumnSQLExpression(final String columnName) { return values[getColumnIndex(columnName)]; } + + /** + * Add insert value. + * + * @param insertValue insert value + * @param parameters SQL parameters + */ + public void addInsertValue(final Comparable insertValue, final List parameters) { + if (parameters.isEmpty()) { + // TODO fix start index and stop index + addColumnValue(new LiteralExpressionSegment(0, 0, insertValue)); + } else { + // TODO fix start index and stop index + addColumnValue(new ParameterMarkerExpressionSegment(0, 0, parameters.size() - 1)); + addColumnParameter(insertValue); + } + } } diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/context/insertvalue/InsertValue.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/context/insertvalue/InsertValue.java index 76102dab294c2..1b105319919eb 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/context/insertvalue/InsertValue.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/sql/context/insertvalue/InsertValue.java @@ -24,6 +24,7 @@ import org.apache.shardingsphere.core.parse.sql.segment.dml.expr.simple.ParameterMarkerExpressionSegment; import java.util.Collection; +import java.util.List; /** * Insert value. @@ -51,4 +52,34 @@ public int getParametersCount() { } return result; } + + /** + * Get values. + * + * @param derivedColumnsCount derived columns count + * @return values + */ + public ExpressionSegment[] getValues(final int derivedColumnsCount) { + ExpressionSegment[] result = new ExpressionSegment[assignments.size() + derivedColumnsCount]; + assignments.toArray(result); + return result; + } + + /** + * Get parameters of this insert value segment. + * + * @param parameters SQL parameters + * @param parametersBeginIndex begin index on this insert value segment of parameters + * @param derivedColumnsCount derived columns count + * @return parameters of this insert value segment + */ + public Object[] getParameters(final List parameters, final int parametersBeginIndex, final int derivedColumnsCount) { + int parametersCount = getParametersCount(); + if (0 == parametersCount) { + return new Object[0]; + } + Object[] result = new Object[parametersCount + derivedColumnsCount]; + parameters.subList(parametersBeginIndex, parametersBeginIndex + parametersCount).toArray(result); + return result; + } } From 1264b57178c4eba7565e26e55931e940111553d2 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Mon, 17 Jun 2019 22:58:27 +0800 Subject: [PATCH 271/283] for #2567, refactor EncryptInsertOptimizeEngine --- .../encrypt/EncryptInsertOptimizeEngine.java | 78 +++++-------------- .../dml/ShardingInsertOptimizeEngine.java | 2 +- 2 files changed, 19 insertions(+), 61 deletions(-) diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/encrypt/EncryptInsertOptimizeEngine.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/encrypt/EncryptInsertOptimizeEngine.java index 9fe033cdb2662..c81b78b027b80 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/encrypt/EncryptInsertOptimizeEngine.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/encrypt/EncryptInsertOptimizeEngine.java @@ -17,25 +17,20 @@ package org.apache.shardingsphere.core.optimize.engine.encrypt; -import com.google.common.base.Optional; import lombok.RequiredArgsConstructor; import org.apache.shardingsphere.core.optimize.engine.OptimizeEngine; import org.apache.shardingsphere.core.optimize.result.OptimizeResult; import org.apache.shardingsphere.core.optimize.result.insert.InsertOptimizeResult; import org.apache.shardingsphere.core.optimize.result.insert.InsertOptimizeResultUnit; import org.apache.shardingsphere.core.parse.sql.context.insertvalue.InsertValue; -import org.apache.shardingsphere.core.parse.sql.segment.dml.expr.ExpressionSegment; -import org.apache.shardingsphere.core.parse.sql.segment.dml.expr.simple.LiteralExpressionSegment; -import org.apache.shardingsphere.core.parse.sql.segment.dml.expr.simple.ParameterMarkerExpressionSegment; import org.apache.shardingsphere.core.parse.sql.statement.dml.InsertStatement; import org.apache.shardingsphere.core.rule.EncryptRule; import java.util.Collection; -import java.util.LinkedList; import java.util.List; /** - * Encrypt insert optimize engine. + * Insert optimize engine for encrypt. * * @author panjuan */ @@ -50,73 +45,36 @@ public final class EncryptInsertOptimizeEngine implements OptimizeEngine { @Override public OptimizeResult optimize() { - List insertValues = insertStatement.getValues(); InsertOptimizeResult insertOptimizeResult = new InsertOptimizeResult(insertStatement.getColumnNames()); + appendAssistedQueryColumns(insertOptimizeResult); + int derivedColumnsCount = getDerivedColumnsCount(); int parametersCount = 0; - int insertOptimizeResultIndex = 0; - for (InsertValue each : insertValues) { - ExpressionSegment[] currentColumnValues = createCurrentColumnValues(each); - Object[] currentParameters = createCurrentParameters(parametersCount, each); - parametersCount = parametersCount + each.getParametersCount(); - insertOptimizeResult.addUnit(currentColumnValues, currentParameters, each.getParametersCount()); - if (isNeededToAppendQueryAssistedColumn()) { - fillWithQueryAssistedColumn(insertOptimizeResult, insertOptimizeResultIndex); + for (InsertValue each : insertStatement.getValues()) { + InsertOptimizeResultUnit unit = insertOptimizeResult.addUnit( + each.getValues(derivedColumnsCount), each.getParameters(parameters, parametersCount, derivedColumnsCount), each.getParametersCount()); + if (encryptRule.getEncryptorEngine().isHasShardingQueryAssistedEncryptor(insertStatement.getTables().getSingleTableName())) { + fillAssistedQueryUnit(insertOptimizeResult.getColumnNames(), unit); } - insertOptimizeResultIndex++; + parametersCount += each.getParametersCount(); } return new OptimizeResult(insertOptimizeResult); } - private ExpressionSegment[] createCurrentColumnValues(final InsertValue insertValue) { - ExpressionSegment[] result = new ExpressionSegment[insertValue.getAssignments().size() + getIncrement()]; - insertValue.getAssignments().toArray(result); - return result; - } - - private Object[] createCurrentParameters(final int beginIndex, final InsertValue insertValue) { - if (0 == insertValue.getParametersCount()) { - return new Object[0]; - } - Object[] result = new Object[insertValue.getParametersCount() + getIncrement()]; - parameters.subList(beginIndex, beginIndex + insertValue.getParametersCount()).toArray(result); - return result; - } - - private int getIncrement() { - int result = 0; - if (isNeededToAppendQueryAssistedColumn()) { - result += encryptRule.getEncryptorEngine().getAssistedQueryColumnCount(insertStatement.getTables().getSingleTableName()); + private void appendAssistedQueryColumns(final InsertOptimizeResult insertOptimizeResult) { + for (String each : encryptRule.getEncryptorEngine().getAssistedQueryColumns(insertStatement.getTables().getSingleTableName())) { + insertOptimizeResult.getColumnNames().add(each); } - return result; } - private boolean isNeededToAppendQueryAssistedColumn() { - return encryptRule.getEncryptorEngine().isHasShardingQueryAssistedEncryptor(insertStatement.getTables().getSingleTableName()); + private int getDerivedColumnsCount() { + return encryptRule.getEncryptorEngine().getAssistedQueryColumnCount(insertStatement.getTables().getSingleTableName()); } - private void fillWithQueryAssistedColumn(final InsertOptimizeResult insertOptimizeResult, final int insertOptimizeResultIndex) { - Collection assistedColumnNames = new LinkedList<>(); - for (String each : insertOptimizeResult.getColumnNames()) { - InsertOptimizeResultUnit unit = insertOptimizeResult.getUnits().get(insertOptimizeResultIndex); - Optional assistedColumnName = encryptRule.getEncryptorEngine().getAssistedQueryColumn(insertStatement.getTables().getSingleTableName(), each); - if (assistedColumnName.isPresent()) { - assistedColumnNames.add(assistedColumnName.get()); - fillInsertOptimizeResultUnit(unit, (Comparable) unit.getColumnValue(each)); + private void fillAssistedQueryUnit(final Collection columnNames, final InsertOptimizeResultUnit unit) { + for (String each : columnNames) { + if (encryptRule.getEncryptorEngine().getAssistedQueryColumn(insertStatement.getTables().getSingleTableName(), each).isPresent()) { + unit.addInsertValue((Comparable) unit.getColumnValue(each), parameters); } } - if (!assistedColumnNames.isEmpty()) { - insertOptimizeResult.getColumnNames().addAll(assistedColumnNames); - } - } - - private void fillInsertOptimizeResultUnit(final InsertOptimizeResultUnit unit, final Comparable columnValue) { - if (!parameters.isEmpty()) { - // TODO fix start index and stop index - unit.addColumnValue(new ParameterMarkerExpressionSegment(0, 0, parameters.size() - 1)); - unit.addColumnParameter(columnValue); - } else { - // TODO fix start index and stop index - unit.addColumnValue(new LiteralExpressionSegment(0, 0, columnValue)); - } } } diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/ShardingInsertOptimizeEngine.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/ShardingInsertOptimizeEngine.java index 5c5aeb791d585..088b61aee2812 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/ShardingInsertOptimizeEngine.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/ShardingInsertOptimizeEngine.java @@ -68,11 +68,11 @@ public OptimizeResult optimize() { appendGeneratedKeyColumn(generatedKey.get(), insertOptimizeResult); } appendAssistedQueryColumns(insertOptimizeResult); + int derivedColumnsCount = getDerivedColumnsCount(isGeneratedValue); int parametersCount = 0; for (int i = 0; i < andConditions.size(); i++) { AndCondition andCondition = andConditions.get(i); InsertValue insertValue = insertStatement.getValues().get(i); - int derivedColumnsCount = getDerivedColumnsCount(isGeneratedValue); InsertOptimizeResultUnit unit = insertOptimizeResult.addUnit( insertValue.getValues(derivedColumnsCount), insertValue.getParameters(parameters, parametersCount, derivedColumnsCount), insertValue.getParametersCount()); RouteCondition routeCondition = new RouteCondition(); From d418b4bdb1db3854736aa866bf0c6818976da8a8 Mon Sep 17 00:00:00 2001 From: itsccn Date: Mon, 17 Jun 2019 23:07:15 +0800 Subject: [PATCH 272/283] change documentat and issues URL change documentat and issues URL --- .github/ISSUE_TEMPLATE/bug-report.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md index 5e85725552867..54f2cfdc23120 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.md +++ b/.github/ISSUE_TEMPLATE/bug-report.md @@ -9,8 +9,8 @@ about: Something isn't working as expected Before report a bug, make sure you have: -- Searched open and closed [GitHub issues](https://github.com/sharding-sphere/sharding-sphere/issues). -- Read documentation: [ShardingSphere Doc](http://shardingsphere.io/document/current/en/overview/). +- Searched open and closed [GitHub issues](https://github.com/apache/incubator-shardingsphere-example/issues). +- Read documentation: [ShardingSphere Doc](https://shardingsphere.apache.org/document/current/en/overview). Please pay attention on issues you submitted, because we maybe need more details. If no response **more than 7 days** and we cannot reproduce it on current information, we will **close it**. From c8b2ea2af8b05984a26b5763ae410eb22b81fc66 Mon Sep 17 00:00:00 2001 From: itsccn Date: Mon, 17 Jun 2019 23:08:01 +0800 Subject: [PATCH 273/283] change documentat and issues URL change documentat and issues URL --- .github/ISSUE_TEMPLATE/question.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md index 30d2557ee14b2..1af1ceb35a1ba 100644 --- a/.github/ISSUE_TEMPLATE/question.md +++ b/.github/ISSUE_TEMPLATE/question.md @@ -10,8 +10,8 @@ about: Usage question that isn't answered in docs or discussion Before asking a question, make sure you have: - Googled your question. -- Searched open and closed [GitHub issues](https://github.com/sharding-sphere/sharding-sphere/issues). -- Read documentation: [ShardingSphere Doc](http://shardingsphere.io/document/current/en/overview/). +- Searched open and closed [GitHub issues](https://github.com/apache/incubator-shardingsphere-example/issues). +- Read documentation: [ShardingSphere Doc](https://shardingsphere.apache.org/document/current/en/overview). Please pay attention on issues you submitted, because we maybe need more details. If no response **more than 7 days** and we cannot reproduce it on current information, we will **close it**. From 0f2c8375dd68ff2a895caa9af700dcdf4ec50d70 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Tue, 18 Jun 2019 11:25:58 +0800 Subject: [PATCH 274/283] for #2567, merge dql and dml --- .../shardingsphere/core/optimize/OptimizeEngineFactory.java | 2 +- .../shardingsphere/core/optimize/condition/RouteConditions.java | 2 +- .../engine/sharding/{dql => dml}/AlwaysFalseRouteCondition.java | 2 +- .../engine/sharding/{dql => dml}/AlwaysFalseShardingValue.java | 2 +- .../engine/sharding/{dql => dml}/QueryOptimizeEngine.java | 2 +- .../engine/sharding/dml/ShardingInsertOptimizeEngine.java | 2 +- .../shardingsphere/core/optimize/{ => keygen}/GeneratedKey.java | 2 +- .../shardingsphere/core/optimize/result/OptimizeResult.java | 2 +- .../apache/shardingsphere/core/optimize/GeneratedKeyTest.java | 1 + .../core/optimize/engine/sharding/QueryOptimizeEngineTest.java | 2 +- .../jdbc/core/statement/ShardingPreparedStatement.java | 2 +- .../shardingjdbc/jdbc/core/statement/ShardingStatement.java | 2 +- 12 files changed, 12 insertions(+), 11 deletions(-) rename sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/{dql => dml}/AlwaysFalseRouteCondition.java (99%) rename sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/{dql => dml}/AlwaysFalseShardingValue.java (99%) rename sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/{dql => dml}/QueryOptimizeEngine.java (99%) rename sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/{ => keygen}/GeneratedKey.java (99%) diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java index 73138aa780482..d6460583972b2 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java @@ -24,8 +24,8 @@ import org.apache.shardingsphere.core.optimize.engine.encrypt.EncryptDefaultOptimizeEngine; import org.apache.shardingsphere.core.optimize.engine.encrypt.EncryptInsertOptimizeEngine; import org.apache.shardingsphere.core.optimize.engine.sharding.ddl.DDLOptimizeEngine; +import org.apache.shardingsphere.core.optimize.engine.sharding.dml.QueryOptimizeEngine; import org.apache.shardingsphere.core.optimize.engine.sharding.dml.ShardingInsertOptimizeEngine; -import org.apache.shardingsphere.core.optimize.engine.sharding.dql.QueryOptimizeEngine; import org.apache.shardingsphere.core.parse.sql.context.condition.Conditions; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.sql.statement.ddl.DDLStatement; diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/condition/RouteConditions.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/condition/RouteConditions.java index 6f24385527bfb..68e7ff4d9222f 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/condition/RouteConditions.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/condition/RouteConditions.java @@ -19,7 +19,7 @@ import lombok.Getter; import lombok.RequiredArgsConstructor; -import org.apache.shardingsphere.core.optimize.engine.sharding.dql.AlwaysFalseRouteCondition; +import org.apache.shardingsphere.core.optimize.engine.sharding.dml.AlwaysFalseRouteCondition; import java.util.List; diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dql/AlwaysFalseRouteCondition.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/AlwaysFalseRouteCondition.java similarity index 99% rename from sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dql/AlwaysFalseRouteCondition.java rename to sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/AlwaysFalseRouteCondition.java index b1fdf6371038a..8c4fe2d3a8cd1 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dql/AlwaysFalseRouteCondition.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/AlwaysFalseRouteCondition.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.shardingsphere.core.optimize.engine.sharding.dql; +package org.apache.shardingsphere.core.optimize.engine.sharding.dml; import org.apache.shardingsphere.core.optimize.condition.RouteCondition; diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dql/AlwaysFalseShardingValue.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/AlwaysFalseShardingValue.java similarity index 99% rename from sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dql/AlwaysFalseShardingValue.java rename to sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/AlwaysFalseShardingValue.java index 15c779d4aadca..89d9e034b3463 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dql/AlwaysFalseShardingValue.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/AlwaysFalseShardingValue.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.shardingsphere.core.optimize.engine.sharding.dql; +package org.apache.shardingsphere.core.optimize.engine.sharding.dml; import org.apache.shardingsphere.core.strategy.route.value.RouteValue; diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dql/QueryOptimizeEngine.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/QueryOptimizeEngine.java similarity index 99% rename from sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dql/QueryOptimizeEngine.java rename to sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/QueryOptimizeEngine.java index b81b964f93a2d..dc7e298286d02 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dql/QueryOptimizeEngine.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/QueryOptimizeEngine.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.shardingsphere.core.optimize.engine.sharding.dql; +package org.apache.shardingsphere.core.optimize.engine.sharding.dml; import com.google.common.base.Optional; import com.google.common.collect.BoundType; diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/ShardingInsertOptimizeEngine.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/ShardingInsertOptimizeEngine.java index 088b61aee2812..82a1b10860725 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/ShardingInsertOptimizeEngine.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/ShardingInsertOptimizeEngine.java @@ -19,10 +19,10 @@ import com.google.common.base.Optional; import lombok.RequiredArgsConstructor; -import org.apache.shardingsphere.core.optimize.GeneratedKey; import org.apache.shardingsphere.core.optimize.condition.RouteCondition; import org.apache.shardingsphere.core.optimize.condition.RouteConditions; import org.apache.shardingsphere.core.optimize.engine.OptimizeEngine; +import org.apache.shardingsphere.core.optimize.keygen.GeneratedKey; import org.apache.shardingsphere.core.optimize.result.OptimizeResult; import org.apache.shardingsphere.core.optimize.result.insert.InsertOptimizeResult; import org.apache.shardingsphere.core.optimize.result.insert.InsertOptimizeResultUnit; diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/GeneratedKey.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/keygen/GeneratedKey.java similarity index 99% rename from sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/GeneratedKey.java rename to sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/keygen/GeneratedKey.java index d8b9e72179ebe..9b2a9ba1c7f43 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/GeneratedKey.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/keygen/GeneratedKey.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.shardingsphere.core.optimize; +package org.apache.shardingsphere.core.optimize.keygen; import com.google.common.base.Optional; import lombok.Getter; diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/result/OptimizeResult.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/result/OptimizeResult.java index 57a7674ecf54c..d78ec40b870fb 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/result/OptimizeResult.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/result/OptimizeResult.java @@ -22,9 +22,9 @@ import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.Setter; -import org.apache.shardingsphere.core.optimize.GeneratedKey; import org.apache.shardingsphere.core.optimize.condition.RouteCondition; import org.apache.shardingsphere.core.optimize.condition.RouteConditions; +import org.apache.shardingsphere.core.optimize.keygen.GeneratedKey; import org.apache.shardingsphere.core.optimize.pagination.Pagination; import org.apache.shardingsphere.core.optimize.result.insert.InsertOptimizeResult; diff --git a/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/GeneratedKeyTest.java b/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/GeneratedKeyTest.java index 1818206a89bc6..9c84052d34df7 100644 --- a/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/GeneratedKeyTest.java +++ b/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/GeneratedKeyTest.java @@ -18,6 +18,7 @@ package org.apache.shardingsphere.core.optimize; import com.google.common.base.Optional; +import org.apache.shardingsphere.core.optimize.keygen.GeneratedKey; import org.apache.shardingsphere.core.parse.sql.context.insertvalue.InsertValue; import org.apache.shardingsphere.core.parse.sql.context.table.Table; import org.apache.shardingsphere.core.parse.sql.segment.dml.expr.ExpressionSegment; diff --git a/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/QueryOptimizeEngineTest.java b/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/QueryOptimizeEngineTest.java index 718b252833690..59eea32174a2c 100644 --- a/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/QueryOptimizeEngineTest.java +++ b/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/QueryOptimizeEngineTest.java @@ -20,7 +20,7 @@ import com.google.common.collect.Range; import org.apache.shardingsphere.core.optimize.condition.RouteCondition; import org.apache.shardingsphere.core.optimize.condition.RouteConditions; -import org.apache.shardingsphere.core.optimize.engine.sharding.dql.QueryOptimizeEngine; +import org.apache.shardingsphere.core.optimize.engine.sharding.dml.QueryOptimizeEngine; import org.apache.shardingsphere.core.parse.sql.context.condition.AndCondition; import org.apache.shardingsphere.core.parse.sql.context.condition.Column; import org.apache.shardingsphere.core.parse.sql.context.condition.Condition; diff --git a/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/statement/ShardingPreparedStatement.java b/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/statement/ShardingPreparedStatement.java index ee27f8689a5eb..db88d317cc91b 100644 --- a/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/statement/ShardingPreparedStatement.java +++ b/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/statement/ShardingPreparedStatement.java @@ -27,7 +27,7 @@ import org.apache.shardingsphere.core.execute.sql.execute.result.StreamQueryResult; import org.apache.shardingsphere.core.merge.MergeEngine; import org.apache.shardingsphere.core.merge.MergeEngineFactory; -import org.apache.shardingsphere.core.optimize.GeneratedKey; +import org.apache.shardingsphere.core.optimize.keygen.GeneratedKey; import org.apache.shardingsphere.core.parse.sql.statement.dal.DALStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.InsertStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.SelectStatement; diff --git a/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/statement/ShardingStatement.java b/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/statement/ShardingStatement.java index 068d3d9e9f325..e9de2d080412a 100644 --- a/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/statement/ShardingStatement.java +++ b/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/statement/ShardingStatement.java @@ -25,7 +25,7 @@ import org.apache.shardingsphere.core.execute.sql.execute.result.StreamQueryResult; import org.apache.shardingsphere.core.merge.MergeEngine; import org.apache.shardingsphere.core.merge.MergeEngineFactory; -import org.apache.shardingsphere.core.optimize.GeneratedKey; +import org.apache.shardingsphere.core.optimize.keygen.GeneratedKey; import org.apache.shardingsphere.core.parse.sql.statement.dal.DALStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.InsertStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.SelectStatement; From 904129cfd367c94fb83f1ccf0e6049b9bb334479 Mon Sep 17 00:00:00 2001 From: tuohai666 Date: Tue, 18 Jun 2019 12:46:33 +0800 Subject: [PATCH 275/283] #2549, parse insert statement error while containing curate() function --- .../filler/sharding/dml/insert/ShardingInsertValuesFiller.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingInsertValuesFiller.java b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingInsertValuesFiller.java index acc56850f103e..2938259770f78 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingInsertValuesFiller.java +++ b/sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/filler/sharding/dml/insert/ShardingInsertValuesFiller.java @@ -89,8 +89,9 @@ private void fillCondition(final InsertValuesSegment segment, final InsertStatem AndCondition andCondition = new AndCondition(); Iterator columnNames = insertStatement.getColumnNames().iterator(); for (ExpressionSegment each : segment.getValues()) { + String columnName = columnNames.next(); if (each instanceof SimpleExpressionSegment) { - fillShardingCondition(andCondition, insertStatement.getTables().getSingleTableName(), columnNames.next(), (SimpleExpressionSegment) each); + fillShardingCondition(andCondition, insertStatement.getTables().getSingleTableName(), columnName, (SimpleExpressionSegment) each); } } insertStatement.getShardingConditions().getOrConditions().add(andCondition); From 234516665cf61858ad0e4c7bdadf2dca8c3e799a Mon Sep 17 00:00:00 2001 From: terrymanu Date: Tue, 18 Jun 2019 13:12:19 +0800 Subject: [PATCH 276/283] for #2567, move keygen's route condition gen from optimize module to route module --- .../dml/ShardingInsertOptimizeEngine.java | 11 +--------- .../ShardingInsertOptimizeEngineTest.java | 20 ++++++------------- .../router/sharding/ParsingSQLRouter.java | 19 ++++++++++++++++++ 3 files changed, 26 insertions(+), 24 deletions(-) diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/ShardingInsertOptimizeEngine.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/ShardingInsertOptimizeEngine.java index 82a1b10860725..20bf620debcff 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/ShardingInsertOptimizeEngine.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/ShardingInsertOptimizeEngine.java @@ -35,7 +35,6 @@ import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; import java.util.Iterator; import java.util.LinkedList; import java.util.List; @@ -78,7 +77,7 @@ public OptimizeResult optimize() { RouteCondition routeCondition = new RouteCondition(); routeCondition.getRouteValues().addAll(getRouteValues(andCondition)); if (isGeneratedValue) { - fillGeneratedKeyUnit(generatedKey.get().getColumnName(), generatedValues.next(), unit, routeCondition); + unit.addInsertValue(generatedValues.next(), parameters); } if (shardingRule.getEncryptRule().getEncryptorEngine().isHasShardingQueryAssistedEncryptor(insertStatement.getTables().getSingleTableName())) { fillAssistedQueryUnit(insertOptimizeResult.getColumnNames(), unit); @@ -115,14 +114,6 @@ private Collection getRouteValues(final AndCondition andConditio return result; } - private void fillGeneratedKeyUnit(final String generatedKeyColumnName, final Comparable generatedValue, final InsertOptimizeResultUnit unit, final RouteCondition routeCondition) { - unit.addInsertValue(generatedValue, parameters); - String tableName = insertStatement.getTables().getSingleTableName(); - if (shardingRule.isShardingColumn(generatedKeyColumnName, tableName)) { - routeCondition.getRouteValues().add(new ListRouteValue<>(generatedKeyColumnName, tableName, Collections.>singletonList(generatedValue))); - } - } - private void fillAssistedQueryUnit(final Collection columnNames, final InsertOptimizeResultUnit unit) { for (String each : columnNames) { if (shardingRule.getEncryptRule().getEncryptorEngine().getAssistedQueryColumn(insertStatement.getTables().getSingleTableName(), each).isPresent()) { diff --git a/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/ShardingInsertOptimizeEngineTest.java b/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/ShardingInsertOptimizeEngineTest.java index 97f15c31f59e1..4eac79f63a30e 100644 --- a/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/ShardingInsertOptimizeEngineTest.java +++ b/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/ShardingInsertOptimizeEngineTest.java @@ -209,12 +209,10 @@ public void assertOptimizeInsertValuesWithPlaceholderWithGeneratedKey() { assertThat(actual.getInsertOptimizeResult().get().getUnits().get(1).getParameters()[0], CoreMatchers.is(11)); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(1).getParameters()[1], CoreMatchers.is("init")); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(1).getParameters()[2], CoreMatchers.is(1)); - assertThat(actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().size(), is(2)); - assertThat(actual.getRouteConditions().getRouteConditions().get(1).getRouteValues().size(), is(2)); + assertThat(actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().size(), is(1)); + assertThat(actual.getRouteConditions().getRouteConditions().get(1).getRouteValues().size(), is(1)); assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().get(0), 10); - assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().get(1), 1); assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(1).getRouteValues().get(0), 11); - assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(1).getRouteValues().get(1), 1); } @Test @@ -230,12 +228,10 @@ public void assertOptimizeInsertValuesWithPlaceholderWithGeneratedKeyWithEncrypt assertThat(actual.getInsertOptimizeResult().get().getUnits().get(1).getParameters()[0], CoreMatchers.is(11)); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(1).getParameters()[1], CoreMatchers.is("init")); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(1).getParameters()[2], CoreMatchers.is(1)); - assertThat(actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().size(), is(2)); - assertThat(actual.getRouteConditions().getRouteConditions().get(1).getRouteValues().size(), is(2)); + assertThat(actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().size(), is(1)); + assertThat(actual.getRouteConditions().getRouteConditions().get(1).getRouteValues().size(), is(1)); assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().get(0), 10); - assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().get(1), 1); assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(1).getRouteValues().get(0), 11); - assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(1).getRouteValues().get(1), 1); } @Test @@ -250,8 +246,8 @@ public void assertOptimizeInsertValuesWithPlaceholderWithoutGeneratedKey() { assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters()[1], CoreMatchers.is("init")); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(1).getParameters()[0], CoreMatchers.is(11)); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(1).getParameters()[1], CoreMatchers.is("init")); - assertThat(actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().size(), is(2)); - assertThat(actual.getRouteConditions().getRouteConditions().get(1).getRouteValues().size(), is(2)); + assertThat(actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().size(), is(1)); + assertThat(actual.getRouteConditions().getRouteConditions().get(1).getRouteValues().size(), is(1)); assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().get(0), 10); assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(1).getRouteValues().get(0), 11); } @@ -267,7 +263,6 @@ public void assertOptimizeInsertValuesWithoutPlaceholderWithGeneratedKeyWithQuer assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(0)); assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().get(0), 12); - assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().get(1), 1); } @Test @@ -280,7 +275,6 @@ public void assertOptimizeInsertValuesWithoutPlaceholderWithGeneratedKey() { assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(0)); assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().get(0), 12); - assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().get(1), 1); } @Test @@ -320,7 +314,6 @@ public void assertOptimizeInsertSetWithoutPlaceholderWithGeneratedKey() { assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(0)); assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().get(0), 12); - assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().get(1), 1); } @Test @@ -332,7 +325,6 @@ public void assertOptimizeInsertSetWithoutPlaceholderWithGeneratedKeyWithEncrypt assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(0)); assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().get(0), 12); - assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().get(1), 1); } private void assertShardingValue(final ListRouteValue actual, final int expected) { diff --git a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java index 16bbbec7d34c1..77a0334e36ca2 100644 --- a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java +++ b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java @@ -25,6 +25,7 @@ import org.apache.shardingsphere.core.optimize.OptimizeEngineFactory; import org.apache.shardingsphere.core.optimize.condition.RouteCondition; import org.apache.shardingsphere.core.optimize.condition.RouteConditions; +import org.apache.shardingsphere.core.optimize.keygen.GeneratedKey; import org.apache.shardingsphere.core.optimize.result.OptimizeResult; import org.apache.shardingsphere.core.parse.cache.ParsingResultCache; import org.apache.shardingsphere.core.parse.entry.ShardingSQLParseEntry; @@ -41,6 +42,8 @@ import org.apache.shardingsphere.core.strategy.route.value.RouteValue; import org.apache.shardingsphere.spi.database.DatabaseType; +import java.util.Collections; +import java.util.Iterator; import java.util.LinkedList; import java.util.List; @@ -85,6 +88,7 @@ public SQLStatement parse(final String logicSQL, final boolean useCache) { @Override public SQLRouteResult route(final SQLStatement sqlStatement, final List parameters) { OptimizeResult optimizeResult = OptimizeEngineFactory.newInstance(shardingRule, sqlStatement, parameters, shardingMetaData.getTable()).optimize(); + appendGeneratedKeyCondition(sqlStatement, optimizeResult); boolean needMergeShardingValues = isNeedMergeShardingValues(sqlStatement); if (needMergeShardingValues) { checkSubqueryShardingValues(sqlStatement, optimizeResult.getRouteConditions()); @@ -100,6 +104,21 @@ public SQLRouteResult route(final SQLStatement sqlStatement, final List return result; } + private void appendGeneratedKeyCondition(final SQLStatement sqlStatement, final OptimizeResult optimizeResult) { + if (!optimizeResult.getGeneratedKey().isPresent() || optimizeResult.getGeneratedKey().get().isGenerated()) { + return; + } + String tableName = sqlStatement.getTables().getSingleTableName(); + GeneratedKey generatedKey = optimizeResult.getGeneratedKey().get(); + String generatedKeyColumnName = generatedKey.getColumnName(); + Iterator> generatedValues = generatedKey.getGeneratedValues().iterator(); + for (RouteCondition each : optimizeResult.getRouteConditions().getRouteConditions()) { + if (shardingRule.isShardingColumn(generatedKeyColumnName, tableName)) { + each.getRouteValues().add(new ListRouteValue<>(generatedKeyColumnName, tableName, Collections.>singletonList(generatedValues.next()))); + } + } + } + private void setOptimizeResult(final OptimizeResult optimizeResult, final SQLRouteResult sqlRouteResult) { if (optimizeResult.getGeneratedKey().isPresent()) { generatedValues.addAll(optimizeResult.getGeneratedKey().get().getGeneratedValues()); From 98737e34a48f129ce129361689af8ba43ecf6011 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Tue, 18 Jun 2019 14:41:27 +0800 Subject: [PATCH 277/283] for #2567, move insert's route condition gen from optimize module to route module --- .../dml/ShardingInsertOptimizeEngine.java | 17 +-------- .../core/optimize/result/OptimizeResult.java | 9 +++-- .../ShardingInsertOptimizeEngineTest.java | 31 ---------------- .../router/sharding/ParsingSQLRouter.java | 37 +++++++++++++++++-- 4 files changed, 40 insertions(+), 54 deletions(-) diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/ShardingInsertOptimizeEngine.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/ShardingInsertOptimizeEngine.java index 20bf620debcff..200e4b9c5a35b 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/ShardingInsertOptimizeEngine.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/ShardingInsertOptimizeEngine.java @@ -27,16 +27,13 @@ import org.apache.shardingsphere.core.optimize.result.insert.InsertOptimizeResult; import org.apache.shardingsphere.core.optimize.result.insert.InsertOptimizeResultUnit; import org.apache.shardingsphere.core.parse.sql.context.condition.AndCondition; -import org.apache.shardingsphere.core.parse.sql.context.condition.Condition; import org.apache.shardingsphere.core.parse.sql.context.insertvalue.InsertValue; import org.apache.shardingsphere.core.parse.sql.statement.dml.InsertStatement; import org.apache.shardingsphere.core.rule.ShardingRule; -import org.apache.shardingsphere.core.strategy.route.value.ListRouteValue; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; -import java.util.LinkedList; import java.util.List; /** @@ -59,7 +56,6 @@ public final class ShardingInsertOptimizeEngine implements OptimizeEngine { public OptimizeResult optimize() { InsertOptimizeResult insertOptimizeResult = new InsertOptimizeResult(insertStatement.getColumnNames()); List andConditions = insertStatement.getShardingConditions().getOrConditions(); - List routeConditions = new ArrayList<>(andConditions.size()); Optional generatedKey = GeneratedKey.getGenerateKey(shardingRule, parameters, insertStatement); boolean isGeneratedValue = generatedKey.isPresent() && generatedKey.get().isGenerated(); Iterator> generatedValues = isGeneratedValue ? generatedKey.get().getGeneratedValues().iterator() : null; @@ -70,21 +66,18 @@ public OptimizeResult optimize() { int derivedColumnsCount = getDerivedColumnsCount(isGeneratedValue); int parametersCount = 0; for (int i = 0; i < andConditions.size(); i++) { - AndCondition andCondition = andConditions.get(i); InsertValue insertValue = insertStatement.getValues().get(i); InsertOptimizeResultUnit unit = insertOptimizeResult.addUnit( insertValue.getValues(derivedColumnsCount), insertValue.getParameters(parameters, parametersCount, derivedColumnsCount), insertValue.getParametersCount()); - RouteCondition routeCondition = new RouteCondition(); - routeCondition.getRouteValues().addAll(getRouteValues(andCondition)); if (isGeneratedValue) { unit.addInsertValue(generatedValues.next(), parameters); } if (shardingRule.getEncryptRule().getEncryptorEngine().isHasShardingQueryAssistedEncryptor(insertStatement.getTables().getSingleTableName())) { fillAssistedQueryUnit(insertOptimizeResult.getColumnNames(), unit); } - routeConditions.add(routeCondition); parametersCount += insertValue.getParametersCount(); } + List routeConditions = new ArrayList<>(); return generatedKey.isPresent() ? createOptimizeResult(insertOptimizeResult, routeConditions, generatedKey.get()) : new OptimizeResult(new RouteConditions(routeConditions), insertOptimizeResult); } @@ -106,14 +99,6 @@ private int getDerivedColumnsCount(final boolean isGeneratedValue) { return isGeneratedValue ? assistedQueryColumnsCount + 1 : assistedQueryColumnsCount; } - private Collection getRouteValues(final AndCondition andCondition) { - Collection result = new LinkedList<>(); - for (Condition each : andCondition.getConditions()) { - result.add(new ListRouteValue<>(each.getColumn().getName(), each.getColumn().getTableName(), each.getConditionValues(parameters))); - } - return result; - } - private void fillAssistedQueryUnit(final Collection columnNames, final InsertOptimizeResultUnit unit) { for (String each : columnNames) { if (shardingRule.getEncryptRule().getEncryptorEngine().getAssistedQueryColumn(insertStatement.getTables().getSingleTableName(), each).isPresent()) { diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/result/OptimizeResult.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/result/OptimizeResult.java index d78ec40b870fb..e5fcd66344fba 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/result/OptimizeResult.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/result/OptimizeResult.java @@ -20,7 +20,6 @@ import com.google.common.base.Optional; import lombok.AccessLevel; import lombok.Getter; -import lombok.RequiredArgsConstructor; import lombok.Setter; import org.apache.shardingsphere.core.optimize.condition.RouteCondition; import org.apache.shardingsphere.core.optimize.condition.RouteConditions; @@ -35,12 +34,11 @@ * * @author panjuan */ -@RequiredArgsConstructor @Getter @Setter public final class OptimizeResult { - private final RouteConditions routeConditions; + private RouteConditions routeConditions; @Getter(AccessLevel.NONE) private final InsertOptimizeResult insertOptimizeResult; @@ -59,6 +57,11 @@ public OptimizeResult(final InsertOptimizeResult insertOptimizeResult) { this(new RouteConditions(Collections.emptyList()), insertOptimizeResult); } + public OptimizeResult(final RouteConditions routeConditions, final InsertOptimizeResult insertOptimizeResult) { + this.routeConditions = routeConditions; + this.insertOptimizeResult = insertOptimizeResult; + } + /** * Get insert optimize result. * diff --git a/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/ShardingInsertOptimizeEngineTest.java b/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/ShardingInsertOptimizeEngineTest.java index 4eac79f63a30e..62c580d620f49 100644 --- a/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/ShardingInsertOptimizeEngineTest.java +++ b/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/ShardingInsertOptimizeEngineTest.java @@ -47,7 +47,6 @@ import java.util.List; import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; @@ -198,8 +197,6 @@ private void initializeInsertSetWithoutPlaceholderWithEncrypt() { @Test public void assertOptimizeInsertValuesWithPlaceholderWithGeneratedKey() { OptimizeResult actual = new ShardingInsertOptimizeEngine(shardingRule, insertValuesStatementWithPlaceholder, insertValuesParameters).optimize(); - assertFalse(actual.getRouteConditions().isAlwaysFalse()); - assertThat(actual.getRouteConditions().getRouteConditions().size(), is(2)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(3)); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(1).getParameters().length, is(3)); @@ -209,17 +206,11 @@ public void assertOptimizeInsertValuesWithPlaceholderWithGeneratedKey() { assertThat(actual.getInsertOptimizeResult().get().getUnits().get(1).getParameters()[0], CoreMatchers.is(11)); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(1).getParameters()[1], CoreMatchers.is("init")); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(1).getParameters()[2], CoreMatchers.is(1)); - assertThat(actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().size(), is(1)); - assertThat(actual.getRouteConditions().getRouteConditions().get(1).getRouteValues().size(), is(1)); - assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().get(0), 10); - assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(1).getRouteValues().get(0), 11); } @Test public void assertOptimizeInsertValuesWithPlaceholderWithGeneratedKeyWithEncrypt() { OptimizeResult actual = new ShardingInsertOptimizeEngine(shardingRule, insertValuesStatementWithPlaceholderWithEncrypt, insertValuesParameters).optimize(); - assertFalse(actual.getRouteConditions().isAlwaysFalse()); - assertThat(actual.getRouteConditions().getRouteConditions().size(), is(2)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(1).getParameters().length, is(3)); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters()[0], CoreMatchers.is(10)); @@ -228,17 +219,11 @@ public void assertOptimizeInsertValuesWithPlaceholderWithGeneratedKeyWithEncrypt assertThat(actual.getInsertOptimizeResult().get().getUnits().get(1).getParameters()[0], CoreMatchers.is(11)); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(1).getParameters()[1], CoreMatchers.is("init")); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(1).getParameters()[2], CoreMatchers.is(1)); - assertThat(actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().size(), is(1)); - assertThat(actual.getRouteConditions().getRouteConditions().get(1).getRouteValues().size(), is(1)); - assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().get(0), 10); - assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(1).getRouteValues().get(0), 11); } @Test public void assertOptimizeInsertValuesWithPlaceholderWithoutGeneratedKey() { OptimizeResult actual = new ShardingInsertOptimizeEngine(shardingRule, insertValuesStatementWithPlaceholder, insertValuesParameters).optimize(); - assertFalse(actual.getRouteConditions().isAlwaysFalse()); - assertThat(actual.getRouteConditions().getRouteConditions().size(), is(2)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(3)); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(1).getParameters().length, is(3)); @@ -246,10 +231,6 @@ public void assertOptimizeInsertValuesWithPlaceholderWithoutGeneratedKey() { assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters()[1], CoreMatchers.is("init")); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(1).getParameters()[0], CoreMatchers.is(11)); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(1).getParameters()[1], CoreMatchers.is("init")); - assertThat(actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().size(), is(1)); - assertThat(actual.getRouteConditions().getRouteConditions().get(1).getRouteValues().size(), is(1)); - assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().get(0), 10); - assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(1).getRouteValues().get(0), 11); } @Test @@ -259,10 +240,8 @@ public void assertOptimizeInsertValuesWithoutPlaceholderWithGeneratedKeyWithQuer insertValuesStatementWithoutPlaceholderWithQueryEncrypt.getValues().add( new InsertValue(Arrays.asList(new LiteralExpressionSegment(1, 2, 12), new LiteralExpressionSegment(3, 4, "a")))); OptimizeResult actual = new ShardingInsertOptimizeEngine(shardingRule, insertValuesStatementWithoutPlaceholderWithQueryEncrypt, Collections.emptyList()).optimize(); - assertThat(actual.getRouteConditions().getRouteConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(0)); - assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().get(0), 12); } @Test @@ -271,10 +250,8 @@ public void assertOptimizeInsertValuesWithoutPlaceholderWithGeneratedKey() { insertValuesStatementWithoutPlaceholder.getColumnNames().add("status"); insertValuesStatementWithoutPlaceholder.getValues().add(new InsertValue(Arrays.asList(new LiteralExpressionSegment(1, 2, 12), new LiteralExpressionSegment(3, 4, "a")))); OptimizeResult actual = new ShardingInsertOptimizeEngine(shardingRule, insertValuesStatementWithoutPlaceholder, Collections.emptyList()).optimize(); - assertThat(actual.getRouteConditions().getRouteConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(0)); - assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().get(0), 12); } @Test @@ -282,13 +259,11 @@ public void assertOptimizeInsertSetWithPlaceholderWithGeneratedKey() { insertSetStatementWithPlaceholder.getValues().add( new InsertValue(Arrays.asList(new ParameterMarkerExpressionSegment(1, 2, 0), new ParameterMarkerExpressionSegment(3, 4, 1)))); OptimizeResult actual = new ShardingInsertOptimizeEngine(shardingRule, insertSetStatementWithPlaceholder, insertSetParameters).optimize(); - assertThat(actual.getRouteConditions().getRouteConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(3)); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters()[0], CoreMatchers.is(12)); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters()[1], CoreMatchers.is("a")); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters()[2], CoreMatchers.is(1)); - assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().get(0), 12); } @Test @@ -296,24 +271,20 @@ public void assertOptimizeInsertSetWithPlaceholderWithGeneratedKeyWithQueryEncry InsertValue insertValue = new InsertValue(Arrays.asList(new ParameterMarkerExpressionSegment(1, 2, 0), new ParameterMarkerExpressionSegment(3, 4, 1))); insertSetStatementWithPlaceholderWithQueryEncrypt.getValues().add(insertValue); OptimizeResult actual = new ShardingInsertOptimizeEngine(shardingRule, insertSetStatementWithPlaceholderWithQueryEncrypt, insertSetParameters).optimize(); - assertThat(actual.getRouteConditions().getRouteConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(4)); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters()[0], CoreMatchers.is(12)); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters()[1], CoreMatchers.is("a")); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters()[2], CoreMatchers.is(1)); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters()[3], CoreMatchers.is(12)); - assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().get(0), 12); } @Test public void assertOptimizeInsertSetWithoutPlaceholderWithGeneratedKey() { insertSetStatementWithoutPlaceholder.getValues().add(new InsertValue(Arrays.asList(new LiteralExpressionSegment(1, 2, 12), new LiteralExpressionSegment(3, 4, "a")))); OptimizeResult actual = new ShardingInsertOptimizeEngine(shardingRule, insertSetStatementWithoutPlaceholder, Collections.emptyList()).optimize(); - assertThat(actual.getRouteConditions().getRouteConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(0)); - assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().get(0), 12); } @Test @@ -321,10 +292,8 @@ public void assertOptimizeInsertSetWithoutPlaceholderWithGeneratedKeyWithEncrypt insertSetStatementWithoutPlaceholderWithEncrypt.getValues().add( new InsertValue(Arrays.asList(new LiteralExpressionSegment(1, 2, 12), new LiteralExpressionSegment(3, 4, "a")))); OptimizeResult actual = new ShardingInsertOptimizeEngine(shardingRule, insertSetStatementWithoutPlaceholderWithEncrypt, Collections.emptyList()).optimize(); - assertThat(actual.getRouteConditions().getRouteConditions().size(), is(1)); assertTrue(actual.getInsertOptimizeResult().isPresent()); assertThat(actual.getInsertOptimizeResult().get().getUnits().get(0).getParameters().length, is(0)); - assertShardingValue((ListRouteValue) actual.getRouteConditions().getRouteConditions().get(0).getRouteValues().get(0), 12); } private void assertShardingValue(final ListRouteValue actual, final int expected) { diff --git a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java index 77a0334e36ca2..0fcdee25ca917 100644 --- a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java +++ b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java @@ -31,7 +31,10 @@ import org.apache.shardingsphere.core.parse.entry.ShardingSQLParseEntry; import org.apache.shardingsphere.core.parse.hook.ParsingHook; import org.apache.shardingsphere.core.parse.hook.SPIParsingHook; +import org.apache.shardingsphere.core.parse.sql.context.condition.AndCondition; +import org.apache.shardingsphere.core.parse.sql.context.condition.Condition; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; +import org.apache.shardingsphere.core.parse.sql.statement.dml.InsertStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.SelectStatement; import org.apache.shardingsphere.core.route.SQLRouteResult; import org.apache.shardingsphere.core.route.type.RoutingResult; @@ -42,6 +45,8 @@ import org.apache.shardingsphere.core.strategy.route.value.RouteValue; import org.apache.shardingsphere.spi.database.DatabaseType; +import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.LinkedList; @@ -88,11 +93,17 @@ public SQLStatement parse(final String logicSQL, final boolean useCache) { @Override public SQLRouteResult route(final SQLStatement sqlStatement, final List parameters) { OptimizeResult optimizeResult = OptimizeEngineFactory.newInstance(shardingRule, sqlStatement, parameters, shardingMetaData.getTable()).optimize(); - appendGeneratedKeyCondition(sqlStatement, optimizeResult); + RouteConditions routeConditions = null; + if (sqlStatement instanceof InsertStatement) { + List routeConditionList = getRouteConditions((InsertStatement) sqlStatement, parameters); + appendGeneratedKeyCondition(sqlStatement, optimizeResult, routeConditionList); + routeConditions = new RouteConditions(routeConditionList); + optimizeResult.setRouteConditions(routeConditions); + } boolean needMergeShardingValues = isNeedMergeShardingValues(sqlStatement); if (needMergeShardingValues) { checkSubqueryShardingValues(sqlStatement, optimizeResult.getRouteConditions()); - mergeShardingValues(optimizeResult.getRouteConditions()); + mergeShardingValues(null == routeConditions ? optimizeResult.getRouteConditions() : routeConditions); } RoutingResult routingResult = RoutingEngineFactory.newInstance(shardingRule, shardingMetaData.getDataSource(), sqlStatement, optimizeResult).route(); if (needMergeShardingValues) { @@ -104,7 +115,25 @@ public SQLRouteResult route(final SQLStatement sqlStatement, final List return result; } - private void appendGeneratedKeyCondition(final SQLStatement sqlStatement, final OptimizeResult optimizeResult) { + private List getRouteConditions(final InsertStatement insertStatement, final List parameters) { + List result = new ArrayList<>(insertStatement.getShardingConditions().getOrConditions().size()); + for (AndCondition each : insertStatement.getShardingConditions().getOrConditions()) { + RouteCondition routeCondition = new RouteCondition(); + routeCondition.getRouteValues().addAll(getRouteValues(each, parameters)); + result.add(routeCondition); + } + return result; + } + + private Collection getRouteValues(final AndCondition andCondition, final List parameters) { + Collection result = new LinkedList<>(); + for (Condition each : andCondition.getConditions()) { + result.add(new ListRouteValue<>(each.getColumn().getName(), each.getColumn().getTableName(), each.getConditionValues(parameters))); + } + return result; + } + + private void appendGeneratedKeyCondition(final SQLStatement sqlStatement, final OptimizeResult optimizeResult, final List routeConditions) { if (!optimizeResult.getGeneratedKey().isPresent() || optimizeResult.getGeneratedKey().get().isGenerated()) { return; } @@ -112,7 +141,7 @@ private void appendGeneratedKeyCondition(final SQLStatement sqlStatement, final GeneratedKey generatedKey = optimizeResult.getGeneratedKey().get(); String generatedKeyColumnName = generatedKey.getColumnName(); Iterator> generatedValues = generatedKey.getGeneratedValues().iterator(); - for (RouteCondition each : optimizeResult.getRouteConditions().getRouteConditions()) { + for (RouteCondition each : routeConditions) { if (shardingRule.isShardingColumn(generatedKeyColumnName, tableName)) { each.getRouteValues().add(new ListRouteValue<>(generatedKeyColumnName, tableName, Collections.>singletonList(generatedValues.next()))); } From aa3bddfcade15a2e3f276f652457e04b51721231 Mon Sep 17 00:00:00 2001 From: tuohai666 Date: Tue, 18 Jun 2019 15:54:49 +0800 Subject: [PATCH 278/283] #2549, add test case --- .../test/resources/sharding/dml/insert.xml | 19 +++++++++++++++++++ .../resources/sql/sharding/dml/insert.xml | 1 + 2 files changed, 20 insertions(+) diff --git a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dml/insert.xml b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dml/insert.xml index 55b4ec7d635af..9c3c374b59622 100644 --- a/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dml/insert.xml +++ b/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/dml/insert.xml @@ -646,4 +646,23 @@ + + + +
+ + + + + + + + + + + + + + + diff --git a/sharding-sql-test/src/main/resources/sql/sharding/dml/insert.xml b/sharding-sql-test/src/main/resources/sql/sharding/dml/insert.xml index 93ee80f63fedf..68c101ece348f 100644 --- a/sharding-sql-test/src/main/resources/sql/sharding/dml/insert.xml +++ b/sharding-sql-test/src/main/resources/sql/sharding/dml/insert.xml @@ -47,4 +47,5 @@ + From be9922b321474dd8796606ff9191763f635137c7 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Tue, 18 Jun 2019 22:33:20 +0800 Subject: [PATCH 279/283] for #2567, EncryptDefaultOptimizeEngine => DefaultOptimizeEngine --- .../core/optimize/OptimizeEngineFactory.java | 7 +++---- ...faultOptimizeEngine.java => DefaultOptimizeEngine.java} | 7 +++---- 2 files changed, 6 insertions(+), 8 deletions(-) rename sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/{encrypt/EncryptDefaultOptimizeEngine.java => DefaultOptimizeEngine.java} (80%) diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java index d6460583972b2..a15bc2514a921 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java @@ -20,13 +20,12 @@ import lombok.AccessLevel; import lombok.NoArgsConstructor; import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; +import org.apache.shardingsphere.core.optimize.engine.DefaultOptimizeEngine; import org.apache.shardingsphere.core.optimize.engine.OptimizeEngine; -import org.apache.shardingsphere.core.optimize.engine.encrypt.EncryptDefaultOptimizeEngine; import org.apache.shardingsphere.core.optimize.engine.encrypt.EncryptInsertOptimizeEngine; import org.apache.shardingsphere.core.optimize.engine.sharding.ddl.DDLOptimizeEngine; import org.apache.shardingsphere.core.optimize.engine.sharding.dml.QueryOptimizeEngine; import org.apache.shardingsphere.core.optimize.engine.sharding.dml.ShardingInsertOptimizeEngine; -import org.apache.shardingsphere.core.parse.sql.context.condition.Conditions; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.sql.statement.ddl.DDLStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.DMLStatement; @@ -66,7 +65,7 @@ public static OptimizeEngine newInstance(final ShardingRule shardingRule, final return new DDLOptimizeEngine((DDLStatement) sqlStatement, shardingTableMetaData); } // TODO do with DAL - return new QueryOptimizeEngine(sqlStatement, parameters, new Conditions()); + return new DefaultOptimizeEngine(); } /** @@ -81,6 +80,6 @@ public static OptimizeEngine newInstance(final EncryptRule encryptRule, final SQ if (sqlStatement instanceof InsertStatement) { return new EncryptInsertOptimizeEngine(encryptRule, (InsertStatement) sqlStatement, parameters); } - return new EncryptDefaultOptimizeEngine(); + return new DefaultOptimizeEngine(); } } diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/encrypt/EncryptDefaultOptimizeEngine.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/DefaultOptimizeEngine.java similarity index 80% rename from sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/encrypt/EncryptDefaultOptimizeEngine.java rename to sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/DefaultOptimizeEngine.java index 534853288d120..3a55d191bddd7 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/encrypt/EncryptDefaultOptimizeEngine.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/DefaultOptimizeEngine.java @@ -15,17 +15,16 @@ * limitations under the License. */ -package org.apache.shardingsphere.core.optimize.engine.encrypt; +package org.apache.shardingsphere.core.optimize.engine; -import org.apache.shardingsphere.core.optimize.engine.OptimizeEngine; import org.apache.shardingsphere.core.optimize.result.OptimizeResult; /** - * Encrypt default optimize engine. + * Default optimize engine. * * @author panjuan */ -public final class EncryptDefaultOptimizeEngine implements OptimizeEngine { +public final class DefaultOptimizeEngine implements OptimizeEngine { @Override public OptimizeResult optimize() { From ef846aa4359449846e335c437ec0f1f16a223bae Mon Sep 17 00:00:00 2001 From: terrymanu Date: Tue, 18 Jun 2019 23:02:24 +0800 Subject: [PATCH 280/283] for #2567, refactor QueryOptimizeEngine --- .../core/optimize/OptimizeEngineFactory.java | 6 +-- .../engine/DefaultOptimizeEngine.java | 6 ++- .../sharding/dml/QueryOptimizeEngine.java | 20 ++++------ .../sharding/QueryOptimizeEngineTest.java | 37 +++++++++---------- 4 files changed, 33 insertions(+), 36 deletions(-) diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java index a15bc2514a921..08883a8e46031 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java @@ -28,8 +28,8 @@ import org.apache.shardingsphere.core.optimize.engine.sharding.dml.ShardingInsertOptimizeEngine; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.sql.statement.ddl.DDLStatement; -import org.apache.shardingsphere.core.parse.sql.statement.dml.DMLStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.InsertStatement; +import org.apache.shardingsphere.core.parse.sql.statement.dml.SelectStatement; import org.apache.shardingsphere.core.rule.EncryptRule; import org.apache.shardingsphere.core.rule.ShardingRule; @@ -58,8 +58,8 @@ public static OptimizeEngine newInstance(final ShardingRule shardingRule, final if (sqlStatement instanceof InsertStatement) { return new ShardingInsertOptimizeEngine(shardingRule, (InsertStatement) sqlStatement, parameters); } - if (sqlStatement instanceof DMLStatement) { - return new QueryOptimizeEngine(sqlStatement, parameters, ((DMLStatement) sqlStatement).getShardingConditions()); + if (sqlStatement instanceof SelectStatement) { + return new QueryOptimizeEngine((SelectStatement) sqlStatement, parameters); } if (sqlStatement instanceof DDLStatement) { return new DDLOptimizeEngine((DDLStatement) sqlStatement, shardingTableMetaData); diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/DefaultOptimizeEngine.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/DefaultOptimizeEngine.java index 3a55d191bddd7..83dfc0388b266 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/DefaultOptimizeEngine.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/DefaultOptimizeEngine.java @@ -17,8 +17,12 @@ package org.apache.shardingsphere.core.optimize.engine; +import org.apache.shardingsphere.core.optimize.condition.RouteCondition; +import org.apache.shardingsphere.core.optimize.condition.RouteConditions; import org.apache.shardingsphere.core.optimize.result.OptimizeResult; +import java.util.Collections; + /** * Default optimize engine. * @@ -28,6 +32,6 @@ public final class DefaultOptimizeEngine implements OptimizeEngine { @Override public OptimizeResult optimize() { - return new OptimizeResult(null, null); + return new OptimizeResult(new RouteConditions(Collections.emptyList()), null); } } diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/QueryOptimizeEngine.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/QueryOptimizeEngine.java index dc7e298286d02..1c3e042d1e4e9 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/QueryOptimizeEngine.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/QueryOptimizeEngine.java @@ -31,9 +31,7 @@ import org.apache.shardingsphere.core.parse.sql.context.condition.AndCondition; import org.apache.shardingsphere.core.parse.sql.context.condition.Column; import org.apache.shardingsphere.core.parse.sql.context.condition.Condition; -import org.apache.shardingsphere.core.parse.sql.context.condition.Conditions; import org.apache.shardingsphere.core.parse.sql.segment.dml.pagination.PaginationValueSegment; -import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.SelectStatement; import org.apache.shardingsphere.core.strategy.route.value.BetweenRouteValue; import org.apache.shardingsphere.core.strategy.route.value.ListRouteValue; @@ -53,16 +51,14 @@ @RequiredArgsConstructor public final class QueryOptimizeEngine implements OptimizeEngine { - private final SQLStatement sqlStatement; + private final SelectStatement selectStatement; private final List parameters; - private final Conditions conditions; - @Override public OptimizeResult optimize() { - List routeConditions = new ArrayList<>(conditions.getOrConditions().size()); - for (AndCondition each : conditions.getOrConditions()) { + List routeConditions = new ArrayList<>(selectStatement.getShardingConditions().getOrConditions().size()); + for (AndCondition each : selectStatement.getShardingConditions().getOrConditions()) { routeConditions.add(optimize(each.getConditionsMap())); } OptimizeResult result = new OptimizeResult(new RouteConditions(routeConditions)); @@ -138,12 +134,10 @@ private List> optimize(final List> listValue, final } private Optional getPagination() { - if (sqlStatement instanceof SelectStatement) { - PaginationValueSegment offsetSegment = ((SelectStatement) sqlStatement).getOffset(); - PaginationValueSegment rowCountSegment = ((SelectStatement) sqlStatement).getRowCount(); - if (null != offsetSegment || null != rowCountSegment) { - return Optional.of(new Pagination(offsetSegment, rowCountSegment, parameters)); - } + PaginationValueSegment offsetSegment = selectStatement.getOffset(); + PaginationValueSegment rowCountSegment = selectStatement.getRowCount(); + if (null != offsetSegment || null != rowCountSegment) { + return Optional.of(new Pagination(offsetSegment, rowCountSegment, parameters)); } return Optional.absent(); } diff --git a/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/QueryOptimizeEngineTest.java b/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/QueryOptimizeEngineTest.java index 59eea32174a2c..46f71b7db9ef0 100644 --- a/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/QueryOptimizeEngineTest.java +++ b/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/QueryOptimizeEngineTest.java @@ -24,7 +24,6 @@ import org.apache.shardingsphere.core.parse.sql.context.condition.AndCondition; import org.apache.shardingsphere.core.parse.sql.context.condition.Column; import org.apache.shardingsphere.core.parse.sql.context.condition.Condition; -import org.apache.shardingsphere.core.parse.sql.context.condition.Conditions; import org.apache.shardingsphere.core.parse.sql.segment.dml.expr.ExpressionSegment; import org.apache.shardingsphere.core.parse.sql.segment.dml.expr.simple.LiteralExpressionSegment; import org.apache.shardingsphere.core.parse.sql.statement.dml.SelectStatement; @@ -52,9 +51,9 @@ public void assertOptimizeAlwaysFalseListConditions() { AndCondition andCondition = new AndCondition(); andCondition.getConditions().add(condition1); andCondition.getConditions().add(condition2); - Conditions conditions = new Conditions(); - conditions.getOrConditions().add(andCondition); - RouteConditions routeConditions = new QueryOptimizeEngine(new SelectStatement(), Collections.emptyList(), conditions).optimize().getRouteConditions(); + SelectStatement selectStatement = new SelectStatement(); + selectStatement.getShardingConditions().getOrConditions().add(andCondition); + RouteConditions routeConditions = new QueryOptimizeEngine(selectStatement, Collections.emptyList()).optimize().getRouteConditions(); assertTrue(routeConditions.isAlwaysFalse()); } @@ -65,9 +64,9 @@ public void assertOptimizeAlwaysFalseRangeConditions() { AndCondition andCondition = new AndCondition(); andCondition.getConditions().add(condition1); andCondition.getConditions().add(condition2); - Conditions conditions = new Conditions(); - conditions.getOrConditions().add(andCondition); - RouteConditions routeConditions = new QueryOptimizeEngine(new SelectStatement(), Collections.emptyList(), conditions).optimize().getRouteConditions(); + SelectStatement selectStatement = new SelectStatement(); + selectStatement.getShardingConditions().getOrConditions().add(andCondition); + RouteConditions routeConditions = new QueryOptimizeEngine(selectStatement, Collections.emptyList()).optimize().getRouteConditions(); assertTrue(routeConditions.isAlwaysFalse()); } @@ -78,9 +77,9 @@ public void assertOptimizeAlwaysFalseListConditionsAndRangeConditions() { AndCondition andCondition = new AndCondition(); andCondition.getConditions().add(condition1); andCondition.getConditions().add(condition2); - Conditions conditions = new Conditions(); - conditions.getOrConditions().add(andCondition); - RouteConditions routeConditions = new QueryOptimizeEngine(new SelectStatement(), Collections.emptyList(), conditions).optimize().getRouteConditions(); + SelectStatement selectStatement = new SelectStatement(); + selectStatement.getShardingConditions().getOrConditions().add(andCondition); + RouteConditions routeConditions = new QueryOptimizeEngine(selectStatement, Collections.emptyList()).optimize().getRouteConditions(); assertTrue(routeConditions.isAlwaysFalse()); } @@ -92,9 +91,9 @@ public void assertOptimizeListConditions() { AndCondition andCondition = new AndCondition(); andCondition.getConditions().add(condition1); andCondition.getConditions().add(condition2); - Conditions conditions = new Conditions(); - conditions.getOrConditions().add(andCondition); - RouteConditions routeConditions = new QueryOptimizeEngine(new SelectStatement(), Collections.emptyList(), conditions).optimize().getRouteConditions(); + SelectStatement selectStatement = new SelectStatement(); + selectStatement.getShardingConditions().getOrConditions().add(andCondition); + RouteConditions routeConditions = new QueryOptimizeEngine(selectStatement, Collections.emptyList()).optimize().getRouteConditions(); assertFalse(routeConditions.isAlwaysFalse()); RouteCondition routeCondition = routeConditions.getRouteConditions().get(0); RouteValue shardingValue = routeCondition.getRouteValues().get(0); @@ -111,9 +110,9 @@ public void assertOptimizeRangeConditions() { AndCondition andCondition = new AndCondition(); andCondition.getConditions().add(condition1); andCondition.getConditions().add(condition2); - Conditions parseCondition = new Conditions(); - parseCondition.getOrConditions().add(andCondition); - RouteConditions routeConditions = new QueryOptimizeEngine(new SelectStatement(), Collections.emptyList(), parseCondition).optimize().getRouteConditions(); + SelectStatement selectStatement = new SelectStatement(); + selectStatement.getShardingConditions().getOrConditions().add(andCondition); + RouteConditions routeConditions = new QueryOptimizeEngine(selectStatement, Collections.emptyList()).optimize().getRouteConditions(); assertFalse(routeConditions.isAlwaysFalse()); RouteCondition routeCondition = routeConditions.getRouteConditions().get(0); RouteValue shardingValue = routeCondition.getRouteValues().get(0); @@ -130,9 +129,9 @@ public void assertOptimizeListConditionsAndRangeConditions() { AndCondition andCondition = new AndCondition(); andCondition.getConditions().add(condition1); andCondition.getConditions().add(condition2); - Conditions parseCondition = new Conditions(); - parseCondition.getOrConditions().add(andCondition); - RouteConditions routeConditions = new QueryOptimizeEngine(new SelectStatement(), Collections.emptyList(), parseCondition).optimize().getRouteConditions(); + SelectStatement selectStatement = new SelectStatement(); + selectStatement.getShardingConditions().getOrConditions().add(andCondition); + RouteConditions routeConditions = new QueryOptimizeEngine(selectStatement, Collections.emptyList()).optimize().getRouteConditions(); assertFalse(routeConditions.isAlwaysFalse()); RouteCondition routeCondition = routeConditions.getRouteConditions().get(0); RouteValue shardingValue = routeCondition.getRouteValues().get(0); From 029fca63a0679e0070a0ba2f11fd0ed5ff378048 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Wed, 19 Jun 2019 08:06:00 +0800 Subject: [PATCH 281/283] for #2567, QueryOptimizeEngine => ShardingSelectOptimizeEngine --- .../core/optimize/OptimizeEngineFactory.java | 4 ++-- ...ne.java => ShardingSelectOptimizeEngine.java} | 2 +- ...ava => ShardingSelectOptimizeEngineTest.java} | 16 ++++++++-------- 3 files changed, 11 insertions(+), 11 deletions(-) rename sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/{QueryOptimizeEngine.java => ShardingSelectOptimizeEngine.java} (98%) rename sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/{QueryOptimizeEngineTest.java => ShardingSelectOptimizeEngineTest.java} (89%) diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java index 08883a8e46031..cda38e3f2e769 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/OptimizeEngineFactory.java @@ -24,8 +24,8 @@ import org.apache.shardingsphere.core.optimize.engine.OptimizeEngine; import org.apache.shardingsphere.core.optimize.engine.encrypt.EncryptInsertOptimizeEngine; import org.apache.shardingsphere.core.optimize.engine.sharding.ddl.DDLOptimizeEngine; -import org.apache.shardingsphere.core.optimize.engine.sharding.dml.QueryOptimizeEngine; import org.apache.shardingsphere.core.optimize.engine.sharding.dml.ShardingInsertOptimizeEngine; +import org.apache.shardingsphere.core.optimize.engine.sharding.dml.ShardingSelectOptimizeEngine; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.sql.statement.ddl.DDLStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.InsertStatement; @@ -59,7 +59,7 @@ public static OptimizeEngine newInstance(final ShardingRule shardingRule, final return new ShardingInsertOptimizeEngine(shardingRule, (InsertStatement) sqlStatement, parameters); } if (sqlStatement instanceof SelectStatement) { - return new QueryOptimizeEngine((SelectStatement) sqlStatement, parameters); + return new ShardingSelectOptimizeEngine((SelectStatement) sqlStatement, parameters); } if (sqlStatement instanceof DDLStatement) { return new DDLOptimizeEngine((DDLStatement) sqlStatement, shardingTableMetaData); diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/QueryOptimizeEngine.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/ShardingSelectOptimizeEngine.java similarity index 98% rename from sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/QueryOptimizeEngine.java rename to sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/ShardingSelectOptimizeEngine.java index 1c3e042d1e4e9..b8f150503bf94 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/QueryOptimizeEngine.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/ShardingSelectOptimizeEngine.java @@ -49,7 +49,7 @@ * @author zhangliang */ @RequiredArgsConstructor -public final class QueryOptimizeEngine implements OptimizeEngine { +public final class ShardingSelectOptimizeEngine implements OptimizeEngine { private final SelectStatement selectStatement; diff --git a/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/QueryOptimizeEngineTest.java b/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/ShardingSelectOptimizeEngineTest.java similarity index 89% rename from sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/QueryOptimizeEngineTest.java rename to sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/ShardingSelectOptimizeEngineTest.java index 46f71b7db9ef0..20ec5c4a84d32 100644 --- a/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/QueryOptimizeEngineTest.java +++ b/sharding-core/sharding-core-optimize/src/test/java/org/apache/shardingsphere/core/optimize/engine/sharding/ShardingSelectOptimizeEngineTest.java @@ -20,7 +20,7 @@ import com.google.common.collect.Range; import org.apache.shardingsphere.core.optimize.condition.RouteCondition; import org.apache.shardingsphere.core.optimize.condition.RouteConditions; -import org.apache.shardingsphere.core.optimize.engine.sharding.dml.QueryOptimizeEngine; +import org.apache.shardingsphere.core.optimize.engine.sharding.dml.ShardingSelectOptimizeEngine; import org.apache.shardingsphere.core.parse.sql.context.condition.AndCondition; import org.apache.shardingsphere.core.parse.sql.context.condition.Column; import org.apache.shardingsphere.core.parse.sql.context.condition.Condition; @@ -42,7 +42,7 @@ import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; -public final class QueryOptimizeEngineTest { +public final class ShardingSelectOptimizeEngineTest { @Test public void assertOptimizeAlwaysFalseListConditions() { @@ -53,7 +53,7 @@ public void assertOptimizeAlwaysFalseListConditions() { andCondition.getConditions().add(condition2); SelectStatement selectStatement = new SelectStatement(); selectStatement.getShardingConditions().getOrConditions().add(andCondition); - RouteConditions routeConditions = new QueryOptimizeEngine(selectStatement, Collections.emptyList()).optimize().getRouteConditions(); + RouteConditions routeConditions = new ShardingSelectOptimizeEngine(selectStatement, Collections.emptyList()).optimize().getRouteConditions(); assertTrue(routeConditions.isAlwaysFalse()); } @@ -66,7 +66,7 @@ public void assertOptimizeAlwaysFalseRangeConditions() { andCondition.getConditions().add(condition2); SelectStatement selectStatement = new SelectStatement(); selectStatement.getShardingConditions().getOrConditions().add(andCondition); - RouteConditions routeConditions = new QueryOptimizeEngine(selectStatement, Collections.emptyList()).optimize().getRouteConditions(); + RouteConditions routeConditions = new ShardingSelectOptimizeEngine(selectStatement, Collections.emptyList()).optimize().getRouteConditions(); assertTrue(routeConditions.isAlwaysFalse()); } @@ -79,7 +79,7 @@ public void assertOptimizeAlwaysFalseListConditionsAndRangeConditions() { andCondition.getConditions().add(condition2); SelectStatement selectStatement = new SelectStatement(); selectStatement.getShardingConditions().getOrConditions().add(andCondition); - RouteConditions routeConditions = new QueryOptimizeEngine(selectStatement, Collections.emptyList()).optimize().getRouteConditions(); + RouteConditions routeConditions = new ShardingSelectOptimizeEngine(selectStatement, Collections.emptyList()).optimize().getRouteConditions(); assertTrue(routeConditions.isAlwaysFalse()); } @@ -93,7 +93,7 @@ public void assertOptimizeListConditions() { andCondition.getConditions().add(condition2); SelectStatement selectStatement = new SelectStatement(); selectStatement.getShardingConditions().getOrConditions().add(andCondition); - RouteConditions routeConditions = new QueryOptimizeEngine(selectStatement, Collections.emptyList()).optimize().getRouteConditions(); + RouteConditions routeConditions = new ShardingSelectOptimizeEngine(selectStatement, Collections.emptyList()).optimize().getRouteConditions(); assertFalse(routeConditions.isAlwaysFalse()); RouteCondition routeCondition = routeConditions.getRouteConditions().get(0); RouteValue shardingValue = routeCondition.getRouteValues().get(0); @@ -112,7 +112,7 @@ public void assertOptimizeRangeConditions() { andCondition.getConditions().add(condition2); SelectStatement selectStatement = new SelectStatement(); selectStatement.getShardingConditions().getOrConditions().add(andCondition); - RouteConditions routeConditions = new QueryOptimizeEngine(selectStatement, Collections.emptyList()).optimize().getRouteConditions(); + RouteConditions routeConditions = new ShardingSelectOptimizeEngine(selectStatement, Collections.emptyList()).optimize().getRouteConditions(); assertFalse(routeConditions.isAlwaysFalse()); RouteCondition routeCondition = routeConditions.getRouteConditions().get(0); RouteValue shardingValue = routeCondition.getRouteValues().get(0); @@ -131,7 +131,7 @@ public void assertOptimizeListConditionsAndRangeConditions() { andCondition.getConditions().add(condition2); SelectStatement selectStatement = new SelectStatement(); selectStatement.getShardingConditions().getOrConditions().add(andCondition); - RouteConditions routeConditions = new QueryOptimizeEngine(selectStatement, Collections.emptyList()).optimize().getRouteConditions(); + RouteConditions routeConditions = new ShardingSelectOptimizeEngine(selectStatement, Collections.emptyList()).optimize().getRouteConditions(); assertFalse(routeConditions.isAlwaysFalse()); RouteCondition routeCondition = routeConditions.getRouteConditions().get(0); RouteValue shardingValue = routeCondition.getRouteValues().get(0); From 5065e5cd0470c779c17ff4cd3c5e9040a409482c Mon Sep 17 00:00:00 2001 From: terrymanu Date: Wed, 19 Jun 2019 08:14:20 +0800 Subject: [PATCH 282/283] for #2567, refactor ShardingSelectOptimizeEngine.setPagination() --- .../dml/ShardingSelectOptimizeEngine.java | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/ShardingSelectOptimizeEngine.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/ShardingSelectOptimizeEngine.java index b8f150503bf94..76ba1b2c86658 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/ShardingSelectOptimizeEngine.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/ShardingSelectOptimizeEngine.java @@ -17,7 +17,6 @@ package org.apache.shardingsphere.core.optimize.engine.sharding.dml; -import com.google.common.base.Optional; import com.google.common.collect.BoundType; import com.google.common.collect.Range; import lombok.RequiredArgsConstructor; @@ -31,7 +30,6 @@ import org.apache.shardingsphere.core.parse.sql.context.condition.AndCondition; import org.apache.shardingsphere.core.parse.sql.context.condition.Column; import org.apache.shardingsphere.core.parse.sql.context.condition.Condition; -import org.apache.shardingsphere.core.parse.sql.segment.dml.pagination.PaginationValueSegment; import org.apache.shardingsphere.core.parse.sql.statement.dml.SelectStatement; import org.apache.shardingsphere.core.strategy.route.value.BetweenRouteValue; import org.apache.shardingsphere.core.strategy.route.value.ListRouteValue; @@ -44,7 +42,7 @@ import java.util.Map.Entry; /** - * Query optimize engine. + * Select optimize engine for sharding. * * @author zhangliang */ @@ -62,7 +60,7 @@ public OptimizeResult optimize() { routeConditions.add(optimize(each.getConditionsMap())); } OptimizeResult result = new OptimizeResult(new RouteConditions(routeConditions)); - result.setPagination(getPagination().orNull()); + setPagination(result); return result; } @@ -133,12 +131,9 @@ private List> optimize(final List> listValue, final return result; } - private Optional getPagination() { - PaginationValueSegment offsetSegment = selectStatement.getOffset(); - PaginationValueSegment rowCountSegment = selectStatement.getRowCount(); - if (null != offsetSegment || null != rowCountSegment) { - return Optional.of(new Pagination(offsetSegment, rowCountSegment, parameters)); + private void setPagination(final OptimizeResult result) { + if (null != selectStatement.getOffset() || null != selectStatement.getRowCount()) { + result.setPagination(new Pagination(selectStatement.getOffset(), selectStatement.getRowCount(), parameters)); } - return Optional.absent(); } } From ba1ed1d16d0e5f52ac6043957e823b1dd14d5d8d Mon Sep 17 00:00:00 2001 From: terrymanu Date: Wed, 19 Jun 2019 08:18:57 +0800 Subject: [PATCH 283/283] for #2567, AlwaysFalseShardingValue => AlwaysFalseRouteValue --- ...ShardingValue.java => AlwaysFalseRouteValue.java} | 4 ++-- .../sharding/dml/ShardingSelectOptimizeEngine.java | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) rename sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/{AlwaysFalseShardingValue.java => AlwaysFalseRouteValue.java} (91%) diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/AlwaysFalseShardingValue.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/AlwaysFalseRouteValue.java similarity index 91% rename from sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/AlwaysFalseShardingValue.java rename to sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/AlwaysFalseRouteValue.java index 89d9e034b3463..d267668c56e5a 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/AlwaysFalseShardingValue.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/AlwaysFalseRouteValue.java @@ -20,11 +20,11 @@ import org.apache.shardingsphere.core.strategy.route.value.RouteValue; /** - * Always false sharding value. + * Always false route value. * * @author zhangliang */ -public final class AlwaysFalseShardingValue implements RouteValue { +public final class AlwaysFalseRouteValue implements RouteValue { @Override public String getColumnName() { diff --git a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/ShardingSelectOptimizeEngine.java b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/ShardingSelectOptimizeEngine.java index 76ba1b2c86658..70537afeb63b5 100644 --- a/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/ShardingSelectOptimizeEngine.java +++ b/sharding-core/sharding-core-optimize/src/main/java/org/apache/shardingsphere/core/optimize/engine/sharding/dml/ShardingSelectOptimizeEngine.java @@ -68,11 +68,11 @@ private RouteCondition optimize(final Map> conditionsMap RouteCondition result = new RouteCondition(); for (Entry> entry : conditionsMap.entrySet()) { try { - RouteValue shardingValue = optimize(entry.getKey(), entry.getValue()); - if (shardingValue instanceof AlwaysFalseShardingValue) { + RouteValue routeValue = optimize(entry.getKey(), entry.getValue()); + if (routeValue instanceof AlwaysFalseRouteValue) { return new AlwaysFalseRouteCondition(); } - result.getRouteValues().add(shardingValue); + result.getRouteValues().add(routeValue); } catch (final ClassCastException ex) { throw new ShardingException("Found different types for sharding value `%s`.", entry.getKey()); } @@ -88,14 +88,14 @@ private RouteValue optimize(final Column column, final List condition if (ShardingOperator.EQUAL == each.getOperator() || ShardingOperator.IN == each.getOperator()) { listValue = optimize(conditionValues, listValue); if (listValue.isEmpty()) { - return new AlwaysFalseShardingValue(); + return new AlwaysFalseRouteValue(); } } if (ShardingOperator.BETWEEN == each.getOperator()) { try { rangeValue = optimize(Range.range(conditionValues.get(0), BoundType.CLOSED, conditionValues.get(1), BoundType.CLOSED), rangeValue); } catch (final IllegalArgumentException ex) { - return new AlwaysFalseShardingValue(); + return new AlwaysFalseRouteValue(); } } } @@ -106,7 +106,7 @@ private RouteValue optimize(final Column column, final List condition return new ListRouteValue<>(column.getName(), column.getTableName(), listValue); } listValue = optimize(listValue, rangeValue); - return listValue.isEmpty() ? new AlwaysFalseShardingValue() : new ListRouteValue<>(column.getName(), column.getTableName(), listValue); + return listValue.isEmpty() ? new AlwaysFalseRouteValue() : new ListRouteValue<>(column.getName(), column.getTableName(), listValue); } private List> optimize(final List> value1, final List> value2) {