[
https://issues.apache.org/jira/browse/ASTERIXDB-1079?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14974959#comment-14974959
]
Taewoo Kim commented on ASTERIXDB-1079:
---------------------------------------
The simple reason was that after copying the LIMIT operator, we didn't compute
delivered physical properties. This can be easily fixed. However, there is
another issue. We should not copy LIMIT operator under the UNNEST-MAP unless
UNNEST-MAP retains null value during the search (e.g., left-outer-join case).
This needs to be fixed, too.
> IX-NLJ fails with limit (during rewrite)
> ----------------------------------------
>
> Key: ASTERIXDB-1079
> URL: https://issues.apache.org/jira/browse/ASTERIXDB-1079
> Project: Apache AsterixDB
> Issue Type: Bug
> Components: AsterixDB, Optimizer
> Reporter: Pouria
> Assignee: Yingyi Bu
>
> Adding a limit clause to the Index join query from our famous TinySocial
> tutorial causes the query to fail during rewrite phase.
> Here is the query;
> use dataverse TinySocial;
> for $user in dataset MugshotUsers
> for $message in dataset MugshotMessages
> where $message.author_id /*+ indexnl */ = $user.id
> limit 20
> return {
> "uname": $user.name,
> "message": $message.message
> };
> and Here is the error stack:
> java.lang.NullPointerException
> at
> edu.uci.ics.hyracks.algebricks.core.algebra.operators.physical.OneToOneExchangePOperator.computeDeliveredProperties(OneToOneExchangePOperator.java:45)
> at
> edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.AbstractLogicalOperator.computeDeliveredPhysicalProperties(AbstractLogicalOperator.java:118)
> at
> edu.uci.ics.hyracks.algebricks.core.algebra.util.OperatorPropertiesUtil.computeSchemaAndPropertiesRecIfNull(OperatorPropertiesUtil.java:227)
> at
> edu.uci.ics.hyracks.algebricks.rewriter.rules.IsolateHyracksOperatorsRule.insertOneToOneExchange(IsolateHyracksOperatorsRule.java:133)
> at
> edu.uci.ics.hyracks.algebricks.rewriter.rules.IsolateHyracksOperatorsRule.testIfExchangeBelow(IsolateHyracksOperatorsRule.java:73)
> at
> edu.uci.ics.hyracks.algebricks.rewriter.rules.IsolateHyracksOperatorsRule.rewritePost(IsolateHyracksOperatorsRule.java:51)
> at
> edu.uci.ics.hyracks.algebricks.core.rewriter.base.AbstractRuleController.rewriteOperatorRef(AbstractRuleController.java:122)
> at
> edu.uci.ics.hyracks.algebricks.core.rewriter.base.AbstractRuleController.rewriteOperatorRef(AbstractRuleController.java:96)
> at
> edu.uci.ics.hyracks.algebricks.core.rewriter.base.AbstractRuleController.rewriteOperatorRef(AbstractRuleController.java:96)
> at
> edu.uci.ics.hyracks.algebricks.core.rewriter.base.AbstractRuleController.rewriteOperatorRef(AbstractRuleController.java:96)
> at
> edu.uci.ics.hyracks.algebricks.core.rewriter.base.AbstractRuleController.rewriteOperatorRef(AbstractRuleController.java:96)
> at
> edu.uci.ics.hyracks.algebricks.core.rewriter.base.AbstractRuleController.rewriteOperatorRef(AbstractRuleController.java:96)
> at
> edu.uci.ics.hyracks.algebricks.core.rewriter.base.AbstractRuleController.rewriteOperatorRef(AbstractRuleController.java:96)
> at
> edu.uci.ics.hyracks.algebricks.core.rewriter.base.AbstractRuleController.rewriteOperatorRef(AbstractRuleController.java:96)
> at
> edu.uci.ics.hyracks.algebricks.compiler.rewriter.rulecontrollers.SequentialOnceRuleController.rewriteWithRuleCollection(SequentialOnceRuleController.java:40)
> at
> edu.uci.ics.hyracks.algebricks.core.rewriter.base.HeuristicOptimizer.runOptimizationSets(HeuristicOptimizer.java:91)
> at
> edu.uci.ics.hyracks.algebricks.core.rewriter.base.HeuristicOptimizer.runPhysicalOptimizations(HeuristicOptimizer.java:122)
> at
> edu.uci.ics.hyracks.algebricks.core.rewriter.base.HeuristicOptimizer.optimize(HeuristicOptimizer.java:80)
> at
> edu.uci.ics.hyracks.algebricks.compiler.api.HeuristicCompilerFactoryBuilder$1$1.optimize(HeuristicCompilerFactoryBuilder.java:83)
> at
> edu.uci.ics.asterix.api.common.APIFramework.compileQuery(APIFramework.java:275)
> at
> edu.uci.ics.asterix.aql.translator.AqlTranslator.rewriteCompileQuery(AqlTranslator.java:1893)
> at
> edu.uci.ics.asterix.aql.translator.AqlTranslator.handleQuery(AqlTranslator.java:2473)
> at
> edu.uci.ics.asterix.aql.translator.AqlTranslator.compileAndExecute(AqlTranslator.java:378)
> at
> edu.uci.ics.asterix.api.http.servlet.APIServlet.doPost(APIServlet.java:111)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
> at
> org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:546)
> at
> org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:483)
> at
> org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
> at
> org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:970)
> at
> org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:411)
> at
> org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:192)
> at
> org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:904)
> at
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
> at
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:110)
> at org.eclipse.jetty.server.Server.handle(Server.java:347)
> at
> org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:439)
> at
> org.eclipse.jetty.server.HttpConnection$RequestHandler.content(HttpConnection.java:924)
> at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:781)
> at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:220)
> at
> org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:43)
> at
> org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:545)
> at
> org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:43)
> at
> org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:529)
> at java.lang.Thread.run(Thread.java:745)
>
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)