[ 
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)

Reply via email to