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

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

Commit cb3ca25f3c1178c47570246cc361614ef6bfb377 in asterixdb's branch 
refs/heads/master from [~wangsaeu]
[ https://git-wip-us.apache.org/repos/asf?p=asterixdb.git;h=cb3ca25 ]

[ASTERIXDB-2437][COMP] Ensure the index-only plan on a composite index

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

Details:
- Ensure the proper build of an index-only plan on a composite index
  where both fields are used in the SELECT condition and only one field
  is returned.

Change-Id: Idcc4cbe08323e0c6edb4a01637b2017128da1ab5
Reviewed-on: https://asterix-gerrit.ics.uci.edu/2854
Sonar-Qube: Jenkins <[email protected]>
Tested-by: Jenkins <[email protected]>
Integration-Tests: Jenkins <[email protected]>
Reviewed-by: Dmitry Lychagin <[email protected]>


> Index-only plan cannot be generated for a composite index if both fields are 
> used and only one field is returned.
> -----------------------------------------------------------------------------------------------------------------
>
>                 Key: ASTERIXDB-2437
>                 URL: https://issues.apache.org/jira/browse/ASTERIXDB-2437
>             Project: Apache AsterixDB
>          Issue Type: Bug
>            Reporter: Taewoo Kim
>            Assignee: Taewoo Kim
>            Priority: Major
>
> When there is a composite index,  if both fields are used in the select 
> condition and only one field is returned, the compiler generates an exception.
>  
> DDL and query:
> {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;
> create index create_at_status_count_idx on ds_tweet(user.create_at, 
> user.statues_count);
> select value count(first.create_at) from (
> select t.user.create_at, t.user.statues_count, t.id from ds_tweet t
> where
>       t.user.create_at   >=
>       date_from_unix_time_in_days(10000) and
>       t.user.create_at   <
>       date_from_unix_time_in_days(12000) and
>           t.user.statues_count  >= 0 and
>           t.user.statues_count  <  1000000
> ) first;
> {code}
>  
> Exception:
> {code:java}
> org.apache.hyracks.algebricks.common.exceptions.AlgebricksException: Could 
> not infer type for variable '$$57'.
> at 
> org.apache.asterix.optimizer.rules.SetClosedRecordConstructorsRule$SettingClosedRecordVisitor.visitVariableReferenceExpression(SetClosedRecordConstructorsRule.java:170)
>  ~[asterix-algebra-0.9.4-SNAPSHOT.jar:0.9.4-SNAPSHOT]
> at 
> org.apache.asterix.optimizer.rules.SetClosedRecordConstructorsRule$SettingClosedRecordVisitor.visitVariableReferenceExpression(SetClosedRecordConstructorsRule.java:77)
>  ~[asterix-algebra-0.9.4-SNAPSHOT.jar:0.9.4-SNAPSHOT]
> at 
> org.apache.hyracks.algebricks.core.algebra.expressions.VariableReferenceExpression.accept(VariableReferenceExpression.java:93)
>  ~[algebricks-core-0.3.4-SNAPSHOT.jar:0.3.4-SNAPSHOT]
> at 
> org.apache.asterix.optimizer.rules.SetClosedRecordConstructorsRule$SettingClosedRecordVisitor.visitFunctionCallExpression(SetClosedRecordConstructorsRule.java:150)
>  ~[asterix-algebra-0.9.4-SNAPSHOT.jar:0.9.4-SNAPSHOT]
> at 
> org.apache.asterix.optimizer.rules.SetClosedRecordConstructorsRule$SettingClosedRecordVisitor.visitFunctionCallExpression(SetClosedRecordConstructorsRule.java:77)
>  ~[asterix-algebra-0.9.4-SNAPSHOT.jar:0.9.4-SNAPSHOT]
> at 
> org.apache.hyracks.algebricks.core.algebra.visitors.AbstractConstVarFunVisitor.visitScalarFunctionCallExpression(AbstractConstVarFunVisitor.java:39)
>  ~[algebricks-core-0.3.4-SNAPSHOT.jar:0.3.4-SNAPSHOT]
> at 
> org.apache.hyracks.algebricks.core.algebra.expressions.ScalarFunctionCallExpression.accept(ScalarFunctionCallExpression.java:55)
>  ~[algebricks-core-0.3.4-SNAPSHOT.jar:0.3.4-SNAPSHOT]
> at 
> org.apache.asterix.optimizer.rules.SetClosedRecordConstructorsRule$SettingClosedRecordVisitor.visitFunctionCallExpression(SetClosedRecordConstructorsRule.java:150)
>  ~[asterix-algebra-0.9.4-SNAPSHOT.jar:0.9.4-SNAPSHOT]
> at 
> org.apache.asterix.optimizer.rules.SetClosedRecordConstructorsRule$SettingClosedRecordVisitor.visitFunctionCallExpression(SetClosedRecordConstructorsRule.java:77)
>  ~[asterix-algebra-0.9.4-SNAPSHOT.jar:0.9.4-SNAPSHOT]
> at 
> org.apache.hyracks.algebricks.core.algebra.visitors.AbstractConstVarFunVisitor.visitScalarFunctionCallExpression(AbstractConstVarFunVisitor.java:39)
>  ~[algebricks-core-0.3.4-SNAPSHOT.jar:0.3.4-SNAPSHOT]
> at 
> org.apache.hyracks.algebricks.core.algebra.expressions.ScalarFunctionCallExpression.accept(ScalarFunctionCallExpression.java:55)
>  ~[algebricks-core-0.3.4-SNAPSHOT.jar:0.3.4-SNAPSHOT]
> at 
> org.apache.asterix.optimizer.rules.SetClosedRecordConstructorsRule$SettingClosedRecordVisitor.transform(SetClosedRecordConstructorsRule.java:91)
>  ~[asterix-algebra-0.9.4-SNAPSHOT.jar:0.9.4-SNAPSHOT]
> at 
> org.apache.hyracks.algebricks.core.algebra.operators.logical.SelectOperator.acceptExpressionTransform(SelectOperator.java:83)
>  ~[algebricks-core-0.3.4-SNAPSHOT.jar:0.3.4-SNAPSHOT]
> at 
> org.apache.asterix.optimizer.rules.SetClosedRecordConstructorsRule.rewritePost(SetClosedRecordConstructorsRule.java:70)
>  ~[asterix-algebra-0.9.4-SNAPSHOT.jar:0.9.4-SNAPSHOT]{code}
>  
>  
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to