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());
+    }
 }

Reply via email to