You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Evgeny Stanilovsky (Jira)" <ji...@apache.org> on 2023/03/27 15:09:00 UTC

[jira] [Updated] (IGNITE-19106) Sql. Column namings are partially broken after upgrading to calcite 1.34

     [ https://issues.apache.org/jira/browse/IGNITE-19106?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Evgeny Stanilovsky updated IGNITE-19106:
----------------------------------------
    Description: 
After upgrading to calcite 1.34 SqlValidator#deriveAlias and overloading call IgniteSqlValidator#deriveAlias is changed, thus requests like :
select v / 2 from t, return EXPR$ instead of column name derived from IgniteSqlValidator#deriveAlias. Fast (near) fix looks like cover both such queries:

IgnitePlanner#validateAndGetTypeMetadata ->

{noformat}
    public ValidationResult validateAndGetTypeMetadata(SqlNode sqlNode) {
        SqlNode validatedNode = validator().validate(sqlNode);
        RelDataType type = validator().getValidatedNodeType(validatedNode);
        List<List<String>> origins = validator().getFieldOrigins(validatedNode);

        List<String> derived = Collections.emptyList();

        if (sqlNode instanceof SqlSelect) {
            SelectScope list = validator().getRawSelectScope((SqlSelect) sqlNode);
            assert type.getFieldList().size() == list.getExpandedSelectList().size();

            int cnt = 0;
            derived = new ArrayList<>(list.getExpandedSelectList().size());
            for (SqlNode node : list.getExpandedSelectList()) {
                derived.add(validator().deriveAlias(node, cnt++));
            }
        }

        return new ValidationResult(validatedNode, type, origins, derived);
    }
{noformat}

and use this derived instead of aliases here:
PrepareServiceImpl#resultSetMetadata


*Be careful !* .net and cpp tests are involved too, check all issue number occurrences.

  was:
After upgrading to calcite 1.34 SqlValidator#deriveAlias and overloading call IgniteSqlValidator#deriveAlias is changed, thus requests like :
select v / 2 from t, return EXPR$ instead of column name derived from IgniteSqlValidator#deriveAlias. Fast (near) fix looks like cover both such queries:

IgnitePlanner#validateAndGetTypeMetadata ->

{noformat}
    public ValidationResult validateAndGetTypeMetadata(SqlNode sqlNode) {
        SqlNode validatedNode = validator().validate(sqlNode);
        RelDataType type = validator().getValidatedNodeType(validatedNode);
        List<List<String>> origins = validator().getFieldOrigins(validatedNode);

        List<String> derived = Collections.emptyList();

        if (sqlNode instanceof SqlSelect) {
            SelectScope list = validator().getRawSelectScope((SqlSelect) sqlNode);
            assert type.getFieldList().size() == list.getExpandedSelectList().size();

            int cnt = 0;
            derived = new ArrayList<>(list.getExpandedSelectList().size());
            for (SqlNode node : list.getExpandedSelectList()) {
                derived.add(validator().deriveAlias(node, cnt++));
            }
        }

        return new ValidationResult(validatedNode, type, origins, derived);
    }
{noformat}

and use this derived instead of aliases here:
PrepareServiceImpl#resultSetMetadata


> Sql. Column namings are partially broken after upgrading to calcite 1.34
> ------------------------------------------------------------------------
>
>                 Key: IGNITE-19106
>                 URL: https://issues.apache.org/jira/browse/IGNITE-19106
>             Project: Ignite
>          Issue Type: Improvement
>          Components: sql
>    Affects Versions: 3.0.0-beta1
>            Reporter: Evgeny Stanilovsky
>            Priority: Major
>              Labels: calcite3-required, ignite-3
>
> After upgrading to calcite 1.34 SqlValidator#deriveAlias and overloading call IgniteSqlValidator#deriveAlias is changed, thus requests like :
> select v / 2 from t, return EXPR$ instead of column name derived from IgniteSqlValidator#deriveAlias. Fast (near) fix looks like cover both such queries:
> IgnitePlanner#validateAndGetTypeMetadata ->
> {noformat}
>     public ValidationResult validateAndGetTypeMetadata(SqlNode sqlNode) {
>         SqlNode validatedNode = validator().validate(sqlNode);
>         RelDataType type = validator().getValidatedNodeType(validatedNode);
>         List<List<String>> origins = validator().getFieldOrigins(validatedNode);
>         List<String> derived = Collections.emptyList();
>         if (sqlNode instanceof SqlSelect) {
>             SelectScope list = validator().getRawSelectScope((SqlSelect) sqlNode);
>             assert type.getFieldList().size() == list.getExpandedSelectList().size();
>             int cnt = 0;
>             derived = new ArrayList<>(list.getExpandedSelectList().size());
>             for (SqlNode node : list.getExpandedSelectList()) {
>                 derived.add(validator().deriveAlias(node, cnt++));
>             }
>         }
>         return new ValidationResult(validatedNode, type, origins, derived);
>     }
> {noformat}
> and use this derived instead of aliases here:
> PrepareServiceImpl#resultSetMetadata
> *Be careful !* .net and cpp tests are involved too, check all issue number occurrences.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)