Steven Jacobs created ASTERIXDB-2400: ----------------------------------------
Summary: Bad compilation of CASE statement Key: ASTERIXDB-2400 URL: https://issues.apache.org/jira/browse/ASTERIXDB-2400 Project: Apache AsterixDB Issue Type: Improvement Reporter: Steven Jacobs The following valid syntax will throw an internal error: drop dataverse channels if exists; create dataverse channels; use channels; create type sub as { subscriptionId: uuid }; create dataset subscriptions(sub) primary key subscriptionId; upsert into subscriptions ( (let v = (select value s from subscriptions s where param0 = "HenryGale") select value (CASE (array_count(v) > 0) WHEN true THEN {"subscriptionId":v[0].subscriptionId, "param0": v[0].param0,"brokerSubscriptions":(select value sub from v[0].brokerSubscriptions sub UNION ALL select value val from [\{"brokerSubscriptionId":create_uuid()}] val)} ELSE {"subscriptionId":create_uuid(),"param0": "HenryGale","brokerSubscriptions":[\{"brokerSubscriptionId":create_uuid()}]} END )) ); The stack trace is: java.lang.NullPointerException: null at org.apache.asterix.om.typecomputer.impl.ListConstructorTypeComputer.computeTypeFromItems(ListConstructorTypeComputer.java:63) ~[classes/:?] at org.apache.asterix.om.typecomputer.impl.ListConstructorTypeComputer.computeType(ListConstructorTypeComputer.java:50) ~[classes/:?] at org.apache.asterix.dataflow.data.common.ExpressionTypeComputer.getTypeForFunction(ExpressionTypeComputer.java:84) ~[classes/:?] at org.apache.asterix.dataflow.data.common.ExpressionTypeComputer.getType(ExpressionTypeComputer.java:55) ~[classes/:?] at org.apache.hyracks.algebricks.core.algebra.operators.logical.AggregateOperator.computeOutputTypeEnvironment(AggregateOperator.java:106) ~[classes/:?] at org.apache.hyracks.algebricks.core.rewriter.base.AlgebricksOptimizationContext.computeAndSetTypeEnvironmentForOperator(AlgebricksOptimizationContext.java:298) ~[classes/:?] at org.apache.hyracks.algebricks.core.algebra.util.OperatorManipulationUtil.computeTypeEnvironmentBottomUp(OperatorManipulationUtil.java:296) ~[classes/:?] at org.apache.hyracks.algebricks.core.algebra.util.OperatorManipulationUtil.computeTypeEnvironmentBottomUp(OperatorManipulationUtil.java:286) ~[classes/:?] at org.apache.hyracks.algebricks.core.algebra.util.OperatorManipulationUtil.computeTypeEnvironmentBottomUp(OperatorManipulationUtil.java:286) ~[classes/:?] at org.apache.asterix.optimizer.rules.subplan.InlineSubplanInputForNestedTupleSourceRule.applyGeneralFlattening(InlineSubplanInputForNestedTupleSourceRule.java:422) ~[classes/:?] at org.apache.asterix.optimizer.rules.subplan.InlineSubplanInputForNestedTupleSourceRule.rewriteSubplanOperator(InlineSubplanInputForNestedTupleSourceRule.java:304) ~[classes/:?] at org.apache.asterix.optimizer.rules.subplan.InlineSubplanInputForNestedTupleSourceRule.traverseNonSubplanOperator(InlineSubplanInputForNestedTupleSourceRule.java:332) ~[classes/:?] at org.apache.asterix.optimizer.rules.subplan.InlineSubplanInputForNestedTupleSourceRule.rewriteSubplanOperator(InlineSubplanInputForNestedTupleSourceRule.java:290) ~[classes/:?] at org.apache.asterix.optimizer.rules.subplan.InlineSubplanInputForNestedTupleSourceRule.traverseNonSubplanOperator(InlineSubplanInputForNestedTupleSourceRule.java:332) ~[classes/:?] at org.apache.asterix.optimizer.rules.subplan.InlineSubplanInputForNestedTupleSourceRule.rewriteSubplanOperator(InlineSubplanInputForNestedTupleSourceRule.java:290) ~[classes/:?] at org.apache.asterix.optimizer.rules.subplan.InlineSubplanInputForNestedTupleSourceRule.traverseNonSubplanOperator(InlineSubplanInputForNestedTupleSourceRule.java:332) ~[classes/:?] at org.apache.asterix.optimizer.rules.subplan.InlineSubplanInputForNestedTupleSourceRule.rewriteSubplanOperator(InlineSubplanInputForNestedTupleSourceRule.java:290) ~[classes/:?] at org.apache.asterix.optimizer.rules.subplan.InlineSubplanInputForNestedTupleSourceRule.traverseNonSubplanOperator(InlineSubplanInputForNestedTupleSourceRule.java:332) ~[classes/:?] at org.apache.asterix.optimizer.rules.subplan.InlineSubplanInputForNestedTupleSourceRule.rewriteSubplanOperator(InlineSubplanInputForNestedTupleSourceRule.java:290) ~[classes/:?] at org.apache.asterix.optimizer.rules.subplan.InlineSubplanInputForNestedTupleSourceRule.traverseNonSubplanOperator(InlineSubplanInputForNestedTupleSourceRule.java:332) ~[classes/:?] at org.apache.asterix.optimizer.rules.subplan.InlineSubplanInputForNestedTupleSourceRule.rewriteSubplanOperator(InlineSubplanInputForNestedTupleSourceRule.java:290) ~[classes/:?] at org.apache.asterix.optimizer.rules.subplan.InlineSubplanInputForNestedTupleSourceRule.traverseNonSubplanOperator(InlineSubplanInputForNestedTupleSourceRule.java:332) ~[classes/:?] at org.apache.asterix.optimizer.rules.subplan.InlineSubplanInputForNestedTupleSourceRule.rewriteSubplanOperator(InlineSubplanInputForNestedTupleSourceRule.java:290) ~[classes/:?] at org.apache.asterix.optimizer.rules.subplan.InlineSubplanInputForNestedTupleSourceRule.traverseNonSubplanOperator(InlineSubplanInputForNestedTupleSourceRule.java:332) ~[classes/:?] at org.apache.asterix.optimizer.rules.subplan.InlineSubplanInputForNestedTupleSourceRule.rewriteSubplanOperator(InlineSubplanInputForNestedTupleSourceRule.java:290) ~[classes/:?] at org.apache.asterix.optimizer.rules.subplan.InlineSubplanInputForNestedTupleSourceRule.traverseNonSubplanOperator(InlineSubplanInputForNestedTupleSourceRule.java:332) ~[classes/:?] at org.apache.asterix.optimizer.rules.subplan.InlineSubplanInputForNestedTupleSourceRule.rewriteSubplanOperator(InlineSubplanInputForNestedTupleSourceRule.java:290) ~[classes/:?] at org.apache.asterix.optimizer.rules.subplan.InlineSubplanInputForNestedTupleSourceRule.rewritePre(InlineSubplanInputForNestedTupleSourceRule.java:280) ~[classes/:?] at org.apache.hyracks.algebricks.core.rewriter.base.AbstractRuleController.rewriteOperatorRef(AbstractRuleController.java:91) ~[classes/:?] at org.apache.hyracks.algebricks.compiler.rewriter.rulecontrollers.SequentialFixpointRuleController.rewriteWithRuleCollection(SequentialFixpointRuleController.java:53) ~[classes/:?] at org.apache.hyracks.algebricks.core.rewriter.base.HeuristicOptimizer.runOptimizationSets(HeuristicOptimizer.java:102) ~[classes/:?] at org.apache.hyracks.algebricks.core.rewriter.base.HeuristicOptimizer.optimize(HeuristicOptimizer.java:82) ~[classes/:?] at org.apache.hyracks.algebricks.compiler.api.HeuristicCompilerFactoryBuilder$1$1.optimize(HeuristicCompilerFactoryBuilder.java:90) ~[classes/:?] at org.apache.asterix.api.common.APIFramework.compileQuery(APIFramework.java:241) ~[classes/:?] at org.apache.asterix.app.translator.QueryTranslator.rewriteCompileInsertUpsert(QueryTranslator.java:1973) ~[classes/:?] at org.apache.asterix.app.translator.QueryTranslator.lambda$handleInsertUpsertStatement$0(QueryTranslator.java:1853) ~[classes/:?] at org.apache.asterix.app.translator.QueryTranslator.handleInsertUpsertStatement(QueryTranslator.java:1879) ~[classes/:?] at org.apache.asterix.app.translator.QueryTranslator.compileAndExecute(QueryTranslator.java:349) ~[classes/:?] at org.apache.asterix.api.http.server.ApiServlet.post(ApiServlet.java:168) [classes/:?] at org.apache.hyracks.http.server.AbstractServlet.handle(AbstractServlet.java:92) [classes/:?] at org.apache.hyracks.http.server.HttpRequestHandler.handle(HttpRequestHandler.java:71) [classes/:?] at org.apache.hyracks.http.server.HttpRequestHandler.call(HttpRequestHandler.java:56) [classes/:?] at org.apache.hyracks.http.server.HttpRequestHandler.call(HttpRequestHandler.java:37) [classes/:?] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_65] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:1.8.0_65] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:1.8.0_65] at java.lang.Thread.run(Thread.java:745) [?:1.8.0_65] -- This message was sent by Atlassian JIRA (v7.6.3#76005)