1. Expose and correct (new issue to be opened) the byte estimate interface from ResultIterators and apply it in costing; 2. Remove walk-around for PHOENIX-2647 and verify the tests all work; 3. Apply temporary fix for PHOENIX-2712
Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/9ac854ae Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/9ac854ae Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/9ac854ae Branch: refs/heads/calcite Commit: 9ac854ae5335a00d2a61ec6f1929ebc64e7137e2 Parents: bc4b891 Author: maryannxue <maryann....@gmail.com> Authored: Wed Feb 24 16:12:25 2016 -0500 Committer: maryannxue <maryann....@gmail.com> Committed: Wed Feb 24 16:12:25 2016 -0500 ---------------------------------------------------------------------- .../apache/phoenix/calcite/BaseCalciteIT.java | 52 ++++-- .../org/apache/phoenix/calcite/CalciteIT.java | 163 ++++++++++--------- .../apache/phoenix/calcite/CalciteIndexIT.java | 36 ++-- .../phoenix/calcite/rel/PhoenixTableScan.java | 74 +-------- .../org/apache/phoenix/execute/ScanPlan.java | 5 + .../phoenix/iterate/BaseResultIterators.java | 12 +- .../apache/phoenix/iterate/ResultIterators.java | 1 + .../phoenix/iterate/UnionResultIterators.java | 5 + .../apache/phoenix/schema/MetaDataClient.java | 3 + .../iterate/AggregateResultScannerTest.java | 5 + .../iterate/ConcatResultIteratorTest.java | 10 ++ .../iterate/MergeSortResultIteratorTest.java | 15 ++ 12 files changed, 204 insertions(+), 177 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/phoenix/blob/9ac854ae/phoenix-core/src/it/java/org/apache/phoenix/calcite/BaseCalciteIT.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/calcite/BaseCalciteIT.java b/phoenix-core/src/it/java/org/apache/phoenix/calcite/BaseCalciteIT.java index 35c46e7..65a9c6e 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/calcite/BaseCalciteIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/calcite/BaseCalciteIT.java @@ -168,14 +168,28 @@ public class BaseCalciteIT extends BaseClientManagedTimeIT { start.close(); } - public Sql resultIs(boolean ordered, Object[][] expected) throws SQLException { + public Sql resultIs(Object[][] expected) throws SQLException { final Statement statement = start.getConnection().createStatement(); final ResultSet resultSet = statement.executeQuery(sql); - if (ordered) { - checkResultOrdered(resultSet, expected); - } else { - checkResultUnordered(resultSet, expected); - } + checkResultOrdered(resultSet, expected); + resultSet.close(); + statement.close(); + return this; + } + + public Sql resultIs(int orderedCount, Object[][] expected) throws SQLException { + final Statement statement = start.getConnection().createStatement(); + final ResultSet resultSet = statement.executeQuery(sql); + checkResultUnordered(resultSet, expected, orderedCount, null); + resultSet.close(); + statement.close(); + return this; + } + + public Sql resultIsSomeOf(int count, Object[][] expected) throws SQLException { + final Statement statement = start.getConnection().createStatement(); + final ResultSet resultSet = statement.executeQuery(sql); + checkResultUnordered(resultSet, expected, 0, count); resultSet.close(); statement.close(); return this; @@ -198,21 +212,28 @@ public class BaseCalciteIT extends BaseClientManagedTimeIT { assertFalse("Got more rows than expected.", resultSet.next()); } - private void checkResultUnordered(ResultSet resultSet, Object[][] expected) throws SQLException { + private void checkResultUnordered(ResultSet resultSet, Object[][] expected, int orderedCount, Integer checkContains) throws SQLException { List<List<Object>> expectedResults = Lists.newArrayList(); List<List<Object>> actualResults = Lists.newArrayList(); List<List<Object>> errorResults = Lists.newArrayList(); int columnCount = expected.length > 0 ? expected[0].length : 0; for (Object[] e : expected) { List<Object> row = Lists.newArrayList(); - for (Object o : e) { - row.add(canonicalize(o)); + for (int i = orderedCount; i < e.length; i++) { + row.add(canonicalize(e[i])); } expectedResults.add(row); } while (resultSet.next()) { + // check the ordered part + Object[] row = expected[actualResults.size()]; + for (int i = 0; i < orderedCount; i++) { + Object obj = resultSet.getObject(i + 1); + assertEquals(canonicalize(row[i]), canonicalize(obj)); + } + // check the unordered part List<Object> result = Lists.newArrayList(); - for (int i = 0; i < columnCount; i++) { + for (int i = orderedCount; i < columnCount; i++) { result.add(canonicalize(resultSet.getObject(i+1))); } if (!expectedResults.remove(result)) { @@ -220,10 +241,15 @@ public class BaseCalciteIT extends BaseClientManagedTimeIT { } actualResults.add(result); } + boolean allContainedInExpected = errorResults.isEmpty(); + boolean allExpectedFound = checkContains == null ? expectedResults.isEmpty() : checkContains == actualResults.size(); assertTrue( - (expectedResults.isEmpty() ? "" : ("Count not find " + expectedResults + " in actual results: " + actualResults + ".\n")) + - (errorResults.isEmpty() ? "" : "Could not find " + errorResults + " in expected results.\n"), - errorResults.isEmpty() && expectedResults.isEmpty()); + (allContainedInExpected ? "" : "Could not find " + errorResults + " in expected results.\n") + + (allExpectedFound ? "" : + (checkContains == null + ? ("Count not find " + expectedResults + " in actual results: " + actualResults + ".\n") + : ("Expected " + checkContains + " rows, but got " + actualResults.size() + " rows."))), + allContainedInExpected && allExpectedFound); } private Object canonicalize(Object obj) { http://git-wip-us.apache.org/repos/asf/phoenix/blob/9ac854ae/phoenix-core/src/it/java/org/apache/phoenix/calcite/CalciteIT.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/calcite/CalciteIT.java b/phoenix-core/src/it/java/org/apache/phoenix/calcite/CalciteIT.java index df6ac81..fc08252 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/calcite/CalciteIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/calcite/CalciteIT.java @@ -64,7 +64,7 @@ public class CalciteIT extends BaseCalciteIT { start(false, 1000f).sql("select * from aTable where a_string = 'a'") .explainIs("PhoenixToEnumerableConverter\n" + " PhoenixTableScan(table=[[phoenix, ATABLE]], filter=[=($2, 'a')])\n") - .resultIs(false, new Object[][] { + .resultIs(0, new Object[][] { {"00D300000000XHP", "00A123122312312", "a"}, {"00D300000000XHP", "00A223122312312", "a"}, {"00D300000000XHP", "00A323122312312", "a"}, @@ -73,12 +73,12 @@ public class CalciteIT extends BaseCalciteIT { // FIXME: Should be 14:22:56 instead. Wrong due to time zone. start(false, 1000f).sql("select \"DATE\" from " + JOIN_ORDER_TABLE_FULL_NAME + " where \"order_id\" = '000000000000001'") - .resultIs(false, new Object[][]{ + .resultIs(0, new Object[][]{ {new Timestamp(format.parse("2013-11-22 19:22:56").getTime())}}) .close(); start(false, 1000f).sql("select student_id, scores from " + SCORES_TABLE_NAME) - .resultIs(false, new Object[][] { + .resultIs(0, new Object[][] { {1, new Integer[] {85, 80, 82}}, {2, null}, {3, new Integer[] {87, 88, 80}}}) @@ -90,7 +90,7 @@ public class CalciteIT extends BaseCalciteIT { .explainIs("PhoenixToEnumerableConverter\n" + " PhoenixServerProject(ENTITY_ID=[$1], A_STRING=[$2], ORGANIZATION_ID=[$0])\n" + " PhoenixTableScan(table=[[phoenix, ATABLE]], filter=[=($2, 'a')])\n") - .resultIs(false, new Object[][] { + .resultIs(0, new Object[][] { {"00A123122312312", "a", "00D300000000XHP"}, {"00A223122312312", "a", "00D300000000XHP"}, {"00A323122312312", "a", "00D300000000XHP"}, @@ -107,7 +107,7 @@ public class CalciteIT extends BaseCalciteIT { " PhoenixTableScan(table=[[phoenix, ATABLE]])\n" + " PhoenixServerProject(ORGANIZATION_ID=[$0], ENTITY_ID=[$1], A_STRING=[$2])\n" + " PhoenixTableScan(table=[[phoenix, ATABLE]], filter=[=($2, 'a')])\n") - .resultIs(false, new Object[][] { + .resultIs(0, new Object[][] { {"00A123122312312", "a", "00D300000000XHP"}, {"00A223122312312", "a", "00D300000000XHP"}, {"00A323122312312", "a", "00D300000000XHP"}, @@ -122,7 +122,7 @@ public class CalciteIT extends BaseCalciteIT { " PhoenixTableScan(table=[[phoenix, Join, ItemTable]])\n" + " PhoenixServerProject(supplier_id=[$0], NAME=[$1])\n" + " PhoenixTableScan(table=[[phoenix, Join, SupplierTable]])\n") - .resultIs(false, new Object[][] { + .resultIs(0, new Object[][] { {"0000000001", "T1", "0000000001", "S1"}, {"0000000002", "T2", "0000000001", "S1"}, {"0000000003", "T3", "0000000002", "S2"}, @@ -138,7 +138,7 @@ public class CalciteIT extends BaseCalciteIT { " PhoenixTableScan(table=[[phoenix, Join, ItemTable]])\n" + " PhoenixServerProject(supplier_id=[$0], NAME=[$1], PHONE=[$2], ADDRESS=[$3], LOC_ID=[$4], NAME5=[CAST($1):VARCHAR(2) CHARACTER SET \"ISO-8859-1\" COLLATE \"ISO-8859-1$en_US$primary\"])\n" + " PhoenixTableScan(table=[[phoenix, Join, SupplierTable]], filter=[=(CAST($1):VARCHAR(2) CHARACTER SET \"ISO-8859-1\" COLLATE \"ISO-8859-1$en_US$primary\", 'S5')])\n") - .resultIs(false, new Object[][] { + .resultIs(0, new Object[][] { {"0000000005", "T5", 500, 8, 15, "0000000005", "Item T5", "0000000005", "S5", "888-888-5555", "505 YYY Street", "10005"}}) .close(); @@ -151,7 +151,7 @@ public class CalciteIT extends BaseCalciteIT { " PhoenixTableScan(table=[[phoenix, Join, ItemTable]])\n" + " PhoenixServerProject(order_id=[$0], item_id=[$2], QUANTITY=[$4], PRICE7=[CAST($3):DECIMAL(17, 6)])\n" + " PhoenixTableScan(table=[[phoenix, Join, OrderTable]], filter=[<($4, 5000)])\n") - .resultIs(false, new Object[][] { + .resultIs(0, new Object[][] { {"000000000000004", "T6", 600, 15, 4000}}) .close(); } @@ -165,7 +165,7 @@ public class CalciteIT extends BaseCalciteIT { " PhoenixTableScan(table=[[phoenix, Join, SupplierTable]])\n" + " PhoenixServerProject(item_id=[$0], NAME=[$1], supplier_id=[$5])\n" + " PhoenixTableScan(table=[[phoenix, Join, ItemTable]])\n") - .resultIs(false, new Object[][] { + .resultIs(0, new Object[][] { {"0000000001", "T1", "0000000001", "S1"}, {"0000000002", "T2", "0000000001", "S1"}, {"0000000003", "T3", "0000000002", "S2"}, @@ -188,7 +188,7 @@ public class CalciteIT extends BaseCalciteIT { " PhoenixTableScan(table=[[phoenix, Join, ItemTable]])\n" + " PhoenixServerProject(supplier_id=[$0], NAME=[$1])\n" + " PhoenixTableScan(table=[[phoenix, Join, SupplierTable]], scanOrder=[FORWARD])\n") - .resultIs(true, new Object[][] { + .resultIs(new Object[][] { {"0000000001", "T1", "0000000001", "S1"}, {"0000000002", "T2", "0000000001", "S1"}, {"0000000003", "T3", "0000000002", "S2"}, @@ -208,7 +208,7 @@ public class CalciteIT extends BaseCalciteIT { " PhoenixTableScan(table=[[phoenix, ATABLE]], scanOrder=[FORWARD])\n" + " PhoenixServerProject(ORGANIZATION_ID=[$0], ENTITY_ID=[$1], A_STRING=[$2])\n" + " PhoenixTableScan(table=[[phoenix, ATABLE]], scanOrder=[FORWARD])\n") - .resultIs(false, new Object[][] { + .resultIs(0, new Object[][] { {"00A123122312312", "a", "00D300000000XHP"}, {"00A223122312312", "a", "00D300000000XHP"}, {"00A323122312312", "a", "00D300000000XHP"}, @@ -284,7 +284,7 @@ public class CalciteIT extends BaseCalciteIT { " PhoenixTableScan(table=[[phoenix, ATABLE]], filter=[=($2, 'a')])\n" + " PhoenixServerProject(ORGANIZATION_ID=[$0], ENTITY_ID=[$1], A_STRING=[$2], B_STRING=[$3])\n" + " PhoenixTableScan(table=[[phoenix, ATABLE]], filter=[AND(=($2, 'a'), >($3, 'a'))])\n") - .resultIs(false, new Object[][] { + .resultIs(0, new Object[][] { {"00A123122312312", "a", "00D300000000XHP"}, {"00A223122312312", "a", "00D300000000XHP"}, {"00A323122312312", "a", "00D300000000XHP"}, @@ -305,7 +305,7 @@ public class CalciteIT extends BaseCalciteIT { " PhoenixServerSort(sort0=[$1], sort1=[$0], dir0=[ASC], dir1=[ASC])\n" + " PhoenixServerProject(ORGANIZATION_ID=[$0], ENTITY_ID=[$1], A_STRING=[$2])\n" + " PhoenixTableScan(table=[[phoenix, ATABLE]])\n") - .resultIs(false, new Object[][] { + .resultIs(0, new Object[][] { {"00A123122312312", "a", "00D300000000XHP"}, {"00A223122312312", "a", "00D300000000XHP"}, {"00A323122312312", "a", "00D300000000XHP"}, @@ -323,7 +323,7 @@ public class CalciteIT extends BaseCalciteIT { .explainIs("PhoenixToEnumerableConverter\n" + " PhoenixServerAggregate(group=[{}], EXPR$0=[COUNT($3)])\n" + " PhoenixTableScan(table=[[phoenix, ATABLE]])\n") - .resultIs(false, new Object[][] { + .resultIs(0, new Object[][] { {9L}}) .close(); @@ -331,7 +331,7 @@ public class CalciteIT extends BaseCalciteIT { .explainIs("PhoenixToEnumerableConverter\n" + " PhoenixServerAggregate(group=[{0}], EXPR$1=[COUNT($3)], isOrdered=[true])\n" + " PhoenixTableScan(table=[[phoenix, ATABLE]], scanOrder=[FORWARD])\n") - .resultIs(false, new Object[][] { + .resultIs(0, new Object[][] { {"00D300000000XHP", 9L}}) .close(); @@ -339,7 +339,7 @@ public class CalciteIT extends BaseCalciteIT { .explainIs("PhoenixToEnumerableConverter\n" + " PhoenixServerAggregate(group=[{0, 1}], EXPR$2=[COUNT($3)], isOrdered=[true])\n" + " PhoenixTableScan(table=[[phoenix, ATABLE]], scanOrder=[FORWARD])\n") - .resultIs(false, new Object[][] { + .resultIs(0, new Object[][] { {"00D300000000XHP", "00A123122312312", 1L}, {"00D300000000XHP", "00A223122312312", 1L}, {"00D300000000XHP", "00A323122312312", 1L}, @@ -355,7 +355,7 @@ public class CalciteIT extends BaseCalciteIT { .explainIs("PhoenixToEnumerableConverter\n" + " PhoenixServerAggregate(group=[{1}], EXPR$1=[COUNT($3)], isOrdered=[false])\n" + " PhoenixTableScan(table=[[phoenix, ATABLE]])\n") - .resultIs(false, new Object[][] { + .resultIs(0, new Object[][] { {"00A123122312312", 1L}, {"00A223122312312", 1L}, {"00A323122312312", 1L}, @@ -371,7 +371,7 @@ public class CalciteIT extends BaseCalciteIT { .explainIs("PhoenixToEnumerableConverter\n" + " PhoenixServerAggregate(group=[{2}], EXPR$1=[COUNT($3)], isOrdered=[false])\n" + " PhoenixTableScan(table=[[phoenix, ATABLE]])\n") - .resultIs(false, new Object[][] { + .resultIs(0, new Object[][] { {"a", 4L}, {"b", 4L}, {"c", 1L}}) @@ -382,7 +382,7 @@ public class CalciteIT extends BaseCalciteIT { " PhoenixClientProject(EXPR$0=[$1], A_STRING=[$0])\n" + " PhoenixServerAggregate(group=[{2}], EXPR$0=[COUNT()], isOrdered=[false])\n" + " PhoenixTableScan(table=[[phoenix, ATABLE]])\n") - .resultIs(false, new Object[][] { + .resultIs(0, new Object[][] { {4L, "a"}, {4L, "b"}, {1L, "c"}}) @@ -396,7 +396,7 @@ public class CalciteIT extends BaseCalciteIT { " PhoenixTableScan(table=[[phoenix, Join, SupplierTable]])\n" + " PhoenixServerProject(supplier_id=[$5])\n" + " PhoenixTableScan(table=[[phoenix, Join, ItemTable]])\n") - .resultIs(false, new Object[][] { + .resultIs(0, new Object[][] { {"S1", 2L}, {"S2", 2L}, {"S5", 1L}, @@ -412,7 +412,7 @@ public class CalciteIT extends BaseCalciteIT { " PhoenixTableScan(table=[[phoenix, Join, SupplierTable]], scanOrder=[FORWARD])\n" + " PhoenixServerProject(supplier_id=[$5])\n" + " PhoenixTableScan(table=[[phoenix, Join, ItemTable]])\n") - .resultIs(false, new Object[][] { + .resultIs(0, new Object[][] { {"0000000001", 2L}, {"0000000002", 2L}, {"0000000005", 1L}, @@ -423,7 +423,7 @@ public class CalciteIT extends BaseCalciteIT { .explainIs("PhoenixToEnumerableConverter\n" + " PhoenixServerAggregate(group=[{2}], EXPR$1=[SUM($4)], isOrdered=[false])\n" + " PhoenixTableScan(table=[[phoenix, ATABLE]])\n") - .resultIs(false, new Object[][] { + .resultIs(0, new Object[][] { {"a", 10L}, {"b", 26L}, {"c", 9L}}) @@ -439,7 +439,7 @@ public class CalciteIT extends BaseCalciteIT { " PhoenixClientProject(MYPK0=[$0], EXPR$1=[CAST(/($1, $2)):INTEGER NOT NULL])\n" + " PhoenixServerAggregate(group=[{0}], agg#0=[$SUM0($1)], agg#1=[COUNT()], isOrdered=[true])\n" + " PhoenixTableScan(table=[[phoenix, SALTED_TEST_TABLE]], scanOrder=[FORWARD])\n") - .resultIs(false, expectedResult) + .resultIs(0, expectedResult) .close(); } @@ -448,7 +448,7 @@ public class CalciteIT extends BaseCalciteIT { .explainIs("PhoenixToEnumerableConverter\n" + " PhoenixServerAggregate(group=[{2}], isOrdered=[false])\n" + " PhoenixTableScan(table=[[phoenix, ATABLE]])\n") - .resultIs(false, new Object[][]{ + .resultIs(0, new Object[][]{ {"a"}, {"b"}, {"c"}}) @@ -461,7 +461,7 @@ public class CalciteIT extends BaseCalciteIT { " PhoenixServerSort(sort0=[$2], sort1=[$1], dir0=[ASC], dir1=[ASC])\n" + " PhoenixServerProject(ORGANIZATION_ID=[$0], ENTITY_ID=[$1], A_STRING=[$2])\n" + " PhoenixTableScan(table=[[phoenix, ATABLE]])\n") - .resultIs(true, new Object[][] { + .resultIs(new Object[][] { {"00D300000000XHP", "00A123122312312", "a"}, {"00D300000000XHP", "00A223122312312", "a"}, {"00D300000000XHP", "00A323122312312", "a"}, @@ -477,7 +477,7 @@ public class CalciteIT extends BaseCalciteIT { .explainIs("PhoenixToEnumerableConverter\n" + " PhoenixServerProject(ORGANIZATION_ID=[$0], ENTITY_ID=[$1], A_STRING=[$2])\n" + " PhoenixTableScan(table=[[phoenix, ATABLE]], scanOrder=[FORWARD])\n") - .resultIs(true, new Object[][] { + .resultIs(new Object[][] { {"00D300000000XHP", "00A123122312312", "a"}, {"00D300000000XHP", "00A223122312312", "a"}, {"00D300000000XHP", "00A323122312312", "a"}, @@ -493,7 +493,7 @@ public class CalciteIT extends BaseCalciteIT { .explainIs("PhoenixToEnumerableConverter\n" + " PhoenixServerProject(ORGANIZATION_ID=[$0], ENTITY_ID=[$1], A_STRING=[$2])\n" + " PhoenixTableScan(table=[[phoenix, ATABLE]], scanOrder=[REVERSE])\n") - .resultIs(true, new Object[][] { + .resultIs(new Object[][] { {"00D300000000XHP", "00C923122312312", "c"}, {"00D300000000XHP", "00B823122312312", "b"}, {"00D300000000XHP", "00B723122312312", "b"}, @@ -509,7 +509,7 @@ public class CalciteIT extends BaseCalciteIT { .explainIs("PhoenixToEnumerableConverter\n" + " PhoenixServerProject(ORGANIZATION_ID=[$0], ENTITY_ID=[$1], A_STRING=[$2])\n" + " PhoenixTableScan(table=[[phoenix, ATABLE]], scanOrder=[REVERSE])\n") - .resultIs(true, new Object[][] { + .resultIs(new Object[][] { {"00D300000000XHP", "00C923122312312", "c"}, {"00D300000000XHP", "00B823122312312", "b"}, {"00D300000000XHP", "00B723122312312", "b"}, @@ -526,7 +526,7 @@ public class CalciteIT extends BaseCalciteIT { " PhoenixServerSort(sort0=[$0], sort1=[$1], dir0=[ASC], dir1=[DESC])\n" + " PhoenixServerProject(ORGANIZATION_ID=[$0], ENTITY_ID=[$1], A_STRING=[$2])\n" + " PhoenixTableScan(table=[[phoenix, ATABLE]])\n") - .resultIs(true, new Object[][] { + .resultIs(new Object[][] { {"00D300000000XHP", "00C923122312312", "c"}, {"00D300000000XHP", "00B823122312312", "b"}, {"00D300000000XHP", "00B723122312312", "b"}, @@ -544,7 +544,7 @@ public class CalciteIT extends BaseCalciteIT { " PhoenixCompactClientSort(sort0=[$1], sort1=[$0], dir0=[ASC], dir1=[DESC])\n" + " PhoenixServerAggregate(group=[{2}], EXPR$0=[COUNT()], isOrdered=[false])\n" + " PhoenixTableScan(table=[[phoenix, ATABLE]])\n") - .resultIs(true, new Object[][] { + .resultIs(new Object[][] { {1L, "c"}, {4L, "b"}, {4L, "a"}}) @@ -559,7 +559,7 @@ public class CalciteIT extends BaseCalciteIT { " PhoenixTableScan(table=[[phoenix, Join, SupplierTable]])\n" + " PhoenixServerProject(supplier_id=[$5])\n" + " PhoenixTableScan(table=[[phoenix, Join, ItemTable]])\n") - .resultIs(true, new Object[][] { + .resultIs(new Object[][] { {"S6", 1L}, {"S5", 1L}, {"S2", 2L}, @@ -575,7 +575,7 @@ public class CalciteIT extends BaseCalciteIT { " PhoenixTableScan(table=[[phoenix, Join, ItemTable]])\n" + " PhoenixServerProject(supplier_id=[$0], NAME=[$1])\n" + " PhoenixTableScan(table=[[phoenix, Join, SupplierTable]])\n") - .resultIs(true, new Object[][] { + .resultIs(new Object[][] { {"0000000006", "T6", "0000000006", "S6"}, {"0000000005", "T5", "0000000005", "S5"}, {"0000000004", "T4", "0000000002", "S2"}, @@ -592,7 +592,7 @@ public class CalciteIT extends BaseCalciteIT { " PhoenixServerSort(sort0=[$2], sort1=[$1], dir0=[ASC], dir1=[ASC])\n" + " PhoenixServerProject(ORGANIZATION_ID=[$0], ENTITY_ID=[$1], A_STRING=[$2])\n" + " PhoenixTableScan(table=[[phoenix, ATABLE]])\n") - .resultIs(true, new Object[][] { + .resultIs(new Object[][] { {"00D300000000XHP", "00A123122312312", "a"}, {"00D300000000XHP", "00A223122312312", "a"}, {"00D300000000XHP", "00A323122312312", "a"}, @@ -605,7 +605,7 @@ public class CalciteIT extends BaseCalciteIT { " PhoenixLimit(fetch=[5])\n" + " PhoenixServerProject(ORGANIZATION_ID=[$0], ENTITY_ID=[$1], A_STRING=[$2])\n" + " PhoenixTableScan(table=[[phoenix, ATABLE]], scanOrder=[FORWARD])\n") - .resultIs(true, new Object[][] { + .resultIs(new Object[][] { {"00D300000000XHP", "00A123122312312", "a"}, {"00D300000000XHP", "00A223122312312", "a"}, {"00D300000000XHP", "00A323122312312", "a"}, @@ -618,7 +618,7 @@ public class CalciteIT extends BaseCalciteIT { " PhoenixLimit(fetch=[5])\n" + " PhoenixServerProject(ORGANIZATION_ID=[$0], ENTITY_ID=[$1], A_STRING=[$2])\n" + " PhoenixTableScan(table=[[phoenix, ATABLE]], scanOrder=[REVERSE])\n") - .resultIs(true, new Object[][] { + .resultIs(new Object[][] { {"00D300000000XHP", "00C923122312312", "c"}, {"00D300000000XHP", "00B823122312312", "b"}, {"00D300000000XHP", "00B723122312312", "b"}, @@ -631,7 +631,7 @@ public class CalciteIT extends BaseCalciteIT { " PhoenixLimit(fetch=[5])\n" + " PhoenixServerProject(ORGANIZATION_ID=[$0], ENTITY_ID=[$1], A_STRING=[$2])\n" + " PhoenixTableScan(table=[[phoenix, ATABLE]], scanOrder=[REVERSE])\n") - .resultIs(true, new Object[][] { + .resultIs(new Object[][] { {"00D300000000XHP", "00C923122312312", "c"}, {"00D300000000XHP", "00B823122312312", "b"}, {"00D300000000XHP", "00B723122312312", "b"}, @@ -645,7 +645,7 @@ public class CalciteIT extends BaseCalciteIT { " PhoenixServerSort(sort0=[$0], sort1=[$1], dir0=[ASC], dir1=[DESC])\n" + " PhoenixServerProject(ORGANIZATION_ID=[$0], ENTITY_ID=[$1], A_STRING=[$2])\n" + " PhoenixTableScan(table=[[phoenix, ATABLE]])\n") - .resultIs(true, new Object[][] { + .resultIs(new Object[][] { {"00D300000000XHP", "00C923122312312", "c"}, {"00D300000000XHP", "00B823122312312", "b"}, {"00D300000000XHP", "00B723122312312", "b"}, @@ -660,7 +660,7 @@ public class CalciteIT extends BaseCalciteIT { " PhoenixCompactClientSort(sort0=[$1], sort1=[$0], dir0=[ASC], dir1=[DESC])\n" + " PhoenixServerAggregate(group=[{2}], EXPR$0=[COUNT()], isOrdered=[false])\n" + " PhoenixTableScan(table=[[phoenix, ATABLE]])\n") - .resultIs(true, new Object[][] { + .resultIs(new Object[][] { {1L, "c"}, {4L, "b"}}) .close(); @@ -675,7 +675,7 @@ public class CalciteIT extends BaseCalciteIT { " PhoenixTableScan(table=[[phoenix, Join, SupplierTable]])\n" + " PhoenixServerProject(supplier_id=[$5])\n" + " PhoenixTableScan(table=[[phoenix, Join, ItemTable]])\n") - .resultIs(true, new Object[][] { + .resultIs(new Object[][] { {"S6", 1L}, {"S5", 1L}, {"S2", 2L}}) @@ -691,7 +691,7 @@ public class CalciteIT extends BaseCalciteIT { " PhoenixTableScan(table=[[phoenix, Join, ItemTable]])\n" + " PhoenixServerProject(supplier_id=[$0], NAME=[$1])\n" + " PhoenixTableScan(table=[[phoenix, Join, SupplierTable]])\n") - .resultIs(true, new Object[][] { + .resultIs(new Object[][] { {"0000000006", "T6", "0000000006", "S6"}, {"0000000005", "T5", "0000000005", "S5"}, {"0000000004", "T4", "0000000002", "S2"}}) @@ -704,12 +704,16 @@ public class CalciteIT extends BaseCalciteIT { " PhoenixLimit(fetch=[5])\n" + " PhoenixServerProject(ORGANIZATION_ID=[$0], ENTITY_ID=[$1], A_STRING=[$2])\n" + " PhoenixTableScan(table=[[phoenix, ATABLE]])\n") - .resultIs(false, new Object[][] { - {"00D300000000XHP", "00A123122312312", "a"}, - {"00D300000000XHP", "00A223122312312", "a"}, - {"00D300000000XHP", "00A323122312312", "a"}, - {"00D300000000XHP", "00A423122312312", "a"}, - {"00D300000000XHP", "00B523122312312", "b"}}) + .resultIsSomeOf(5, new Object[][] { + {"00D300000000XHP", "00A123122312312", "a"}, + {"00D300000000XHP", "00A223122312312", "a"}, + {"00D300000000XHP", "00A323122312312", "a"}, + {"00D300000000XHP", "00A423122312312", "a"}, + {"00D300000000XHP", "00B523122312312", "b"}, + {"00D300000000XHP", "00B623122312312", "b"}, + {"00D300000000XHP", "00B723122312312", "b"}, + {"00D300000000XHP", "00B823122312312", "b"}, + {"00D300000000XHP", "00C923122312312", "c"}}) .close(); start(false, 1000f).sql("select count(entity_id), a_string from atable group by a_string limit 2") @@ -718,9 +722,10 @@ public class CalciteIT extends BaseCalciteIT { " PhoenixLimit(fetch=[2])\n" + " PhoenixServerAggregate(group=[{2}], EXPR$0=[COUNT()], isOrdered=[false])\n" + " PhoenixTableScan(table=[[phoenix, ATABLE]])\n") - .resultIs(false, new Object[][] { + .resultIsSomeOf(2, new Object[][] { {4L, "a"}, - {4L, "b"}}) + {4L, "b"}, + {1L, "c"}}) .close(); start(false, 1000f).sql("select s.name, count(\"item_id\") from " + JOIN_SUPPLIER_TABLE_FULL_NAME + " s join " + JOIN_ITEM_TABLE_FULL_NAME + " i on s.\"supplier_id\" = i.\"supplier_id\" group by s.name limit 3") @@ -732,10 +737,11 @@ public class CalciteIT extends BaseCalciteIT { " PhoenixTableScan(table=[[phoenix, Join, SupplierTable]])\n" + " PhoenixServerProject(supplier_id=[$5])\n" + " PhoenixTableScan(table=[[phoenix, Join, ItemTable]])\n") - .resultIs(false, new Object[][] { + .resultIsSomeOf(3, new Object[][] { {"S1", 2L}, {"S2", 2L}, - {"S5", 1L}}) + {"S5", 1L}, + {"S6", 1L}}) .close(); start(false, 1000f).sql("SELECT item.\"item_id\", item.name, supp.\"supplier_id\", supp.name FROM " + JOIN_ITEM_TABLE_FULL_NAME + " item JOIN " + JOIN_SUPPLIER_TABLE_FULL_NAME + " supp ON item.\"supplier_id\" = supp.\"supplier_id\" limit 3") @@ -747,10 +753,13 @@ public class CalciteIT extends BaseCalciteIT { " PhoenixTableScan(table=[[phoenix, Join, ItemTable]])\n" + " PhoenixServerProject(supplier_id=[$0], NAME=[$1])\n" + " PhoenixTableScan(table=[[phoenix, Join, SupplierTable]])\n") - .resultIs(false, new Object[][] { + .resultIsSomeOf(3, new Object[][] { {"0000000001", "T1", "0000000001", "S1"}, {"0000000002", "T2", "0000000001", "S1"}, - {"0000000003", "T3", "0000000002", "S2"}}) + {"0000000003", "T3", "0000000002", "S2"}, + {"0000000004", "T4", "0000000002", "S2"}, + {"0000000005", "T5", "0000000005", "S5"}, + {"0000000006", "T6", "0000000006", "S6"}}) .close(); start(false, 1000f).sql("SELECT x from (values (1, 2), (2, 4), (3, 6)) as t(x, y) limit 2") @@ -758,7 +767,7 @@ public class CalciteIT extends BaseCalciteIT { " PhoenixClientProject(X=[$0])\n" + " PhoenixLimit(fetch=[2])\n" + " PhoenixValues(tuples=[[{ 1, 2 }, { 2, 4 }, { 3, 6 }]])\n") - .resultIs(false, new Object[][] {{1}, {2}}) + .resultIsSomeOf(2, new Object[][] {{1}, {2}, {3}}) .close(); } @@ -776,7 +785,7 @@ public class CalciteIT extends BaseCalciteIT { " PhoenixServerProject(item_id=[$0])\n" + " PhoenixTableScan(table=[[phoenix, Join, ItemTable]], scanOrder=[FORWARD])\n" + " PhoenixTableScan(table=[[phoenix, Join, OrderTable]])\n") - .resultIs(false, new Object[][] { + .resultIs(0, new Object[][] { new Object[] {"0000000001", "T1", 1000}, new Object[] {"0000000002", "T2", 3000}, new Object[] {"0000000003", "T3", 5000}, @@ -798,7 +807,7 @@ public class CalciteIT extends BaseCalciteIT { " PhoenixTableScan(table=[[phoenix, Join, OrderTable]])\n" + " PhoenixServerProject(item_id=[$0])\n" + " PhoenixTableScan(table=[[phoenix, Join, ItemTable]], filter=[<($0, '0000000006')])\n") - .resultIs(false, new Object[][] { + .resultIs(0, new Object[][] { new Object[] {"0000000001", "T1", 1000}, new Object[] {"0000000002", "T2", 3000}, new Object[] {"0000000003", "T3", 5000}, @@ -817,7 +826,7 @@ public class CalciteIT extends BaseCalciteIT { .explainIs("PhoenixToEnumerableConverter\n" + " PhoenixClientAggregate(group=[{}], EXPR$0=[COUNT()], EXPR$1=[MAX($1)])\n" + " PhoenixValues(tuples=[[{ 2, 1 }, { 3, 4 }, { 5, 2 }]])\n") - .resultIs(false, new Object[][] {{3L, 4}}) + .resultIs(0, new Object[][] {{3L, 4}}) .close(); } @@ -829,7 +838,7 @@ public class CalciteIT extends BaseCalciteIT { " PhoenixTableScan(table=[[phoenix, ATABLE]], filter=[=($2, 'a')])\n" + " PhoenixServerProject(ENTITY_ID=[$1])\n" + " PhoenixTableScan(table=[[phoenix, ATABLE]], filter=[=($2, 'b')])\n") - .resultIs(false, new Object[][] { + .resultIs(0, new Object[][] { {"00A123122312312"}, {"00A223122312312"}, {"00A323122312312"}, @@ -852,7 +861,7 @@ public class CalciteIT extends BaseCalciteIT { " PhoenixServerSort(sort0=[$0], dir0=[DESC])\n" + " PhoenixServerProject(ENTITY_ID=[$1], A_STRING=[$2])\n" + " PhoenixTableScan(table=[[phoenix, ATABLE]], filter=[=($2, 'c')])\n") - .resultIs(true, new Object[][] { + .resultIs(new Object[][] { {"00C923122312312", "c"}, {"00A423122312312", "a"}, {"00A323122312312", "a"}}) @@ -867,7 +876,7 @@ public class CalciteIT extends BaseCalciteIT { " PhoenixServerSort(sort0=[$0], dir0=[DESC])\n" + " PhoenixServerProject(ENTITY_ID=[$1], A_STRING=[$2])\n" + " PhoenixTableScan(table=[[phoenix, ATABLE]], filter=[=($2, 'c')])\n") - .resultIs(true, new Object[][] { + .resultIs(new Object[][] { {"00C923122312312", "c"}, {"00A423122312312", "a"}, {"00A323122312312", "a"}, @@ -882,7 +891,7 @@ public class CalciteIT extends BaseCalciteIT { " PhoenixUncollect\n" + " PhoenixServerProject(EXPR$0=[$2])\n" + " PhoenixTableScan(table=[[phoenix, SCORES]])\n") - .resultIs(false, new Object[][] { + .resultIs(0, new Object[][] { {85}, {80}, {82}, @@ -898,7 +907,7 @@ public class CalciteIT extends BaseCalciteIT { " PhoenixUncollect\n" + " PhoenixServerProject(EXPR$0=[$2])\n" + " PhoenixTableScan(table=[[phoenix, SCORES]], filter=[=($cor0.STUDENT_ID, $0)])\n") - .resultIs(false, new Object[][] { + .resultIs(0, new Object[][] { {1, 85}, {1, 80}, {1, 82}, @@ -941,8 +950,8 @@ public class CalciteIT extends BaseCalciteIT { " PhoenixTableScan(table=[[phoenix, Join, OrderTable]])\n" + " PhoenixServerAggregate(group=[{2}], isOrdered=[false])\n" + " PhoenixTableScan(table=[[phoenix, Join, OrderTable]])\n"; - start(correlProps).sql(q1).explainIs(p1Correlate).resultIs(false, r1).close(); - start(decorrelProps).sql(q1).explainIs(p1Decorrelated).resultIs(false, r1).close(); + start(correlProps).sql(q1).explainIs(p1Correlate).resultIs(0, r1).close(); + start(decorrelProps).sql(q1).explainIs(p1Decorrelated).resultIs(0, r1).close(); String q2 = "select name from " + JOIN_ITEM_TABLE_FULL_NAME + " i where price = (select max(price) from " + JOIN_ITEM_TABLE_FULL_NAME + " i2 where i.\"item_id\" = i2.\"item_id\" and i.name = i2.name and i2.\"item_id\" <> 'invalid001')"; Object[][] r2 = new Object[][]{ @@ -973,8 +982,8 @@ public class CalciteIT extends BaseCalciteIT { " PhoenixTableScan(table=[[phoenix, Join, ItemTable]])\n" + " PhoenixServerProject(item_id=[$0], NAME=[$1], PRICE=[$2])\n" + " PhoenixTableScan(table=[[phoenix, Join, ItemTable]], filter=[<>($0, 'invalid001')])\n"; - start(correlProps).sql(q2).explainIs(p2Correlate).resultIs(false, r2).close(); - start(decorrelProps).sql(q2).explainIs(p2Decorrelated).resultIs(false, r2).close(); + start(correlProps).sql(q2).explainIs(p2Correlate).resultIs(0, r2).close(); + start(decorrelProps).sql(q2).explainIs(p2Decorrelated).resultIs(0, r2).close(); // Test PhoenixClientSemiJoin String q3 = "select \"item_id\", name from " + JOIN_ITEM_TABLE_FULL_NAME + " i where exists (select 1 from " + JOIN_ORDER_TABLE_FULL_NAME + " o where i.\"item_id\" = o.\"item_id\")"; @@ -1002,8 +1011,8 @@ public class CalciteIT extends BaseCalciteIT { " PhoenixTableScan(table=[[phoenix, Join, ItemTable]], scanOrder=[FORWARD])\n" + " PhoenixServerProject(item_id=[$2])\n" + " PhoenixTableScan(table=[[phoenix, Join, OrderTable]])\n"; - start(correlProps).sql(q3).explainIs(p3Correlate).resultIs(false, r3).close(); - start(decorrelProps).sql(q3).explainIs(p3Decorrelated).resultIs(false, r3).close(); + start(correlProps).sql(q3).explainIs(p3Correlate).resultIs(0, r3).close(); + start(decorrelProps).sql(q3).explainIs(p3Decorrelated).resultIs(0, r3).close(); String q4 = "select \"item_id\", name from " + JOIN_ITEM_TABLE_FULL_NAME + " i where \"item_id\" in (select \"item_id\" from " + JOIN_ORDER_TABLE_FULL_NAME + ")"; Object[][] r4 = new Object[][] { @@ -1018,7 +1027,7 @@ public class CalciteIT extends BaseCalciteIT { " PhoenixTableScan(table=[[phoenix, Join, ItemTable]])\n" + " PhoenixServerProject(item_id=[$2])\n" + " PhoenixTableScan(table=[[phoenix, Join, OrderTable]])\n"; - start(decorrelProps).sql(q4).explainIs(p4Decorrelated).resultIs(false, r4).close(); + start(decorrelProps).sql(q4).explainIs(p4Decorrelated).resultIs(0, r4).close(); String q5 = "select \"order_id\" from " + JOIN_ITEM_TABLE_FULL_NAME + " i JOIN " + JOIN_ORDER_TABLE_FULL_NAME + " o on o.\"item_id\" = i.\"item_id\" where quantity = (select max(quantity) from " + JOIN_ORDER_TABLE_FULL_NAME + " o2 JOIN " + JOIN_ITEM_TABLE_FULL_NAME + " i2 on o2.\"item_id\" = i2.\"item_id\" where i.\"supplier_id\" = i2.\"supplier_id\")"; Object [][] r5 = new Object[][] { @@ -1062,7 +1071,7 @@ public class CalciteIT extends BaseCalciteIT { " PhoenixTableScan(table=[[phoenix, Join, ItemTable]])\n" + " PhoenixServerProject(item_id=[$2])\n" + " PhoenixTableScan(table=[[phoenix, Join, OrderTable]])\n"; - start(correlProps).sql(q5).explainIs(p5Correlate).resultIs(false, r5).close(); + start(correlProps).sql(q5).explainIs(p5Correlate).resultIs(0, r5).close(); //TODO long-running query, disable for now. //start(decorrelProps).sql(q5).explainIs(p5Decorrelated).resultIs(false, r5).close(); @@ -1092,8 +1101,8 @@ public class CalciteIT extends BaseCalciteIT { " PhoenixTableScan(table=[[phoenix, ATABLE]], filter=[=($2, 'a')])\n" + " PhoenixServerAggregate(group=[{0, 3}], isOrdered=[false])\n" + " PhoenixTableScan(table=[[phoenix, ATABLE]], filter=[=($2, 'a')])\n"; - start(correlProps).sql(q6).explainIs(p6Correlate).resultIs(false, r6).close(); - start(decorrelProps).sql(q6).explainIs(p6Decorrelated).resultIs(false, r6).close(); + start(correlProps).sql(q6).explainIs(p6Correlate).resultIs(0, r6).close(); + start(decorrelProps).sql(q6).explainIs(p6Decorrelated).resultIs(0, r6).close(); } @Test public void testInValueList() throws Exception { @@ -1101,7 +1110,7 @@ public class CalciteIT extends BaseCalciteIT { .explainIs("PhoenixToEnumerableConverter\n" + " PhoenixServerProject(ENTITY_ID=[$1])\n" + " PhoenixTableScan(table=[[phoenix, ATABLE]], filter=[AND(=($0, '00D300000000XHP'), OR(=($1, '00A123122312312'), =($1, '00A223122312312'), =($1, '00B523122312312'), =($1, '00B623122312312'), =($1, '00C923122312312')))])\n") - .resultIs(false, new Object[][] { + .resultIs(0, new Object[][] { {"00A123122312312"}, {"00A223122312312"}, {"00B523122312312"}, @@ -1114,7 +1123,7 @@ public class CalciteIT extends BaseCalciteIT { start(false, 1000f).sql("select * from v") .explainIs("PhoenixToEnumerableConverter\n" + " PhoenixTableScan(table=[[phoenix, ATABLE]], filter=[=($2, 'a')])\n") - .resultIs(false, new Object[][] { + .resultIs(0, new Object[][] { {"00D300000000XHP", "00A123122312312", "a"}, {"00D300000000XHP", "00A223122312312", "a"}, {"00D300000000XHP", "00A323122312312", "a"}, @@ -1127,7 +1136,7 @@ public class CalciteIT extends BaseCalciteIT { .explainIs("PhoenixToEnumerableConverter\n" + " PhoenixClientProject(EXPR$0=[NEXT_VALUE('\"SEQ0\"')], C0=[$0])\n" + " PhoenixValues(tuples=[[{ 1 }, { 1 }]])\n") - .resultIs(false, new Object[][]{ + .resultIs(0, new Object[][]{ {1L, 1}, {2L, 1}}) .close(); @@ -1136,7 +1145,7 @@ public class CalciteIT extends BaseCalciteIT { .explainIs("PhoenixToEnumerableConverter\n" + " PhoenixClientProject(EXPR$0=[NEXT_VALUE('\"MY\".\"SEQ1\"')], ENTITY_ID=[$1])\n" + " PhoenixTableScan(table=[[phoenix, ATABLE]], filter=[=($2, 'a')])\n") - .resultIs(false, new Object[][]{ + .resultIs(1, new Object[][]{ {2L, "00A123122312312"}, {4L, "00A223122312312"}, {6L, "00A323122312312"}, @@ -1151,7 +1160,7 @@ public class CalciteIT extends BaseCalciteIT { " PhoenixTableScan(table=[[phoenix, Join, ItemTable]])\n" + " PhoenixServerProject(supplier_id=[$0], NAME=[$1])\n" + " PhoenixTableScan(table=[[phoenix, Join, SupplierTable]])\n") - .resultIs(false, new Object[][] { + .resultIs(1, new Object[][] { {3L, "0000000001", "T1", "0000000001", "S1"}, {4L, "0000000002", "T2", "0000000001", "S1"}, {5L, "0000000003", "T3", "0000000002", "S2"}, @@ -1196,7 +1205,7 @@ public class CalciteIT extends BaseCalciteIT { " JdbcToEnumerableConverter\n" + " JdbcProject(time_id=[$0], the_date=[$1], the_day=[$2], the_month=[$3], the_year=[$4], day_of_month=[$5], week_of_year=[$6], month_of_year=[$7], quarter=[$8], fiscal_period=[$9], the_year10=[CAST($4):INTEGER])\n" + " JdbcTableScan(table=[[foodmart, time_by_day]])\n") - .resultIs(false, new Object[][] { + .resultIs(0, new Object[][] { new Object[] {1997, 1000, 365L}, new Object[] {1997, 2000, 365L}, new Object[] {1997, 3000, 365L}, http://git-wip-us.apache.org/repos/asf/phoenix/blob/9ac854ae/phoenix-core/src/it/java/org/apache/phoenix/calcite/CalciteIndexIT.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/calcite/CalciteIndexIT.java b/phoenix-core/src/it/java/org/apache/phoenix/calcite/CalciteIndexIT.java index d1aea74..067d0fc 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/calcite/CalciteIndexIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/calcite/CalciteIndexIT.java @@ -131,20 +131,20 @@ public class CalciteIndexIT extends BaseCalciteIT { .explainIs("PhoenixToEnumerableConverter\n" + " PhoenixServerAggregate(group=[{}], EXPR$0=[COUNT()])\n" + " PhoenixTableScan(table=[[phoenix, IDXSALTED_NOSALT_TEST_TABLE]], filter=[>(CAST($0):INTEGER, 3)])\n") - .resultIs(false, new Object[][]{{999L}}) + .resultIs(0, new Object[][]{{999L}}) .close(); start(true, 1f).sql("select mypk0, mypk1, col0 from " + NOSALT_TABLE_NAME + " where col0 <= 4") .explainIs("PhoenixToEnumerableConverter\n" + " PhoenixServerProject(MYPK0=[$1], MYPK1=[$2], COL0=[CAST($0):INTEGER])\n" + " PhoenixTableScan(table=[[phoenix, IDXSALTED_NOSALT_TEST_TABLE]], filter=[<=(CAST($0):INTEGER, 4)])\n") - .resultIs(false, new Object[][] { + .resultIs(0, new Object[][] { {2, 3, 4}, {1, 2, 3}}) .close(); start(true, 1f).sql("select * from " + SALTED_TABLE_NAME + " where mypk0 < 3") .explainIs("PhoenixToEnumerableConverter\n" + " PhoenixTableScan(table=[[phoenix, SALTED_TEST_TABLE]], filter=[<($0, 3)])\n") - .resultIs(false, new Object[][] { + .resultIs(0, new Object[][] { {1, 2, 3, 4}, {2, 3, 4, 5}}) .close(); @@ -152,13 +152,13 @@ public class CalciteIndexIT extends BaseCalciteIT { .explainIs("PhoenixToEnumerableConverter\n" + " PhoenixServerAggregate(group=[{}], EXPR$0=[COUNT()])\n" + " PhoenixTableScan(table=[[phoenix, IDX_SALTED_TEST_TABLE]], filter=[>(CAST($0):INTEGER, 3)])\n") - .resultIs(false, new Object[][]{{999L}}) + .resultIs(0, new Object[][]{{999L}}) .close(); start(true, 1f).sql("select mypk0, mypk1, col0 from " + SALTED_TABLE_NAME + " where col0 <= 4") .explainIs("PhoenixToEnumerableConverter\n" + " PhoenixServerProject(MYPK0=[$1], MYPK1=[$2], COL0=[CAST($0):INTEGER])\n" + " PhoenixTableScan(table=[[phoenix, IDX_SALTED_TEST_TABLE]], filter=[<=(CAST($0):INTEGER, 4)])\n") - .resultIs(false, new Object[][] { + .resultIs(0, new Object[][] { {2, 3, 4}, {1, 2, 3}}) .close(); @@ -166,13 +166,13 @@ public class CalciteIndexIT extends BaseCalciteIT { .explainIs("PhoenixToEnumerableConverter\n" + " PhoenixServerAggregate(group=[{}], EXPR$0=[COUNT()])\n" + " PhoenixTableScan(table=[[phoenix, IDXSALTED_SALTED_TEST_TABLE]], filter=[>(CAST($0):INTEGER, 4)])\n") - .resultIs(false, new Object[][]{{999L}}) + .resultIs(0, new Object[][]{{999L}}) .close(); start(true, 1f).sql("select * from " + SALTED_TABLE_NAME + " where col1 <= 5 order by col1") .explainIs("PhoenixToEnumerableConverter\n" + " PhoenixServerProject(MYPK0=[$1], MYPK1=[$2], COL0=[$3], COL1=[CAST($0):INTEGER])\n" + " PhoenixTableScan(table=[[phoenix, IDXSALTED_SALTED_TEST_TABLE]], filter=[<=(CAST($0):INTEGER, 5)], scanOrder=[FORWARD])\n") - .resultIs(true, new Object[][] { + .resultIs(new Object[][] { {1, 2, 3, 4}, {2, 3, 4, 5}}) .close(); @@ -182,7 +182,7 @@ public class CalciteIndexIT extends BaseCalciteIT { " PhoenixTableScan(table=[[phoenix, SALTED_TEST_TABLE]], filter=[>($0, 500)])\n" + " PhoenixServerProject(MYPK0=[$1], MYPK1=[$2], COL0=[$3], COL1=[CAST($0):INTEGER])\n" + " PhoenixTableScan(table=[[phoenix, IDXSALTED_SALTED_TEST_TABLE]], filter=[<(CAST($0):INTEGER, 505)])\n") - .resultIs(false, new Object[][] { + .resultIs(0, new Object[][] { {501, 502, 503, 504, 501, 502, 503, 504}}) .close(); } @@ -192,7 +192,7 @@ public class CalciteIndexIT extends BaseCalciteIT { start(props).sql("select * from " + MULTI_TENANT_TABLE + " where tenant_id = '10' and id <= '0004'") .explainIs("PhoenixToEnumerableConverter\n" + " PhoenixTableScan(table=[[phoenix, MULTITENANT_TEST_TABLE]], filter=[AND(=(CAST($0):VARCHAR(2) CHARACTER SET \"ISO-8859-1\" COLLATE \"ISO-8859-1$en_US$primary\" NOT NULL, '10'), <=($1, '0004'))])\n") - .resultIs(false, new Object[][] { + .resultIs(0, new Object[][] { {"10", "0002", 3, 4, 5}, {"10", "0003", 4, 5, 6}, {"10", "0004", 5, 6, 7}}) @@ -202,7 +202,7 @@ public class CalciteIndexIT extends BaseCalciteIT { .explainIs("PhoenixToEnumerableConverter\n" + " PhoenixServerProject(TENANT_ID=[$0], ID=[$2], COL0=[$3], COL1=[CAST($1):INTEGER], COL2=[$4])\n" + " PhoenixTableScan(table=[[phoenix, IDX_MULTITENANT_TEST_TABLE]], filter=[AND(=(CAST($0):VARCHAR(2) CHARACTER SET \"ISO-8859-1\" COLLATE \"ISO-8859-1$en_US$primary\" NOT NULL, '20'), <(CAST($1):INTEGER, 8))])\n") - .resultIs(false, new Object[][] { + .resultIs(0, new Object[][] { {"20", "0004", 5, 6, 7}, {"20", "0005", 6, 7, 8}}) .close(); @@ -219,7 +219,7 @@ public class CalciteIndexIT extends BaseCalciteIT { start(props).sql("select * from " + MULTI_TENANT_TABLE + " where id = '0284'") .explainIs("PhoenixToEnumerableConverter\n" + " PhoenixTableScan(table=[[phoenix, MULTITENANT_TEST_TABLE]], filter=[=(CAST($0):VARCHAR(4) CHARACTER SET \"ISO-8859-1\" COLLATE \"ISO-8859-1$en_US$primary\" NOT NULL, '0284')])\n") - .resultIs(false, new Object[][] { + .resultIs(0, new Object[][] { {"0284", 285, 286, 287}}) .close(); @@ -227,7 +227,7 @@ public class CalciteIndexIT extends BaseCalciteIT { .explainIs("PhoenixToEnumerableConverter\n" + " PhoenixServerProject(ID=[$1], COL0=[$2], COL1=[CAST($0):INTEGER], COL2=[$3])\n" + " PhoenixTableScan(table=[[phoenix, IDX_MULTITENANT_TEST_TABLE]], filter=[>(CAST($0):INTEGER, 1000)])\n") - .resultIs(false, new Object[][] { + .resultIs(0, new Object[][] { {"0999", 1000, 1001, 1002}, {"1000", 1001, 1002, 1003}, {"1001", 1002, 1003, 1004}, @@ -246,7 +246,7 @@ public class CalciteIndexIT extends BaseCalciteIT { start(props).sql("select * from " + MULTI_TENANT_VIEW1 + " where id = '0512'") .explainIs("PhoenixToEnumerableConverter\n" + " PhoenixTableScan(table=[[phoenix, MULTITENANT_TEST_TABLE]], filter=[=(CAST($0):VARCHAR(4) CHARACTER SET \"ISO-8859-1\" COLLATE \"ISO-8859-1$en_US$primary\" NOT NULL, '0512')])\n") - .resultIs(false, new Object[][] { + .resultIs(0, new Object[][] { {"0512", 513, 514, 515}}) .close(); @@ -254,7 +254,7 @@ public class CalciteIndexIT extends BaseCalciteIT { .explainIs("PhoenixToEnumerableConverter\n" + " PhoenixServerProject(ID=[$1], COL0=[$2], COL1=[CAST($0):INTEGER], COL2=[$3])\n" + " PhoenixTableScan(table=[[phoenix, IDX_MULTITENANT_TEST_TABLE]], filter=[<=(CAST($0):INTEGER, 6)])\n") - .resultIs(false, new Object[][] { + .resultIs(0, new Object[][] { {"0002", 3, 4, 5}, {"0003", 4, 5, 6}, {"0004", 5, 6, 7}}) @@ -264,7 +264,7 @@ public class CalciteIndexIT extends BaseCalciteIT { .explainIs("PhoenixToEnumerableConverter\n" + " PhoenixServerProject(ID=[$1], COL0=[CAST($0):INTEGER])\n" + " PhoenixTableScan(table=[[phoenix, S1, IDX_MULTITENANT_TEST_VIEW1]], filter=[>=(CAST($0):INTEGER, 1000)])\n") - .resultIs(false, new Object[][] { + .resultIs(0, new Object[][] { {"0999", 1000}, {"1000", 1001}, {"1001", 1002}}) @@ -274,7 +274,7 @@ public class CalciteIndexIT extends BaseCalciteIT { start(props).sql("select * from " + MULTI_TENANT_VIEW2 + " where id = '0765'") .explainIs("PhoenixToEnumerableConverter\n" + " PhoenixTableScan(table=[[phoenix, MULTITENANT_TEST_TABLE]], filter=[AND(>($3, 7), =(CAST($0):VARCHAR(4) CHARACTER SET \"ISO-8859-1\" COLLATE \"ISO-8859-1$en_US$primary\" NOT NULL, '0765'))])\n") - .resultIs(false, new Object[][] { + .resultIs(0, new Object[][] { {"0765", 766, 767, 768}}) .close(); @@ -282,7 +282,7 @@ public class CalciteIndexIT extends BaseCalciteIT { .explainIs("PhoenixToEnumerableConverter\n" + " PhoenixServerProject(ID=[$1], COL0=[CAST($0):INTEGER])\n" + " PhoenixTableScan(table=[[phoenix, S2, IDX_MULTITENANT_TEST_VIEW2]], filter=[AND(>=(CAST($0):INTEGER, 272), <=(CAST($0):INTEGER, 275))])\n") - .resultIs(false, new Object[][] { + .resultIs(0, new Object[][] { {"0271", 272}, {"0272", 273}, {"0273", 274}, @@ -294,7 +294,7 @@ public class CalciteIndexIT extends BaseCalciteIT { " PhoenixLimit(fetch=[5])\n" + " PhoenixServerProject(ID=[$1], COL0=[CAST($0):INTEGER])\n" + " PhoenixTableScan(table=[[phoenix, S2, IDX_MULTITENANT_TEST_VIEW2]], scanOrder=[FORWARD])\n") - .resultIs(true, new Object[][] { + .resultIs(new Object[][] { {"0005", 6}, {"0006", 7}, {"0007", 8}, http://git-wip-us.apache.org/repos/asf/phoenix/blob/9ac854ae/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixTableScan.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixTableScan.java b/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixTableScan.java index db6ac24..80c328f 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixTableScan.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixTableScan.java @@ -1,6 +1,5 @@ package org.apache.phoenix.calcite.rel; -import java.io.IOException; import java.sql.SQLException; import java.util.List; @@ -20,7 +19,6 @@ import org.apache.calcite.rex.RexNode; import org.apache.calcite.util.ImmutableBitSet; import org.apache.calcite.util.ImmutableIntList; import org.apache.hadoop.hbase.HConstants; -import org.apache.hadoop.hbase.client.HTableInterface; import org.apache.hadoop.hbase.client.Scan; import org.apache.phoenix.calcite.CalciteUtils; import org.apache.phoenix.calcite.PhoenixTable; @@ -38,9 +36,7 @@ import org.apache.phoenix.execute.ScanPlan; import org.apache.phoenix.execute.TupleProjector; import org.apache.phoenix.expression.Expression; import org.apache.phoenix.expression.LiteralExpression; -import org.apache.phoenix.hbase.index.util.ImmutableBytesPtr; import org.apache.phoenix.iterate.ParallelIteratorFactory; -import org.apache.phoenix.jdbc.PhoenixDatabaseMetaData; import org.apache.phoenix.jdbc.PhoenixStatement; import org.apache.phoenix.parse.SelectStatement; import org.apache.phoenix.query.QueryServices; @@ -49,11 +45,7 @@ import org.apache.phoenix.schema.PColumn; import org.apache.phoenix.schema.PName; import org.apache.phoenix.schema.PTable; import org.apache.phoenix.schema.TableRef; -import org.apache.phoenix.schema.stats.GuidePostsInfo; -import org.apache.phoenix.schema.stats.StatisticsUtil; import org.apache.phoenix.schema.types.PDataType; -import org.apache.phoenix.util.SchemaUtil; - import com.google.common.base.Supplier; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList.Builder; @@ -72,7 +64,7 @@ public class PhoenixTableScan extends TableScan implements PhoenixRel { public final ScanOrder scanOrder; public final ScanRanges scanRanges; - protected final GuidePostsInfo filteredGuideposts; + protected final long estimatedBytes; protected final float rowCountFactor; public static PhoenixTableScan create(RelOptCluster cluster, final RelOptTable table) { @@ -106,8 +98,7 @@ public class PhoenixTableScan extends TableScan implements PhoenixRel { .getProps().getFloat(PhoenixRel.ROW_COUNT_FACTOR, 1f); ScanRanges scanRanges = null; - GuidePostsInfo info = null; - HTableInterface statsHTable = null; + long estimatedSize = 0; if (filter != null) { try { // TODO simplify this code @@ -138,35 +129,16 @@ public class PhoenixTableScan extends TableScan implements PhoenixRel { StatementContext context = new StatementContext(stmt, resolver, new Scan(), new SequenceManager(stmt)); Expression filterExpr = CalciteUtils.toExpression(filter, tmpImplementor); filterExpr = WhereOptimizer.pushKeyExpressionsToScan(context, select, filterExpr); + WhereCompiler.setScanFilter(context, select, filterExpr, true, false); scanRanges = context.getScanRanges(); - if (!scanRanges.isPointLookup() - && !scanRanges.isDegenerate() - && !scanRanges.isEverything()) { - // TODO get the cf and timestamp right. - Scan scan = context.getScan(); - byte[] cf = SchemaUtil.getEmptyColumnFamily(pTable); - statsHTable = phoenixTable.pc.getQueryServices() - .getTable(PhoenixDatabaseMetaData.SYSTEM_STATS_NAME_BYTES); - info = StatisticsUtil.readStatistics( - statsHTable, pTable.getPhysicalName().getBytes(), - new ImmutableBytesPtr(cf), - scan.getStartRow(), - scan.getStopRow(), - HConstants.LATEST_TIMESTAMP).getGuidePosts().get(cf); - } - } catch (SQLException | IOException e) { + ScanPlan plan = new ScanPlan(context, select, tableRef, RowProjector.EMPTY_PROJECTOR, null, OrderBy.EMPTY_ORDER_BY, null, true, null); + estimatedSize = plan.getEstimatedBytes(); + } catch (SQLException e) { throw new RuntimeException(e); - } finally { - if (statsHTable != null) { - try { - statsHTable.close(); - } catch (IOException e) { - } - } } } this.scanRanges = scanRanges; - this.filteredGuideposts = info; + this.estimatedBytes = estimatedSize; } private static ScanOrder getDefaultScanOrder(PhoenixTable table) { @@ -211,37 +183,7 @@ public class PhoenixTableScan extends TableScan implements PhoenixRel { double byteCount; PhoenixTable phoenixTable = table.unwrap(PhoenixTable.class); if (scanRanges != null) { - if (scanRanges.isPointLookup()) { - byteCount = 1.0; - } else if (scanRanges.isDegenerate()) { - byteCount = 0.0; - } else if (scanRanges.isEverything()) { - byteCount = phoenixTable.byteCount; - } else { - if (filteredGuideposts != null) { - byteCount = 0; - for (long b : filteredGuideposts.getByteCounts()) { - byteCount += b; - } - // TODO why zero byteCount? a bug? - if (byteCount == 0 && filteredGuideposts.getGuidePostsCount() > 0) { - PTable pTable = phoenixTable.getTable(); - byte[] emptyCf = SchemaUtil.getEmptyColumnFamily(pTable); - GuidePostsInfo info = pTable.getTableStats().getGuidePosts().get(emptyCf); - byteCount = phoenixTable.byteCount * filteredGuideposts.getGuidePostsCount() / info.getGuidePostsCount(); - } - } else { - PTable pTable = phoenixTable.getTable(); - byte[] emptyCf = SchemaUtil.getEmptyColumnFamily(pTable); - GuidePostsInfo info = pTable.getTableStats().getGuidePosts().get(emptyCf); - if (info != null) { - byteCount = phoenixTable.byteCount / info.getGuidePostsCount() / 2; - } else { - int pkCount = scanRanges.getBoundPkColumnCount(); - byteCount = phoenixTable.byteCount * Math.pow(mq.getSelectivity(this, filter), pkCount); - } - } - } + byteCount = estimatedBytes; } else { byteCount = phoenixTable.byteCount; } http://git-wip-us.apache.org/repos/asf/phoenix/blob/9ac854ae/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 673a641..f622e8e 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 @@ -34,6 +34,7 @@ import org.apache.phoenix.coprocessor.ScanRegionObserver; import org.apache.phoenix.expression.Expression; import org.apache.phoenix.iterate.ChunkedResultIterator; import org.apache.phoenix.iterate.ConcatResultIterator; +import org.apache.phoenix.iterate.DefaultParallelScanGrouper; import org.apache.phoenix.iterate.LimitingResultIterator; import org.apache.phoenix.iterate.MergeSortRowKeyResultIterator; import org.apache.phoenix.iterate.MergeSortTopNResultIterator; @@ -257,4 +258,8 @@ public class ScanPlan extends BaseQueryPlan { } } + public long getEstimatedBytes() throws SQLException { + return new ParallelIterators(this, null, parallelIteratorFactory, DefaultParallelScanGrouper.getInstance()).getEstimatedSize(); + } + } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/phoenix/blob/9ac854ae/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 d321c50..c3da407 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 @@ -147,7 +147,7 @@ public abstract class BaseResultIterators extends ExplainTable implements Result if (isPointLookup || ScanUtil.isAnalyzeTable(scan)) { return false; } - return false; + return true; } private static void initializeScan(QueryPlan plan, Integer perScanLimit) { @@ -560,8 +560,10 @@ public abstract class BaseResultIterators extends ExplainTable implements Result while (guideIndex < gpsSize && (currentGuidePost.compareTo(endKey) <= 0 || endKey.length == 0)) { Scan newScan = scanRanges.intersectScan(scan, currentKeyBytes, currentGuidePostBytes, keyOffset, false); - estimatedRows += gps.getRowCounts().get(guideIndex); - estimatedSize += gps.getByteCounts().get(guideIndex); + if (newScan != null) { + estimatedRows += gps.getRowCounts().get(guideIndex); + estimatedSize += gps.getByteCounts().get(guideIndex); + } scans = addNewScan(parallelScans, scans, newScan, currentGuidePostBytes, false, regionLocation); currentKeyBytes = currentGuidePost.copyBytes(); currentGuidePost = PrefixByteCodec.decode(decoder, input); @@ -872,4 +874,8 @@ public abstract class BaseResultIterators extends ExplainTable implements Result return "ResultIterators [name=" + getName() + ",id=" + scanId + ",scans=" + scans + "]"; } + @Override + public long getEstimatedSize() { + return estimatedSize; + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/phoenix/blob/9ac854ae/phoenix-core/src/main/java/org/apache/phoenix/iterate/ResultIterators.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/iterate/ResultIterators.java b/phoenix-core/src/main/java/org/apache/phoenix/iterate/ResultIterators.java index 16f8b41..e76db56 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/iterate/ResultIterators.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/iterate/ResultIterators.java @@ -26,6 +26,7 @@ import org.apache.phoenix.util.SQLCloseable; public interface ResultIterators extends SQLCloseable { public int size(); + public long getEstimatedSize(); public List<KeyRange> getSplits(); public List<List<Scan>> getScans(); public void explain(List<String> planSteps); http://git-wip-us.apache.org/repos/asf/phoenix/blob/9ac854ae/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 5018dad..0c2cfea 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 @@ -139,4 +139,9 @@ public class UnionResultIterators implements ResultIterators { public List<PeekingResultIterator> getIterators() throws SQLException { return iterators; } + + @Override + public long getEstimatedSize() { + return 0; + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/phoenix/blob/9ac854ae/phoenix-core/src/main/java/org/apache/phoenix/schema/MetaDataClient.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/schema/MetaDataClient.java b/phoenix-core/src/main/java/org/apache/phoenix/schema/MetaDataClient.java index 7f3f850..7e28933 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/schema/MetaDataClient.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/schema/MetaDataClient.java @@ -963,6 +963,9 @@ public class MetaDataClient { * This supports scenarios in which a major compaction was manually initiated and the * client wants the modified stats to be reflected immediately. */ + connection.getQueryServices().clearTableFromCache(logicalTable.getTenantId() == null ? ByteUtil.EMPTY_BYTE_ARRAY : logicalTable.getTenantId().getBytes(), + Bytes.toBytes(SchemaUtil.getSchemaNameFromFullName(logicalTable.getName().toString())), + Bytes.toBytes(SchemaUtil.getTableNameFromFullName(logicalTable.getName().toString())), clientTimeStamp); connection.getQueryServices().clearTableFromCache(tenantIdBytes, Bytes.toBytes(SchemaUtil.getSchemaNameFromFullName(physicalName.getString())), Bytes.toBytes(SchemaUtil.getTableNameFromFullName(physicalName.getString())), clientTimeStamp); http://git-wip-us.apache.org/repos/asf/phoenix/blob/9ac854ae/phoenix-core/src/test/java/org/apache/phoenix/iterate/AggregateResultScannerTest.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/test/java/org/apache/phoenix/iterate/AggregateResultScannerTest.java b/phoenix-core/src/test/java/org/apache/phoenix/iterate/AggregateResultScannerTest.java index f53e871..60e4b2d 100644 --- a/phoenix-core/src/test/java/org/apache/phoenix/iterate/AggregateResultScannerTest.java +++ b/phoenix-core/src/test/java/org/apache/phoenix/iterate/AggregateResultScannerTest.java @@ -168,6 +168,11 @@ public class AggregateResultScannerTest extends BaseConnectionlessQueryTest { @Override public void close() throws SQLException { } + + @Override + public long getEstimatedSize() { + return 0; + } }; ResultIterator scanner = new GroupedAggregatingResultIterator(new MergeSortRowKeyResultIterator(iterators), aggregationManager.getAggregators()); http://git-wip-us.apache.org/repos/asf/phoenix/blob/9ac854ae/phoenix-core/src/test/java/org/apache/phoenix/iterate/ConcatResultIteratorTest.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/test/java/org/apache/phoenix/iterate/ConcatResultIteratorTest.java b/phoenix-core/src/test/java/org/apache/phoenix/iterate/ConcatResultIteratorTest.java index cf71724..2670c6d 100644 --- a/phoenix-core/src/test/java/org/apache/phoenix/iterate/ConcatResultIteratorTest.java +++ b/phoenix-core/src/test/java/org/apache/phoenix/iterate/ConcatResultIteratorTest.java @@ -85,6 +85,11 @@ public class ConcatResultIteratorTest { @Override public void close() throws SQLException { } + + @Override + public long getEstimatedSize() { + return 0; + } }; Tuple[] expectedResults = new Tuple[] { @@ -148,6 +153,11 @@ public class ConcatResultIteratorTest { @Override public void close() throws SQLException { } + + @Override + public long getEstimatedSize() { + return 0; + } }; ResultIterator scanner = new MergeSortRowKeyResultIterator(iterators); AssertResults.assertResults(scanner, expectedResults); http://git-wip-us.apache.org/repos/asf/phoenix/blob/9ac854ae/phoenix-core/src/test/java/org/apache/phoenix/iterate/MergeSortResultIteratorTest.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/test/java/org/apache/phoenix/iterate/MergeSortResultIteratorTest.java b/phoenix-core/src/test/java/org/apache/phoenix/iterate/MergeSortResultIteratorTest.java index 9b2e8de..6e3e0b7 100644 --- a/phoenix-core/src/test/java/org/apache/phoenix/iterate/MergeSortResultIteratorTest.java +++ b/phoenix-core/src/test/java/org/apache/phoenix/iterate/MergeSortResultIteratorTest.java @@ -100,6 +100,11 @@ public class MergeSortResultIteratorTest { @Override public void close() throws SQLException { } + + @Override + public long getEstimatedSize() { + return 0; + } }; ResultIterators reverseIterators = new ResultIterators() { @@ -130,6 +135,11 @@ public class MergeSortResultIteratorTest { @Override public void close() throws SQLException { } + + @Override + public long getEstimatedSize() { + return 0; + } }; ResultIterator scanner = new MergeSortRowKeyResultIterator(iterators); AssertResults.assertResults(scanner, expectedResults); @@ -193,6 +203,11 @@ public class MergeSortResultIteratorTest { @Override public void close() throws SQLException { } + + @Override + public long getEstimatedSize() { + return 0; + } }; ResultIterator scanner = new MergeSortRowKeyResultIterator(iterators, 0, true); AssertResults.assertResults(scanner, expectedResults);