From 8f9e2c296b0106a3a62ebf2b6102a384c100e2b2 Mon Sep 17 00:00:00 2001 From: haocao Date: Thu, 4 Jan 2018 14:16:06 +0800 Subject: [PATCH] Fixed #525. --- RELEASE-NOTES.md | 5 ++- ...dingDataSourceBeanDefinitionParserTag.java | 2 + ...hardingDataSourceBeanDefinitionParser.java | 4 ++ .../resources/META-INF/namespace/sharding.xsd | 1 + .../cases/WithNamespaceLogicIndexTest.java | 44 +++++++++++++++++++ .../META-INF/rdb/withNamespaceLogicIndex.xml | 26 +++++++++++ ...dingDataSourceBeanDefinitionParserTag.java | 2 + ...hardingDataSourceBeanDefinitionParser.java | 4 ++ .../resources/META-INF/namespace/sharding.xsd | 1 + 9 files changed, 87 insertions(+), 2 deletions(-) create mode 100644 sharding-jdbc-core-spring/sharding-jdbc-core-spring-namespace/src/test/java/io/shardingjdbc/spring/cases/WithNamespaceLogicIndexTest.java create mode 100644 sharding-jdbc-core-spring/sharding-jdbc-core-spring-namespace/src/test/resources/META-INF/rdb/withNamespaceLogicIndex.xml diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index 64bac64858185..d305bb79bc393 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -1,13 +1,14 @@ ## 2.0.2 ### 功能提升 -1. [ISSUE #475](https://github.com/shardingjdbc/sharding-jdbc/issues/475) 支持create index语句 +1. [ISSUE #475](https://github.com/shardingjdbc/sharding-jdbc/issues/475) 支持CREATE INDEX +1. [ISSUE #525](https://github.com/shardingjdbc/sharding-jdbc/issues/525) 支持DROP INDEX ### 缺陷修正 1. [ISSUE #520](https://github.com/shardingjdbc/sharding-jdbc/issues/520) 引入分表后,唯一键冲突时异常类型不再是DuplicateKeyException 1. [ISSUE #521](https://github.com/shardingjdbc/sharding-jdbc/issues/521) YAML文件中ShardingProperties设置无效 1. [ISSUE #522](https://github.com/shardingjdbc/sharding-jdbc/issues/522) 读写分离Slave库不需要执行DDL语句 - + ## 2.0.1 ### 功能提升 diff --git a/sharding-jdbc-core-spring/sharding-jdbc-core-spring-namespace/src/main/java/io/shardingjdbc/spring/namespace/constants/ShardingDataSourceBeanDefinitionParserTag.java b/sharding-jdbc-core-spring/sharding-jdbc-core-spring-namespace/src/main/java/io/shardingjdbc/spring/namespace/constants/ShardingDataSourceBeanDefinitionParserTag.java index 0bc82741f2e46..1485e08260bef 100644 --- a/sharding-jdbc-core-spring/sharding-jdbc-core-spring-namespace/src/main/java/io/shardingjdbc/spring/namespace/constants/ShardingDataSourceBeanDefinitionParserTag.java +++ b/sharding-jdbc-core-spring/sharding-jdbc-core-spring-namespace/src/main/java/io/shardingjdbc/spring/namespace/constants/ShardingDataSourceBeanDefinitionParserTag.java @@ -67,4 +67,6 @@ public final class ShardingDataSourceBeanDefinitionParserTag { public static final String COLUMN_KEY_GENERATOR_CLASS = "column-key-generator-class"; public static final String KEY_GENERATOR_CLASS = "key-generator-class"; + + public static final String LOGIC_INDEX = "logic-index"; } diff --git a/sharding-jdbc-core-spring/sharding-jdbc-core-spring-namespace/src/main/java/io/shardingjdbc/spring/namespace/parser/ShardingDataSourceBeanDefinitionParser.java b/sharding-jdbc-core-spring/sharding-jdbc-core-spring-namespace/src/main/java/io/shardingjdbc/spring/namespace/parser/ShardingDataSourceBeanDefinitionParser.java index daa2047e77584..c5206367332a2 100644 --- a/sharding-jdbc-core-spring/sharding-jdbc-core-spring-namespace/src/main/java/io/shardingjdbc/spring/namespace/parser/ShardingDataSourceBeanDefinitionParser.java +++ b/sharding-jdbc-core-spring/sharding-jdbc-core-spring-namespace/src/main/java/io/shardingjdbc/spring/namespace/parser/ShardingDataSourceBeanDefinitionParser.java @@ -143,6 +143,10 @@ private BeanDefinition parseTableRuleConfig(final Element tableElement) { if (!Strings.isNullOrEmpty(keyGeneratorClass)) { factory.addPropertyValue("keyGeneratorClass", keyGeneratorClass); } + String logicIndex = tableElement.getAttribute(ShardingDataSourceBeanDefinitionParserTag.LOGIC_INDEX); + if (!Strings.isNullOrEmpty(logicIndex)) { + factory.addPropertyValue("logicIndex", logicIndex); + } return factory.getBeanDefinition(); } diff --git a/sharding-jdbc-core-spring/sharding-jdbc-core-spring-namespace/src/main/resources/META-INF/namespace/sharding.xsd b/sharding-jdbc-core-spring/sharding-jdbc-core-spring-namespace/src/main/resources/META-INF/namespace/sharding.xsd index 0091a0a7697fc..1af6ff6f95942 100644 --- a/sharding-jdbc-core-spring/sharding-jdbc-core-spring-namespace/src/main/resources/META-INF/namespace/sharding.xsd +++ b/sharding-jdbc-core-spring/sharding-jdbc-core-spring-namespace/src/main/resources/META-INF/namespace/sharding.xsd @@ -44,6 +44,7 @@ + diff --git a/sharding-jdbc-core-spring/sharding-jdbc-core-spring-namespace/src/test/java/io/shardingjdbc/spring/cases/WithNamespaceLogicIndexTest.java b/sharding-jdbc-core-spring/sharding-jdbc-core-spring-namespace/src/test/java/io/shardingjdbc/spring/cases/WithNamespaceLogicIndexTest.java new file mode 100644 index 0000000000000..f89fc5f6a3b76 --- /dev/null +++ b/sharding-jdbc-core-spring/sharding-jdbc-core-spring-namespace/src/test/java/io/shardingjdbc/spring/cases/WithNamespaceLogicIndexTest.java @@ -0,0 +1,44 @@ +/* + * Copyright 1999-2015 dangdang.com. + *

+ * Licensed 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 io.shardingjdbc.spring.cases; + +import io.shardingjdbc.spring.AbstractShardingBothDataBasesAndTablesSpringDBUnitTest; +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 AbstractShardingBothDataBasesAndTablesSpringDBUnitTest { + + @Test + public void assertIndex() throws SQLException { + try (Connection connection = getShardingDataSource().getConnection()) { + String sql = "CREATE INDEX t_order_index ON t_order(user_id)"; + PreparedStatement preparedStatement = connection.prepareStatement(sql); + preparedStatement.execute(); + sql = "DROP INDEX t_order_index"; + preparedStatement = connection.prepareStatement(sql); + preparedStatement.execute(); + preparedStatement.close(); + } + } + +} diff --git a/sharding-jdbc-core-spring/sharding-jdbc-core-spring-namespace/src/test/resources/META-INF/rdb/withNamespaceLogicIndex.xml b/sharding-jdbc-core-spring/sharding-jdbc-core-spring-namespace/src/test/resources/META-INF/rdb/withNamespaceLogicIndex.xml new file mode 100644 index 0000000000000..eca6c81db72c9 --- /dev/null +++ b/sharding-jdbc-core-spring/sharding-jdbc-core-spring-namespace/src/test/resources/META-INF/rdb/withNamespaceLogicIndex.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + diff --git a/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/java/io/shardingjdbc/orchestration/spring/namespace/constants/ShardingDataSourceBeanDefinitionParserTag.java b/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/java/io/shardingjdbc/orchestration/spring/namespace/constants/ShardingDataSourceBeanDefinitionParserTag.java index ffc2a84c9e52a..a48fb22c57522 100644 --- a/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/java/io/shardingjdbc/orchestration/spring/namespace/constants/ShardingDataSourceBeanDefinitionParserTag.java +++ b/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/java/io/shardingjdbc/orchestration/spring/namespace/constants/ShardingDataSourceBeanDefinitionParserTag.java @@ -67,4 +67,6 @@ public final class ShardingDataSourceBeanDefinitionParserTag { public static final String COLUMN_KEY_GENERATOR_CLASS = "column-key-generator-class"; public static final String KEY_GENERATOR_CLASS = "key-generator-class"; + + public static final String LOGIC_INDEX_ATTRIBUTE = "logic-index"; } diff --git a/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/java/io/shardingjdbc/orchestration/spring/namespace/parser/OrchestrationShardingDataSourceBeanDefinitionParser.java b/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/java/io/shardingjdbc/orchestration/spring/namespace/parser/OrchestrationShardingDataSourceBeanDefinitionParser.java index bfcbf450e8dcb..f2ae5225ed0fd 100644 --- a/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/java/io/shardingjdbc/orchestration/spring/namespace/parser/OrchestrationShardingDataSourceBeanDefinitionParser.java +++ b/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/java/io/shardingjdbc/orchestration/spring/namespace/parser/OrchestrationShardingDataSourceBeanDefinitionParser.java @@ -145,6 +145,10 @@ private BeanDefinition parseTableRuleConfig(final Element tableElement) { if (!Strings.isNullOrEmpty(keyGeneratorClass)) { factory.addPropertyValue("keyGeneratorClass", keyGeneratorClass); } + String logicIndex = tableElement.getAttribute(ShardingDataSourceBeanDefinitionParserTag.LOGIC_INDEX_ATTRIBUTE); + if (!Strings.isNullOrEmpty(logicIndex)) { + factory.addPropertyValue("logicIndex", logicIndex); + } return factory.getBeanDefinition(); } diff --git a/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/resources/META-INF/namespace/sharding.xsd b/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/resources/META-INF/namespace/sharding.xsd index 0f72539829ecd..e6d55c6de0f5e 100644 --- a/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/resources/META-INF/namespace/sharding.xsd +++ b/sharding-jdbc-orchestration-spring/sharding-jdbc-orchestration-spring-namespace/src/main/resources/META-INF/namespace/sharding.xsd @@ -46,6 +46,7 @@ +