Uploaded image for project: 'Calcite'
  1. Calcite
  2. CALCITE-5805

SqlValidatorImpl throws AssertionError while validating MERGE statement

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Duplicate
    • None
    • 1.35.0
    • core

    Description

      For the unit test.

      final String sql = "merge into empnullables e "
          + "using (select * from emp where deptno is null) t "
          + "on e.empno = t.empno "
          + "when matched then update "
          + "set ename = t.ename, deptno = t.deptno, sal = t.sal * .1 "
          + "when not matched then insert (empno, ename, deptno, sal) "
          + "values(t.empno, t.ename, 10, t.sal * .15)";
      sql(sql).ok(); // Expected it is ok, but failed
      • If we enable `assert`, the error will be AssertionError.
      java.lang.AssertionError
          at org.apache.calcite.sql.validate.SqlValidatorImpl.validateSelect(SqlValidatorImpl.java:3741)
          at org.apache.calcite.sql.validate.SelectNamespace.validateImpl(SelectNamespace.java:61)
          at org.apache.calcite.sql.validate.AbstractNamespace.validate(AbstractNamespace.java:88)
          at org.apache.calcite.sql.validate.SqlValidatorImpl.validateNamespace(SqlValidatorImpl.java:1144)
          at org.apache.calcite.sql.validate.AbstractNamespace.getRowType(AbstractNamespace.java:119)
          at org.apache.calcite.sql.validate.SelectNamespace.getRowType(SelectNamespace.java:32)
          at org.apache.calcite.sql.validate.ListScope.resolve(ListScope.java:203)
          at org.apache.calcite.sql.validate.DelegatingScope.fullyQualify(DelegatingScope.java:331)
          at org.apache.calcite.sql.validate.SqlValidatorImpl$Expander.visit(SqlValidatorImpl.java:6672)
          at org.apache.calcite.sql.validate.SqlValidatorImpl$Expander.visit(SqlValidatorImpl.java:6652)
          at org.apache.calcite.sql.SqlIdentifier.accept(SqlIdentifier.java:323)
          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.SqlOperator.acceptCall(SqlOperator.java:956)
          at org.apache.calcite.sql.validate.SqlValidatorImpl$Expander.visitScoped(SqlValidatorImpl.java:6696)
          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:166)
          at org.apache.calcite.sql.validate.SqlValidatorImpl$Expander.go(SqlValidatorImpl.java:6661)
          at org.apache.calcite.sql.validate.SqlValidatorImpl.expand(SqlValidatorImpl.java:6235)
          at org.apache.calcite.sql.validate.SqlValidatorImpl.validateJoin(SqlValidatorImpl.java:3570)
          at org.apache.calcite.sql.validate.SqlValidatorImpl.validateFrom(SqlValidatorImpl.java:3444)
          at org.apache.calcite.sql.validate.SqlValidatorImpl.validateSelect(SqlValidatorImpl.java:3792)
          at org.apache.calcite.sql.validate.SqlValidatorImpl.validateMerge(SqlValidatorImpl.java:5263) 
      • If we disable `assert`, the error will be NullPointerException.
      java.lang.NullPointerException: rowType
          at java.util.Objects.requireNonNull(Objects.java:228)
          at org.apache.calcite.sql.validate.SelectNamespace.validateImpl(SelectNamespace.java:62)
          at org.apache.calcite.sql.validate.AbstractNamespace.validate(AbstractNamespace.java:88)
          at org.apache.calcite.sql.validate.SqlValidatorImpl.validateNamespace(SqlValidatorImpl.java:1144)
          at org.apache.calcite.sql.validate.AbstractNamespace.getRowType(AbstractNamespace.java:119)
          at org.apache.calcite.sql.validate.SelectNamespace.getRowType(SelectNamespace.java:32)
          at org.apache.calcite.sql.validate.ListScope.resolve(ListScope.java:203)
          at org.apache.calcite.sql.validate.DelegatingScope.fullyQualify(DelegatingScope.java:331)
          at org.apache.calcite.sql.validate.SqlValidatorImpl$Expander.visit(SqlValidatorImpl.java:6672)
          at org.apache.calcite.sql.validate.SqlValidatorImpl$Expander.visit(SqlValidatorImpl.java:6652)
          at org.apache.calcite.sql.SqlIdentifier.accept(SqlIdentifier.java:323)
          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.SqlOperator.acceptCall(SqlOperator.java:956)
          at org.apache.calcite.sql.validate.SqlValidatorImpl$Expander.visitScoped(SqlValidatorImpl.java:6696)
          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:166)
          at org.apache.calcite.sql.validate.SqlValidatorImpl$Expander.go(SqlValidatorImpl.java:6661)
          at org.apache.calcite.sql.validate.SqlValidatorImpl.expand(SqlValidatorImpl.java:6235)
          at org.apache.calcite.sql.validate.SqlValidatorImpl.validateJoin(SqlValidatorImpl.java:3570)
          at org.apache.calcite.sql.validate.SqlValidatorImpl.validateFrom(SqlValidatorImpl.java:3444)
          at org.apache.calcite.sql.validate.SqlValidatorImpl.validateSelect(SqlValidatorImpl.java:3792)
          at org.apache.calcite.sql.validate.SqlValidatorImpl.validateMerge(SqlValidatorImpl.java:5263) 

      Attachments

        Issue Links

          Activity

            People

              jiajunbernoulli Jiajun Xie
              jiajunbernoulli Jiajun Xie
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: