Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Duplicate
-
None
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
- is related to
-
CALCITE-985 Validate MERGE
- Closed
- links to