You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@asterixdb.apache.org by "Ildar Absalyamov (JIRA)" <ji...@apache.org> on 2016/01/31 09:33:39 UTC
[jira] [Created] (ASTERIXDB-1285) Introduce index rewrite does not
properly handle conjunctive predicates
Ildar Absalyamov created ASTERIXDB-1285:
-------------------------------------------
Summary: Introduce index rewrite does not properly handle conjunctive predicates
Key: ASTERIXDB-1285
URL: https://issues.apache.org/jira/browse/ASTERIXDB-1285
Project: Apache AsterixDB
Issue Type: Bug
Reporter: Ildar Absalyamov
Assignee: Ildar Absalyamov
Priority: Minor
The following query with a conjunctive predicate produces incorrect B-tree search predicate
{noformat}
drop dataverse tpch if exists;
create dataverse tpch;
use dataverse tpch;
create type OrderType as open {
o_orderkey: int32,
o_custkey: int32,
o_orderstatus: string,
o_totalprice: double,
o_orderdate: string,
o_orderpriority: string,
o_clerk: string,
o_shippriority: int32,
o_comment: string
}
create dataset Orders(OrderType) primary key o_orderkey;
for $o in dataset('Orders')
where $o.o_orderkey >=int32("0") and $o.o_orderkey < "foo"
order by $o.o_orderkey
return $o
{noformat}
Incorrect query plan:
{noformat}
distribute result [%0->$$0]
-- DISTRIBUTE_RESULT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
project ([$$0])
-- STREAM_PROJECT |PARTITIONED|
exchange
-- SORT_MERGE_EXCHANGE [$$10(ASC) ] |PARTITIONED|
unnest-map [$$10, $$0] <- function-call: asterix:index-search, Args:[AString: {Orders}, AInt32: {0}, AString: {tpch}, AString: {Orders}, ABoolean: {false}, ABoolean: {false}, ABoolean: {false}, AInt32: {1}, %0->$$12, AInt32: {1}, %0->$$13, TRUE, FALSE, FALSE]
-- BTREE_SEARCH |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
assign [$$12, $$13] <- [AInt32: {0}, AString: {foo}]
-- ASSIGN |PARTITIONED|
empty-tuple-source
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
{noformat}
The correct query plan should have created a search predicate on the first part of conjunctive expression and leave selectOp to filter out the second part.
This happens because introduce index rewrite rule only considers first part of conjunctive predicate to determine the index applicability
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)