Mihai Budiu created CALCITE-7501:
------------------------------------

             Summary: Assertion error in alias expansion for LEFT JOIN USING
                 Key: CALCITE-7501
                 URL: https://issues.apache.org/jira/browse/CALCITE-7501
             Project: Calcite
          Issue Type: Bug
          Components: core
    Affects Versions: 1.41.0
            Reporter: Mihai Budiu


The following legitimate query triggers an assertion error:
{code:java}
CREATE TABLE D(sk_cid INT, dt DATE, dm_sym VARCHAR, fhd DATE);
CREATE TABLE F(sk_cid INT);
CREATE TABLE S(sk_sid INT, sym VARCHAR);
                
SELECT
  d.dt as dtn,
  fhd as sk_fhd
FROM D
JOIN S
ON S.sym = D.dm_sym
LEFT JOIN F USING (sk_cid);{code}
The stack trace is as follows:
{code:java}
> java.lang.AssertionError
>     at org.apache.calcite.sql.SqlIdentifier.getSimple(SqlIdentifier.java:333)
>     at 
> org.apache.calcite.sql.validate.SqlValidatorImpl.getFieldAliases(SqlValidatorImpl.java:583)
>     at 
> org.apache.calcite.sql.validate.SqlValidatorImpl.access$700(SqlValidatorImpl.java:189)
>     at 
> org.apache.calcite.sql.validate.SqlValidatorImpl$Expander.expandExprFromJoin(SqlValidatorImpl.java:7523)
>     at 
> org.apache.calcite.sql.validate.SqlValidatorImpl$Expander.expandCommonColumn(SqlValidatorImpl.java:7508)
>     at 
> org.apache.calcite.sql.validate.SqlValidatorImpl$SelectExpander.visit(SqlValidatorImpl.java:7721)
>     at 
> org.apache.calcite.sql.validate.SqlValidatorImpl$SelectExpander.visit(SqlValidatorImpl.java:7678)
>     at org.apache.calcite.sql.SqlIdentifier.accept(SqlIdentifier.java:324)
>     at 
> org.apache.calcite.sql.util.SqlShuttle$CallCopyingArgHandler.visitChild(SqlShuttle.java:134)
>     at 
> org.apache.calcite.sql.util.SqlShuttle$CallCopyingArgHandler.visitChild(SqlShuttle.java:101)
>     at org.apache.calcite.sql.SqlAsOperator.acceptCall(SqlAsOperator.java:129)
>     at 
> org.apache.calcite.sql.validate.SqlValidatorImpl$Expander.visitScoped(SqlValidatorImpl.java:7410)
>     at 
> org.apache.calcite.sql.validate.SqlScopedShuttle.visit(SqlScopedShuttle.java:54)
>     at 
> org.apache.calcite.sql.validate.SqlScopedShuttle.visit(SqlScopedShuttle.java:37)
>     at org.apache.calcite.sql.SqlCall.accept(SqlCall.java:175)
>     at 
> org.apache.calcite.sql.validate.SqlValidatorImpl$Expander.go(SqlValidatorImpl.java:7350)
>     at 
> org.apache.calcite.sql.validate.SqlValidatorImpl$SelectExpander.go(SqlValidatorImpl.java:7717)
>     at 
> org.apache.calcite.sql.validate.SqlValidatorImpl.expandSelectExpr(SqlValidatorImpl.java:6913)
>     at 
> org.apache.calcite.sql.validate.SqlValidatorImpl.expandSelectItem(SqlValidatorImpl.java:490)
>     at 
> org.apache.calcite.sql.validate.SqlValidatorImpl.validateSelectList(SqlValidatorImpl.java:5268)
>     at 
> org.apache.calcite.sql.validate.SqlValidatorImpl.validateSelect(SqlValidatorImpl.java:4260)
>     at 
> org.apache.calcite.sql.validate.SelectNamespace.validateImpl(SelectNamespace.java:62)
 {code}
The statement failing is here:
{code:java}
        fieldAliases.put(fieldIdentifier.getSimple(),
            ((SqlIdentifier) call.operand(1)).getSimple()); {code}
where fieldIdentifier is actually d.dt, so it is not a simple identifier.

 



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

Reply via email to