You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by ja...@apache.org on 2017/09/29 01:24:49 UTC
[15/25] phoenix git commit: PHOENIX-4246 Breakup join related tests
into several integration tests so as not to create too many tables in one
test
PHOENIX-4246 Breakup join related tests into several integration tests so as not to create too many tables in one test
Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/834133a1
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/834133a1
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/834133a1
Branch: refs/heads/master
Commit: 834133a194a75c9231f9773b0bd89fd752dcf5dc
Parents: ee20a8c
Author: James Taylor <jt...@salesforce.com>
Authored: Thu Sep 28 15:06:35 2017 -0700
Committer: James Taylor <jt...@salesforce.com>
Committed: Thu Sep 28 17:51:57 2017 -0700
----------------------------------------------------------------------
.../end2end/join/HashJoinGlobalIndexIT.java | 2 +-
.../end2end/join/HashJoinLocalIndexIT.java | 2 +-
.../phoenix/end2end/join/HashJoinNoIndexIT.java | 2 +-
.../join/SortMergeJoinGlobalIndexIT.java | 84 ++++++++++++
.../phoenix/end2end/join/SortMergeJoinIT.java | 134 +------------------
.../end2end/join/SortMergeJoinLocalIndexIT.java | 84 ++++++++++++
.../end2end/join/SortMergeJoinNoIndexIT.java | 66 +++++++++
7 files changed, 238 insertions(+), 136 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/phoenix/blob/834133a1/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinGlobalIndexIT.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinGlobalIndexIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinGlobalIndexIT.java
index 76944a6..a725be7 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinGlobalIndexIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinGlobalIndexIT.java
@@ -30,7 +30,7 @@ public class HashJoinGlobalIndexIT extends HashJoinIT {
super(indexDDL, plans);
}
- @Parameters
+ @Parameters(name="HashJoinGlobalIndexIT_{index}") // name is used by failsafe as file name in reports
public static Collection<Object> data() {
List<Object> testCases = Lists.newArrayList();
testCases.add(new String[][] {
http://git-wip-us.apache.org/repos/asf/phoenix/blob/834133a1/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinLocalIndexIT.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinLocalIndexIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinLocalIndexIT.java
index dcc454f..59ddce9 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinLocalIndexIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinLocalIndexIT.java
@@ -46,7 +46,7 @@ public class HashJoinLocalIndexIT extends HashJoinIT {
super(indexDDL, plans);
}
- @Parameters
+ @Parameters(name="HashJoinLocalIndexIT_{index}") // name is used by failsafe as file name in reports
public static Collection<Object> data() {
List<Object> testCases = Lists.newArrayList();
testCases.add(new String[][] {
http://git-wip-us.apache.org/repos/asf/phoenix/blob/834133a1/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinNoIndexIT.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinNoIndexIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinNoIndexIT.java
index 7f8528d..3bbcaf2 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinNoIndexIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinNoIndexIT.java
@@ -30,7 +30,7 @@ public class HashJoinNoIndexIT extends HashJoinIT {
super(indexDDL, plans);
}
- @Parameters
+ @Parameters(name="HashJoinNoIndexIT_{index}") // name is used by failsafe as file name in reports
public static Collection<Object> data() {
List<Object> testCases = Lists.newArrayList();
testCases.add(new String[][] {
http://git-wip-us.apache.org/repos/asf/phoenix/blob/834133a1/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/SortMergeJoinGlobalIndexIT.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/SortMergeJoinGlobalIndexIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/SortMergeJoinGlobalIndexIT.java
new file mode 100644
index 0000000..ce6f032
--- /dev/null
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/SortMergeJoinGlobalIndexIT.java
@@ -0,0 +1,84 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.phoenix.end2end.join;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.junit.runners.Parameterized.Parameters;
+
+import com.google.common.collect.Lists;
+
+public class SortMergeJoinGlobalIndexIT extends SortMergeJoinIT {
+
+ public SortMergeJoinGlobalIndexIT(String[] indexDDL, String[] plans) {
+ super(indexDDL, plans);
+ }
+
+ @Parameters(name="SortMergeJoinGlobalIndexIT_{index}") // name is used by failsafe as file name in reports
+ public static Collection<Object> data() {
+ List<Object> testCases = Lists.newArrayList();
+ testCases.add(new String[][] {
+ {
+ "CREATE INDEX \"idx_customer\" ON " + JOIN_CUSTOMER_TABLE_FULL_NAME + " (name)",
+ "CREATE INDEX \"idx_item\" ON " + JOIN_ITEM_TABLE_FULL_NAME + " (name) INCLUDE (price, discount1, discount2, \"supplier_id\", description)",
+ "CREATE INDEX \"idx_supplier\" ON " + JOIN_SUPPLIER_TABLE_FULL_NAME + " (name)"
+ }, {
+ "SORT-MERGE-JOIN (LEFT) TABLES\n" +
+ " CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_SCHEMA + ".idx_supplier\n" +
+ " SERVER FILTER BY FIRST KEY ONLY\n" +
+ " SERVER SORTED BY [\"S.:supplier_id\"]\n" +
+ " CLIENT MERGE SORT\n" +
+ "AND\n" +
+ " SORT-MERGE-JOIN (INNER) TABLES\n" +
+ " CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_SCHEMA + ".idx_item\n" +
+ " SERVER SORTED BY [\"I.:item_id\"]\n" +
+ " CLIENT MERGE SORT\n" +
+ " AND (SKIP MERGE)\n" +
+ " CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_ORDER_TABLE_FULL_NAME + "\n" +
+ " SERVER FILTER BY QUANTITY < 5000\n" +
+ " SERVER SORTED BY [\"O.item_id\"]\n" +
+ " CLIENT MERGE SORT\n" +
+ " CLIENT SORTED BY [\"I.0:supplier_id\"]",
+
+ "SORT-MERGE-JOIN (INNER) TABLES\n" +
+ " CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_SCHEMA + ".idx_item\n" +
+ " SERVER FILTER BY FIRST KEY ONLY\n" +
+ " SERVER SORTED BY [\"I.:item_id\"]\n" +
+ " CLIENT MERGE SORT\n" +
+ "AND\n" +
+ " CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_ORDER_TABLE_FULL_NAME + "\n" +
+ " SERVER SORTED BY [\"O.item_id\"]\n" +
+ " CLIENT MERGE SORT\n" +
+ "CLIENT 4 ROW LIMIT",
+
+ "SORT-MERGE-JOIN (INNER) TABLES\n" +
+ " CLIENT PARALLEL 1-WAY FULL SCAN OVER Join.idx_item\n" +
+ " SERVER FILTER BY FIRST KEY ONLY\n" +
+ " SERVER SORTED BY [\"I1.:item_id\"]\n" +
+ " CLIENT MERGE SORT\n" +
+ "AND\n" +
+ " CLIENT PARALLEL 1-WAY FULL SCAN OVER Join.idx_item\n" +
+ " SERVER FILTER BY FIRST KEY ONLY\n" +
+ " SERVER SORTED BY [\"I2.:item_id\"]\n" +
+ " CLIENT MERGE SORT\n" +
+ "CLIENT SORTED BY [\"I1.:item_id\"]"
+ }});
+ return testCases;
+ }
+}
http://git-wip-us.apache.org/repos/asf/phoenix/blob/834133a1/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/SortMergeJoinIT.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/SortMergeJoinIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/SortMergeJoinIT.java
index 8e7bfe2..234c2ee 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/SortMergeJoinIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/SortMergeJoinIT.java
@@ -34,8 +34,6 @@ import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Timestamp;
-import java.util.Collection;
-import java.util.List;
import java.util.Properties;
import org.apache.phoenix.exception.SQLExceptionCode;
@@ -45,140 +43,10 @@ import org.apache.phoenix.util.QueryUtil;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameters;
-
-import com.google.common.collect.Lists;
@RunWith(Parameterized.class)
-public class SortMergeJoinIT extends BaseJoinIT {
-
- @Parameters
- public static Collection<Object> data() {
- List<Object> testCases = Lists.newArrayList();
- testCases.add(new String[][] {
- {}, {
- "SORT-MERGE-JOIN (LEFT) TABLES\n" +
- " CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_SUPPLIER_TABLE_FULL_NAME + "\n" +
- "AND\n" +
- " SORT-MERGE-JOIN (INNER) TABLES\n" +
- " CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_ITEM_TABLE_FULL_NAME + "\n" +
- " AND (SKIP MERGE)\n" +
- " CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_ORDER_TABLE_FULL_NAME + "\n" +
- " SERVER FILTER BY QUANTITY < 5000\n" +
- " SERVER SORTED BY [\"O.item_id\"]\n" +
- " CLIENT MERGE SORT\n" +
- " CLIENT SORTED BY [\"I.supplier_id\"]",
-
- "SORT-MERGE-JOIN (INNER) TABLES\n" +
- " CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_ITEM_TABLE_FULL_NAME + "\n" +
- "AND\n" +
- " CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_ORDER_TABLE_FULL_NAME + "\n" +
- " SERVER SORTED BY [\"O.item_id\"]\n" +
- " CLIENT MERGE SORT\n" +
- "CLIENT 4 ROW LIMIT",
-
- "SORT-MERGE-JOIN (INNER) TABLES\n" +
- " CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_ITEM_TABLE_FULL_NAME + "\n" +
- "AND\n" +
- " CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_ITEM_TABLE_FULL_NAME + "\n" +
- " SERVER FILTER BY FIRST KEY ONLY"
- }});
- testCases.add(new String[][] {
- {
- "CREATE INDEX \"idx_customer\" ON " + JOIN_CUSTOMER_TABLE_FULL_NAME + " (name)",
- "CREATE INDEX \"idx_item\" ON " + JOIN_ITEM_TABLE_FULL_NAME + " (name) INCLUDE (price, discount1, discount2, \"supplier_id\", description)",
- "CREATE INDEX \"idx_supplier\" ON " + JOIN_SUPPLIER_TABLE_FULL_NAME + " (name)"
- }, {
- "SORT-MERGE-JOIN (LEFT) TABLES\n" +
- " CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_SCHEMA + ".idx_supplier\n" +
- " SERVER FILTER BY FIRST KEY ONLY\n" +
- " SERVER SORTED BY [\"S.:supplier_id\"]\n" +
- " CLIENT MERGE SORT\n" +
- "AND\n" +
- " SORT-MERGE-JOIN (INNER) TABLES\n" +
- " CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_SCHEMA + ".idx_item\n" +
- " SERVER SORTED BY [\"I.:item_id\"]\n" +
- " CLIENT MERGE SORT\n" +
- " AND (SKIP MERGE)\n" +
- " CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_ORDER_TABLE_FULL_NAME + "\n" +
- " SERVER FILTER BY QUANTITY < 5000\n" +
- " SERVER SORTED BY [\"O.item_id\"]\n" +
- " CLIENT MERGE SORT\n" +
- " CLIENT SORTED BY [\"I.0:supplier_id\"]",
-
- "SORT-MERGE-JOIN (INNER) TABLES\n" +
- " CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_SCHEMA + ".idx_item\n" +
- " SERVER FILTER BY FIRST KEY ONLY\n" +
- " SERVER SORTED BY [\"I.:item_id\"]\n" +
- " CLIENT MERGE SORT\n" +
- "AND\n" +
- " CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_ORDER_TABLE_FULL_NAME + "\n" +
- " SERVER SORTED BY [\"O.item_id\"]\n" +
- " CLIENT MERGE SORT\n" +
- "CLIENT 4 ROW LIMIT",
-
- "SORT-MERGE-JOIN (INNER) TABLES\n" +
- " CLIENT PARALLEL 1-WAY FULL SCAN OVER Join.idx_item\n" +
- " SERVER FILTER BY FIRST KEY ONLY\n" +
- " SERVER SORTED BY [\"I1.:item_id\"]\n" +
- " CLIENT MERGE SORT\n" +
- "AND\n" +
- " CLIENT PARALLEL 1-WAY FULL SCAN OVER Join.idx_item\n" +
- " SERVER FILTER BY FIRST KEY ONLY\n" +
- " SERVER SORTED BY [\"I2.:item_id\"]\n" +
- " CLIENT MERGE SORT\n" +
- "CLIENT SORTED BY [\"I1.:item_id\"]"
- }});
- testCases.add(new String[][] {
- {
- "CREATE LOCAL INDEX \"idx_customer\" ON " + JOIN_CUSTOMER_TABLE_FULL_NAME + " (name)",
- "CREATE LOCAL INDEX \"idx_item\" ON " + JOIN_ITEM_TABLE_FULL_NAME + " (name) INCLUDE (price, discount1, discount2, \"supplier_id\", description)",
- "CREATE LOCAL INDEX \"idx_supplier\" ON " + JOIN_SUPPLIER_TABLE_FULL_NAME + " (name)"
- }, {
- "SORT-MERGE-JOIN (LEFT) TABLES\n" +
- " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " +JOIN_SUPPLIER_TABLE_FULL_NAME + " [1]\n" +
- " SERVER FILTER BY FIRST KEY ONLY\n" +
- " SERVER SORTED BY [\"S.:supplier_id\"]\n" +
- " CLIENT MERGE SORT\n" +
- "AND\n" +
- " SORT-MERGE-JOIN (INNER) TABLES\n" +
- " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_TABLE_FULL_NAME + " [1]\n" +
- " SERVER SORTED BY [\"I.:item_id\"]\n" +
- " CLIENT MERGE SORT\n" +
- " AND (SKIP MERGE)\n" +
- " CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_ORDER_TABLE_FULL_NAME + "\n" +
- " SERVER FILTER BY QUANTITY < 5000\n" +
- " SERVER SORTED BY [\"O.item_id\"]\n" +
- " CLIENT MERGE SORT\n" +
- " CLIENT SORTED BY [\"I.0:supplier_id\"]",
-
- "SORT-MERGE-JOIN (INNER) TABLES\n" +
- " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_TABLE_FULL_NAME + " [1]\n" +
- " SERVER FILTER BY FIRST KEY ONLY\n" +
- " SERVER SORTED BY [\"I.:item_id\"]\n" +
- " CLIENT MERGE SORT\n" +
- "AND\n" +
- " CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_ORDER_TABLE_FULL_NAME + "\n" +
- " SERVER SORTED BY [\"O.item_id\"]\n" +
- " CLIENT MERGE SORT\n" +
- "CLIENT 4 ROW LIMIT",
-
- "SORT-MERGE-JOIN (INNER) TABLES\n" +
- " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_TABLE_FULL_NAME + " [1]\n" +
- " SERVER FILTER BY FIRST KEY ONLY\n" +
- " SERVER SORTED BY [\"I1.:item_id\"]\n" +
- " CLIENT MERGE SORT\n" +
- "AND\n" +
- " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_TABLE_FULL_NAME + " [1]\n" +
- " SERVER FILTER BY FIRST KEY ONLY\n" +
- " SERVER SORTED BY [\"I2.:item_id\"]\n" +
- " CLIENT MERGE SORT\n" +
- "CLIENT SORTED BY [\"I1.:item_id\"]"
- }});
- return testCases;
- }
+public abstract class SortMergeJoinIT extends BaseJoinIT {
-
public SortMergeJoinIT(String[] indexDDL, String[] plans) {
super(indexDDL, plans);
}
http://git-wip-us.apache.org/repos/asf/phoenix/blob/834133a1/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/SortMergeJoinLocalIndexIT.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/SortMergeJoinLocalIndexIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/SortMergeJoinLocalIndexIT.java
new file mode 100644
index 0000000..919aa69
--- /dev/null
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/SortMergeJoinLocalIndexIT.java
@@ -0,0 +1,84 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.phoenix.end2end.join;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.junit.runners.Parameterized.Parameters;
+
+import com.google.common.collect.Lists;
+
+public class SortMergeJoinLocalIndexIT extends SortMergeJoinIT {
+
+ public SortMergeJoinLocalIndexIT(String[] indexDDL, String[] plans) {
+ super(indexDDL, plans);
+ }
+
+ @Parameters(name="SortMergeJoinLocalIndexIT_{index}") // name is used by failsafe as file name in reports
+ public static Collection<Object> data() {
+ List<Object> testCases = Lists.newArrayList();
+ testCases.add(new String[][] {
+ {
+ "CREATE LOCAL INDEX \"idx_customer\" ON " + JOIN_CUSTOMER_TABLE_FULL_NAME + " (name)",
+ "CREATE LOCAL INDEX \"idx_item\" ON " + JOIN_ITEM_TABLE_FULL_NAME + " (name) INCLUDE (price, discount1, discount2, \"supplier_id\", description)",
+ "CREATE LOCAL INDEX \"idx_supplier\" ON " + JOIN_SUPPLIER_TABLE_FULL_NAME + " (name)"
+ }, {
+ "SORT-MERGE-JOIN (LEFT) TABLES\n" +
+ " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " +JOIN_SUPPLIER_TABLE_FULL_NAME + " [1]\n" +
+ " SERVER FILTER BY FIRST KEY ONLY\n" +
+ " SERVER SORTED BY [\"S.:supplier_id\"]\n" +
+ " CLIENT MERGE SORT\n" +
+ "AND\n" +
+ " SORT-MERGE-JOIN (INNER) TABLES\n" +
+ " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_TABLE_FULL_NAME + " [1]\n" +
+ " SERVER SORTED BY [\"I.:item_id\"]\n" +
+ " CLIENT MERGE SORT\n" +
+ " AND (SKIP MERGE)\n" +
+ " CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_ORDER_TABLE_FULL_NAME + "\n" +
+ " SERVER FILTER BY QUANTITY < 5000\n" +
+ " SERVER SORTED BY [\"O.item_id\"]\n" +
+ " CLIENT MERGE SORT\n" +
+ " CLIENT SORTED BY [\"I.0:supplier_id\"]",
+
+ "SORT-MERGE-JOIN (INNER) TABLES\n" +
+ " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_TABLE_FULL_NAME + " [1]\n" +
+ " SERVER FILTER BY FIRST KEY ONLY\n" +
+ " SERVER SORTED BY [\"I.:item_id\"]\n" +
+ " CLIENT MERGE SORT\n" +
+ "AND\n" +
+ " CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_ORDER_TABLE_FULL_NAME + "\n" +
+ " SERVER SORTED BY [\"O.item_id\"]\n" +
+ " CLIENT MERGE SORT\n" +
+ "CLIENT 4 ROW LIMIT",
+
+ "SORT-MERGE-JOIN (INNER) TABLES\n" +
+ " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_TABLE_FULL_NAME + " [1]\n" +
+ " SERVER FILTER BY FIRST KEY ONLY\n" +
+ " SERVER SORTED BY [\"I1.:item_id\"]\n" +
+ " CLIENT MERGE SORT\n" +
+ "AND\n" +
+ " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_TABLE_FULL_NAME + " [1]\n" +
+ " SERVER FILTER BY FIRST KEY ONLY\n" +
+ " SERVER SORTED BY [\"I2.:item_id\"]\n" +
+ " CLIENT MERGE SORT\n" +
+ "CLIENT SORTED BY [\"I1.:item_id\"]"
+ }});
+ return testCases;
+ }
+}
http://git-wip-us.apache.org/repos/asf/phoenix/blob/834133a1/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/SortMergeJoinNoIndexIT.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/SortMergeJoinNoIndexIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/SortMergeJoinNoIndexIT.java
new file mode 100644
index 0000000..6f04729
--- /dev/null
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/SortMergeJoinNoIndexIT.java
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.phoenix.end2end.join;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.junit.runners.Parameterized.Parameters;
+
+import com.google.common.collect.Lists;
+
+public class SortMergeJoinNoIndexIT extends SortMergeJoinIT {
+
+ public SortMergeJoinNoIndexIT(String[] indexDDL, String[] plans) {
+ super(indexDDL, plans);
+ }
+
+ @Parameters(name="SortMergeJoinNoIndexIT_{index}") // name is used by failsafe as file name in reports
+ public static Collection<Object> data() {
+ List<Object> testCases = Lists.newArrayList();
+ testCases.add(new String[][] {
+ {}, {
+ "SORT-MERGE-JOIN (LEFT) TABLES\n" +
+ " CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_SUPPLIER_TABLE_FULL_NAME + "\n" +
+ "AND\n" +
+ " SORT-MERGE-JOIN (INNER) TABLES\n" +
+ " CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_ITEM_TABLE_FULL_NAME + "\n" +
+ " AND (SKIP MERGE)\n" +
+ " CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_ORDER_TABLE_FULL_NAME + "\n" +
+ " SERVER FILTER BY QUANTITY < 5000\n" +
+ " SERVER SORTED BY [\"O.item_id\"]\n" +
+ " CLIENT MERGE SORT\n" +
+ " CLIENT SORTED BY [\"I.supplier_id\"]",
+
+ "SORT-MERGE-JOIN (INNER) TABLES\n" +
+ " CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_ITEM_TABLE_FULL_NAME + "\n" +
+ "AND\n" +
+ " CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_ORDER_TABLE_FULL_NAME + "\n" +
+ " SERVER SORTED BY [\"O.item_id\"]\n" +
+ " CLIENT MERGE SORT\n" +
+ "CLIENT 4 ROW LIMIT",
+
+ "SORT-MERGE-JOIN (INNER) TABLES\n" +
+ " CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_ITEM_TABLE_FULL_NAME + "\n" +
+ "AND\n" +
+ " CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_ITEM_TABLE_FULL_NAME + "\n" +
+ " SERVER FILTER BY FIRST KEY ONLY"
+ }});
+ return testCases;
+ }
+}