[ https://issues.apache.org/jira/browse/IGNITE-24294?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Iurii Gerzhedovich updated IGNITE-24294: ---------------------------------------- Description: Created an index with a column with ASC direction but a method that returns table definition and indices returns DEFAULT instead. Reproducer: {code:java} @Test public void test() { sql("CREATE SCHEMA s1"); sql("CREATE TABLE s1.c1 (" + "id INT PRIMARY KEY," + "val1 INT," + "val2 INT" + ")"); sql("CREATE INDEX s1_c1_idx1 ON s1.c1 USING HASH (val1)"); sql("CREATE INDEX s1_c1_idx2 ON s1.c1 USING SORTED (val1 desc, val2 asc)"); TableDefinition definition = catalog().tableDefinition(QualifiedName.of("S1", "C1")); for (var row : sql("SELECT * FROM SYSTEM.INDEXES WHERE table_name='C1'")) { System.err.println(row); } List<IndexDefinition> indexes = definition.indexes(); assertNotNull(indexes); assertEquals(2, indexes.size()); System.err.println(indexes.get(0).name()); System.err.println(indexes.get(1).name()); List<IndexDefinition> sortedDefs = new ArrayList<>(indexes); sortedDefs.sort(Comparator.comparing(IndexDefinition::name)); { IndexDefinition index = sortedDefs.get(0); assertEquals("S1_C1_IDX1", index.name()); assertEquals(IndexType.HASH, index.type()); List<ColumnSorted> columns = index.columns(); assertEquals(List.of( ColumnSorted.column("VAL1") ), columns); } { IndexDefinition index = sortedDefs.get(1); assertEquals("S1_C1_IDX2", index.name()); assertEquals(IndexType.SORTED, index.type()); List<ColumnSorted> columns = index.columns(); assertEquals(List.of( ColumnSorted.column("VAL1", SortOrder.DESC), ColumnSorted.column("VAL2", SortOrder.ASC) ), columns); } } {code} Output: {noformat} [20, S1_C1_IDX2, 17, C1, 16, S1, SORTED, false, VAL1 DESC, VAL2 ASC, AVAILABLE] [18, C1_PK, 17, C1, 16, S1, HASH, true, ID, AVAILABLE] [19, S1_C1_IDX1, 17, C1, 16, S1, HASH, false, VAL1, AVAILABLE] {noformat} Error: {noformat} org.opentest4j.AssertionFailedError: Expected :[ColumnSorted{columnName='VAL1', sortOrder=DESC}, ColumnSorted{columnName='VAL2', sortOrder=ASC}] Actual :[ColumnSorted{columnName='VAL1 DESC', sortOrder=DEFAULT}, ColumnSorted{columnName='VAL2 ASC', sortOrder=DEFAULT}] {noformat} was: Created an index with a column with ASC direction but a method that returns table definition and indices returns DEFAULT instead. Reproducer: {code:java} @Test public void test() { sql("CREATE SCHEMA s1"); sql("CREATE TABLE s1.c1 (" + "id INT PRIMARY KEY," + "val1 INT," + "val2 INT" + ")"); sql("CREATE INDEX s1_c1_idx1 ON s1.c1 USING HASH (val1)"); sql("CREATE INDEX s1_c1_idx2 ON s1.c1 USING SORTED (val1 desc, val2 asc)"); TableDefinition definition = catalog().tableDefinition(QualifiedName.of("S1", "C1")); for (var row : sql("SELECT * FROM SYSTEM.INDEXES WHERE table_name='C1'")) { System.err.println(row); } List<IndexDefinition> indexes = definition.indexes(); assertNotNull(indexes); assertEquals(2, indexes.size()); System.err.println(indexes.get(0).name()); System.err.println(indexes.get(1).name()); List<IndexDefinition> sortedDefs = new ArrayList<>(indexes); sortedDefs.sort(Comparator.comparing(IndexDefinition::name)); { IndexDefinition index = sortedDefs.get(0); assertEquals("S1_C1_IDX1", index.name()); assertEquals(IndexType.HASH, index.type()); List<ColumnSorted> columns = index.columns(); assertEquals(List.of( ColumnSorted.column("VAL1") ), columns); } { IndexDefinition index = sortedDefs.get(1); assertEquals("S1_C1_IDX2", index.name()); assertEquals(IndexType.SORTED, index.type()); List<ColumnSorted> columns = index.columns(); assertEquals(List.of( ColumnSorted.column("VAL1", SortOrder.DESC), ColumnSorted.column("VAL2", SortOrder.ASC) ), columns); } } {code} Output: {noformat} [20, S1_C1_IDX2, 17, C1, 16, S1, SORTED, false, VAL1 DESC, VAL2 ASC, AVAILABLE] [18, C1_PK, 17, C1, 16, S1, HASH, true, ID, AVAILABLE] [19, S1_C1_IDX1, 17, C1, 16, S1, HASH, false, VAL1, AVAILABLE] {noformat} Error: {noformat} org.opentest4j.AssertionFailedError: Expected :[ColumnSorted{columnName='VAL1', sortOrder=DESC}, ColumnSorted{columnName='VAL2', sortOrder=ASC}] Actual :[ColumnSorted{columnName='VAL1 DESC', sortOrder=DEFAULT}, ColumnSorted{columnName='VAL2 ASC', sortOrder=DEFAULT}] {noformat} > IgniteCatalog API. Table's IndexDefinition reports incorrect name/sorting of > index column > ------------------------------------------------------------------------------------------ > > Key: IGNITE-24294 > URL: https://issues.apache.org/jira/browse/IGNITE-24294 > Project: Ignite > Issue Type: Bug > Components: sql > Reporter: Maksim Zhuravkov > Priority: Major > Labels: ignite-3 > > Created an index with a column with ASC direction but a method that returns > table definition and indices returns DEFAULT instead. > Reproducer: > {code:java} > @Test > public void test() { > sql("CREATE SCHEMA s1"); > sql("CREATE TABLE s1.c1 (" > + "id INT PRIMARY KEY," > + "val1 INT," > + "val2 INT" > + ")"); > sql("CREATE INDEX s1_c1_idx1 ON s1.c1 USING HASH (val1)"); > sql("CREATE INDEX s1_c1_idx2 ON s1.c1 USING SORTED (val1 desc, val2 > asc)"); > TableDefinition definition = > catalog().tableDefinition(QualifiedName.of("S1", "C1")); > for (var row : sql("SELECT * FROM SYSTEM.INDEXES WHERE > table_name='C1'")) { > System.err.println(row); > } > List<IndexDefinition> indexes = definition.indexes(); > assertNotNull(indexes); > assertEquals(2, indexes.size()); > System.err.println(indexes.get(0).name()); > System.err.println(indexes.get(1).name()); > List<IndexDefinition> sortedDefs = new ArrayList<>(indexes); > sortedDefs.sort(Comparator.comparing(IndexDefinition::name)); > { > IndexDefinition index = sortedDefs.get(0); > assertEquals("S1_C1_IDX1", index.name()); > assertEquals(IndexType.HASH, index.type()); > List<ColumnSorted> columns = index.columns(); > assertEquals(List.of( > ColumnSorted.column("VAL1") > ), columns); > } > { > IndexDefinition index = sortedDefs.get(1); > assertEquals("S1_C1_IDX2", index.name()); > assertEquals(IndexType.SORTED, index.type()); > List<ColumnSorted> columns = index.columns(); > assertEquals(List.of( > ColumnSorted.column("VAL1", SortOrder.DESC), > ColumnSorted.column("VAL2", SortOrder.ASC) > ), columns); > } > } > {code} > Output: > {noformat} > [20, S1_C1_IDX2, 17, C1, 16, S1, SORTED, false, VAL1 DESC, VAL2 ASC, > AVAILABLE] > [18, C1_PK, 17, C1, 16, S1, HASH, true, ID, AVAILABLE] > [19, S1_C1_IDX1, 17, C1, 16, S1, HASH, false, VAL1, AVAILABLE] > {noformat} > Error: > {noformat} > org.opentest4j.AssertionFailedError: > Expected :[ColumnSorted{columnName='VAL1', sortOrder=DESC}, > ColumnSorted{columnName='VAL2', sortOrder=ASC}] > Actual :[ColumnSorted{columnName='VAL1 DESC', sortOrder=DEFAULT}, > ColumnSorted{columnName='VAL2 ASC', sortOrder=DEFAULT}] > {noformat} -- This message was sent by Atlassian Jira (v8.20.10#820010)