Mihai Budiu created CALCITE-7094:
------------------------------------
Summary: Using a type alias as a constructor function causes a
validator assertion failure
Key: CALCITE-7094
URL: https://issues.apache.org/jira/browse/CALCITE-7094
Project: Calcite
Issue Type: Bug
Components: core
Affects Versions: 1.40.0
Reporter: Mihai Budiu
Consider BigQuery: it supports an INT64 type, which is an alias for BIGINT.
This can be described by installing INT64 in the schema:
{code:java}
ConnectionFactories.addType("INT64", typeFactory ->
typeFactory.createSqlType(SqlTypeName.BIGINT))
{code}
Now, if you try to use (incorrectly) such a type using a constructor syntax:
{code:sql}
SELECT int64(0)
{code}
the validator crashes with an assertion failure:
{code}
java.lang.AssertionError: fieldList must not be null, type = BIGINT
at
org.apache.calcite.rel.type.RelDataTypeImpl.getFieldCount(RelDataTypeImpl.java:207)
at
org.apache.calcite.sql.type.ExplicitOperandTypeChecker.getOperandCountRange(ExplicitOperandTypeChecker.java:65)
at
org.apache.calcite.sql.SqlOperator.getOperandCountRange(SqlOperator.java:231)
at
org.apache.calcite.sql.SqlOperator.checkOperandCount(SqlOperator.java:793)
at
org.apache.calcite.sql.SqlOperator.validateOperands(SqlOperator.java:522)
at org.apache.calcite.sql.SqlFunction.deriveType(SqlFunction.java:350)
at org.apache.calcite.sql.SqlFunction.deriveType(SqlFunction.java:232)
at
org.apache.calcite.sql.validate.SqlValidatorImpl$DeriveTypeVisitor.visit(SqlValidatorImpl.java:7028)
at
org.apache.calcite.sql.validate.SqlValidatorImpl$DeriveTypeVisitor.visit(SqlValidatorImpl.java:7015)
at org.apache.calcite.sql.SqlCall.accept(SqlCall.java:175)
at
org.apache.calcite.sql.validate.SqlValidatorImpl.deriveTypeImpl(SqlValidatorImpl.java:1962)
at
org.apache.calcite.sql.validate.SqlValidatorImpl.deriveType(SqlValidatorImpl.java:1949)
at
org.apache.calcite.sql.validate.SqlValidatorImpl.expandSelectItem(SqlValidatorImpl.java:513)
at
org.apache.calcite.sql.validate.SqlValidatorImpl.validateSelectList(SqlValidatorImpl.java:5076)
at
org.apache.calcite.sql.validate.SqlValidatorImpl.validateSelect(SqlValidatorImpl.java:4068)
{code}
This seems to be because the validator assumes that any constructor type is for
a ROW type. In this case the validator should provide an error message and not
crash.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)