[ 
https://issues.apache.org/jira/browse/ASTERIXDB-3521?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Hussain Towaileb updated ASTERIXDB-3521:
----------------------------------------
    Description: 
Datasource functions are replicated even if used with different argument

For example the following even if called with different parameters, would end 
up replicating and returning the same result by randomly picking one of the 
functions and replicating it.
{code:java}
SELECT dump_index("Default", "test", "test_someName_idx") as stringIndex
UNION ALL
SELECT dump_index("Default", "test", "test_someField_idx") as intIndex; {code}
Plan:
{code:java}
distribute result [$$11] [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
-- DISTRIBUTE_RESULT  |UNPARTITIONED|
  exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
  -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
    union ($$16, $$17, $$11) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
    -- UNION_ALL  |UNPARTITIONED|
      exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
      -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
        project ([$$16]) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
        -- STREAM_PROJECT  |UNPARTITIONED|
          assign [$$16] <- [cast({"stringIndex": $$13})] [cardinality: 0.0, 
op-cost: 0.0, total-cost: 0.0]
          -- ASSIGN  |UNPARTITIONED|
            project ([$$13]) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
            -- STREAM_PROJECT  |UNPARTITIONED|
              assign [$$13] <- [$$15] [cardinality: 0.0, op-cost: 0.0, 
total-cost: 0.0]
              -- ASSIGN  |UNPARTITIONED|
                exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
                  replicate [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                  -- REPLICATE  |UNPARTITIONED|
                    exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                    -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
                      aggregate [$$15] <- [listify($$14)] [cardinality: 0.0, 
op-cost: 0.0, total-cost: 0.0]
                      -- AGGREGATE  |UNPARTITIONED|
                        exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 
0.0]
                        -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
                          data-scan []<-[$$14] <- asterix.dump-index. 
[cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                          -- DATASOURCE_SCAN  |PARTITIONED|
                            exchange [cardinality: 0.0, op-cost: 0.0, 
total-cost: 0.0]
                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                              empty-tuple-source [cardinality: 0.0, op-cost: 
0.0, total-cost: 0.0]
                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
      exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
      -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
        project ([$$17]) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
        -- STREAM_PROJECT  |UNPARTITIONED|
          assign [$$17] <- [cast({"intIndex": $$15})] [cardinality: 0.0, 
op-cost: 0.0, total-cost: 0.0]
          -- ASSIGN  |UNPARTITIONED|
            exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
            -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
              replicate [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
              -- REPLICATE  |UNPARTITIONED|
                exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
                  aggregate [$$15] <- [listify($$14)] [cardinality: 0.0, 
op-cost: 0.0, total-cost: 0.0]
                  -- AGGREGATE  |UNPARTITIONED|
                    exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                    -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
                      data-scan []<-[$$14] <- asterix.dump-index. [cardinality: 
0.0, op-cost: 0.0, total-cost: 0.0]
                      -- DATASOURCE_SCAN  |PARTITIONED|
                        exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 
0.0]
                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                          empty-tuple-source [cardinality: 0.0, op-cost: 0.0, 
total-cost: 0.0]
                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED| {code}

  was:
Datasource functions are replicated even if used with different argument

For example the following even if called with different parameters, would end 
up replicating and returning the same result by randomly picking one of the 
functions and replicating it.

SELECT dump_index("Default", "test", "test_someName_idx") as stringIndex

UNION ALL

SELECT dump_index("Default", "test", "test_someField_idx") as intIndex;

 

Plan:
{code:java}
distribute result [$$11] [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
-- DISTRIBUTE_RESULT  |UNPARTITIONED|
  exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
  -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
    union ($$16, $$17, $$11) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
    -- UNION_ALL  |UNPARTITIONED|
      exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
      -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
        project ([$$16]) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
        -- STREAM_PROJECT  |UNPARTITIONED|
          assign [$$16] <- [cast({"stringIndex": $$13})] [cardinality: 0.0, 
op-cost: 0.0, total-cost: 0.0]
          -- ASSIGN  |UNPARTITIONED|
            project ([$$13]) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
            -- STREAM_PROJECT  |UNPARTITIONED|
              assign [$$13] <- [$$15] [cardinality: 0.0, op-cost: 0.0, 
total-cost: 0.0]
              -- ASSIGN  |UNPARTITIONED|
                exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
                  replicate [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                  -- REPLICATE  |UNPARTITIONED|
                    exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                    -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
                      aggregate [$$15] <- [listify($$14)] [cardinality: 0.0, 
op-cost: 0.0, total-cost: 0.0]
                      -- AGGREGATE  |UNPARTITIONED|
                        exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 
0.0]
                        -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
                          data-scan []<-[$$14] <- asterix.dump-index. 
[cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                          -- DATASOURCE_SCAN  |PARTITIONED|
                            exchange [cardinality: 0.0, op-cost: 0.0, 
total-cost: 0.0]
                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                              empty-tuple-source [cardinality: 0.0, op-cost: 
0.0, total-cost: 0.0]
                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
      exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
      -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
        project ([$$17]) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
        -- STREAM_PROJECT  |UNPARTITIONED|
          assign [$$17] <- [cast({"intIndex": $$15})] [cardinality: 0.0, 
op-cost: 0.0, total-cost: 0.0]
          -- ASSIGN  |UNPARTITIONED|
            exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
            -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
              replicate [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
              -- REPLICATE  |UNPARTITIONED|
                exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
                  aggregate [$$15] <- [listify($$14)] [cardinality: 0.0, 
op-cost: 0.0, total-cost: 0.0]
                  -- AGGREGATE  |UNPARTITIONED|
                    exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
                    -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
                      data-scan []<-[$$14] <- asterix.dump-index. [cardinality: 
0.0, op-cost: 0.0, total-cost: 0.0]
                      -- DATASOURCE_SCAN  |PARTITIONED|
                        exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 
0.0]
                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                          empty-tuple-source [cardinality: 0.0, op-cost: 0.0, 
total-cost: 0.0]
                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED| {code}


> Datasource functions are replicated even if used with different arguments
> -------------------------------------------------------------------------
>
>                 Key: ASTERIXDB-3521
>                 URL: https://issues.apache.org/jira/browse/ASTERIXDB-3521
>             Project: Apache AsterixDB
>          Issue Type: Bug
>          Components: FUN - Functions
>    Affects Versions: 0.9.9
>            Reporter: Hussain Towaileb
>            Assignee: Hussain Towaileb
>            Priority: Major
>             Fix For: 0.9.10
>
>
> Datasource functions are replicated even if used with different argument
> For example the following even if called with different parameters, would end 
> up replicating and returning the same result by randomly picking one of the 
> functions and replicating it.
> {code:java}
> SELECT dump_index("Default", "test", "test_someName_idx") as stringIndex
> UNION ALL
> SELECT dump_index("Default", "test", "test_someField_idx") as intIndex; {code}
> Plan:
> {code:java}
> distribute result [$$11] [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
> -- DISTRIBUTE_RESULT  |UNPARTITIONED|
>   exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
>   -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
>     union ($$16, $$17, $$11) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
>     -- UNION_ALL  |UNPARTITIONED|
>       exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
>       -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
>         project ([$$16]) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
>         -- STREAM_PROJECT  |UNPARTITIONED|
>           assign [$$16] <- [cast({"stringIndex": $$13})] [cardinality: 0.0, 
> op-cost: 0.0, total-cost: 0.0]
>           -- ASSIGN  |UNPARTITIONED|
>             project ([$$13]) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
>             -- STREAM_PROJECT  |UNPARTITIONED|
>               assign [$$13] <- [$$15] [cardinality: 0.0, op-cost: 0.0, 
> total-cost: 0.0]
>               -- ASSIGN  |UNPARTITIONED|
>                 exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
>                 -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
>                   replicate [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
>                   -- REPLICATE  |UNPARTITIONED|
>                     exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
>                     -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
>                       aggregate [$$15] <- [listify($$14)] [cardinality: 0.0, 
> op-cost: 0.0, total-cost: 0.0]
>                       -- AGGREGATE  |UNPARTITIONED|
>                         exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 
> 0.0]
>                         -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
>                           data-scan []<-[$$14] <- asterix.dump-index. 
> [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
>                           -- DATASOURCE_SCAN  |PARTITIONED|
>                             exchange [cardinality: 0.0, op-cost: 0.0, 
> total-cost: 0.0]
>                             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
>                               empty-tuple-source [cardinality: 0.0, op-cost: 
> 0.0, total-cost: 0.0]
>                               -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
>       exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
>       -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
>         project ([$$17]) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
>         -- STREAM_PROJECT  |UNPARTITIONED|
>           assign [$$17] <- [cast({"intIndex": $$15})] [cardinality: 0.0, 
> op-cost: 0.0, total-cost: 0.0]
>           -- ASSIGN  |UNPARTITIONED|
>             exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
>             -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
>               replicate [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
>               -- REPLICATE  |UNPARTITIONED|
>                 exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
>                 -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
>                   aggregate [$$15] <- [listify($$14)] [cardinality: 0.0, 
> op-cost: 0.0, total-cost: 0.0]
>                   -- AGGREGATE  |UNPARTITIONED|
>                     exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
>                     -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
>                       data-scan []<-[$$14] <- asterix.dump-index. 
> [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
>                       -- DATASOURCE_SCAN  |PARTITIONED|
>                         exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 
> 0.0]
>                         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
>                           empty-tuple-source [cardinality: 0.0, op-cost: 0.0, 
> total-cost: 0.0]
>                           -- EMPTY_TUPLE_SOURCE  |PARTITIONED| {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to