[ https://issues.apache.org/jira/browse/ASTERIXDB-2296?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16373873#comment-16373873 ]
ASF subversion and git services commented on ASTERIXDB-2296: ------------------------------------------------------------ Commit 5e4b020d0a2e53913b5193e987bc72aa41415feb in asterixdb's branch refs/heads/master from [~wangsaeu] [ https://git-wip-us.apache.org/repos/asf?p=asterixdb.git;h=5e4b020 ] [ASTERIXDB-2296][COMP] proper handling of an optional subfield type - user-model changes: no - storage format changes: no - interface changes: no Details: - Handle an optional subfield type properly in AbstractIntroduceAccessMethodRule.getFieldNameFromSubTree() Change-Id: Ia80b6dbf549b77295f310b7c6f3a3f3f5a323114 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2419 Sonar-Qube: Jenkins <jenk...@fulliautomatix.ics.uci.edu> Integration-Tests: Jenkins <jenk...@fulliautomatix.ics.uci.edu> Reviewed-by: Dmitry Lychagin <dmitry.lycha...@couchbase.com> Tested-by: Jenkins <jenk...@fulliautomatix.ics.uci.edu> Contrib: Jenkins <jenk...@fulliautomatix.ics.uci.edu> > AbstractIntroduceAccessMethodRule.getFieldNameFromSubTree() cannot handle > AUnionType > ------------------------------------------------------------------------------------ > > Key: ASTERIXDB-2296 > URL: https://issues.apache.org/jira/browse/ASTERIXDB-2296 > Project: Apache AsterixDB > Issue Type: Bug > Reporter: Taewoo Kim > Assignee: Taewoo Kim > Priority: Major > > DDL > {code:java} > drop dataverse twitter if exists; > create dataverse twitter if not exists; > use twitter; > create type typeUser if not exists as open { > id: int64, > name: string, > screen_name : string, > profile_image_url : string?, > lang : string, > location: string, > create_at: date, > description: string, > followers_count: int32, > friends_count: int32, > statues_count: int64 > }; > create type typePlace if not exists as open{ > country : string, > country_code : string, > full_name : string, > id : string, > name : string, > place_type : string, > bounding_box : rectangle > }; > create type typeGeoTag if not exists as open { > stateID: int32, > stateName: string, > countyID: int32, > countyName: string, > cityID: int32?, > cityName: string? > }; > create type typeTweet if not exists as open { > create_at : datetime, > id: int64, > text: string, > in_reply_to_status : int64, > in_reply_to_user : int64, > favorite_count : int64, > coordinate: point?, > retweet_count : int64, > lang : string, > is_retweet: boolean, > hashtags : {{ string }} ?, > user_mentions : {{ int64 }} ? , > user : typeUser, > place : typePlace?, > geo_tag: typeGeoTag > }; > create dataset ds_tweet(typeTweet) if not exists primary key id with filter > on create_at with > {"merge-policy": > {"name":"prefix","parameters": > {"max-mergable-component-size":134217728, > "max-tolerance-component-count":10} > } > }; > create index text_idx if not exists on ds_tweet(text) type fulltext; > {code} > The following SQL++ query doesn't work based on the above DDL. This is > because "place" is an optional field so that its type if AUnionType that > contains ARecordType, not ARecordType itself. > {code:java} > select t.`place`.`bounding_box` as `place.bounding_box`,t.`user`.`id` as > `user.id`,t.`id` as `id`, > t.`coordinate` as `coordinate`,t.`create_at` as `create_at` > from twitter.ds_tweet t > where t.`create_at` >= datetime('2018-02-22T10:53:07.888Z') and t.`create_at` > < datetime('2018-02-22T18:50:39.301Z') > and ftcontains(t.`text`, ['francisco'], {'mode':'all'}) and > t.`geo_tag`.`stateID` in [ 37,51,24,11 ] > order by t.`create_at` desc > limit 2147483647 > offset 0; > {code} > An exception: > {code:java} > 11:23:01.827 [QueryTranslator] INFO > org.apache.asterix.app.translator.QueryTranslator - > org.apache.asterix.om.types.AUnionType cannot be cast to > org.apache.asterix.om.types.ARecordType > java.lang.ClassCastException: org.apache.asterix.om.types.AUnionType cannot > be cast to org.apache.asterix.om.types.ARecordType > at > org.apache.asterix.optimizer.rules.am.AbstractIntroduceAccessMethodRule.getFieldNameFromSubTree(AbstractIntroduceAccessMethodRule.java:877) > ~[asterix-algebra-0.9.4-SNAPSHOT.jar:0.9.4-SNAPSHOT] > at > org.apache.asterix.optimizer.rules.am.AbstractIntroduceAccessMethodRule.fillFieldNamesInTheSubTree(AbstractIntroduceAccessMethodRule.java:973) > ~[asterix-algebra-0.9.4-SNAPSHOT.jar:0.9.4-SNAPSHOT] > at > org.apache.asterix.optimizer.rules.am.IntroduceSelectAccessMethodRule.checkAndApplyTheSelectTransformation(IntroduceSelectAccessMethodRule.java:412) > ~[asterix-algebra-0.9.4-SNAPSHOT.jar:0.9.4-SNAPSHOT] > at > org.apache.asterix.optimizer.rules.am.IntroduceSelectAccessMethodRule.checkAndApplyTheSelectTransformation(IntroduceSelectAccessMethodRule.java:327) > ~[asterix-algebra-0.9.4-SNAPSHOT.jar:0.9.4-SNAPSHOT] > at > org.apache.asterix.optimizer.rules.am.IntroduceSelectAccessMethodRule.checkAndApplyTheSelectTransformation(IntroduceSelectAccessMethodRule.java:327) > ~[asterix-algebra-0.9.4-SNAPSHOT.jar:0.9.4-SNAPSHOT] > at > org.apache.asterix.optimizer.rules.am.IntroduceSelectAccessMethodRule.checkAndApplyTheSelectTransformation(IntroduceSelectAccessMethodRule.java:327) > ~[asterix-algebra-0.9.4-SNAPSHOT.jar:0.9.4-SNAPSHOT] > at > org.apache.asterix.optimizer.rules.am.IntroduceSelectAccessMethodRule.checkAndApplyTheSelectTransformation(IntroduceSelectAccessMethodRule.java:327) > ~[asterix-algebra-0.9.4-SNAPSHOT.jar:0.9.4-SNAPSHOT] > at > org.apache.asterix.optimizer.rules.am.IntroduceSelectAccessMethodRule.checkAndApplyTheSelectTransformation(IntroduceSelectAccessMethodRule.java:327) > ~[asterix-algebra-0.9.4-SNAPSHOT.jar:0.9.4-SNAPSHOT] > at > org.apache.asterix.optimizer.rules.am.IntroduceSelectAccessMethodRule.checkAndApplyTheSelectTransformation(IntroduceSelectAccessMethodRule.java:327) > ~[asterix-algebra-0.9.4-SNAPSHOT.jar:0.9.4-SNAPSHOT] > at > org.apache.asterix.optimizer.rules.am.IntroduceSelectAccessMethodRule.checkAndApplyTheSelectTransformation(IntroduceSelectAccessMethodRule.java:327) > ~[asterix-algebra-0.9.4-SNAPSHOT.jar:0.9.4-SNAPSHOT] > at > org.apache.asterix.optimizer.rules.am.IntroduceSelectAccessMethodRule.checkAndApplyTheSelectTransformation(IntroduceSelectAccessMethodRule.java:327) > ~[asterix-algebra-0.9.4-SNAPSHOT.jar:0.9.4-SNAPSHOT] > at > org.apache.asterix.optimizer.rules.am.IntroduceSelectAccessMethodRule.rewritePre(IntroduceSelectAccessMethodRule.java:167) > ~[asterix-algebra-0.9.4-SNAPSHOT.jar:0.9.4-SNAPSHOT] > at > org.apache.hyracks.algebricks.core.rewriter.base.AbstractRuleController.rewriteOperatorRef(AbstractRuleController.java:91) > ~[algebricks-core-0.3.4-SNAPSHOT.jar:0.3.4-SNAPSHOT] > at > org.apache.hyracks.algebricks.compiler.rewriter.rulecontrollers.SequentialFixpointRuleController.rewriteWithRuleCollection(SequentialFixpointRuleController.java:53) > ~[algebricks-compiler-0.3.4-SNAPSHOT.jar:0.3.4-SNAPSHOT] > at > org.apache.hyracks.algebricks.core.rewriter.base.HeuristicOptimizer.runOptimizationSets(HeuristicOptimizer.java:102) > ~[algebricks-core-0.3.4-SNAPSHOT.jar:0.3.4-SNAPSHOT] > at > org.apache.hyracks.algebricks.core.rewriter.base.HeuristicOptimizer.optimize(HeuristicOptimizer.java:82) > ~[algebricks-core-0.3.4-SNAPSHOT.jar:0.3.4-SNAPSHOT] > at > org.apache.hyracks.algebricks.compiler.api.HeuristicCompilerFactoryBuilder$1$1.optimize(HeuristicCompilerFactoryBuilder.java:90) > ~[algebricks-compiler-0.3.4-SNAPSHOT.jar:0.3.4-SNAPSHOT] > at > org.apache.asterix.api.common.APIFramework.compileQuery(APIFramework.java:269) > ~[asterix-app-0.9.4-SNAPSHOT.jar:0.9.4-SNAPSHOT] > at > org.apache.asterix.app.translator.QueryTranslator.rewriteCompileQuery(QueryTranslator.java:1897) > ~[asterix-app-0.9.4-SNAPSHOT.jar:0.9.4-SNAPSHOT] > at > org.apache.asterix.app.translator.QueryTranslator.lambda$handleQuery$20(QueryTranslator.java:2373) > [asterix-app-0.9.4-SNAPSHOT.jar:0.9.4-SNAPSHOT] > at > org.apache.asterix.app.translator.QueryTranslator$$Lambda$141/916493385.compile(Unknown > Source) [asterix-app-0.9.4-SNAPSHOT.jar:0.9.4-SNAPSHOT] > at > org.apache.asterix.app.translator.QueryTranslator.createAndRunJob(QueryTranslator.java:2496) > [asterix-app-0.9.4-SNAPSHOT.jar:0.9.4-SNAPSHOT] > at > org.apache.asterix.app.translator.QueryTranslator.deliverResult(QueryTranslator.java:2406) > [asterix-app-0.9.4-SNAPSHOT.jar:0.9.4-SNAPSHOT] > at > org.apache.asterix.app.translator.QueryTranslator.handleQuery(QueryTranslator.java:2385) > [asterix-app-0.9.4-SNAPSHOT.jar:0.9.4-SNAPSHOT] > at > org.apache.asterix.app.translator.QueryTranslator.compileAndExecute(QueryTranslator.java:381) > [asterix-app-0.9.4-SNAPSHOT.jar:0.9.4-SNAPSHOT] > at org.apache.asterix.api.http.server.ApiServlet.post(ApiServlet.java:168) > [asterix-app-0.9.4-SNAPSHOT.jar:0.9.4-SNAPSHOT] > at > org.apache.hyracks.http.server.AbstractServlet.handle(AbstractServlet.java:92) > [hyracks-http-0.3.4-SNAPSHOT.jar:0.3.4-SNAPSHOT] > at > org.apache.hyracks.http.server.HttpRequestHandler.handle(HttpRequestHandler.java:71) > [hyracks-http-0.3.4-SNAPSHOT.jar:0.3.4-SNAPSHOT] > at > org.apache.hyracks.http.server.HttpRequestHandler.call(HttpRequestHandler.java:56) > [hyracks-http-0.3.4-SNAPSHOT.jar:0.3.4-SNAPSHOT] > at > org.apache.hyracks.http.server.HttpRequestHandler.call(HttpRequestHandler.java:37) > [hyracks-http-0.3.4-SNAPSHOT.jar:0.3.4-SNAPSHOT] > at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0] > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) > [?:1.8.0] > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) > [?:1.8.0] > at java.lang.Thread.run(Thread.java:744) [?:1.8.0]{code} > -- This message was sent by Atlassian JIRA (v7.6.3#76005)