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)