You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@asterixdb.apache.org by "ASF subversion and git services (Jira)" <ji...@apache.org> on 2023/01/12 15:46:00 UTC

[jira] [Commented] (ASTERIXDB-3092) LoadRecordFieldsRule should only consider field-access functions

    [ https://issues.apache.org/jira/browse/ASTERIXDB-3092?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17676237#comment-17676237 ] 

ASF subversion and git services commented on ASTERIXDB-3092:
------------------------------------------------------------

Commit cac1e4ab32b24ae35c657c72d9979f41029c45d7 in asterixdb's branch refs/heads/master from Wail Alkowaileet
[ https://gitbox.apache.org/repos/asf?p=asterixdb.git;h=cac1e4ab32 ]

[ASTERIXDB-3092][COMP] Consider only field-access functions in LoadRecordFieldsRule

- user model changes: no
- storage format changes: no
- interface changes: no

Details:
The compiler rule LoadRecordFieldsRule fails when it encounters
a non-field-access function. This patch fixes this issue by ensuring
that only field accesses are considered for this rule.

Change-Id: I88f72fd51716dd8152e709c841489e87af0a5137
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17298
Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
Reviewed-by: Wail Alkowaileet <wa...@gmail.com>
Reviewed-by: Ali Alsuliman <al...@gmail.com>


> LoadRecordFieldsRule should only consider field-access functions
> ----------------------------------------------------------------
>
>                 Key: ASTERIXDB-3092
>                 URL: https://issues.apache.org/jira/browse/ASTERIXDB-3092
>             Project: Apache AsterixDB
>          Issue Type: Bug
>          Components: COMP - Compiler
>    Affects Versions: 0.9.7
>            Reporter: Wail Y. Alkowaileet
>            Assignee: Wail Y. Alkowaileet
>            Priority: Major
>             Fix For: 0.9.9
>
>
> Reproducer is as follows:
> DDL:
> {code:java}
> DROP DATAVERSE test IF EXISTS;
> CREATE DATAVERSE test;
> USE test;
> CREATE TYPE OpenType AS {
>     id: int
> };
> CREATE DATASET MyDataset(OpenType)
> PRIMARY KEY id;{code}
>  Query:
> {code:java}
> USE test;
> -- Disabled for a simpler plan
> SET `compiler.sort.parallel` "false";
> SELECT VALUE md.name
> FROM MyDataset md
> LET currentData = {"myDate": current_date()}
> WHERE currentData.myDate = current_date()
> ORDER BY md.id
> {code}
> Error:
> {code:java}
> java.lang.IndexOutOfBoundsException: Index 0 out of bounds for length 0
>     at jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64) ~[?:?]
>     at jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70) ~[?:?]
>     at jdk.internal.util.Preconditions.checkIndex(Preconditions.java:248) ~[?:?]
>     at java.util.Objects.checkIndex(Objects.java:372) ~[?:?]
>     at java.util.ArrayList.get(ArrayList.java:459) ~[?:?]
>     at org.apache.asterix.optimizer.rules.LoadRecordFieldsRule.rewritePost(LoadRecordFieldsRule.java:115) ~[classes/:?]
>     at org.apache.hyracks.algebricks.core.rewriter.base.AbstractRuleController.rewriteOperatorRef(AbstractRuleController.java:118) ~[classes/:?]
>     at org.apache.hyracks.algebricks.core.rewriter.base.AbstractRuleController.rewriteOperatorRef(AbstractRuleController.java:91) ~[classes/:?]
>     at org.apache.hyracks.algebricks.core.rewriter.base.AbstractRuleController.rewriteOperatorRef(AbstractRuleController.java:91) ~[classes/:?]
>     at org.apache.hyracks.algebricks.core.rewriter.base.AbstractRuleController.rewriteOperatorRef(AbstractRuleController.java:91) ~[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:52) ~[classes/:?]
>     at org.apache.hyracks.algebricks.core.rewriter.base.HeuristicOptimizer.runOptimizationSets(HeuristicOptimizer.java:91) ~[classes/:?]
>     at org.apache.hyracks.algebricks.core.rewriter.base.HeuristicOptimizer.runLogicalOptimizationSets(HeuristicOptimizer.java:82) ~[classes/:?]
>     at org.apache.hyracks.algebricks.core.rewriter.base.HeuristicOptimizer.optimize(HeuristicOptimizer.java:63) ~[classes/:?]
>     at org.apache.hyracks.algebricks.compiler.api.HeuristicCompilerFactoryBuilder$1$1.optimize(HeuristicCompilerFactoryBuilder.java:94) ~[classes/:?]
>     at org.apache.asterix.api.common.APIFramework.compileQuery(APIFramework.java:269) ~[classes/:?]
>     at org.apache.asterix.app.translator.QueryTranslator.rewriteCompileQuery(QueryTranslator.java:3708) ~[classes/:?]
>     at org.apache.asterix.app.translator.QueryTranslator.lambda$handleQuery$2(QueryTranslator.java:4216) ~[classes/:?]
>     at org.apache.asterix.app.translator.QueryTranslator.createAndRunJob(QueryTranslator.java:4348) ~[classes/:?]
>     at org.apache.asterix.app.translator.QueryTranslator.deliverResult(QueryTranslator.java:4252) ~[classes/:?]
>     at org.apache.asterix.app.translator.QueryTranslator.handleQuery(QueryTranslator.java:4231) ~[classes/:?]
>     at org.apache.asterix.app.translator.QueryTranslator.compileAndExecute(QueryTranslator.java:490) ~[classes/:?]
>     at org.apache.asterix.api.http.server.QueryServiceServlet.executeStatement(QueryServiceServlet.java:415) [classes/:?]
>     at org.apache.asterix.api.http.server.QueryServiceServlet.handleRequest(QueryServiceServlet.java:305) [classes/:?]
>     at org.apache.asterix.api.http.server.QueryServiceServlet.post(QueryServiceServlet.java:139) [classes/:?]
>     at org.apache.hyracks.http.server.AbstractServlet.handle(AbstractServlet.java:94) [classes/:?]
>     at org.apache.hyracks.http.server.HttpRequestHandler.handle(HttpRequestHandler.java:83) [classes/:?]
>     at org.apache.hyracks.http.server.HttpRequestHandler.call(HttpRequestHandler.java:68) [classes/:?]
>     at org.apache.hyracks.http.server.HttpRequestHandler.call(HttpRequestHandler.java:37) [classes/:?]
>     at java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264) [?:?]
>     at java.util.concurrent.FutureTask.run(FutureTask.java) [?:?]
>     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
>     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
>     at java.lang.Thread.run(Thread.java:829) [?:?] {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)