Uploaded image for project: 'Phoenix'
  1. Phoenix
  2. PHOENIX-7090

Hash join throw NullPointerException when subquery return null

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 5.1.2
    • 5.2.0, 5.1.4
    • core
    • None

    Description

      create table t1 (id varchar not null primary key, v1 varchar, v2 varchar);
      create table t2 (id varchar not null primary key, v3 varchar, v4 varchar);
      upsert into t1 values('1','2','3');
      upsert into t2 values('1','4','5');
      select * from t1 where id = (select id from t2 where v3='x' limit 1);

       

      0: jdbc:phoenix:> select * from t1 where id = (select id from t2 where v3='x' limit 1);
      Error: Encountered exception in sub plan [0] execution. (state=,code=0)
      java.sql.SQLException: Encountered exception in sub plan [0] execution.
          at org.apache.phoenix.execute.HashJoinPlan.iterator(HashJoinPlan.java:220)
          at org.apache.phoenix.execute.DelegateQueryPlan.iterator(DelegateQueryPlan.java:144)
          at org.apache.phoenix.execute.DelegateQueryPlan.iterator(DelegateQueryPlan.java:139)
          at org.apache.phoenix.jdbc.PhoenixStatement$1.call(PhoenixStatement.java:320)
          at org.apache.phoenix.jdbc.PhoenixStatement$1.call(PhoenixStatement.java:299)
          at org.apache.phoenix.call.CallRunner.run(CallRunner.java:53)
          at org.apache.phoenix.jdbc.PhoenixStatement.executeQuery(PhoenixStatement.java:298)
          at org.apache.phoenix.jdbc.PhoenixStatement.executeQuery(PhoenixStatement.java:291)
          at org.apache.phoenix.jdbc.PhoenixStatement.execute(PhoenixStatement.java:1994)
          at sqlline.Commands.executeSingleQuery(Commands.java:1054)
          at sqlline.Commands.execute(Commands.java:1003)
          at sqlline.Commands.sql(Commands.java:967)
          at sqlline.SqlLine.dispatch(SqlLine.java:734)
          at sqlline.SqlLine.begin(SqlLine.java:541)
          at sqlline.SqlLine.start(SqlLine.java:267)
          at sqlline.SqlLine.main(SqlLine.java:206)
      Caused by: java.lang.NullPointerException
          at java.util.concurrent.ConcurrentHashMap.putVal(ConcurrentHashMap.java:1011)
          at java.util.concurrent.ConcurrentHashMap.put(ConcurrentHashMap.java:1006)
          at org.apache.phoenix.compile.StatementContext.setSubqueryResult(StatementContext.java:305)
          at org.apache.phoenix.execute.HashJoinPlan$WhereClauseSubPlan.execute(HashJoinPlan.java:467)
          at org.apache.phoenix.execute.HashJoinPlan$1.call(HashJoinPlan.java:188)
          at org.apache.phoenix.execute.HashJoinPlan$1.call(HashJoinPlan.java:184)
          at java.util.concurrent.FutureTask.run(FutureTask.java:266)
          at org.apache.phoenix.job.JobManager$InstrumentedJobFutureTask.run(JobManager.java:185)
          at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
          at java.lang.Thread.run(Thread.java:750)
      
      0: jdbc:phoenix:> select id from t2 where v3='x' limit 1;
      +----+
      | ID |
      +----+
      +----+
      
      0: jdbc:phoenix:> select * from t1 where id = (select id from t2 where v3='4' limit 1);
       +----+----+----+
       | ID | V1 | V2 | 
      +----+----+----+
       | 1  | 2  | 3 |
       +----+----+----+ 
      1 row selected (0.082 seconds)
      0: jdbc:phoenix:> select id from t2 where v3='4' limit 1;
      +----+
      | ID |
      +----+
      | 1  |
      +----+
       

      when the subquery result return null, and use the "=" in sql will lead this..

       

      Attachments

        1. PHOENIX-7090.patch
          3 kB
          chaijunjie

        Issue Links

          Activity

            People

              chaijunjie chaijunjie
              chaijunjie chaijunjie
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: