[ https://issues.apache.org/jira/browse/ASTERIXDB-1988?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Taewoo Kim reassigned ASTERIXDB-1988: ------------------------------------- Assignee: Ildar Absalyamov > The nested primary key should not be re-assigned. > ------------------------------------------------- > > Key: ASTERIXDB-1988 > URL: https://issues.apache.org/jira/browse/ASTERIXDB-1988 > Project: Apache AsterixDB > Issue Type: Bug > Reporter: Taewoo Kim > Assignee: Ildar Absalyamov > > Currently, if the primary key of a dataset is nested, during the query > compilation, it is assigned by an assign operator again. This should be > avoidable since this is not necessary. You can see this in the > "/asterix-app/src/test/resources/runtimets/queries_sqlpp/nested-index/index-selection/orders-index-custkey" > test. > Query - > {code} > drop dataverse tpch if exists; > create dataverse tpch; > use tpch; > create type tpch.OrderTypetmp as > closed { > o_orderkey : bigint, > o_custkey : bigint, > o_orderstatus : string, > o_totalprice : double, > o_orderdate : string, > o_orderpriority : string, > o_clerk : string, > o_shippriority : bigint, > o_comment : string > } > create type tpch.OrderType as > closed { > nested : OrderTypetmp > } > create dataset Orderstmp(OrderTypetmp) primary key o_orderkey; > create dataset Orders(OrderType) primary key nested.o_orderkey; > create index idx_Orders_Custkey on Orders (nested.o_custkey) type btree; > select element > {'o_orderkey':o.nested.o_orderkey,'o_custkey':o.nested.o_custkey} > from Orders as o > where (o.nested.o_custkey = 40) > order by o.nested.o_orderkey > ; > {code} > Nested Version (above) > {code} > distribute result [$$11] > -- DISTRIBUTE_RESULT |PARTITIONED| > exchange > -- ONE_TO_ONE_EXCHANGE |PARTITIONED| > project ([$$11]) > -- STREAM_PROJECT |PARTITIONED| > assign [$$11] <- [{"o_orderkey": $$17, "o_custkey": $$16}] > -- ASSIGN |PARTITIONED| > exchange > -- SORT_MERGE_EXCHANGE [$$17(ASC) ] |PARTITIONED| > order (ASC, $$17) > -- STABLE_SORT [$$17(ASC)] |PARTITIONED| > exchange > -- ONE_TO_ONE_EXCHANGE |PARTITIONED| > select (eq($$16, 40)) > -- STREAM_SELECT |PARTITIONED| > project ([$$16, $$17]) > -- STREAM_PROJECT |PARTITIONED| > assign [$$17, $$16] <- [$$20.getField(0), $$20.getField(1)] > -- ASSIGN |PARTITIONED| > project ([$$20]) > -- STREAM_PROJECT |PARTITIONED| > assign [$$20] <- [$$o.getField(0)] > -- ASSIGN |PARTITIONED| > project ([$$o]) > -- STREAM_PROJECT |PARTITIONED| > exchange > -- ONE_TO_ONE_EXCHANGE |PARTITIONED| > unnest-map [$$15, $$o] <- index-search("Orders", > 0, "tpch", "Orders", FALSE, FALSE, 1, $$24, 1, $$24, TRUE, TRUE, TRUE) > -- BTREE_SEARCH |PARTITIONED| > exchange > -- ONE_TO_ONE_EXCHANGE |PARTITIONED| > order (ASC, $$24) > -- STABLE_SORT [$$24(ASC)] |PARTITIONED| > exchange > -- ONE_TO_ONE_EXCHANGE |PARTITIONED| > project ([$$24]) > -- STREAM_PROJECT |PARTITIONED| > exchange > -- ONE_TO_ONE_EXCHANGE |PARTITIONED| > unnest-map [$$23, $$24] <- > index-search("idx_Orders_Custkey", 0, "tpch", "Orders", FALSE, FALSE, 1, > $$21, 1, $$22, TRUE, TRUE, TRUE) > -- BTREE_SEARCH |PARTITIONED| > exchange > -- ONE_TO_ONE_EXCHANGE > |PARTITIONED| > assign [$$21, $$22] <- [40, 40] > -- ASSIGN |PARTITIONED| > empty-tuple-source > -- EMPTY_TUPLE_SOURCE > |PARTITIONED| > {code} > Non-nested > {code} > distribute result [$$8] > -- DISTRIBUTE_RESULT |PARTITIONED| > exchange > -- ONE_TO_ONE_EXCHANGE |PARTITIONED| > project ([$$8]) > -- STREAM_PROJECT |PARTITIONED| > assign [$$8] <- [{"o_orderkey": $$11, "o_custkey": $$10}] > -- ASSIGN |PARTITIONED| > exchange > -- SORT_MERGE_EXCHANGE [$$11(ASC) ] |PARTITIONED| > select (eq($$10, 40)) > -- STREAM_SELECT |PARTITIONED| > project ([$$10, $$11]) > -- STREAM_PROJECT |PARTITIONED| > assign [$$10] <- [$$o.getField(1)] > -- ASSIGN |PARTITIONED| > exchange > -- ONE_TO_ONE_EXCHANGE |PARTITIONED| > unnest-map [$$11, $$o] <- index-search("Orders", 0, "tpch", > "Orders", FALSE, FALSE, 1, $$17, 1, $$17, TRUE, TRUE, TRUE) > -- BTREE_SEARCH |PARTITIONED| > exchange > -- ONE_TO_ONE_EXCHANGE |PARTITIONED| > order (ASC, $$17) > -- STABLE_SORT [$$17(ASC)] |PARTITIONED| > exchange > -- ONE_TO_ONE_EXCHANGE |PARTITIONED| > project ([$$17]) > -- STREAM_PROJECT |PARTITIONED| > exchange > -- ONE_TO_ONE_EXCHANGE |PARTITIONED| > unnest-map [$$16, $$17] <- > index-search("idx_Orders_Custkey", 0, "tpch", "Orders", FALSE, FALSE, 1, > $$14, 1, $$15, TRUE, TRUE, TRUE) > -- BTREE_SEARCH |PARTITIONED| > exchange > -- ONE_TO_ONE_EXCHANGE |PARTITIONED| > assign [$$14, $$15] <- [40, 40] > -- ASSIGN |PARTITIONED| > empty-tuple-source > -- EMPTY_TUPLE_SOURCE |PARTITIONED| > {code} > You can see that the primary key is not assigned again in the non-nested > version. But, it is assigned again in the nested version. -- This message was sent by Atlassian JIRA (v6.4.14#64029)