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)