This is an automated email from the ASF dual-hosted git repository.

zstan pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git


The following commit(s) were added to refs/heads/main by this push:
     new 580b03415f IGNITE-20760 Drop column exception message contain 
information just to appropriate indexes. (#2780)
580b03415f is described below

commit 580b03415f5ee05e4e98c3dbfeb8e5a24e6469fc
Author: ygerzhedovich <[email protected]>
AuthorDate: Wed Nov 1 15:53:00 2023 +0200

    IGNITE-20760 Drop column exception message contain information just to 
appropriate indexes. (#2780)
---
 .../commands/AlterTableDropColumnCommand.java      |  5 +-
 .../commands/AbstractCommandValidationTest.java    | 48 +++++++--------
 .../AlterTableDropColumnCommandValidationTest.java | 69 ++++++++++++++++------
 3 files changed, 78 insertions(+), 44 deletions(-)

diff --git 
a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/commands/AlterTableDropColumnCommand.java
 
b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/commands/AlterTableDropColumnCommand.java
index ecf0e648dd..cde22fc06f 100644
--- 
a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/commands/AlterTableDropColumnCommand.java
+++ 
b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/commands/AlterTableDropColumnCommand.java
@@ -98,8 +98,9 @@ public class AlterTableDropColumnCommand extends 
AbstractTableCommand {
             }
 
             if (indexedColumns.contains(columnName)) {
-                List<String> indexesNames = 
Arrays.stream(schema.indexes()).filter(
-                        index -> index instanceof CatalogHashIndexDescriptor
+                List<String> indexesNames = Arrays.stream(schema.indexes())
+                        .filter(index -> index.tableId() == table.id())
+                        .filter(index -> index instanceof 
CatalogHashIndexDescriptor
                                 ? ((CatalogHashIndexDescriptor) 
index).columns().contains(columnName)
                                 : ((CatalogSortedIndexDescriptor) 
index).columns().stream().map(CatalogIndexColumnDescriptor::name)
                                         .anyMatch(column -> 
column.equals(columnName))
diff --git 
a/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/commands/AbstractCommandValidationTest.java
 
b/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/commands/AbstractCommandValidationTest.java
index 42bbb4013c..d8ce8c5b6b 100644
--- 
a/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/commands/AbstractCommandValidationTest.java
+++ 
b/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/commands/AbstractCommandValidationTest.java
@@ -67,15 +67,7 @@ abstract class AbstractCommandValidationTest extends 
BaseIgniteAbstractTest {
 
     static Catalog catalogWithTable(String name) {
         return catalog(
-                CreateTableCommand.builder()
-                        .schemaName(SCHEMA_NAME)
-                        .tableName(name)
-                        .columns(List.of(
-                                
ColumnParams.builder().name("ID").type(INT32).build(),
-                                
ColumnParams.builder().name("VAL").type(INT32).build()
-                        ))
-                        .primaryKeyColumns(List.of("ID"))
-                        .build()
+                createTableCommand(name)
         );
     }
 
@@ -89,24 +81,32 @@ abstract class AbstractCommandValidationTest extends 
BaseIgniteAbstractTest {
 
     static Catalog catalogWithIndex(String name) {
         return catalog(List.of(
-                CreateTableCommand.builder()
-                        .schemaName(SCHEMA_NAME)
-                        .tableName(TABLE_NAME)
-                        .columns(List.of(
-                                
ColumnParams.builder().name("ID").type(INT32).build(),
-                                
ColumnParams.builder().name("VAL").type(INT32).build()
-                        ))
-                        .primaryKeyColumns(List.of("ID"))
-                        .build(),
-                CreateHashIndexCommand.builder()
-                        .schemaName(SCHEMA_NAME)
-                        .indexName(name)
-                        .tableName(TABLE_NAME)
-                        .columns(List.of("VAL"))
-                        .build()
+                createTableCommand(TABLE_NAME),
+                createIndexCommand(TABLE_NAME, name)
         ));
     }
 
+    protected static CatalogCommand createIndexCommand(String tableName, 
String indexName) {
+        return CreateHashIndexCommand.builder()
+                .schemaName(SCHEMA_NAME)
+                .indexName(indexName)
+                .tableName(tableName)
+                .columns(List.of("VAL"))
+                .build();
+    }
+
+    protected static CatalogCommand createTableCommand(String tableName) {
+        return CreateTableCommand.builder()
+                .schemaName(SCHEMA_NAME)
+                .tableName(tableName)
+                .columns(List.of(
+                        ColumnParams.builder().name("ID").type(INT32).build(),
+                        ColumnParams.builder().name("VAL").type(INT32).build()
+                ))
+                .primaryKeyColumns(List.of("ID"))
+                .build();
+    }
+
     static Catalog catalog(CatalogCommand commandToApply) {
         return catalog(List.of(commandToApply));
     }
diff --git 
a/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/commands/AlterTableDropColumnCommandValidationTest.java
 
b/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/commands/AlterTableDropColumnCommandValidationTest.java
index fdba12d83c..5fd5dfdd11 100644
--- 
a/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/commands/AlterTableDropColumnCommandValidationTest.java
+++ 
b/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/commands/AlterTableDropColumnCommandValidationTest.java
@@ -17,15 +17,19 @@
 
 package org.apache.ignite.internal.catalog.commands;
 
-import static 
org.apache.ignite.internal.testframework.IgniteTestUtils.assertThrowsWithCause;
+import static 
org.apache.ignite.internal.testframework.IgniteTestUtils.assertThrows;
 import static org.apache.ignite.sql.ColumnType.INT32;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
+import java.util.stream.Collectors;
 import org.apache.ignite.internal.catalog.Catalog;
 import org.apache.ignite.internal.catalog.CatalogCommand;
 import org.apache.ignite.internal.catalog.CatalogValidationException;
+import 
org.apache.ignite.internal.catalog.descriptors.CatalogHashIndexDescriptor;
+import org.apache.ignite.internal.catalog.descriptors.CatalogObjectDescriptor;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.MethodSource;
@@ -44,9 +48,9 @@ public class AlterTableDropColumnCommandValidationTest 
extends AbstractCommandVa
 
         builder.schemaName(name);
 
-        assertThrowsWithCause(
-                builder::build,
+        assertThrows(
                 CatalogValidationException.class,
+                builder::build,
                 "Name of the schema can't be null or blank"
         );
     }
@@ -60,9 +64,9 @@ public class AlterTableDropColumnCommandValidationTest 
extends AbstractCommandVa
 
         builder.tableName(name);
 
-        assertThrowsWithCause(
-                builder::build,
+        assertThrows(
                 CatalogValidationException.class,
+                builder::build,
                 "Name of the table can't be null or blank"
         );
     }
@@ -76,9 +80,9 @@ public class AlterTableDropColumnCommandValidationTest 
extends AbstractCommandVa
 
         builder.columns(columns);
 
-        assertThrowsWithCause(
-                builder::build,
+        assertThrows(
                 CatalogValidationException.class,
+                builder::build,
                 "Columns not specified"
         );
     }
@@ -95,9 +99,9 @@ public class AlterTableDropColumnCommandValidationTest 
extends AbstractCommandVa
 
         builder.columns(columnNames);
 
-        assertThrowsWithCause(
-                builder::build,
+        assertThrows(
                 CatalogValidationException.class,
+                builder::build,
                 "Name of the column can't be null or blank"
         );
     }
@@ -117,9 +121,9 @@ public class AlterTableDropColumnCommandValidationTest 
extends AbstractCommandVa
 
         CatalogCommand command = 
fillProperties(builder).schemaName(SCHEMA_NAME + "_UNK").build();
 
-        assertThrowsWithCause(
-                () -> command.get(catalog),
+        assertThrows(
                 CatalogValidationException.class,
+                () -> command.get(catalog),
                 "Schema with name 'PUBLIC_UNK' not found"
         );
     }
@@ -132,9 +136,9 @@ public class AlterTableDropColumnCommandValidationTest 
extends AbstractCommandVa
 
         CatalogCommand command = 
fillProperties(builder).tableName("TEST").build();
 
-        assertThrowsWithCause(
-                () -> command.get(catalog),
+        assertThrows(
                 CatalogValidationException.class,
+                () -> command.get(catalog),
                 "Table with name 'PUBLIC.TEST' not found"
         );
     }
@@ -155,9 +159,9 @@ public class AlterTableDropColumnCommandValidationTest 
extends AbstractCommandVa
                 .tableName(tableName)
                 .columns(Set.of(columnName + "_UNK"));
 
-        assertThrowsWithCause(
-                () -> builder.build().get(catalog),
+        assertThrows(
                 CatalogValidationException.class,
+                () -> builder.build().get(catalog),
                 "Column with name 'TEST_UNK' not found in table 'PUBLIC.TEST'"
         );
     }
@@ -182,9 +186,9 @@ public class AlterTableDropColumnCommandValidationTest 
extends AbstractCommandVa
                 .tableName(tableName)
                 .columns(Set.of(columnName2));
 
-        assertThrowsWithCause(
-                () -> builder.build().get(catalog),
+        assertThrows(
                 CatalogValidationException.class,
+                () -> builder.build().get(catalog),
                 "Deleting column `C2` belonging to primary key is not allowed"
         );
     }
@@ -198,9 +202,38 @@ public class AlterTableDropColumnCommandValidationTest 
extends AbstractCommandVa
                 .tableName(TABLE_NAME)
                 .columns(Set.of("VAL"));
 
-        assertThrowsWithCause(
+        assertThrows(
+                CatalogValidationException.class,
                 () -> builder.build().get(catalog),
+                "Deleting column 'VAL' used by index(es) [TEST_IDX], it is not 
allowed"
+        );
+    }
+
+    @Test
+    void 
rightExceptionIsThrownIfSameColumnNameBelongsToIndexesForDifferentTables() {
+        Catalog catalog =  catalog(List.of(
+                createTableCommand(TABLE_NAME),
+                createIndexCommand(TABLE_NAME, "TEST_IDX"),
+                createTableCommand(TABLE_NAME + "_1"),
+                createIndexCommand(TABLE_NAME + "_1", "TEST_IDX" + "_1")
+        ));
+
+
+        Set<String> indexes = catalog.indexes().stream()
+                .filter(index -> ((CatalogHashIndexDescriptor) 
index).columns().contains("VAL"))
+                .map(CatalogObjectDescriptor::name)
+                .collect(Collectors.toSet());
+
+        assertEquals(2, indexes.size(), "should be 2 indexes with column 
`VAL`");
+
+        AlterTableDropColumnCommandBuilder builder = 
AlterTableDropColumnCommand.builder()
+                .schemaName(SCHEMA_NAME)
+                .tableName(TABLE_NAME)
+                .columns(Set.of("VAL"));
+
+        assertThrows(
                 CatalogValidationException.class,
+                () -> builder.build().get(catalog),
                 "Deleting column 'VAL' used by index(es) [TEST_IDX], it is not 
allowed"
         );
     }

Reply via email to