You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by su...@apache.org on 2023/04/28 08:24:29 UTC
[shardingsphere] branch master updated: Refactor kernel logic for pmd suggestion (#25393)
This is an automated email from the ASF dual-hosted git repository.
sunnianjun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new b318409a59e Refactor kernel logic for pmd suggestion (#25393)
b318409a59e is described below
commit b318409a59e9e1105c94c064013004af44f824c5
Author: Zhengqiang Duan <du...@apache.org>
AuthorDate: Fri Apr 28 16:24:20 2023 +0800
Refactor kernel logic for pmd suggestion (#25393)
* Remove useless ModeConfigNotFoundException
* Refactor logic for pmd suggestion
* revert OriginalSQLFederationExecutor
---
...OnDuplicateKeyUpdateValueParameterRewriter.java | 44 +++++++++++--------
.../EncryptPredicateColumnTokenGenerator.java | 50 +++++++++++-----------
.../generator/impl/ProjectionsTokenGenerator.java | 6 +--
.../token/ProjectionsTokenGeneratorTest.java | 4 +-
.../select/projection/engine/ProjectionEngine.java | 2 +-
.../select/projection/impl/DerivedProjection.java | 4 +-
.../schema/loader/common/ColumnMetaDataLoader.java | 10 ++---
.../dialect/SQLServerSchemaMetaDataLoader.java | 6 +--
.../driver/spi/ClasspathDriverURLProvider.java | 2 +-
.../exception/job/ModeConfigNotFoundException.java | 33 --------------
.../route/engine/SingleStandardRouteEngine.java | 11 ++---
11 files changed, 74 insertions(+), 98 deletions(-)
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptInsertOnDuplicateKeyUpdateValueParameterRewriter.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptInsertOnDuplicateKeyUpdateValueParameterRewriter.java
index bf9211e5a16..d1bdba33996 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptInsertOnDuplicateKeyUpdateValueParameterRewriter.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptInsertOnDuplicateKeyUpdateValueParameterRewriter.java
@@ -19,13 +19,13 @@ package org.apache.shardingsphere.encrypt.rewrite.parameter.rewriter;
import com.google.common.base.Preconditions;
import lombok.Setter;
-import org.apache.shardingsphere.encrypt.spi.LikeEncryptAlgorithm;
-import org.apache.shardingsphere.encrypt.spi.EncryptAlgorithm;
+import org.apache.shardingsphere.encrypt.api.context.EncryptContext;
import org.apache.shardingsphere.encrypt.context.EncryptContextBuilder;
import org.apache.shardingsphere.encrypt.rewrite.aware.DatabaseNameAware;
import org.apache.shardingsphere.encrypt.rewrite.aware.EncryptRuleAware;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
-import org.apache.shardingsphere.encrypt.api.context.EncryptContext;
+import org.apache.shardingsphere.encrypt.spi.EncryptAlgorithm;
+import org.apache.shardingsphere.encrypt.spi.LikeEncryptAlgorithm;
import org.apache.shardingsphere.infra.binder.segment.insert.values.OnDuplicateUpdateContext;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.binder.statement.dml.InsertStatementContext;
@@ -77,22 +77,7 @@ public final class EncryptInsertOnDuplicateKeyUpdateValueParameterRewriter imple
EncryptContext encryptContext = EncryptContextBuilder.build(databaseName, schemaName, tableName, encryptLogicColumnName);
Object cipherColumnValue = encryptor.get().encrypt(plainColumnValue, encryptContext);
groupedParamBuilder.getGenericParameterBuilder().addReplacedParameters(index, cipherColumnValue);
- Collection<Object> addedParams = new LinkedList<>();
- Optional<EncryptAlgorithm> assistedQueryEncryptor = encryptRule.findAssistedQueryEncryptor(tableName, encryptLogicColumnName);
- if (assistedQueryEncryptor.isPresent()) {
- Optional<String> assistedColumnName = encryptRule.findAssistedQueryColumn(tableName, encryptLogicColumnName);
- Preconditions.checkArgument(assistedColumnName.isPresent(), "Can not find assisted query Column Name");
- addedParams.add(assistedQueryEncryptor.get().encrypt(plainColumnValue, encryptContext));
- }
- Optional<LikeEncryptAlgorithm> likeQueryEncryptor = encryptRule.findLikeQueryEncryptor(tableName, encryptLogicColumnName);
- if (likeQueryEncryptor.isPresent()) {
- Optional<String> likeColumnName = encryptRule.findLikeQueryColumn(tableName, encryptLogicColumnName);
- Preconditions.checkArgument(likeColumnName.isPresent(), "Can not find assisted query Column Name");
- addedParams.add(likeQueryEncryptor.get().encrypt(plainColumnValue, encryptContext));
- }
- if (encryptRule.findPlainColumn(tableName, encryptLogicColumnName).isPresent()) {
- addedParams.add(plainColumnValue);
- }
+ Collection<Object> addedParams = buildAddedParams(tableName, encryptLogicColumnName, plainColumnValue, encryptContext);
if (!addedParams.isEmpty()) {
if (!groupedParamBuilder.getGenericParameterBuilder().getAddedIndexAndParameters().containsKey(index)) {
groupedParamBuilder.getGenericParameterBuilder().getAddedIndexAndParameters().put(index, new LinkedList<>());
@@ -101,4 +86,25 @@ public final class EncryptInsertOnDuplicateKeyUpdateValueParameterRewriter imple
}
}
}
+
+ @SuppressWarnings({"rawtypes", "unchecked"})
+ private Collection<Object> buildAddedParams(final String tableName, final String logicColumnName, final Object plainColumnValue, final EncryptContext encryptContext) {
+ Collection<Object> result = new LinkedList<>();
+ Optional<EncryptAlgorithm> assistedQueryEncryptor = encryptRule.findAssistedQueryEncryptor(tableName, logicColumnName);
+ if (assistedQueryEncryptor.isPresent()) {
+ Optional<String> assistedColumnName = encryptRule.findAssistedQueryColumn(tableName, logicColumnName);
+ Preconditions.checkArgument(assistedColumnName.isPresent(), "Can not find assisted query Column Name");
+ result.add(assistedQueryEncryptor.get().encrypt(plainColumnValue, encryptContext));
+ }
+ Optional<LikeEncryptAlgorithm> likeQueryEncryptor = encryptRule.findLikeQueryEncryptor(tableName, logicColumnName);
+ if (likeQueryEncryptor.isPresent()) {
+ Optional<String> likeColumnName = encryptRule.findLikeQueryColumn(tableName, logicColumnName);
+ Preconditions.checkArgument(likeColumnName.isPresent(), "Can not find assisted query Column Name");
+ result.add(likeQueryEncryptor.get().encrypt(plainColumnValue, encryptContext));
+ }
+ if (encryptRule.findPlainColumn(tableName, logicColumnName).isPresent()) {
+ result.add(plainColumnValue);
+ }
+ return result;
+ }
}
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptPredicateColumnTokenGenerator.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptPredicateColumnTokenGenerator.java
index adfa3071e2b..4592b6461f3 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptPredicateColumnTokenGenerator.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptPredicateColumnTokenGenerator.java
@@ -19,9 +19,9 @@ package org.apache.shardingsphere.encrypt.rewrite.token.generator;
import lombok.Setter;
import org.apache.shardingsphere.encrypt.exception.syntax.UnsupportedEncryptSQLException;
+import org.apache.shardingsphere.encrypt.rewrite.aware.EncryptRuleAware;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import org.apache.shardingsphere.encrypt.rule.EncryptTable;
-import org.apache.shardingsphere.encrypt.rewrite.aware.EncryptRuleAware;
import org.apache.shardingsphere.infra.binder.segment.select.projection.impl.ColumnProjection;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.binder.type.WhereAvailable;
@@ -83,32 +83,34 @@ public final class EncryptPredicateColumnTokenGenerator implements CollectionSQL
if (!encryptTable.isPresent() || !encryptTable.get().findEncryptColumn(each.getIdentifier().getValue()).isPresent()) {
continue;
}
- int startIndex = each.getOwner().isPresent() ? each.getOwner().get().getStopIndex() + 2 : each.getStartIndex();
- int stopIndex = each.getStopIndex();
- boolean queryWithCipherColumn = encryptRule.isQueryWithCipherColumn(tableName, each.getIdentifier().getValue());
- if (!queryWithCipherColumn) {
- Optional<String> plainColumn = encryptTable.get().findPlainColumn(each.getIdentifier().getValue());
- if (plainColumn.isPresent()) {
- result.add(new SubstitutableColumnNameToken(startIndex, stopIndex, createColumnProjections(plainColumn.get())));
- continue;
- }
+ result.add(buildSubstitutableColumnNameToken(each, tableName, whereSegments, encryptTable.get()));
+ }
+ return result;
+ }
+
+ private SubstitutableColumnNameToken buildSubstitutableColumnNameToken(final ColumnSegment columnSegment, final String tableName, final Collection<WhereSegment> whereSegments,
+ final EncryptTable encryptTable) {
+ int startIndex = columnSegment.getOwner().isPresent() ? columnSegment.getOwner().get().getStopIndex() + 2 : columnSegment.getStartIndex();
+ int stopIndex = columnSegment.getStopIndex();
+ String logicColumn = columnSegment.getIdentifier().getValue();
+ if (!encryptRule.isQueryWithCipherColumn(tableName, logicColumn)) {
+ Optional<String> plainColumn = encryptTable.findPlainColumn(logicColumn);
+ if (plainColumn.isPresent()) {
+ return new SubstitutableColumnNameToken(startIndex, stopIndex, createColumnProjections(plainColumn.get()));
}
- // TODO remove foreach loop to improve performance
- if (isColumnSegmentIncludedInLikeExpression(whereSegments, each)) {
- Optional<String> likeQueryColumn = encryptTable.get().findLikeQueryColumn(each.getIdentifier().getValue());
- if (likeQueryColumn.isPresent()) {
- result.add(new SubstitutableColumnNameToken(startIndex, stopIndex, createColumnProjections(likeQueryColumn.get())));
- continue;
- } else {
- throw new UnsupportedEncryptSQLException("LIKE");
- }
+ }
+ // TODO remove foreach loop to improve performance
+ if (isColumnSegmentIncludedInLikeExpression(whereSegments, columnSegment)) {
+ Optional<String> likeQueryColumn = encryptTable.findLikeQueryColumn(logicColumn);
+ if (likeQueryColumn.isPresent()) {
+ return new SubstitutableColumnNameToken(startIndex, stopIndex, createColumnProjections(likeQueryColumn.get()));
+ } else {
+ throw new UnsupportedEncryptSQLException("LIKE");
}
- Optional<String> assistedQueryColumn = encryptTable.get().findAssistedQueryColumn(each.getIdentifier().getValue());
- SubstitutableColumnNameToken encryptColumnNameToken = assistedQueryColumn.map(columnName -> new SubstitutableColumnNameToken(startIndex, stopIndex, createColumnProjections(columnName)))
- .orElseGet(() -> new SubstitutableColumnNameToken(startIndex, stopIndex, createColumnProjections(encryptTable.get().getCipherColumn(each.getIdentifier().getValue()))));
- result.add(encryptColumnNameToken);
}
- return result;
+ Collection<ColumnProjection> columnProjections =
+ encryptTable.findAssistedQueryColumn(logicColumn).map(this::createColumnProjections).orElseGet(() -> createColumnProjections(encryptTable.getCipherColumn(logicColumn)));
+ return new SubstitutableColumnNameToken(startIndex, stopIndex, columnProjections);
}
private boolean isColumnSegmentIncludedInLikeExpression(final Collection<WhereSegment> whereSegments, final ColumnSegment targetColumnSegment) {
diff --git a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/generator/impl/ProjectionsTokenGenerator.java b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/generator/impl/ProjectionsTokenGenerator.java
index f790de1937a..918fc153650 100644
--- a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/generator/impl/ProjectionsTokenGenerator.java
+++ b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/generator/impl/ProjectionsTokenGenerator.java
@@ -85,7 +85,7 @@ public final class ProjectionsTokenGenerator implements OptionalSQLTokenGenerato
for (Projection each : selectStatementContext.getProjectionsContext().getProjections()) {
if (each instanceof AggregationProjection && !((AggregationProjection) each).getDerivedAggregationProjections().isEmpty()) {
result.addAll(((AggregationProjection) each).getDerivedAggregationProjections().stream().map(this::getDerivedProjectionText).collect(Collectors.toList()));
- } else if (each instanceof DerivedProjection && ((DerivedProjection) each).getDerivedProjection() instanceof ColumnOrderByItemSegment) {
+ } else if (each instanceof DerivedProjection && ((DerivedProjection) each).getDerivedProjectionSegment() instanceof ColumnOrderByItemSegment) {
TableExtractor tableExtractor = new TableExtractor();
tableExtractor.extractTablesFromSelect(selectStatementContext.getSqlStatement());
result.add(getDerivedProjectionTextFromColumnOrderByItemSegment((DerivedProjection) each, tableExtractor, routeUnit, selectStatementContext.getDatabaseType()));
@@ -107,8 +107,8 @@ public final class ProjectionsTokenGenerator implements OptionalSQLTokenGenerato
private String getDerivedProjectionTextFromColumnOrderByItemSegment(final DerivedProjection projection, final TableExtractor tableExtractor, final RouteUnit routeUnit,
final DatabaseType databaseType) {
Preconditions.checkState(projection.getAlias().isPresent());
- Preconditions.checkState(projection.getDerivedProjection() instanceof ColumnOrderByItemSegment);
- ColumnOrderByItemSegment columnOrderByItemSegment = (ColumnOrderByItemSegment) projection.getDerivedProjection();
+ Preconditions.checkState(projection.getDerivedProjectionSegment() instanceof ColumnOrderByItemSegment);
+ ColumnOrderByItemSegment columnOrderByItemSegment = (ColumnOrderByItemSegment) projection.getDerivedProjectionSegment();
ColumnOrderByItemSegment newColumnOrderByItem = generateNewColumnOrderByItem(columnOrderByItemSegment, routeUnit, tableExtractor, databaseType);
return newColumnOrderByItem.getText() + " AS " + projection.getAlias().get() + " ";
}
diff --git a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rewrite/token/ProjectionsTokenGeneratorTest.java b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rewrite/token/ProjectionsTokenGeneratorTest.java
index a9fa8dc86ff..38c52ea51b6 100644
--- a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rewrite/token/ProjectionsTokenGeneratorTest.java
+++ b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rewrite/token/ProjectionsTokenGeneratorTest.java
@@ -143,13 +143,13 @@ class ProjectionsTokenGeneratorTest {
when(oldColumnOrderByItemSegment.getColumn().getIdentifier()).thenReturn(mock(IdentifierValue.class));
DerivedProjection result = mock(DerivedProjection.class);
when(result.getAlias()).thenReturn(Optional.of(TEST_DERIVED_PROJECTION_ALIAS));
- when(result.getDerivedProjection()).thenReturn(oldColumnOrderByItemSegment);
+ when(result.getDerivedProjectionSegment()).thenReturn(oldColumnOrderByItemSegment);
return result;
}
private DerivedProjection getOtherDerivedProjection() {
DerivedProjection result = mock(DerivedProjection.class);
- when(result.getDerivedProjection()).thenReturn(null);
+ when(result.getDerivedProjectionSegment()).thenReturn(null);
when(result.getAlias()).thenReturn(Optional.of(TEST_OTHER_DERIVED_PROJECTION_ALIAS));
when(result.getExpression()).thenReturn(TEST_OTHER_DERIVED_PROJECTION_EXPRESSION);
return result;
diff --git a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/engine/ProjectionEngine.java b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/engine/ProjectionEngine.java
index 42a3486691f..aba2fcddbd3 100644
--- a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/engine/ProjectionEngine.java
+++ b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/engine/ProjectionEngine.java
@@ -297,7 +297,7 @@ public final class ProjectionEngine {
Collection<Projection> result = new LinkedList<>();
for (String each : usingColumnNames) {
for (Projection projection : actualProjections) {
- if (each.equals(projection.getColumnLabel().toLowerCase())) {
+ if (each.equalsIgnoreCase(projection.getColumnLabel())) {
result.add(projection);
break;
}
diff --git a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/DerivedProjection.java b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/DerivedProjection.java
index f6a4e924df6..05d75a2e904 100644
--- a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/DerivedProjection.java
+++ b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/DerivedProjection.java
@@ -39,7 +39,7 @@ public final class DerivedProjection implements Projection {
private final String alias;
- private final SQLSegment derivedProjection;
+ private final SQLSegment derivedProjectionSegment;
@Override
public Optional<String> getAlias() {
@@ -53,6 +53,6 @@ public final class DerivedProjection implements Projection {
@Override
public Projection cloneWithOwner(final String ownerName) {
- return new DerivedProjection(expression, alias, derivedProjection);
+ return new DerivedProjection(expression, alias, derivedProjectionSegment);
}
}
diff --git a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/common/ColumnMetaDataLoader.java b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/common/ColumnMetaDataLoader.java
index 4d8335be2df..8e669257269 100644
--- a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/common/ColumnMetaDataLoader.java
+++ b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/common/ColumnMetaDataLoader.java
@@ -60,15 +60,15 @@ public final class ColumnMetaDataLoader {
Collection<String> primaryKeys = loadPrimaryKeys(connection, tableNamePattern);
List<String> columnNames = new ArrayList<>();
List<Integer> columnTypes = new ArrayList<>();
- List<Boolean> isPrimaryKeys = new ArrayList<>();
- List<Boolean> isCaseSensitives = new ArrayList<>();
+ List<Boolean> primaryKeyFlags = new ArrayList<>();
+ List<Boolean> caseSensitiveFlags = new ArrayList<>();
try (ResultSet resultSet = connection.getMetaData().getColumns(connection.getCatalog(), connection.getSchema(), tableNamePattern, "%")) {
while (resultSet.next()) {
String tableName = resultSet.getString(TABLE_NAME);
if (Objects.equals(tableNamePattern, tableName)) {
String columnName = resultSet.getString(COLUMN_NAME);
columnTypes.add(resultSet.getInt(DATA_TYPE));
- isPrimaryKeys.add(primaryKeys.contains(columnName));
+ primaryKeyFlags.add(primaryKeys.contains(columnName));
columnNames.add(columnName);
}
}
@@ -76,8 +76,8 @@ public final class ColumnMetaDataLoader {
try (Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery(generateEmptyResultSQL(tableNamePattern, columnNames, databaseType))) {
for (int i = 0; i < columnNames.size(); i++) {
boolean generated = resultSet.getMetaData().isAutoIncrement(i + 1);
- isCaseSensitives.add(resultSet.getMetaData().isCaseSensitive(resultSet.findColumn(columnNames.get(i))));
- result.add(new ColumnMetaData(columnNames.get(i), columnTypes.get(i), isPrimaryKeys.get(i), generated, isCaseSensitives.get(i), true, false));
+ caseSensitiveFlags.add(resultSet.getMetaData().isCaseSensitive(resultSet.findColumn(columnNames.get(i))));
+ result.add(new ColumnMetaData(columnNames.get(i), columnTypes.get(i), primaryKeyFlags.get(i), generated, caseSensitiveFlags.get(i), true, false));
}
}
return result;
diff --git a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/metadata/dialect/SQLServerSchemaMetaDataLoader.java b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/metadata/dialect/SQLServerSchemaMetaDataLoader.java
index 91deb5b4e34..bfa6071084b 100644
--- a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/metadata/dialect/SQLServerSchemaMetaDataLoader.java
+++ b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/metadata/dialect/SQLServerSchemaMetaDataLoader.java
@@ -112,9 +112,9 @@ public final class SQLServerSchemaMetaDataLoader implements DialectSchemaMetaDat
if (versionContainsHiddenColumn(databaseMetaData)) {
stringBuilder.append("is_hidden AS IS_HIDDEN,");
}
- String isHidden = stringBuilder.toString();
- return tables.isEmpty() ? String.format(TABLE_META_DATA_SQL, isHidden)
- : String.format(TABLE_META_DATA_SQL_IN_TABLES, isHidden, tables.stream().map(each -> String.format("'%s'", each)).collect(Collectors.joining(",")));
+ String hiddenFlag = stringBuilder.toString();
+ return tables.isEmpty() ? String.format(TABLE_META_DATA_SQL, hiddenFlag)
+ : String.format(TABLE_META_DATA_SQL_IN_TABLES, hiddenFlag, tables.stream().map(each -> String.format("'%s'", each)).collect(Collectors.joining(",")));
}
private boolean versionContainsHiddenColumn(final DatabaseMetaData databaseMetaData) throws SQLException {
diff --git a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/spi/ClasspathDriverURLProvider.java b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/spi/ClasspathDriverURLProvider.java
index 1f27a8e64d8..64c00abd937 100644
--- a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/spi/ClasspathDriverURLProvider.java
+++ b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/spi/ClasspathDriverURLProvider.java
@@ -73,6 +73,6 @@ public final class ClasspathDriverURLProvider implements ShardingSphereDriverURL
}
}
}
- throw new NullPointerException(String.format("Can not find configuration file `%s`.", resource));
+ throw new IllegalArgumentException(String.format("Can not find configuration file `%s`.", resource));
}
}
diff --git a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/exception/job/ModeConfigNotFoundException.java b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/exception/job/ModeConfigNotFoundException.java
deleted file mode 100644
index 19c93e35237..00000000000
--- a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/exception/job/ModeConfigNotFoundException.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.data.pipeline.core.exception.job;
-
-import org.apache.shardingsphere.data.pipeline.core.exception.PipelineSQLException;
-import org.apache.shardingsphere.infra.util.exception.external.sql.sqlstate.XOpenSQLState;
-
-/**
- * Mode config not found exception.
- */
-public final class ModeConfigNotFoundException extends PipelineSQLException {
-
- private static final long serialVersionUID = -903289953649758722L;
-
- public ModeConfigNotFoundException() {
- super(XOpenSQLState.CHECK_OPTION_VIOLATION, 3, "Mode configuration does not exist.");
- }
-}
diff --git a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/route/engine/SingleStandardRouteEngine.java b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/route/engine/SingleStandardRouteEngine.java
index 32c85d164c5..a729b2fc566 100644
--- a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/route/engine/SingleStandardRouteEngine.java
+++ b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/route/engine/SingleStandardRouteEngine.java
@@ -78,14 +78,15 @@ public final class SingleStandardRouteEngine implements SingleRouteEngine {
if (sqlStatement instanceof CreateTableStatement) {
QualifiedTable table = singleTableNames.iterator().next();
Optional<DataNode> dataNodeOptional = rule.findSingleTableDataNode(table.getSchemaName(), table.getTableName());
- if (!dataNodeOptional.isPresent()) {
- String dataSourceName = rule.assignNewDataSourceName();
- routeContext.getRouteUnits().add(new RouteUnit(new RouteMapper(dataSourceName, dataSourceName), Collections.singleton(new RouteMapper(table.getTableName(), table.getTableName()))));
- } else if (CreateTableStatementHandler.ifNotExists((CreateTableStatement) sqlStatement)) {
+ boolean containsIfNotExists = CreateTableStatementHandler.ifNotExists((CreateTableStatement) sqlStatement);
+ if (dataNodeOptional.isPresent() && containsIfNotExists) {
String dataSourceName = dataNodeOptional.map(DataNode::getDataSourceName).orElse(null);
routeContext.getRouteUnits().add(new RouteUnit(new RouteMapper(dataSourceName, dataSourceName), Collections.singleton(new RouteMapper(table.getTableName(), table.getTableName()))));
- } else {
+ } else if (dataNodeOptional.isPresent() && !containsIfNotExists) {
throw new TableExistsException(table.getTableName());
+ } else {
+ String dataSourceName = rule.assignNewDataSourceName();
+ routeContext.getRouteUnits().add(new RouteUnit(new RouteMapper(dataSourceName, dataSourceName), Collections.singleton(new RouteMapper(table.getTableName(), table.getTableName()))));
}
} else if (sqlStatement instanceof AlterTableStatement || sqlStatement instanceof DropTableStatement || rule.isAllTablesInSameDataSource(routeContext, singleTableNames)) {
fillRouteContext(rule, routeContext, rule.getSingleTableNames(singleTableNames));