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

Taewoo Kim updated ASTERIXDB-1700:
----------------------------------
    Description: 
If there multiple indexes on the same field, we use intersect operator to 
integrate the result from each index. In the following AQL query, we have two 
n-gram indexes on the same field. And, the null pointer exception happens.

{code}
java.lang.NullPointerException
        at 
org.apache.hyracks.api.job.JobSpecification.getInputConnectorDescriptor(JobSpecification.java:192)
        at 
org.apache.hyracks.api.job.JobSpecification.getInputConnectorDescriptor(JobSpecification.java:188)
        at 
org.apache.hyracks.api.client.impl.JobActivityGraphBuilder.addSourceEdge(JobActivityGraphBuilder.java:81)
        at 
org.apache.hyracks.dataflow.std.base.AbstractSingleActivityOperatorDescriptor.contributeActivities(AbstractSingleActivityOperatorDescriptor.java:54)
        at 
org.apache.hyracks.api.client.impl.JobSpecificationActivityClusterGraphGeneratorFactory$2.visit(JobSpecificationActivityClusterGraphGeneratorFactory.java:67)
        at 
org.apache.hyracks.api.client.impl.PlanUtils.visitOperator(PlanUtils.java:41)
        at org.apache.hyracks.api.client.impl.PlanUtils.visit(PlanUtils.java:34)
        at 
org.apache.hyracks.api.client.impl.JobSpecificationActivityClusterGraphGeneratorFactory.createActivityClusterGraphGenerator(JobSpecificationActivityClusterGraphGeneratorFactory.java:64)
        at 
org.apache.hyracks.control.cc.work.JobStartWork.doRun(JobStartWork.java:61)
        at 
org.apache.hyracks.control.common.work.SynchronizableWork.run(SynchronizableWork.java:39)
        at 
org.apache.hyracks.control.common.work.WorkQueue$WorkerThread.run(WorkQueue.java:127)
Oct 19, 2016 7:10:22 PM org.apache.asterix.app.translator.QueryTranslator 
handleQuery
{code}

{code}
create type DBLPType as closed {
  id: int64,
  dblpid: string,
  title: string,
  authors: string,
  misc: string
}

create dataset DBLP(DBLPType)
  primary key id on group1;

create index ngram2_index on DBLP(authors) type ngram(2);
create index ngram3_index on DBLP(authors) type ngram(3);

for $o in dataset('DBLP')
let $ed := edit-distance-check($o.authors, "Amihay Motro", 1)
where $ed[0]
return $o
{code}

{code}
-- DISTRIBUTE_RESULT  |PARTITIONED|
  exchange
  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
    select (function-call: asterix:get-item, Args:[function-call: 
asterix:edit-distance-check, Args:[function-call: 
asterix:field-access-by-index, Args:[%0->$$0, AInt32: {3}], AString: {Amihay 
Motro}, AInt64: {1}], AInt64: {0}])
    -- STREAM_SELECT  |PARTITIONED|
      project ([$$0])
      -- STREAM_PROJECT  |PARTITIONED|
        exchange
        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
          unnest-map [$$6, $$0] <- function-call: asterix:index-search, 
Args:[AString: {DBLP}, AInt32: {0}, AString: {test}, AString: {DBLP}, ABoolean: 
{false}, ABoolean: {false}, AInt32: {1}, %0->$$9, AInt32: {1}, %0->$$9, TRUE, 
TRUE, TRUE]
          -- BTREE_SEARCH  |PARTITIONED|
            exchange
            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
              intersect ([$$9] <- [[$$9], [$$11]])
              -- INTERSECT  |PARTITIONED|
                exchange
                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                  order (ASC, %0->$$9) 
                  -- STABLE_SORT [$$9(ASC)]  |PARTITIONED|
                    exchange
                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                      unnest-map [$$9] <- function-call: asterix:index-search, 
Args:[AString: {ngram2_index}, AInt32: {5}, AString: {test}, AString: {DBLP}, 
ABoolean: {false}, ABoolean: {false}, AInt32: {2}, AInt64: {1}, AInt32: {12}, 
AInt32: {1}, %0->$$8]
                      -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH  |PARTITIONED|
                        project ([$$8])
                        -- STREAM_PROJECT  |PARTITIONED|
                          assign [$$8] <- [%0->$$10]
                          -- ASSIGN  |PARTITIONED|
                            exchange
                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                              replicate
                              -- REPLICATE  |PARTITIONED|
                                exchange
                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                  assign [$$10] <- [AString: {Amihay Motro}]
                                  -- ASSIGN  |PARTITIONED|
                                    empty-tuple-source
                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
                exchange
                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                  order (ASC, %0->$$11) 
                  -- STABLE_SORT [$$11(ASC)]  |PARTITIONED|
                    exchange
                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                      unnest-map [$$11] <- function-call: asterix:index-search, 
Args:[AString: {ngram3_index}, AInt32: {5}, AString: {test}, AString: {DBLP}, 
ABoolean: {false}, ABoolean: {false}, AInt32: {2}, AInt64: {1}, AInt32: {12}, 
AInt32: {1}, %0->$$10]
                      -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH  |PARTITIONED|
                        exchange
                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                          replicate
                          -- REPLICATE  |PARTITIONED|
                            exchange
                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                              assign [$$10] <- [AString: {Amihay Motro}]
                              -- ASSIGN  |PARTITIONED|
                                empty-tuple-source
                                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
{code}

  was:
If there multiple indexes on the same field, we use intersect operator to 
integrate the result from each index. In the following AQL query, we have two 
n-gram indexes on the same field. And, the null pointer exception happens.

{code}
java.lang.NullPointerException
        at 
org.apache.hyracks.api.job.JobSpecification.getInputConnectorDescriptor(JobSpecification.java:192)
        at 
org.apache.hyracks.api.job.JobSpecification.getInputConnectorDescriptor(JobSpecification.java:188)
        at 
org.apache.hyracks.api.client.impl.JobActivityGraphBuilder.addSourceEdge(JobActivityGraphBuilder.java:81)
        at 
org.apache.hyracks.dataflow.std.base.AbstractSingleActivityOperatorDescriptor.contributeActivities(AbstractSingleActivityOperatorDescriptor.java:54)
        at 
org.apache.hyracks.api.client.impl.JobSpecificationActivityClusterGraphGeneratorFactory$2.visit(JobSpecificationActivityClusterGraphGeneratorFactory.java:67)
        at 
org.apache.hyracks.api.client.impl.PlanUtils.visitOperator(PlanUtils.java:41)
        at org.apache.hyracks.api.client.impl.PlanUtils.visit(PlanUtils.java:34)
        at 
org.apache.hyracks.api.client.impl.JobSpecificationActivityClusterGraphGeneratorFactory.createActivityClusterGraphGenerator(JobSpecificationActivityClusterGraphGeneratorFactory.java:64)
        at 
org.apache.hyracks.control.cc.work.JobStartWork.doRun(JobStartWork.java:61)
        at 
org.apache.hyracks.control.common.work.SynchronizableWork.run(SynchronizableWork.java:39)
        at 
org.apache.hyracks.control.common.work.WorkQueue$WorkerThread.run(WorkQueue.java:127)
Oct 19, 2016 7:10:22 PM org.apache.asterix.app.translator.QueryTranslator 
handleQuery
{code}

{code}
create type DBLPType as closed {
  id: int64,
  dblpid: string,
  title: string,
  authors: string,
  misc: string
}

create dataset DBLP(DBLPType)
  primary key id on group1;

create index ngram2_index on DBLP(authors) type ngram(2);
create index ngram3_index on DBLP(authors) type ngram(3);

for $o in dataset('DBLP')
let $ed := edit-distance-check($o.authors, "Amihay Motro", 1)
where $ed[0]
return $o
{code}



> edit-distance-check on the fields with the 2-gram and the 3-gram index 
> generates a null pointer exception.
> ----------------------------------------------------------------------------------------------------------
>
>                 Key: ASTERIXDB-1700
>                 URL: https://issues.apache.org/jira/browse/ASTERIXDB-1700
>             Project: Apache AsterixDB
>          Issue Type: Bug
>            Reporter: Taewoo Kim
>            Assignee: Jianfeng Jia
>
> If there multiple indexes on the same field, we use intersect operator to 
> integrate the result from each index. In the following AQL query, we have two 
> n-gram indexes on the same field. And, the null pointer exception happens.
> {code}
> java.lang.NullPointerException
>       at 
> org.apache.hyracks.api.job.JobSpecification.getInputConnectorDescriptor(JobSpecification.java:192)
>       at 
> org.apache.hyracks.api.job.JobSpecification.getInputConnectorDescriptor(JobSpecification.java:188)
>       at 
> org.apache.hyracks.api.client.impl.JobActivityGraphBuilder.addSourceEdge(JobActivityGraphBuilder.java:81)
>       at 
> org.apache.hyracks.dataflow.std.base.AbstractSingleActivityOperatorDescriptor.contributeActivities(AbstractSingleActivityOperatorDescriptor.java:54)
>       at 
> org.apache.hyracks.api.client.impl.JobSpecificationActivityClusterGraphGeneratorFactory$2.visit(JobSpecificationActivityClusterGraphGeneratorFactory.java:67)
>       at 
> org.apache.hyracks.api.client.impl.PlanUtils.visitOperator(PlanUtils.java:41)
>       at org.apache.hyracks.api.client.impl.PlanUtils.visit(PlanUtils.java:34)
>       at 
> org.apache.hyracks.api.client.impl.JobSpecificationActivityClusterGraphGeneratorFactory.createActivityClusterGraphGenerator(JobSpecificationActivityClusterGraphGeneratorFactory.java:64)
>       at 
> org.apache.hyracks.control.cc.work.JobStartWork.doRun(JobStartWork.java:61)
>       at 
> org.apache.hyracks.control.common.work.SynchronizableWork.run(SynchronizableWork.java:39)
>       at 
> org.apache.hyracks.control.common.work.WorkQueue$WorkerThread.run(WorkQueue.java:127)
> Oct 19, 2016 7:10:22 PM org.apache.asterix.app.translator.QueryTranslator 
> handleQuery
> {code}
> {code}
> create type DBLPType as closed {
>   id: int64,
>   dblpid: string,
>   title: string,
>   authors: string,
>   misc: string
> }
> create dataset DBLP(DBLPType)
>   primary key id on group1;
> create index ngram2_index on DBLP(authors) type ngram(2);
> create index ngram3_index on DBLP(authors) type ngram(3);
> for $o in dataset('DBLP')
> let $ed := edit-distance-check($o.authors, "Amihay Motro", 1)
> where $ed[0]
> return $o
> {code}
> {code}
> -- DISTRIBUTE_RESULT  |PARTITIONED|
>   exchange
>   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
>     select (function-call: asterix:get-item, Args:[function-call: 
> asterix:edit-distance-check, Args:[function-call: 
> asterix:field-access-by-index, Args:[%0->$$0, AInt32: {3}], AString: {Amihay 
> Motro}, AInt64: {1}], AInt64: {0}])
>     -- STREAM_SELECT  |PARTITIONED|
>       project ([$$0])
>       -- STREAM_PROJECT  |PARTITIONED|
>         exchange
>         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
>           unnest-map [$$6, $$0] <- function-call: asterix:index-search, 
> Args:[AString: {DBLP}, AInt32: {0}, AString: {test}, AString: {DBLP}, 
> ABoolean: {false}, ABoolean: {false}, AInt32: {1}, %0->$$9, AInt32: {1}, 
> %0->$$9, TRUE, TRUE, TRUE]
>           -- BTREE_SEARCH  |PARTITIONED|
>             exchange
>             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
>               intersect ([$$9] <- [[$$9], [$$11]])
>               -- INTERSECT  |PARTITIONED|
>                 exchange
>                 -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
>                   order (ASC, %0->$$9) 
>                   -- STABLE_SORT [$$9(ASC)]  |PARTITIONED|
>                     exchange
>                     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
>                       unnest-map [$$9] <- function-call: 
> asterix:index-search, Args:[AString: {ngram2_index}, AInt32: {5}, AString: 
> {test}, AString: {DBLP}, ABoolean: {false}, ABoolean: {false}, AInt32: {2}, 
> AInt64: {1}, AInt32: {12}, AInt32: {1}, %0->$$8]
>                       -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH  
> |PARTITIONED|
>                         project ([$$8])
>                         -- STREAM_PROJECT  |PARTITIONED|
>                           assign [$$8] <- [%0->$$10]
>                           -- ASSIGN  |PARTITIONED|
>                             exchange
>                             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
>                               replicate
>                               -- REPLICATE  |PARTITIONED|
>                                 exchange
>                                 -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
>                                   assign [$$10] <- [AString: {Amihay Motro}]
>                                   -- ASSIGN  |PARTITIONED|
>                                     empty-tuple-source
>                                     -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
>                 exchange
>                 -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
>                   order (ASC, %0->$$11) 
>                   -- STABLE_SORT [$$11(ASC)]  |PARTITIONED|
>                     exchange
>                     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
>                       unnest-map [$$11] <- function-call: 
> asterix:index-search, Args:[AString: {ngram3_index}, AInt32: {5}, AString: 
> {test}, AString: {DBLP}, ABoolean: {false}, ABoolean: {false}, AInt32: {2}, 
> AInt64: {1}, AInt32: {12}, AInt32: {1}, %0->$$10]
>                       -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH  
> |PARTITIONED|
>                         exchange
>                         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
>                           replicate
>                           -- REPLICATE  |PARTITIONED|
>                             exchange
>                             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
>                               assign [$$10] <- [AString: {Amihay Motro}]
>                               -- ASSIGN  |PARTITIONED|
>                                 empty-tuple-source
>                                 -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to