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"
);
}