[ https://issues.apache.org/jira/browse/ASTERIXDB-2400?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Steven Jacobs resolved ASTERIXDB-2400. -------------------------------------- Resolution: Fixed > 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 > Priority: Major > > 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)