This is an automated email from the ASF dual-hosted git repository.
panjuan 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 9aacab5 support pg alter index rename statement (#10502)
9aacab5 is described below
commit 9aacab5187297790415727b263b5eb988630069a
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Fri May 28 11:19:21 2021 +0800
support pg alter index rename statement (#10502)
* support pg alter index rename statement
* fix unit test error
* fix checkstyle
* fix route test case error
* delete unnecessary stub
---
.../ShardingTableBroadcastRoutingEngine.java | 8 +--
.../ShardingTableBroadcastRoutingEngineTest.java | 7 +--
.../statement/ddl/AlterIndexStatementContext.java | 10 +++-
.../metadata/engine/MetadataRefresherFactory.java | 3 ++
.../loader/dialect/H2TableMetaDataLoader.java | 3 +-
.../loader/dialect/MySQLTableMetaDataLoader.java | 3 +-
.../loader/dialect/OracleTableMetaDataLoader.java | 3 +-
.../dialect/PostgreSQLTableMetaDataLoader.java | 3 +-
.../dialect/SQLServerTableMetaDataLoader.java | 3 +-
.../loader/util/TableMetaDataLoaderUtil.java | 25 +++++++---
.../type/AlterIndexStatementSchemaRefresher.java | 58 ++++++++++++++++++++++
.../loader/util/TableMetaDataLoaderUtilTest.java | 25 ++++++----
.../refresher/MetadataRefresherFactoryTest.java | 5 +-
.../AlterIndexStatementSchemaRefresherTest.java | 49 ++++++++++++++++++
.../impl/PostgreSQLDDLStatementSQLVisitor.java | 3 ++
.../handler/ddl/AlterIndexStatementHandler.java | 16 ++++++
.../ddl/PostgreSQLAlterIndexStatement.java | 16 ++++++
.../ddl/AlterIndexStatementHandlerTest.java | 17 +++++++
18 files changed, 222 insertions(+), 35 deletions(-)
diff --git
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/main/java/org/apache/shardingsphere/sharding/route/engine/type/broadcast/ShardingTableBroadcastRoutingEngine.java
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/main/java/org/apache/shardingsphere/sharding/route/engine/type/broadcast/ShardingTableBroadcastRoutingEngine.java
index 76fbb98..f1fbd79 100644
---
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/main/java/org/apache/shardingsphere/sharding/route/engine/type/broadcast/ShardingTableBroadcastRoutingEngine.java
+++
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/main/java/org/apache/shardingsphere/sharding/route/engine/type/broadcast/ShardingTableBroadcastRoutingEngine.java
@@ -19,6 +19,7 @@ package
org.apache.shardingsphere.sharding.route.engine.type.broadcast;
import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
+import org.apache.shardingsphere.infra.binder.type.IndexAvailable;
import org.apache.shardingsphere.infra.binder.type.TableAvailable;
import org.apache.shardingsphere.infra.datanode.DataNode;
import org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema;
@@ -30,7 +31,6 @@ import
org.apache.shardingsphere.sharding.route.engine.type.complex.ShardingCart
import org.apache.shardingsphere.sharding.rule.ShardingRule;
import org.apache.shardingsphere.sharding.rule.TableRule;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.index.IndexSegment;
-import
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DropIndexStatement;
import java.util.Collection;
import java.util.Collections;
@@ -113,12 +113,12 @@ public final class ShardingTableBroadcastRoutingEngine
implements ShardingRouteE
if (!tableNamesInSQL.isEmpty()) {
return tableNamesInSQL;
}
- return sqlStatementContext.getSqlStatement() instanceof
DropIndexStatement ? getTableNamesFromMetaData((DropIndexStatement)
sqlStatementContext.getSqlStatement()) : Collections.emptyList();
+ return sqlStatementContext instanceof IndexAvailable ?
getTableNamesFromMetaData(((IndexAvailable) sqlStatementContext).getIndexes())
: Collections.emptyList();
}
- private Collection<String> getTableNamesFromMetaData(final
DropIndexStatement dropIndexStatement) {
+ private Collection<String> getTableNamesFromMetaData(final
Collection<IndexSegment> indexes) {
Collection<String> result = new LinkedList<>();
- for (IndexSegment each : dropIndexStatement.getIndexes()) {
+ for (IndexSegment each : indexes) {
findLogicTableNameFromMetaData(each.getIdentifier().getValue()).ifPresent(result::add);
}
return result;
diff --git
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/broadcast/ShardingTableBroadcastRoutingEngineTest.java
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/broadcast/ShardingTableBroadcastRoutingEngineTest.java
index 85b5d83..be5c5c0 100644
---
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/broadcast/ShardingTableBroadcastRoutingEngineTest.java
+++
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/broadcast/ShardingTableBroadcastRoutingEngineTest.java
@@ -21,6 +21,7 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import
org.apache.shardingsphere.infra.binder.statement.ddl.DropIndexStatementContext;
+import org.apache.shardingsphere.infra.binder.type.IndexAvailable;
import org.apache.shardingsphere.infra.binder.type.TableAvailable;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema;
@@ -106,11 +107,10 @@ public final class
ShardingTableBroadcastRoutingEngineTest extends AbstractRouti
IndexSegment segment = mock(IndexSegment.class, RETURNS_DEEP_STUBS);
when(segment.getIdentifier().getValue()).thenReturn("t_order");
DropIndexStatement dropIndexStatement = mock(DropIndexStatement.class,
RETURNS_DEEP_STUBS);
-
when(dropIndexStatement.getIndexes()).thenReturn(Collections.singletonList(segment));
SQLStatementContext<DropIndexStatement> sqlStatementContext =
mock(DropIndexStatementContext.class, RETURNS_DEEP_STUBS);
-
when(sqlStatementContext.getSqlStatement()).thenReturn(dropIndexStatement);
when(sqlStatementContext.getTablesContext().getTableNames()).thenReturn(Collections.emptyList());
when(((TableAvailable)
sqlStatementContext).getAllTables()).thenReturn(Collections.emptyList());
+ when(((IndexAvailable)
sqlStatementContext).getIndexes()).thenReturn(Collections.singletonList(segment));
ShardingTableBroadcastRoutingEngine
shardingTableBroadcastRoutingEngine = new
ShardingTableBroadcastRoutingEngine(schema, sqlStatementContext);
@@ -128,15 +128,12 @@ public final class
ShardingTableBroadcastRoutingEngineTest extends AbstractRouti
@Test
public void assertRouteForDropIndexStatementDoNotFoundTables() {
ShardingSphereSchema schema = mock(ShardingSphereSchema.class,
RETURNS_DEEP_STUBS);
- when(schema.getAllTableNames()).thenReturn(Sets.newHashSet("t_order"));
when(schema.get(anyString()).getIndexes().containsKey(anyString())).thenReturn(false);
IndexSegment segment = mock(IndexSegment.class, RETURNS_DEEP_STUBS);
when(segment.getIdentifier().getValue()).thenReturn("t_order");
DropIndexStatement dropIndexStatement = mock(DropIndexStatement.class,
RETURNS_DEEP_STUBS);
-
when(dropIndexStatement.getIndexes()).thenReturn(Collections.singletonList(segment));
SQLStatementContext<DropIndexStatement> sqlStatementContext =
mock(DropIndexStatementContext.class, RETURNS_DEEP_STUBS);
-
when(sqlStatementContext.getSqlStatement()).thenReturn(dropIndexStatement);
when(sqlStatementContext.getTablesContext().getTableNames()).thenReturn(Collections.emptyList());
when(((TableAvailable)
sqlStatementContext).getAllTables()).thenReturn(Collections.emptyList());
diff --git
a/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/ddl/AlterIndexStatementContext.java
b/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/ddl/AlterIndexStatementContext.java
index 3470172..7a9f87e 100644
---
a/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/ddl/AlterIndexStatementContext.java
+++
b/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/ddl/AlterIndexStatementContext.java
@@ -19,9 +19,9 @@ package org.apache.shardingsphere.infra.binder.statement.ddl;
import lombok.Getter;
import org.apache.shardingsphere.infra.binder.segment.table.TablesContext;
+import
org.apache.shardingsphere.infra.binder.statement.CommonSQLStatementContext;
import org.apache.shardingsphere.infra.binder.type.IndexAvailable;
import org.apache.shardingsphere.infra.binder.type.TableAvailable;
-import
org.apache.shardingsphere.infra.binder.statement.CommonSQLStatementContext;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.index.IndexSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterIndexStatement;
@@ -29,6 +29,7 @@ import
org.apache.shardingsphere.sql.parser.sql.dialect.handler.ddl.AlterIndexSt
import java.util.Collection;
import java.util.Collections;
+import java.util.LinkedList;
import java.util.Optional;
/**
@@ -53,6 +54,11 @@ public final class AlterIndexStatementContext extends
CommonSQLStatementContext<
@Override
public Collection<IndexSegment> getIndexes() {
- return getSqlStatement().getIndex().isPresent() ?
Collections.singletonList(getSqlStatement().getIndex().get()) :
Collections.emptyList();
+ Collection<IndexSegment> result = new LinkedList<>();
+ if (getSqlStatement().getIndex().isPresent()) {
+ result.add(getSqlStatement().getIndex().get());
+ }
+
AlterIndexStatementHandler.getRenameIndexSegment(getSqlStatement()).ifPresent(result::add);
+ return result;
}
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/engine/MetadataRefresherFactory.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/engine/MetadataRefresherFactory.java
index 2395173..f4e5f66 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/engine/MetadataRefresherFactory.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/engine/MetadataRefresherFactory.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.infra.metadata.engine;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
+import
org.apache.shardingsphere.infra.metadata.schema.refresher.type.AlterIndexStatementSchemaRefresher;
import
org.apache.shardingsphere.infra.metadata.schema.refresher.type.AlterTableStatementSchemaRefresher;
import
org.apache.shardingsphere.infra.metadata.schema.refresher.type.CreateIndexStatementSchemaRefresher;
import
org.apache.shardingsphere.infra.metadata.schema.refresher.type.CreateTableStatementSchemaRefresher;
@@ -27,6 +28,7 @@ import
org.apache.shardingsphere.infra.metadata.schema.refresher.type.DropIndexS
import
org.apache.shardingsphere.infra.metadata.schema.refresher.type.DropTableStatementSchemaRefresher;
import
org.apache.shardingsphere.infra.metadata.schema.refresher.type.DropViewStatementSchemaRefresher;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
+import
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterIndexStatement;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterTableStatement;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateIndexStatement;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateTableStatement;
@@ -53,6 +55,7 @@ public final class MetadataRefresherFactory {
REGISTRY.put(AlterTableStatement.class, new
AlterTableStatementSchemaRefresher());
REGISTRY.put(DropTableStatement.class, new
DropTableStatementSchemaRefresher());
REGISTRY.put(CreateIndexStatement.class, new
CreateIndexStatementSchemaRefresher());
+ REGISTRY.put(AlterIndexStatement.class, new
AlterIndexStatementSchemaRefresher());
REGISTRY.put(DropIndexStatement.class, new
DropIndexStatementSchemaRefresher());
REGISTRY.put(CreateViewStatement.class, new
CreateViewStatementSchemaRefresher());
REGISTRY.put(DropViewStatement.class, new
DropViewStatementSchemaRefresher());
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/H2TableMetaDataLoader.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/H2TableMetaDataLoader.java
index cf828e1..a3c7774 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/H2TableMetaDataLoader.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/H2TableMetaDataLoader.java
@@ -18,6 +18,7 @@
package org.apache.shardingsphere.infra.metadata.schema.builder.loader.dialect;
import
org.apache.shardingsphere.infra.metadata.schema.builder.loader.DataTypeLoader;
+import
org.apache.shardingsphere.infra.metadata.schema.builder.loader.util.TableMetaDataLoaderUtil;
import
org.apache.shardingsphere.infra.metadata.schema.builder.spi.DialectTableMetaDataLoader;
import org.apache.shardingsphere.infra.metadata.schema.model.ColumnMetaData;
import org.apache.shardingsphere.infra.metadata.schema.model.IndexMetaData;
@@ -125,7 +126,7 @@ public final class H2TableMetaDataLoader implements
DialectTableMetaDataLoader {
if (!result.containsKey(tableName)) {
result.put(tableName, new LinkedList<>());
}
- result.get(tableName).add(new IndexMetaData(indexName));
+ result.get(tableName).add(new
IndexMetaData(TableMetaDataLoaderUtil.getLogicIndexName(indexName, tableName)));
}
}
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/MySQLTableMetaDataLoader.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/MySQLTableMetaDataLoader.java
index 2189063..10a28c9 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/MySQLTableMetaDataLoader.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/MySQLTableMetaDataLoader.java
@@ -18,6 +18,7 @@
package org.apache.shardingsphere.infra.metadata.schema.builder.loader.dialect;
import
org.apache.shardingsphere.infra.metadata.schema.builder.loader.DataTypeLoader;
+import
org.apache.shardingsphere.infra.metadata.schema.builder.loader.util.TableMetaDataLoaderUtil;
import
org.apache.shardingsphere.infra.metadata.schema.builder.spi.DialectTableMetaDataLoader;
import org.apache.shardingsphere.infra.metadata.schema.model.ColumnMetaData;
import org.apache.shardingsphere.infra.metadata.schema.model.IndexMetaData;
@@ -112,7 +113,7 @@ public final class MySQLTableMetaDataLoader implements
DialectTableMetaDataLoade
if (!result.containsKey(tableName)) {
result.put(tableName, new LinkedList<>());
}
- result.get(tableName).add(new IndexMetaData(indexName));
+ result.get(tableName).add(new
IndexMetaData(TableMetaDataLoaderUtil.getLogicIndexName(indexName, tableName)));
}
}
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/OracleTableMetaDataLoader.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/OracleTableMetaDataLoader.java
index 0d8f029..4526d25 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/OracleTableMetaDataLoader.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/OracleTableMetaDataLoader.java
@@ -18,6 +18,7 @@
package org.apache.shardingsphere.infra.metadata.schema.builder.loader.dialect;
import
org.apache.shardingsphere.infra.metadata.schema.builder.loader.DataTypeLoader;
+import
org.apache.shardingsphere.infra.metadata.schema.builder.loader.util.TableMetaDataLoaderUtil;
import
org.apache.shardingsphere.infra.metadata.schema.builder.spi.DialectTableMetaDataLoader;
import org.apache.shardingsphere.infra.metadata.schema.model.ColumnMetaData;
import org.apache.shardingsphere.infra.metadata.schema.model.IndexMetaData;
@@ -120,7 +121,7 @@ public final class OracleTableMetaDataLoader implements
DialectTableMetaDataLoad
if (!result.containsKey(tableName)) {
result.put(tableName, new LinkedList<>());
}
- result.get(tableName).add(new IndexMetaData(indexName));
+ result.get(tableName).add(new
IndexMetaData(TableMetaDataLoaderUtil.getLogicIndexName(indexName, tableName)));
}
}
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/PostgreSQLTableMetaDataLoader.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/PostgreSQLTableMetaDataLoader.java
index 90cbefd..9db2063 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/PostgreSQLTableMetaDataLoader.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/PostgreSQLTableMetaDataLoader.java
@@ -18,6 +18,7 @@
package org.apache.shardingsphere.infra.metadata.schema.builder.loader.dialect;
import
org.apache.shardingsphere.infra.metadata.schema.builder.loader.DataTypeLoader;
+import
org.apache.shardingsphere.infra.metadata.schema.builder.loader.util.TableMetaDataLoaderUtil;
import
org.apache.shardingsphere.infra.metadata.schema.builder.spi.DialectTableMetaDataLoader;
import org.apache.shardingsphere.infra.metadata.schema.model.ColumnMetaData;
import org.apache.shardingsphere.infra.metadata.schema.model.IndexMetaData;
@@ -130,7 +131,7 @@ public final class PostgreSQLTableMetaDataLoader implements
DialectTableMetaData
String tableName = resultSet.getString("tablename");
Collection<IndexMetaData> indexes =
result.computeIfAbsent(tableName, k -> new LinkedList<>());
String indexName = resultSet.getString("indexname");
- indexes.add(new IndexMetaData(indexName));
+ indexes.add(new
IndexMetaData(TableMetaDataLoaderUtil.getLogicIndexName(indexName, tableName)));
}
}
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/SQLServerTableMetaDataLoader.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/SQLServerTableMetaDataLoader.java
index 04fdc26..80a08a6 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/SQLServerTableMetaDataLoader.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/SQLServerTableMetaDataLoader.java
@@ -18,6 +18,7 @@
package org.apache.shardingsphere.infra.metadata.schema.builder.loader.dialect;
import
org.apache.shardingsphere.infra.metadata.schema.builder.loader.DataTypeLoader;
+import
org.apache.shardingsphere.infra.metadata.schema.builder.loader.util.TableMetaDataLoaderUtil;
import
org.apache.shardingsphere.infra.metadata.schema.builder.spi.DialectTableMetaDataLoader;
import org.apache.shardingsphere.infra.metadata.schema.model.ColumnMetaData;
import org.apache.shardingsphere.infra.metadata.schema.model.IndexMetaData;
@@ -116,7 +117,7 @@ public final class SQLServerTableMetaDataLoader implements
DialectTableMetaDataL
if (!result.containsKey(tableName)) {
result.put(tableName, new LinkedList<>());
}
- result.get(tableName).add(new IndexMetaData(indexName));
+ result.get(tableName).add(new
IndexMetaData(TableMetaDataLoaderUtil.getLogicIndexName(indexName, tableName)));
}
}
}
diff --git
a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/postgresql/ddl/PostgreSQLAlterIndexStatement.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/util/TableMetaDataLoaderUtil.java
similarity index 52%
copy from
shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/postgresql/ddl/PostgreSQLAlterIndexStatement.java
copy to
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/util/TableMetaDataLoaderUtil.java
index 480329e..b32f3a5 100644
---
a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/postgresql/ddl/PostgreSQLAlterIndexStatement.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/util/TableMetaDataLoaderUtil.java
@@ -15,15 +15,26 @@
* limitations under the License.
*/
-package
org.apache.shardingsphere.sql.parser.sql.dialect.statement.postgresql.ddl;
+package org.apache.shardingsphere.infra.metadata.schema.builder.loader.util;
-import lombok.ToString;
-import
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterIndexStatement;
-import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.postgresql.PostgreSQLStatement;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
/**
- * PostgreSQL alter index statement.
+ * Table meta data loader utility class.
*/
-@ToString
-public final class PostgreSQLAlterIndexStatement extends AlterIndexStatement
implements PostgreSQLStatement {
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public class TableMetaDataLoaderUtil {
+
+ /**
+ * Get logic index name.
+ *
+ * @param actualIndexName actual index name
+ * @param actualTableName actual table name
+ * @return logic index
+ */
+ public static String getLogicIndexName(final String actualIndexName, final
String actualTableName) {
+ String indexNameSuffix = "_" + actualTableName;
+ return actualIndexName.endsWith(indexNameSuffix) ?
actualIndexName.replace(indexNameSuffix, "") : actualIndexName;
+ }
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/refresher/type/AlterIndexStatementSchemaRefresher.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/refresher/type/AlterIndexStatementSchemaRefresher.java
new file mode 100644
index 0000000..05eb275
--- /dev/null
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/refresher/type/AlterIndexStatementSchemaRefresher.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.infra.metadata.schema.refresher.type;
+
+import com.google.common.base.Preconditions;
+import org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema;
+import
org.apache.shardingsphere.infra.metadata.schema.builder.SchemaBuilderMaterials;
+import org.apache.shardingsphere.infra.metadata.schema.model.IndexMetaData;
+import org.apache.shardingsphere.infra.metadata.schema.model.TableMetaData;
+import
org.apache.shardingsphere.infra.metadata.schema.refresher.SchemaRefresher;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.index.IndexSegment;
+import
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterIndexStatement;
+import
org.apache.shardingsphere.sql.parser.sql.dialect.handler.ddl.AlterIndexStatementHandler;
+
+import java.util.Collection;
+import java.util.Optional;
+
+/**
+ * ShardingSphere schema refresher for alter index statement.
+ */
+public final class AlterIndexStatementSchemaRefresher implements
SchemaRefresher<AlterIndexStatement> {
+
+ @Override
+ public void refresh(final ShardingSphereSchema schema, final
Collection<String> routeDataSourceNames, final AlterIndexStatement
sqlStatement, final SchemaBuilderMaterials materials) {
+ Optional<IndexSegment> renameIndex =
AlterIndexStatementHandler.getRenameIndexSegment(sqlStatement);
+ if (!sqlStatement.getIndex().isPresent() || !renameIndex.isPresent()) {
+ return;
+ }
+ String indexName =
sqlStatement.getIndex().get().getIdentifier().getValue();
+ Optional<String> logicTableName = findLogicTableName(schema,
indexName);
+ if (logicTableName.isPresent()) {
+ TableMetaData tableMetaData = schema.get(logicTableName.get());
+ Preconditions.checkNotNull(tableMetaData, String.format("Can not
get the table '%s' metadata!", logicTableName.get()));
+ tableMetaData.getIndexes().remove(indexName);
+ String renameIndexName =
renameIndex.get().getIdentifier().getValue();
+ tableMetaData.getIndexes().put(renameIndexName, new
IndexMetaData(renameIndexName));
+ }
+ }
+
+ private Optional<String> findLogicTableName(final ShardingSphereSchema
schema, final String indexName) {
+ return schema.getAllTableNames().stream().filter(each ->
schema.get(each).getIndexes().containsKey(indexName)).findFirst();
+ }
+}
diff --git
a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/postgresql/ddl/PostgreSQLAlterIndexStatement.java
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/util/TableMetaDataLoaderUtilTest.java
similarity index 54%
copy from
shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/postgresql/ddl/PostgreSQLAlterIndexStatement.java
copy to
shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/util/TableMetaDataLoaderUtilTest.java
index 480329e..67ce6c4f 100644
---
a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/postgresql/ddl/PostgreSQLAlterIndexStatement.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/util/TableMetaDataLoaderUtilTest.java
@@ -15,15 +15,22 @@
* limitations under the License.
*/
-package
org.apache.shardingsphere.sql.parser.sql.dialect.statement.postgresql.ddl;
+package org.apache.shardingsphere.infra.metadata.schema.builder.loader.util;
-import lombok.ToString;
-import
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterIndexStatement;
-import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.postgresql.PostgreSQLStatement;
+import org.junit.Assert;
+import org.junit.Test;
-/**
- * PostgreSQL alter index statement.
- */
-@ToString
-public final class PostgreSQLAlterIndexStatement extends AlterIndexStatement
implements PostgreSQLStatement {
+public class TableMetaDataLoaderUtilTest {
+
+ @Test
+ public void assertGetLogicIndexNameWithIndexNameSuffix() {
+ String logicIndexName =
TableMetaDataLoaderUtil.getLogicIndexName("order_index_t_order", "t_order");
+ Assert.assertEquals(logicIndexName, "order_index");
+ }
+
+ @Test
+ public void assertGetLogicIndexNameWithoutIndexNameSuffix() {
+ String logicIndexName =
TableMetaDataLoaderUtil.getLogicIndexName("order_index", "t_order");
+ Assert.assertEquals(logicIndexName, "order_index");
+ }
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/schema/refresher/MetadataRefresherFactoryTest.java
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/schema/refresher/MetadataRefresherFactoryTest.java
index 07b1509..df80591 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/schema/refresher/MetadataRefresherFactoryTest.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/schema/refresher/MetadataRefresherFactoryTest.java
@@ -28,7 +28,6 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.junit.MockitoJUnitRunner;
-import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
@@ -61,7 +60,7 @@ public final class MetadataRefresherFactoryTest {
}
@Test
- public void assertNewInstanceWithSQLStatementNotNeedRefresh() {
-
assertFalse(MetadataRefresherFactory.newInstance(mock(AlterIndexStatement.class)).isPresent());
+ public void assertNewInstanceWithAlterIndexStatement() {
+
assertTrue(MetadataRefresherFactory.newInstance(mock(AlterIndexStatement.class)).isPresent());
}
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/schema/refresher/type/AlterIndexStatementSchemaRefresherTest.java
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/schema/refresher/type/AlterIndexStatementSchemaRefresherTest.java
new file mode 100644
index 0000000..21bc626
--- /dev/null
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/schema/refresher/type/AlterIndexStatementSchemaRefresherTest.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.infra.metadata.schema.refresher.type;
+
+import org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema;
+import
org.apache.shardingsphere.infra.metadata.schema.builder.SchemaBuilderMaterials;
+import
org.apache.shardingsphere.infra.metadata.schema.refresher.SchemaRefresher;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.index.IndexSegment;
+import
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterIndexStatement;
+import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
+import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.postgresql.ddl.PostgreSQLAlterIndexStatement;
+import org.junit.Test;
+
+import java.sql.SQLException;
+import java.util.Collections;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
+
+public final class AlterIndexStatementSchemaRefresherTest {
+
+ @Test
+ public void refreshAlterIndexStatementWithRenameIndex() throws
SQLException {
+ PostgreSQLAlterIndexStatement alterIndexStatement = new
PostgreSQLAlterIndexStatement();
+ ShardingSphereSchema schema =
ShardingSphereSchemaBuildUtil.buildSchema();
+ SchemaRefresher<AlterIndexStatement> schemaRefresher = new
AlterIndexStatementSchemaRefresher();
+ alterIndexStatement.setIndex(new IndexSegment(1, 2, new
IdentifierValue("index")));
+ alterIndexStatement.setRenameIndex(new IndexSegment(1, 2, new
IdentifierValue("index_new")));
+ schemaRefresher.refresh(schema, Collections.emptyList(),
alterIndexStatement, mock(SchemaBuilderMaterials.class));
+ assertFalse(schema.get("t_order").getIndexes().containsKey("index"));
+
assertTrue(schema.get("t_order").getIndexes().containsKey("index_new"));
+ }
+}
diff --git
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/impl/PostgreSQLDDLStatementSQLVisitor.java
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/impl/PostgreSQLDDLStatementSQLVisitor.java
index 5771133..dcb5c58 100644
---
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/impl/PostgreSQLDDLStatementSQLVisitor.java
+++
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/impl/PostgreSQLDDLStatementSQLVisitor.java
@@ -307,6 +307,9 @@ public final class PostgreSQLDDLStatementSQLVisitor extends
PostgreSQLStatementS
public ASTNode visitAlterIndex(final AlterIndexContext ctx) {
PostgreSQLAlterIndexStatement result = new
PostgreSQLAlterIndexStatement();
result.setIndex((IndexSegment) visit(ctx.indexName()));
+ if (null !=
ctx.alterIndexDefinitionClause().renameIndexSpecification()) {
+ result.setRenameIndex((IndexSegment)
visit(ctx.alterIndexDefinitionClause().renameIndexSpecification().indexName()));
+ }
return result;
}
diff --git
a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/ddl/AlterIndexStatementHandler.java
b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/ddl/AlterIndexStatementHandler.java
index 1fe7fc2..aee1773 100644
---
a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/ddl/AlterIndexStatementHandler.java
+++
b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/ddl/AlterIndexStatementHandler.java
@@ -19,9 +19,12 @@ package
org.apache.shardingsphere.sql.parser.sql.dialect.handler.ddl;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.index.IndexSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterIndexStatement;
import
org.apache.shardingsphere.sql.parser.sql.dialect.handler.SQLStatementHandler;
+import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.postgresql.PostgreSQLStatement;
+import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.postgresql.ddl.PostgreSQLAlterIndexStatement;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.sqlserver.SQLServerStatement;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.sqlserver.ddl.SQLServerAlterIndexStatement;
@@ -45,4 +48,17 @@ public final class AlterIndexStatementHandler implements
SQLStatementHandler {
}
return Optional.empty();
}
+
+ /**
+ * Get rename index segment.
+ *
+ * @param alterIndexStatement alter index statement
+ * @return rename index segment
+ */
+ public static Optional<IndexSegment> getRenameIndexSegment(final
AlterIndexStatement alterIndexStatement) {
+ if (alterIndexStatement instanceof PostgreSQLStatement) {
+ return ((PostgreSQLAlterIndexStatement)
alterIndexStatement).getRenameIndex();
+ }
+ return Optional.empty();
+ }
}
diff --git
a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/postgresql/ddl/PostgreSQLAlterIndexStatement.java
b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/postgresql/ddl/PostgreSQLAlterIndexStatement.java
index 480329e..f036b09 100644
---
a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/postgresql/ddl/PostgreSQLAlterIndexStatement.java
+++
b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/postgresql/ddl/PostgreSQLAlterIndexStatement.java
@@ -17,13 +17,29 @@
package
org.apache.shardingsphere.sql.parser.sql.dialect.statement.postgresql.ddl;
+import lombok.Setter;
import lombok.ToString;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.index.IndexSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterIndexStatement;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.postgresql.PostgreSQLStatement;
+import java.util.Optional;
+
/**
* PostgreSQL alter index statement.
*/
+@Setter
@ToString
public final class PostgreSQLAlterIndexStatement extends AlterIndexStatement
implements PostgreSQLStatement {
+
+ private IndexSegment renameIndex;
+
+ /**
+ * Get rename index segment.
+ *
+ * @return rename index segment
+ */
+ public Optional<IndexSegment> getRenameIndex() {
+ return Optional.ofNullable(renameIndex);
+ }
}
diff --git
a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/test/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/ddl/AlterIndexStatementHandlerTest.java
b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/test/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/ddl/AlterIndexStatementHandlerTest.java
index 0074fc2..a4c48a3 100644
---
a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/test/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/ddl/AlterIndexStatementHandlerTest.java
+++
b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/test/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/ddl/AlterIndexStatementHandlerTest.java
@@ -17,8 +17,10 @@
package org.apache.shardingsphere.sql.parser.sql.dialect.handler.ddl;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.index.IndexSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
+import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.postgresql.ddl.PostgreSQLAlterIndexStatement;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.sqlserver.ddl.SQLServerAlterIndexStatement;
import org.junit.Test;
@@ -43,4 +45,19 @@ public final class AlterIndexStatementHandlerTest {
Optional<SimpleTableSegment> simpleTableSegment =
AlterIndexStatementHandler.getSimpleTableSegment(alterIndexStatement);
assertFalse(simpleTableSegment.isPresent());
}
+
+ @Test
+ public void
assertGetRenameIndexSegmentWithRenameIndexSegmentForPostgreSQL() {
+ PostgreSQLAlterIndexStatement alterIndexStatement = new
PostgreSQLAlterIndexStatement();
+ alterIndexStatement.setRenameIndex(new IndexSegment(0, 0, new
IdentifierValue("")));
+ Optional<IndexSegment> indexSegment =
AlterIndexStatementHandler.getRenameIndexSegment(alterIndexStatement);
+ assertTrue(indexSegment.isPresent());
+ }
+
+ @Test
+ public void
assertGetRenameIndexSegmentWithoutRenameIndexSegmentForPostgreSQL() {
+ PostgreSQLAlterIndexStatement alterIndexStatement = new
PostgreSQLAlterIndexStatement();
+ Optional<IndexSegment> indexSegment =
AlterIndexStatementHandler.getRenameIndexSegment(alterIndexStatement);
+ assertFalse(indexSegment.isPresent());
+ }
}