Repository: phoenix Updated Branches: refs/heads/4.x-HBase-0.98 7e87f6255 -> 53c53a514
NullPointerException when parsing a query with hints in UNION ALL (Alicia Ying Shu) Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/53c53a51 Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/53c53a51 Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/53c53a51 Branch: refs/heads/4.x-HBase-0.98 Commit: 53c53a5141b50c83a81f970aadbbce0ea79733a3 Parents: 7e87f62 Author: Samarth <[email protected]> Authored: Thu Oct 15 11:28:30 2015 -0700 Committer: Samarth <[email protected]> Committed: Thu Oct 15 11:28:30 2015 -0700 ---------------------------------------------------------------------- .../org/apache/phoenix/end2end/UnionAllIT.java | 34 ++++++++++++++++++++ .../apache/phoenix/execute/AggregatePlan.java | 10 ++++-- .../org/apache/phoenix/execute/ScanPlan.java | 11 +++++-- .../phoenix/iterate/BaseResultIterators.java | 10 ++++-- .../phoenix/iterate/UnionResultIterators.java | 11 +++++-- 5 files changed, 68 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/phoenix/blob/53c53a51/phoenix-core/src/it/java/org/apache/phoenix/end2end/UnionAllIT.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/UnionAllIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/UnionAllIT.java index 1d4055a..6531129 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/UnionAllIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/UnionAllIT.java @@ -645,4 +645,38 @@ public class UnionAllIT extends BaseOwnClusterHBaseManagedTimeIT { conn.close(); } } + + @Test + public void testBug2295() throws Exception { + Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); + Connection conn = DriverManager.getConnection(getUrl(), props); + conn.setAutoCommit(false); + + try { + String ddl = "CREATE TABLE table1(" + + "id BIGINT, col1 VARCHAR, col2 integer, CONSTRAINT pk PRIMARY KEY (id)) IMMUTABLE_ROWS=true"; + createTestTable(getUrl(), ddl); + + ddl = "CREATE TABLE table2(" + + "id BIGINT, col1 VARCHAR, col2 integer, CONSTRAINT pk PRIMARY KEY (id)) IMMUTABLE_ROWS=true"; + createTestTable(getUrl(), ddl); + + ddl = "CREATE index idx_table1_col1 on table1(col1)"; + createTestTable(getUrl(), ddl); + + ddl = "CREATE index idx_table2_col1 on table2(col1)"; + createTestTable(getUrl(), ddl); + + ddl = "Explain SELECT /*+ INDEX(table1 idx_table1_col1) */ col1, col2 from table1 where col1='123' " + + "union all SELECT /*+ INDEX(table2 idx_table2_col1) */ col1, col2 from table2 where col1='123'"; + ResultSet rs = conn.createStatement().executeQuery(ddl); + assertTrue(rs.next()); + } finally { + String ddl = "drop table table1"; + conn.createStatement().execute(ddl); + ddl = "drop table table2"; + conn.createStatement().execute(ddl); + conn.close(); + } + } } http://git-wip-us.apache.org/repos/asf/phoenix/blob/53c53a51/phoenix-core/src/main/java/org/apache/phoenix/execute/AggregatePlan.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/execute/AggregatePlan.java b/phoenix-core/src/main/java/org/apache/phoenix/execute/AggregatePlan.java index 9a415b9..e4f0fbe 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/execute/AggregatePlan.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/execute/AggregatePlan.java @@ -95,12 +95,18 @@ public class AggregatePlan extends BaseQueryPlan { @Override public List<KeyRange> getSplits() { - return splits; + if (splits == null) + return Collections.emptyList(); + else + return splits; } @Override public List<List<Scan>> getScans() { - return scans; + if (scans == null) + return Collections.emptyList(); + else + return scans; } private static class OrderingResultIteratorFactory implements ParallelIteratorFactory { http://git-wip-us.apache.org/repos/asf/phoenix/blob/53c53a51/phoenix-core/src/main/java/org/apache/phoenix/execute/ScanPlan.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/execute/ScanPlan.java b/phoenix-core/src/main/java/org/apache/phoenix/execute/ScanPlan.java index 9f7e482..3098980 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/execute/ScanPlan.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/execute/ScanPlan.java @@ -19,6 +19,7 @@ package org.apache.phoenix.execute; import java.sql.SQLException; +import java.util.Collections; import java.util.List; import org.apache.hadoop.hbase.HTableDescriptor; @@ -156,12 +157,18 @@ public class ScanPlan extends BaseQueryPlan { @Override public List<KeyRange> getSplits() { - return splits; + if (splits == null) + return Collections.emptyList(); + else + return splits; } @Override public List<List<Scan>> getScans() { - return scans; + if (scans == null) + return Collections.emptyList(); + else + return scans; } @Override http://git-wip-us.apache.org/repos/asf/phoenix/blob/53c53a51/phoenix-core/src/main/java/org/apache/phoenix/iterate/BaseResultIterators.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/iterate/BaseResultIterators.java b/phoenix-core/src/main/java/org/apache/phoenix/iterate/BaseResultIterators.java index 341bd57..ec961d5 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/iterate/BaseResultIterators.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/iterate/BaseResultIterators.java @@ -305,12 +305,18 @@ public abstract class BaseResultIterators extends ExplainTable implements Result @Override public List<KeyRange> getSplits() { - return splits; + if (splits == null) + return Collections.emptyList(); + else + return splits; } @Override public List<List<Scan>> getScans() { - return scans; + if (scans == null) + return Collections.emptyList(); + else + return scans; } private static List<byte[]> toBoundaries(List<HRegionLocation> regionLocations) { http://git-wip-us.apache.org/repos/asf/phoenix/blob/53c53a51/phoenix-core/src/main/java/org/apache/phoenix/iterate/UnionResultIterators.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/iterate/UnionResultIterators.java b/phoenix-core/src/main/java/org/apache/phoenix/iterate/UnionResultIterators.java index 2296982..5018dad 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/iterate/UnionResultIterators.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/iterate/UnionResultIterators.java @@ -18,6 +18,7 @@ package org.apache.phoenix.iterate; import java.sql.SQLException; +import java.util.Collections; import java.util.List; import org.apache.hadoop.hbase.client.Scan; @@ -66,7 +67,10 @@ public class UnionResultIterators implements ResultIterators { @Override public List<KeyRange> getSplits() { - return splits; + if (splits == null) + return Collections.emptyList(); + else + return splits; } @Override @@ -113,7 +117,10 @@ public class UnionResultIterators implements ResultIterators { @Override public List<List<Scan>> getScans() { - return scans; + if (scans == null) + return Collections.emptyList(); + else + return scans; } @Override
