Evgeny Stanilovsky created IGNITE-19106:
-------------------------------------------

             Summary: 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


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



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

Reply via email to