You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by vj...@apache.org on 2023/12/01 04:44:36 UTC
(phoenix) branch master updated: PHOENIX-7101 Explain plan to output local index name if it is used (#1737)
This is an automated email from the ASF dual-hosted git repository.
vjasani pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/phoenix.git
The following commit(s) were added to refs/heads/master by this push:
new b241252307 PHOENIX-7101 Explain plan to output local index name if it is used (#1737)
b241252307 is described below
commit b241252307e403483741760eaa4894581e3dab3d
Author: Jing Yu <yu...@salesforce.com>
AuthorDate: Thu Nov 30 23:44:29 2023 -0500
PHOENIX-7101 Explain plan to output local index name if it is used (#1737)
---
.../end2end/BaseTenantSpecificViewIndexIT.java | 8 +-
.../phoenix/end2end/CostBasedDecisionIT.java | 57 +++++++----
.../java/org/apache/phoenix/end2end/DeleteIT.java | 2 +-
.../phoenix/end2end/FlappingLocalIndexIT.java | 16 +--
.../phoenix/end2end/IndexBuildTimestampIT.java | 6 +-
.../apache/phoenix/end2end/IndexExtendedIT.java | 4 +-
.../org/apache/phoenix/end2end/IndexToolIT.java | 8 +-
.../phoenix/end2end/LocalIndexSplitMergeIT.java | 16 +--
.../phoenix/end2end/TenantSpecificViewIndexIT.java | 13 +--
.../phoenix/end2end/UserDefinedFunctionsIT.java | 2 +-
.../it/java/org/apache/phoenix/end2end/ViewIT.java | 10 +-
.../apache/phoenix/end2end/index/BaseIndexIT.java | 23 +++--
.../end2end/index/GlobalIndexOptimizationIT.java | 3 +-
.../phoenix/end2end/index/IndexMaintenanceIT.java | 8 +-
.../apache/phoenix/end2end/index/IndexUsageIT.java | 26 ++---
.../apache/phoenix/end2end/index/LocalIndexIT.java | 40 +++++---
.../end2end/index/MutableIndexFailureIT.java | 5 +-
.../phoenix/end2end/index/MutableIndexIT.java | 25 +++--
.../apache/phoenix/end2end/index/ViewIndexIT.java | 5 +-
.../end2end/index/txn/TxWriteFailureIT.java | 3 +-
.../apache/phoenix/end2end/join/BaseJoinIT.java | 10 ++
.../phoenix/end2end/join/HashJoinLocalIndexIT.java | 111 ++++++++++++++-------
.../end2end/join/SortMergeJoinLocalIndexIT.java | 22 ++--
.../apache/phoenix/end2end/join/SubqueryIT.java | 40 +++++---
.../end2end/join/SubqueryUsingSortMergeJoinIT.java | 30 ++++--
.../org/apache/phoenix/iterate/ExplainTable.java | 20 +++-
26 files changed, 334 insertions(+), 179 deletions(-)
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/BaseTenantSpecificViewIndexIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/BaseTenantSpecificViewIndexIT.java
index 92eef8ef3d..6b8618bbfe 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/BaseTenantSpecificViewIndexIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/BaseTenantSpecificViewIndexIT.java
@@ -158,7 +158,9 @@ public abstract class BaseTenantSpecificViewIndexIT extends SplitSystemCatalogIT
iteratorTypeAndScanSize = "PARALLEL 3-WAY";
}
clientSortAlgo = "CLIENT MERGE SORT";
- expectedTableName = tableName;
+ expectedTableName =
+ SchemaUtil.getTableName(SchemaUtil.getSchemaNameFromFullName(viewName),
+ indexName) + "(" + tableName + ")";
keyRanges = " [" + (1L + expectedIndexIdOffset) + ",'" + tenantId
+ "','" + valuePrefix + "v2-1']";
} else {
@@ -204,7 +206,9 @@ public abstract class BaseTenantSpecificViewIndexIT extends SplitSystemCatalogIT
assertEquals("SERVER FILTER BY FIRST KEY ONLY",
explainPlanAttributes.getServerWhereFilter());
assertEquals("RANGE SCAN ", explainPlanAttributes.getExplainScanType());
- assertEquals(tableName, explainPlanAttributes.getTableName());
+ assertEquals(SchemaUtil.getTableName(SchemaUtil.getSchemaNameFromFullName(viewName),
+ indexName) + "(" + tableName + ")",
+ explainPlanAttributes.getTableName());
assertEquals(" [1," + tenantId + ",'" + valuePrefix + "v2-1']",
explainPlanAttributes.getKeyRanges());
assertEquals("CLIENT MERGE SORT",
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/CostBasedDecisionIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/CostBasedDecisionIT.java
index f815eacc19..a76c40962e 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/CostBasedDecisionIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/CostBasedDecisionIT.java
@@ -107,11 +107,13 @@ public class CostBasedDecisionIT extends BaseTest {
conn.setAutoCommit(true);
try {
String tableName = BaseTest.generateUniqueName();
+ String indexName = tableName + "_IDX";
conn.createStatement().execute("CREATE TABLE " + tableName + " (\n" +
"rowkey VARCHAR PRIMARY KEY,\n" +
"c1 VARCHAR,\n" +
"c2 VARCHAR)");
- conn.createStatement().execute("CREATE LOCAL INDEX " + tableName + "_idx ON " + tableName + " (c1)");
+ conn.createStatement().execute("CREATE LOCAL INDEX " + indexName + " ON " + tableName +
+ " (c1)");
String query = "SELECT c1, max(rowkey), max(c2) FROM " + tableName + " where rowkey <= 'z' GROUP BY c1";
// Use the index table plan that opts out order-by when stats are not available.
@@ -153,7 +155,7 @@ public class CostBasedDecisionIT extends BaseTest {
explainPlanAttributes.getIteratorTypeAndScanSize());
assertEquals("RANGE SCAN ",
explainPlanAttributes.getExplainScanType());
- assertEquals(tableName, explainPlanAttributes.getTableName());
+ assertEquals(indexName + "(" + tableName + ")", explainPlanAttributes.getTableName());
assertEquals(" [1]", explainPlanAttributes.getKeyRanges());
assertEquals("SERVER FILTER BY FIRST KEY ONLY AND \"ROWKEY\" <= 'z'",
explainPlanAttributes.getServerWhereFilter());
@@ -173,13 +175,15 @@ public class CostBasedDecisionIT extends BaseTest {
conn.setAutoCommit(true);
try {
String tableName = BaseTest.generateUniqueName();
+ String indexName1 = tableName + "_IDX1";
+ String indexName2 = tableName + "_IDX2";
conn.createStatement().execute("CREATE TABLE " + tableName + " (\n" +
"rowkey VARCHAR PRIMARY KEY,\n" +
"c1 INTEGER,\n" +
"c2 INTEGER,\n" +
"c3 INTEGER)");
- conn.createStatement().execute("CREATE LOCAL INDEX " + tableName + "_idx1 ON " + tableName + " (c1) INCLUDE (c2, c3)");
- conn.createStatement().execute("CREATE LOCAL INDEX " + tableName + "_idx2 ON " + tableName + " (c2, c3) INCLUDE (c1)");
+ conn.createStatement().execute("CREATE LOCAL INDEX " + indexName1 + " ON " + tableName + " (c1) INCLUDE (c2, c3)");
+ conn.createStatement().execute("CREATE LOCAL INDEX " + indexName2 + " ON " + tableName + " (c2, c3) INCLUDE (c1)");
String query = "SELECT * FROM " + tableName + " where c1 BETWEEN 10 AND 20 AND c2 < 9000 AND C3 < 5000";
// Use the idx2 plan with a wider PK slot span when stats are not available.
@@ -192,7 +196,7 @@ public class CostBasedDecisionIT extends BaseTest {
explainPlanAttributes.getIteratorTypeAndScanSize());
assertEquals("RANGE SCAN ",
explainPlanAttributes.getExplainScanType());
- assertEquals(tableName, explainPlanAttributes.getTableName());
+ assertEquals(indexName2 + "(" + tableName + ")", explainPlanAttributes.getTableName());
assertEquals(" [2,*] - [2,9,000]",
explainPlanAttributes.getKeyRanges());
assertEquals("SERVER FILTER BY ((\"C1\" >= 10 AND \"C1\" <= 20) AND TO_INTEGER(\"C3\") < 5000)",
@@ -220,7 +224,7 @@ public class CostBasedDecisionIT extends BaseTest {
explainPlanAttributes.getIteratorTypeAndScanSize());
assertEquals("RANGE SCAN ",
explainPlanAttributes.getExplainScanType());
- assertEquals(tableName, explainPlanAttributes.getTableName());
+ assertEquals(indexName1 + "(" + tableName + ")", explainPlanAttributes.getTableName());
assertEquals(" [1,10] - [1,20]",
explainPlanAttributes.getKeyRanges());
assertEquals("SERVER FILTER BY (\"C2\" < 9000 AND \"C3\" < 5000)",
@@ -239,19 +243,22 @@ public class CostBasedDecisionIT extends BaseTest {
conn.setAutoCommit(true);
try {
String tableName = BaseTest.generateUniqueName();
+ String indexName1 = tableName + "_IDX1";
+ String indexName2 = tableName + "_IDX2";
conn.createStatement().execute("CREATE TABLE " + tableName + " (\n" +
"rowkey VARCHAR PRIMARY KEY,\n" +
"c1 INTEGER,\n" +
"c2 INTEGER,\n" +
"c3 INTEGER)");
- conn.createStatement().execute("CREATE LOCAL INDEX " + tableName + "_idx1 ON " + tableName + " (c1) INCLUDE (c2, c3)");
- conn.createStatement().execute("CREATE LOCAL INDEX " + tableName + "_idx2 ON " + tableName + " (c2, c3) INCLUDE (c1)");
+ conn.createStatement().execute("CREATE LOCAL INDEX " + indexName1 + " ON " + tableName + "(c1) INCLUDE (c2, c3)");
+ conn.createStatement().execute("CREATE LOCAL INDEX " + indexName2 + " ON " + tableName + " (c2, c3) INCLUDE (c1)");
String query = "UPSERT INTO " + tableName + " SELECT * FROM " + tableName + " where c1 BETWEEN 10 AND 20 AND c2 < 9000 AND C3 < 5000";
// Use the idx2 plan with a wider PK slot span when stats are not available.
verifyQueryPlan(query,
"UPSERT SELECT\n" +
- "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + tableName + " [2,*] - [2,9,000]\n" +
+ "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + indexName2 + "(" + tableName + ")" +
+ " [2,*] - [2,9,000]\n" +
" SERVER FILTER BY ((\"C1\" >= 10 AND \"C1\" <= 20) AND TO_INTEGER(\"C3\") < 5000)\n" +
"CLIENT MERGE SORT");
@@ -269,7 +276,8 @@ public class CostBasedDecisionIT extends BaseTest {
// Use the idx2 plan that scans less data when stats become available.
verifyQueryPlan(query,
"UPSERT SELECT\n" +
- "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + tableName + " [1,10] - [1,20]\n" +
+ "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + indexName1 + "(" + tableName + ")" +
+ " [1,10] - [1,20]\n" +
" SERVER FILTER BY (\"C2\" < 9000 AND \"C3\" < 5000)\n" +
"CLIENT MERGE SORT");
} finally {
@@ -284,19 +292,23 @@ public class CostBasedDecisionIT extends BaseTest {
conn.setAutoCommit(true);
try {
String tableName = BaseTest.generateUniqueName();
+ String indexName1 = tableName + "_IDX1";
+ String indexName2 = tableName + "_IDX2";
conn.createStatement().execute("CREATE TABLE " + tableName + " (\n" +
"rowkey VARCHAR PRIMARY KEY,\n" +
"c1 INTEGER,\n" +
"c2 INTEGER,\n" +
"c3 INTEGER)");
- conn.createStatement().execute("CREATE LOCAL INDEX " + tableName + "_idx1 ON " + tableName + " (c1) INCLUDE (c2, c3)");
- conn.createStatement().execute("CREATE LOCAL INDEX " + tableName + "_idx2 ON " + tableName + " (c2, c3) INCLUDE (c1)");
+ conn.createStatement().execute("CREATE LOCAL INDEX " + indexName1 + " ON " + tableName + " (c1) INCLUDE (c2, c3)");
+ conn.createStatement().execute("CREATE LOCAL INDEX " + indexName2 + " ON " + tableName +
+ " (c2, c3) INCLUDE (c1)");
String query = "DELETE FROM " + tableName + " where c1 BETWEEN 10 AND 20 AND c2 < 9000 AND C3 < 5000";
// Use the idx2 plan with a wider PK slot span when stats are not available.
verifyQueryPlan(query,
"DELETE ROWS CLIENT SELECT\n" +
- "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + tableName + " [2,*] - [2,9,000]\n" +
+ "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + indexName2 + "(" + tableName + ")" +
+ " [2,*] - [2,9,000]\n" +
" SERVER FILTER BY ((\"C1\" >= 10 AND \"C1\" <= 20) AND TO_INTEGER(\"C3\") < 5000)\n" +
"CLIENT MERGE SORT");
@@ -314,7 +326,8 @@ public class CostBasedDecisionIT extends BaseTest {
// Use the idx2 plan that scans less data when stats become available.
verifyQueryPlan(query,
"DELETE ROWS CLIENT SELECT\n" +
- "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + tableName + " [1,10] - [1,20]\n" +
+ "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + indexName1 + "(" + tableName + ")" +
+ " [1,10] - [1,20]\n" +
" SERVER FILTER BY (\"C2\" < 9000 AND \"C3\" < 5000)\n" +
"CLIENT MERGE SORT");
} finally {
@@ -329,11 +342,12 @@ public class CostBasedDecisionIT extends BaseTest {
conn.setAutoCommit(true);
try {
String tableName = BaseTest.generateUniqueName();
+ String indexName = tableName + "_IDX";
conn.createStatement().execute("CREATE TABLE " + tableName + " (\n" +
"rowkey VARCHAR PRIMARY KEY,\n" +
"c1 VARCHAR,\n" +
"c2 VARCHAR)");
- conn.createStatement().execute("CREATE LOCAL INDEX " + tableName + "_idx ON " + tableName + " (c1)");
+ conn.createStatement().execute("CREATE LOCAL INDEX " + indexName + " ON " + tableName + " (c1)");
String query = "SELECT c1, max(rowkey), max(c2) FROM " + tableName + " where rowkey <= 'z' GROUP BY c1 "
+ "UNION ALL SELECT c1, max(rowkey), max(c2) FROM " + tableName + " where rowkey >= 'a' GROUP BY c1";
@@ -361,12 +375,14 @@ public class CostBasedDecisionIT extends BaseTest {
// Use the optimal plan based on cost when stats become available.
verifyQueryPlan(query,
"UNION ALL OVER 2 QUERIES\n" +
- " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + tableName + " [1]\n" +
+ " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + indexName + "(" + tableName +
+ ") [1]\n" +
" SERVER MERGE [0.C2]\n" +
" SERVER FILTER BY FIRST KEY ONLY AND \"ROWKEY\" <= 'z'\n" +
" SERVER AGGREGATE INTO ORDERED DISTINCT ROWS BY [\"C1\"]\n" +
" CLIENT MERGE SORT\n" +
- " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + tableName + " [1]\n" +
+ " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + indexName + "(" + tableName +
+ ") [1]\n" +
" SERVER MERGE [0.C2]\n" +
" SERVER FILTER BY FIRST KEY ONLY AND \"ROWKEY\" >= 'a'\n" +
" SERVER AGGREGATE INTO ORDERED DISTINCT ROWS BY [\"C1\"]\n" +
@@ -383,6 +399,7 @@ public class CostBasedDecisionIT extends BaseTest {
conn.setAutoCommit(true);
try {
String tableName = BaseTest.generateUniqueName();
+ String indexName = tableName + "_IDX";
conn.createStatement().execute("CREATE TABLE " + tableName + " (\n" +
"rowkey VARCHAR PRIMARY KEY,\n" +
"c1 VARCHAR,\n" +
@@ -415,13 +432,15 @@ public class CostBasedDecisionIT extends BaseTest {
// Use the optimal plan based on cost when stats become available.
verifyQueryPlan(query,
- "CLIENT PARALLEL 626-WAY RANGE SCAN OVER " + tableName + " [1,'X0'] - [1,'X1']\n" +
+ "CLIENT PARALLEL 626-WAY RANGE SCAN OVER " + indexName + "(" + tableName +
+ ") [1,'X0'] - [1,'X1']\n" +
" SERVER MERGE [0.C2]\n" +
" SERVER FILTER BY FIRST KEY ONLY\n" +
" SERVER SORTED BY [\"T1.:ROWKEY\"]\n" +
"CLIENT MERGE SORT\n" +
" PARALLEL INNER-JOIN TABLE 0\n" +
- " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + tableName + " [1]\n" +
+ " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + indexName + "(" + tableName +
+ ") [1]\n" +
" SERVER MERGE [0.C2]\n" +
" SERVER FILTER BY FIRST KEY ONLY AND \"ROWKEY\" <= 'z'\n" +
" SERVER AGGREGATE INTO ORDERED DISTINCT ROWS BY [\"C1\"]\n" +
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/DeleteIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/DeleteIT.java
index 70bd77b8f0..bfd96df678 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/DeleteIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/DeleteIT.java
@@ -225,7 +225,7 @@ public class DeleteIT extends ParallelStatsDisabledIT {
if (createIndex) {
if (local) {
conn.createStatement().execute("CREATE LOCAL INDEX IF NOT EXISTS " + localIndexName + " ON " + tableName + "(j)");
- indexInUse = tableName;
+ indexInUse = localIndexName + "(" + tableName + ")";
} else {
conn.createStatement().execute("CREATE INDEX IF NOT EXISTS " + indexName + " ON " + tableName + "(j)");
}
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/FlappingLocalIndexIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/FlappingLocalIndexIT.java
index 096a301ff7..588779fe36 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/FlappingLocalIndexIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/FlappingLocalIndexIT.java
@@ -180,8 +180,8 @@ public class FlappingLocalIndexIT extends BaseLocalIndexIT {
explainPlanAttributes.getIteratorTypeAndScanSize());
assertEquals("RANGE SCAN ",
explainPlanAttributes.getExplainScanType());
- assertEquals(indexPhysicalTableName,
- explainPlanAttributes.getTableName());
+ assertEquals(indexTableName + "(" + indexPhysicalTableName + ")",
+ explainPlanAttributes.getTableName());
assertEquals(" [1,'a'] - [1,'b']",
explainPlanAttributes.getKeyRanges());
assertEquals("SERVER FILTER BY FIRST KEY ONLY",
@@ -214,8 +214,8 @@ public class FlappingLocalIndexIT extends BaseLocalIndexIT {
explainPlanAttributes.getIteratorTypeAndScanSize());
assertEquals("RANGE SCAN ",
explainPlanAttributes.getExplainScanType());
- assertEquals(indexPhysicalTableName,
- explainPlanAttributes.getTableName());
+ assertEquals(indexTableName + "(" + indexPhysicalTableName + ")",
+ explainPlanAttributes.getTableName());
assertEquals(" [1,'a']",
explainPlanAttributes.getKeyRanges());
assertEquals("SERVER FILTER BY FIRST KEY ONLY",
@@ -243,8 +243,8 @@ public class FlappingLocalIndexIT extends BaseLocalIndexIT {
explainPlanAttributes.getIteratorTypeAndScanSize());
assertEquals("RANGE SCAN ",
explainPlanAttributes.getExplainScanType());
- assertEquals(indexPhysicalTableName,
- explainPlanAttributes.getTableName());
+ assertEquals(indexTableName + "(" + indexPhysicalTableName + ")",
+ explainPlanAttributes.getTableName());
assertEquals(" [1,*] - [1,'z']",
explainPlanAttributes.getKeyRanges());
assertEquals("SERVER FILTER BY FIRST KEY ONLY",
@@ -278,8 +278,8 @@ public class FlappingLocalIndexIT extends BaseLocalIndexIT {
explainPlanAttributes.getIteratorTypeAndScanSize());
assertEquals("RANGE SCAN ",
explainPlanAttributes.getExplainScanType());
- assertEquals(indexPhysicalTableName,
- explainPlanAttributes.getTableName());
+ assertEquals(indexTableName + "(" + indexPhysicalTableName + ")",
+ explainPlanAttributes.getTableName());
assertEquals(" [1]", explainPlanAttributes.getKeyRanges());
assertEquals("SERVER FILTER BY FIRST KEY ONLY",
explainPlanAttributes.getServerWhereFilter());
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/IndexBuildTimestampIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/IndexBuildTimestampIT.java
index 3c48a6c396..43cd5b0c9e 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/IndexBuildTimestampIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/IndexBuildTimestampIT.java
@@ -249,7 +249,8 @@ public class IndexBuildTimestampIT extends BaseTest {
String selectSql = String.format("SELECT * FROM %s WHERE val = 'abc'", (view ? viewName : dataTableName));
conn = DriverManager.getConnection(getUrl());
// assert we are pulling from index table
- assertExplainPlan(conn, localIndex, selectSql, dataTableName, (view ? "_IDX_" + dataTableName : indexName));
+ assertExplainPlan(conn, localIndex, selectSql, dataTableName, (view && !localIndex ?
+ "_IDX_" + dataTableName : indexName));
ResultSet rs = conn.createStatement().executeQuery(selectSql);
assertTrue (rs.next());
assertTrue(rs.unwrap(PhoenixResultSet.class).getCurrentRow().getValue(0).getTimestamp() < clock2.initialTime() &&
@@ -258,7 +259,8 @@ public class IndexBuildTimestampIT extends BaseTest {
selectSql =
String.format("SELECT * FROM %s WHERE val = 'bcd'", (view ? viewName : dataTableName));
// assert we are pulling from index table
- assertExplainPlan(conn, localIndex, selectSql, dataTableName, (view ? "_IDX_" + dataTableName : indexName));
+ assertExplainPlan(conn, localIndex, selectSql, dataTableName, (view && !localIndex ?
+ "_IDX_" + dataTableName : indexName));
rs = conn.createStatement().executeQuery(selectSql);
assertTrue (rs.next());
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/IndexExtendedIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/IndexExtendedIT.java
index bea2d25fda..87b6269e67 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/IndexExtendedIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/IndexExtendedIT.java
@@ -197,8 +197,8 @@ public class IndexExtendedIT extends BaseTest {
explainPlanAttributes =
plan.getPlanStepsAsAttributes();
//assert we are pulling from index table.
- String expectedTableName = localIndex ? dataTableFullName
- : indexTableFullName;
+ String expectedTableName = localIndex ?
+ indexTableFullName + "(" + dataTableFullName + ")" : indexTableFullName;
assertEquals(expectedTableName,
explainPlanAttributes.getTableName());
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/IndexToolIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/IndexToolIT.java
index af58cd31d5..8a7ad3f820 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/IndexToolIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/IndexToolIT.java
@@ -344,7 +344,7 @@ public class IndexToolIT extends BaseTest {
explainPlanAttributes.getExplainScanType());
final String expectedTableName;
if (localIndex) {
- expectedTableName = dataTableFullName;
+ expectedTableName = indexTableFullName + "(" + dataTableFullName + ")";
} else {
expectedTableName = indexTableFullName;
}
@@ -821,8 +821,10 @@ public class IndexToolIT extends BaseTest {
String expectedExplainPlan;
if (localIndex) {
expectedExplainPlan = String.format(" RANGE SCAN OVER %s [1,",
- normalizeTableNames ? SchemaUtil.normalizeIdentifier(dataTableFullName)
- : dataTableFullName);
+ normalizeTableNames ?
+ SchemaUtil.normalizeIdentifier(indexTableFullName) + "(" +
+ SchemaUtil.normalizeIdentifier(dataTableFullName) + ")":
+ indexTableFullName + "(" + dataTableFullName + ")");
} else {
expectedExplainPlan = String.format(" RANGE SCAN OVER %s",
normalizeTableNames ? SchemaUtil.normalizeIdentifier(indexTableFullName)
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/LocalIndexSplitMergeIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/LocalIndexSplitMergeIT.java
index 57f05da104..07e4e731c5 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/LocalIndexSplitMergeIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/LocalIndexSplitMergeIT.java
@@ -90,6 +90,7 @@ public class LocalIndexSplitMergeIT extends BaseTest {
String schemaName = generateUniqueName();
String tableName = schemaName + "." + generateUniqueName();
String indexName = "IDX_" + generateUniqueName();
+ String fullIndexName = schemaName + "." + indexName;
TableName physicalTableName = SchemaUtil.getPhysicalTableName(tableName.getBytes(), false);
String indexPhysicalTableName = physicalTableName.getNameAsString();
@@ -157,8 +158,8 @@ public class LocalIndexSplitMergeIT extends BaseTest {
explainPlanAttributes.getIteratorTypeAndScanSize());
assertEquals("RANGE SCAN ",
explainPlanAttributes.getExplainScanType());
- assertEquals(indexPhysicalTableName,
- explainPlanAttributes.getTableName());
+ assertEquals(fullIndexName + "(" + indexPhysicalTableName + ")",
+ explainPlanAttributes.getTableName());
assertEquals(" [1]", explainPlanAttributes.getKeyRanges());
assertEquals("SERVER FILTER BY FIRST KEY ONLY",
explainPlanAttributes.getServerWhereFilter());
@@ -177,7 +178,7 @@ public class LocalIndexSplitMergeIT extends BaseTest {
explainPlanAttributes.getIteratorTypeAndScanSize());
assertEquals("RANGE SCAN ",
explainPlanAttributes.getExplainScanType());
- assertEquals(indexPhysicalTableName,
+ assertEquals(fullIndexName + "_2(" + indexPhysicalTableName + ")",
explainPlanAttributes.getTableName());
assertEquals(" [2]", explainPlanAttributes.getKeyRanges());
assertEquals("SERVER FILTER BY FIRST KEY ONLY",
@@ -214,6 +215,7 @@ public class LocalIndexSplitMergeIT extends BaseTest {
String schemaName = generateUniqueName();
String tableName = schemaName + "." + generateUniqueName();
String indexName = "IDX_" + generateUniqueName();
+ String fullIndexName = schemaName + "." + indexName;
TableName physicalTableName = SchemaUtil.getPhysicalTableName(tableName.getBytes(), false);
String indexPhysicalTableName = physicalTableName.getNameAsString();
@@ -272,8 +274,8 @@ public class LocalIndexSplitMergeIT extends BaseTest {
explainPlanAttributes.getIteratorTypeAndScanSize());
assertEquals("RANGE SCAN ",
explainPlanAttributes.getExplainScanType());
- assertEquals(indexPhysicalTableName,
- explainPlanAttributes.getTableName());
+ assertEquals(fullIndexName + "(" + indexPhysicalTableName + ")",
+ explainPlanAttributes.getTableName());
assertEquals(" [1]", explainPlanAttributes.getKeyRanges());
assertEquals("SERVER FILTER BY FIRST KEY ONLY",
explainPlanAttributes.getServerWhereFilter());
@@ -289,8 +291,8 @@ public class LocalIndexSplitMergeIT extends BaseTest {
explainPlanAttributes.getIteratorTypeAndScanSize());
assertEquals("RANGE SCAN ",
explainPlanAttributes.getExplainScanType());
- assertEquals(indexPhysicalTableName,
- explainPlanAttributes.getTableName());
+ assertEquals(fullIndexName + "_2(" + indexPhysicalTableName + ")",
+ explainPlanAttributes.getTableName());
assertEquals(" [2]", explainPlanAttributes.getKeyRanges());
assertEquals("SERVER FILTER BY FIRST KEY ONLY",
explainPlanAttributes.getServerWhereFilter());
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/TenantSpecificViewIndexIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/TenantSpecificViewIndexIT.java
index c5ba9542a4..6d60fb4206 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/TenantSpecificViewIndexIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/TenantSpecificViewIndexIT.java
@@ -154,6 +154,8 @@ public class TenantSpecificViewIndexIT extends BaseTenantSpecificViewIndexIT {
boolean isNamespaceMapped, long indexIdOffset) throws Exception {
Properties props = new Properties();
String indexName = "I_"+ generateUniqueName();
+ String schemaName = SchemaUtil.getSchemaNameFromFullName(viewName);
+ String fullIndexName = SchemaUtil.getTableName(schemaName, indexName);
if (tenantId != null) {
props.setProperty(PhoenixRuntime.TENANT_ID_ATTRIB, tenantId);
}
@@ -224,19 +226,18 @@ public class TenantSpecificViewIndexIT extends BaseTenantSpecificViewIndexIT {
assertEquals("SERVER FILTER BY FIRST KEY ONLY",
explainPlanAttributes.getServerWhereFilter());
if (localIndex) {
- assertEquals(SchemaUtil.getPhysicalTableName(
- Bytes.toBytes(tableName), isNamespaceMapped).toString(),
+ assertEquals(fullIndexName + "(" + SchemaUtil.getPhysicalTableName(
+ Bytes.toBytes(tableName), isNamespaceMapped).toString() + ")",
explainPlanAttributes.getTableName());
assertEquals("CLIENT MERGE SORT",
explainPlanAttributes.getClientSortAlgo());
assertEquals(" [" + (1L + indexIdOffset) + ",'"
+ tenantId + "','f']", explainPlanAttributes.getKeyRanges());
} else {
- assertEquals(
- Bytes.toString(MetaDataUtil.getViewIndexPhysicalName(
+ assertEquals(Bytes.toString(MetaDataUtil.getViewIndexPhysicalName(
SchemaUtil.getPhysicalTableName(Bytes.toBytes(tableName),
- isNamespaceMapped).toBytes())),
- explainPlanAttributes.getTableName());
+ isNamespaceMapped).toBytes())),
+ explainPlanAttributes.getTableName());
assertNull(explainPlanAttributes.getClientSortAlgo());
assertEquals(" [" + (Short.MIN_VALUE + indexIdOffset) + ",'"
+ tenantId + "','f']", explainPlanAttributes.getKeyRanges());
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/UserDefinedFunctionsIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/UserDefinedFunctionsIT.java
index 9b3d1311a0..fa8c8ffe57 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/UserDefinedFunctionsIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/UserDefinedFunctionsIT.java
@@ -828,7 +828,7 @@ public class UserDefinedFunctionsIT extends BaseOwnClusterIT {
explainPlanAttributes.getIteratorTypeAndScanSize());
assertEquals("RANGE SCAN ",
explainPlanAttributes.getExplainScanType());
- assertEquals("T5", explainPlanAttributes.getTableName());
+ assertEquals("IDX2(T5)", explainPlanAttributes.getTableName());
assertEquals(" [1,'kcoj']", explainPlanAttributes.getKeyRanges());
assertEquals("SERVER FILTER BY FIRST KEY ONLY",
explainPlanAttributes.getServerWhereFilter());
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/ViewIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/ViewIT.java
index 23eaa1d5ac..f0293e3dc6 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/ViewIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/ViewIT.java
@@ -593,7 +593,8 @@ public class ViewIT extends SplitSystemCatalogIT {
// Assert that in either case (local & global) that index from
// physical table used for query on view.
if (localIndex) {
- assertEquals(fullTableName, explainPlanAttributes.getTableName());
+ assertEquals(fullIndexName1 + "(" + fullTableName + ")",
+ explainPlanAttributes.getTableName());
assertEquals(" [1,1,100] - [1,2,109]",
explainPlanAttributes.getKeyRanges());
assertEquals("CLIENT MERGE SORT",
@@ -1131,6 +1132,8 @@ public class ViewIT extends SplitSystemCatalogIT {
try (Connection conn = DriverManager.getConnection(getUrl());
Statement stmt = conn.createStatement()) {
String viewIndexName1 = "I_" + generateUniqueName();
+ String schemaName = SchemaUtil.getSchemaNameFromFullName(viewName);
+ String viewIndexFullName1 = SchemaUtil.getTableName(schemaName, viewIndexName1);
String viewIndexPhysicalName = MetaDataUtil.
getViewIndexPhysicalName(fullTableName);
if (localIndex) {
@@ -1174,7 +1177,7 @@ public class ViewIT extends SplitSystemCatalogIT {
assertEquals("PARALLEL "
+ (saltBuckets == null ? 1 : saltBuckets) + "-WAY",
explainPlanAttributes.getIteratorTypeAndScanSize());
- assertEquals(fullTableName,
+ assertEquals(viewIndexFullName1 + "(" + fullTableName + ")",
explainPlanAttributes.getTableName());
assertEquals(" [1,51]", explainPlanAttributes.getKeyRanges());
assertTrue(explainPlanAttributes.getServerWhereFilter().
@@ -1205,6 +1208,7 @@ public class ViewIT extends SplitSystemCatalogIT {
}
String viewIndexName2 = "I_" + generateUniqueName();
+ String viewIndexFullName2 = SchemaUtil.getTableName(schemaName, viewIndexName2);
if (localIndex) {
stmt.execute("CREATE LOCAL INDEX " + viewIndexName2 + " on "
+ viewName + "(s)");
@@ -1247,7 +1251,7 @@ public class ViewIT extends SplitSystemCatalogIT {
physicalTableName = fullTableName;
assertEquals("PARALLEL " + (saltBuckets == null ? 1 : saltBuckets)
+ "-WAY", explainPlanAttributes.getIteratorTypeAndScanSize());
- assertEquals(fullTableName,
+ assertEquals(viewIndexFullName2 + "(" + fullTableName + ")",
explainPlanAttributes.getTableName());
assertEquals(" [" + (2) + ",'foo']",
explainPlanAttributes.getKeyRanges());
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/BaseIndexIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/BaseIndexIT.java
index e4d759e218..d78ba3934c 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/BaseIndexIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/BaseIndexIT.java
@@ -171,7 +171,8 @@ public abstract class BaseIndexIT extends ParallelStatsDisabledIT {
}
if (localIndex) {
- assertEquals(fullTableName, explainPlanAttributes.getTableName());
+ assertEquals(fullIndexName + "(" + fullTableName + ")",
+ explainPlanAttributes.getTableName());
assertEquals(" [1]", explainPlanAttributes.getKeyRanges());
assertEquals("CLIENT MERGE SORT",
explainPlanAttributes.getClientSortAlgo());
@@ -600,7 +601,7 @@ public abstract class BaseIndexIT extends ParallelStatsDisabledIT {
if (localIndex) {
assertEquals("RANGE SCAN ",
explainPlanAttributes.getExplainScanType());
- assertEquals(fullTableName,
+ assertEquals(fullIndexName + "(" + fullTableName + ")",
explainPlanAttributes.getTableName());
assertEquals("CLIENT MERGE SORT",
explainPlanAttributes.getClientSortAlgo());
@@ -635,7 +636,8 @@ public abstract class BaseIndexIT extends ParallelStatsDisabledIT {
if (localIndex) {
assertEquals("RANGE SCAN ",
explainPlanAttributes.getExplainScanType());
- assertEquals(fullTableName, explainPlanAttributes.getTableName());
+ assertEquals(fullIndexName + "(" + fullTableName + ")",
+ explainPlanAttributes.getTableName());
assertEquals("CLIENT MERGE SORT",
explainPlanAttributes.getClientSortAlgo());
assertEquals(" [1]", explainPlanAttributes.getKeyRanges());
@@ -706,7 +708,7 @@ public abstract class BaseIndexIT extends ParallelStatsDisabledIT {
if (localIndex) {
assertEquals("RANGE SCAN ",
explainPlanAttributes.getExplainScanType());
- assertEquals(fullTableName,
+ assertEquals(fullIndexName + "(" + fullTableName + ")",
explainPlanAttributes.getTableName());
assertEquals("CLIENT MERGE SORT",
explainPlanAttributes.getClientSortAlgo());
@@ -750,7 +752,7 @@ public abstract class BaseIndexIT extends ParallelStatsDisabledIT {
assertEquals("CLIENT MERGE SORT",
explainPlanAttributes.getClientSortAlgo());
if (localIndex) {
- assertEquals(fullTableName,
+ assertEquals(fullIndexName + "(" + fullTableName + ")",
explainPlanAttributes.getTableName());
} else {
assertEquals(fullIndexName,
@@ -826,7 +828,7 @@ public abstract class BaseIndexIT extends ParallelStatsDisabledIT {
if(localIndex) {
assertEquals("RANGE SCAN ",
explainPlanAttributes.getExplainScanType());
- assertEquals(fullTableName,
+ assertEquals(fullIndexName + "(" + fullTableName + ")",
explainPlanAttributes.getTableName());
assertEquals(" [1]", explainPlanAttributes.getKeyRanges());
assertEquals("CLIENT MERGE SORT",
@@ -1014,7 +1016,8 @@ public abstract class BaseIndexIT extends ParallelStatsDisabledIT {
explainPlanAttributes.getIteratorTypeAndScanSize());
assertEquals("RANGE SCAN ",
explainPlanAttributes.getExplainScanType());
- assertEquals(testTable, explainPlanAttributes.getTableName());
+ assertEquals(fullIndexName + "(" + testTable + ")",
+ explainPlanAttributes.getTableName());
assertEquals(" [1]", explainPlanAttributes.getKeyRanges());
assertEquals("CLIENT MERGE SORT",
explainPlanAttributes.getClientSortAlgo());
@@ -1094,7 +1097,7 @@ public abstract class BaseIndexIT extends ParallelStatsDisabledIT {
assertEquals("RANGE SCAN ",
explainPlanAttributes.getExplainScanType());
if (localIndex) {
- assertEquals(fullTableName,
+ assertEquals(fullIndexName + "(" + fullTableName + ")",
explainPlanAttributes.getTableName());
assertEquals(" [1,'1']", explainPlanAttributes.getKeyRanges());
} else {
@@ -1135,7 +1138,7 @@ public abstract class BaseIndexIT extends ParallelStatsDisabledIT {
if (localIndex) {
assertEquals("RANGE SCAN ",
explainPlanAttributes.getExplainScanType());
- assertEquals(fullTableName,
+ assertEquals(fullIndexName + "(" + fullTableName + ")",
explainPlanAttributes.getTableName());
assertEquals(" [1]", explainPlanAttributes.getKeyRanges());
assertEquals("CLIENT MERGE SORT",
@@ -1272,7 +1275,7 @@ public abstract class BaseIndexIT extends ParallelStatsDisabledIT {
if (localIndex) {
assertEquals("RANGE SCAN ",
explainPlanAttributes.getExplainScanType());
- assertEquals(fullTableName,
+ assertEquals(fullIndexName + "(" + fullTableName + ")",
explainPlanAttributes.getTableName());
assertEquals(" [1]", explainPlanAttributes.getKeyRanges());
assertEquals("CLIENT MERGE SORT",
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/GlobalIndexOptimizationIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/GlobalIndexOptimizationIT.java
index b0061fae71..36024332b9 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/GlobalIndexOptimizationIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/GlobalIndexOptimizationIT.java
@@ -79,7 +79,8 @@ public class GlobalIndexOptimizationIT extends ParallelStatsDisabledIT {
ResultSet rs = conn1.createStatement().executeQuery("EXPLAIN "+ query);
String expected =
"DELETE ROWS CLIENT SELECT\n" +
- "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + dataTableName +" [1,*] - [1,100]\n" +
+ "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " +
+ indexTableName+"L" + "(" + dataTableName + ") [1,*] - [1,100]\n" +
" SERVER FILTER BY FIRST KEY ONLY\n" +
"CLIENT MERGE SORT";
String actual = QueryUtil.getExplainPlan(rs);
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/IndexMaintenanceIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/IndexMaintenanceIT.java
index 4354fe003d..3ae8214a73 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/IndexMaintenanceIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/IndexMaintenanceIT.java
@@ -162,7 +162,7 @@ public class IndexMaintenanceIT extends ParallelStatsDisabledIT {
ResultSet rs = stmt.executeQuery("EXPLAIN " + whereSql);
assertEquals(
localIndex ? "CLIENT PARALLEL 1-WAY RANGE SCAN OVER INDEX_TEST."
- + dataTableName
+ + indexName + "(" + fullDataTableName + ")"
+ " [1,'VARCHAR1_CHAR1 _A.VARCHAR1_B.CHAR1 ',3,'2015-01-02 00:00:00.000',1,420,156,800,000,1,420,156,800,000]\nCLIENT MERGE SORT"
: "CLIENT PARALLEL 1-WAY RANGE SCAN OVER INDEX_TEST." + indexName + " ['VARCHAR1_CHAR1 _A.VARCHAR1_B.CHAR1 ',3,'2015-01-02 00:00:00.000',1,420,156,800,000,1,420,156,800,000]",
QueryUtil.getExplainPlan(rs));
@@ -183,8 +183,10 @@ public class IndexMaintenanceIT extends ParallelStatsDisabledIT {
+ "from "
+ fullDataTableName;
rs = conn.createStatement().executeQuery("EXPLAIN " + indexSelectSql);
- assertEquals(localIndex ? "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + fullDataTableName
- + " [1]\nCLIENT MERGE SORT" : "CLIENT PARALLEL 1-WAY FULL SCAN OVER INDEX_TEST." + indexName,
+ assertEquals(localIndex ?
+ "CLIENT PARALLEL 1-WAY RANGE SCAN OVER INDEX_TEST." + indexName +
+ "(" + fullDataTableName + ") [1]\nCLIENT MERGE SORT"
+ : "CLIENT PARALLEL 1-WAY FULL SCAN OVER INDEX_TEST." + indexName,
QueryUtil.getExplainPlan(rs));
rs = conn.createStatement().executeQuery(indexSelectSql);
verifyResult(rs, 1);
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/IndexUsageIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/IndexUsageIT.java
index 778df493d7..acbbb4352d 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/IndexUsageIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/IndexUsageIT.java
@@ -150,7 +150,7 @@ public class IndexUsageIT extends ParallelStatsDisabledIT {
if (localIndex) {
assertEquals("RANGE SCAN ",
explainPlanAttributes.getExplainScanType());
- assertEquals(fullDataTableName,
+ assertEquals("INDEX_TEST." + indexName + "(" + fullDataTableName + ")",
explainPlanAttributes.getTableName());
assertEquals("CLIENT MERGE SORT",
explainPlanAttributes.getClientSortAlgo());
@@ -221,7 +221,7 @@ public class IndexUsageIT extends ParallelStatsDisabledIT {
assertEquals("SERVER AGGREGATE INTO ORDERED DISTINCT ROWS BY [TO_BIGINT(\"(A.INT_COL1 + 1)\")]",
explainPlanAttributes.getServerAggregate());
if (localIndex) {
- assertEquals(fullDataTableName,
+ assertEquals("INDEX_TEST." + indexName + "(" + fullDataTableName + ")",
explainPlanAttributes.getTableName());
assertEquals(" [1,0] - [1,*]",
explainPlanAttributes.getKeyRanges());
@@ -292,7 +292,7 @@ public class IndexUsageIT extends ParallelStatsDisabledIT {
assertEquals("SERVER FILTER BY FIRST KEY ONLY",
explainPlanAttributes.getServerWhereFilter());
if (localIndex) {
- assertEquals(fullDataTableName,
+ assertEquals("INDEX_TEST." + indexName + "(" + fullDataTableName + ")",
explainPlanAttributes.getTableName());
assertEquals(" [1,2]", explainPlanAttributes.getKeyRanges());
assertEquals("CLIENT MERGE SORT",
@@ -361,7 +361,7 @@ public class IndexUsageIT extends ParallelStatsDisabledIT {
if (localIndex) {
assertEquals("RANGE SCAN ",
explainPlanAttributes.getExplainScanType());
- assertEquals(fullDataTableName,
+ assertEquals("INDEX_TEST." + indexName + "(" + fullDataTableName + ")",
explainPlanAttributes.getTableName());
assertEquals(" [1]", explainPlanAttributes.getKeyRanges());
assertEquals("CLIENT MERGE SORT",
@@ -445,7 +445,7 @@ public class IndexUsageIT extends ParallelStatsDisabledIT {
assertEquals("RANGE SCAN ",
explainPlanAttributes.getExplainScanType());
if (localIndex) {
- assertEquals(dataTableName,
+ assertEquals(indexName + "(" + dataTableName + ")",
explainPlanAttributes.getTableName());
assertEquals(" [1,'x_1']",
explainPlanAttributes.getKeyRanges());
@@ -481,7 +481,7 @@ public class IndexUsageIT extends ParallelStatsDisabledIT {
if (localIndex) {
assertEquals("RANGE SCAN ",
explainPlanAttributes.getExplainScanType());
- assertEquals(dataTableName,
+ assertEquals(indexName + "(" + dataTableName + ")",
explainPlanAttributes.getTableName());
assertEquals(" [1]",
explainPlanAttributes.getKeyRanges());
@@ -571,7 +571,7 @@ public class IndexUsageIT extends ParallelStatsDisabledIT {
if (localIndex) {
assertEquals("RANGE SCAN ",
explainPlanAttributes.getExplainScanType());
- assertEquals(fullDataTableName,
+ assertEquals("INDEX_TEST." + indexName + "(" + fullDataTableName + ")",
explainPlanAttributes.getTableName());
assertEquals(" [1,2]",
explainPlanAttributes.getKeyRanges());
@@ -639,7 +639,7 @@ public class IndexUsageIT extends ParallelStatsDisabledIT {
assertEquals("RANGE SCAN ",
explainPlanAttributes.getExplainScanType());
if (local) {
- assertEquals(dataTableName,
+ assertEquals(indexName1 + "(" + dataTableName + ")",
explainPlanAttributes.getTableName());
assertEquals(" [1,173]",
explainPlanAttributes.getKeyRanges());
@@ -676,7 +676,7 @@ public class IndexUsageIT extends ParallelStatsDisabledIT {
assertEquals("SERVER FILTER BY FIRST KEY ONLY",
explainPlanAttributes.getServerWhereFilter());
if (local) {
- assertEquals(dataTableName,
+ assertEquals(indexName2 + "(" + dataTableName + ")",
explainPlanAttributes.getTableName());
assertEquals(" [" + (2) + ",'foo2_bar2']",
explainPlanAttributes.getKeyRanges());
@@ -860,7 +860,7 @@ public class IndexUsageIT extends ParallelStatsDisabledIT {
assertEquals("SERVER FILTER BY FIRST KEY ONLY",
explainPlanAttributes.getServerWhereFilter());
if (localIndex) {
- assertEquals(dataTableName,
+ assertEquals(indexName + "(" + dataTableName + ")",
explainPlanAttributes.getTableName());
assertEquals(" [1,'id:id1']",
explainPlanAttributes.getKeyRanges());
@@ -938,11 +938,13 @@ public class IndexUsageIT extends ParallelStatsDisabledIT {
rs = conn.createStatement().executeQuery("EXPLAIN "+query);
String explainPlan = QueryUtil.getExplainPlan(rs);
if (localIndex) {
- assertEquals("CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + tableName + " [1,'1David']\n" +
+ assertEquals("CLIENT PARALLEL 1-WAY RANGE SCAN OVER " +
+ indexName + "(" + tableName + ") [1,'1David']\n" +
" SERVER FILTER BY FIRST KEY ONLY\n" +
"CLIENT MERGE SORT\n" +
" PARALLEL LEFT-JOIN TABLE 0 (SKIP MERGE)\n" +
- " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + tableName + " [1]\n" +
+ " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " +
+ indexName + "(" + tableName + ") [1]\n" +
" SERVER FILTER BY FIRST KEY ONLY\n" +
" CLIENT MERGE SORT", explainPlan);
}
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/LocalIndexIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/LocalIndexIT.java
index 1e6e63ce37..2243c54361 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/LocalIndexIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/LocalIndexIT.java
@@ -386,6 +386,7 @@ public class LocalIndexIT extends BaseLocalIndexIT {
public void testUseUncoveredLocalIndexWithPrefix() throws Exception {
String tableName = schemaName + "." + generateUniqueName();
String indexName = "IDX_" + generateUniqueName();
+ String fullIndexName = SchemaUtil.getTableName(schemaName, indexName);
TableName physicalTableName = SchemaUtil.getPhysicalTableName(tableName.getBytes(), isNamespaceMapped);
String indexPhysicalTableName = physicalTableName.getNameAsString();
@@ -422,7 +423,8 @@ public class LocalIndexIT extends BaseLocalIndexIT {
explainPlanAttributes.getIteratorTypeAndScanSize());
assertEquals("RANGE SCAN ",
explainPlanAttributes.getExplainScanType());
- assertEquals(indexPhysicalTableName, explainPlanAttributes.getTableName());
+ assertEquals( fullIndexName+ "(" + indexPhysicalTableName + ")",
+ explainPlanAttributes.getTableName());
assertEquals(" [1,3,4]", explainPlanAttributes.getKeyRanges());
assertEquals("SERVER FILTER BY FIRST KEY ONLY",
explainPlanAttributes.getServerWhereFilter());
@@ -454,7 +456,8 @@ public class LocalIndexIT extends BaseLocalIndexIT {
explainPlanAttributes.getIteratorTypeAndScanSize());
assertEquals("RANGE SCAN ",
explainPlanAttributes.getExplainScanType());
- assertEquals(physicalTableName.toString(), explainPlanAttributes.getTableName());
+ assertEquals(fullIndexName+ "(" + indexPhysicalTableName + ")",
+ explainPlanAttributes.getTableName());
assertEquals(" [1,3,4,3]", explainPlanAttributes.getKeyRanges());
assertEquals("[0.V3]", explainPlanAttributes.getServerMergeColumns().toString());
assertEquals("SERVER FILTER BY FIRST KEY ONLY AND \"V3\" = 1",
@@ -467,6 +470,7 @@ public class LocalIndexIT extends BaseLocalIndexIT {
public void testUseUncoveredLocalIndexWithSplitPrefix() throws Exception {
String tableName = schemaName + "." + generateUniqueName();
String indexName = "IDX_" + generateUniqueName();
+ String fullIndexName = SchemaUtil.getTableName(schemaName, indexName);
TableName physicalTableName = SchemaUtil.getPhysicalTableName(tableName.getBytes(), isNamespaceMapped);
String indexPhysicalTableName = physicalTableName.getNameAsString();
@@ -485,7 +489,7 @@ public class LocalIndexIT extends BaseLocalIndexIT {
ResultSet rs = conn.createStatement().executeQuery("EXPLAIN SELECT pk1, pk2, pk3, v1 FROM " + tableName + " WHERE pk1 = 2 AND pk3 = 3");
assertEquals(
"CLIENT PARALLEL 16-WAY RANGE SCAN OVER "
- + indexPhysicalTableName + " [1,2,3]\n"
+ + fullIndexName + "(" + indexPhysicalTableName + ") [1,2,3]\n"
+ " SERVER MERGE [0.V1]\n"
+ " SERVER FILTER BY FIRST KEY ONLY\n"
+ "CLIENT MERGE SORT",
@@ -497,6 +501,7 @@ public class LocalIndexIT extends BaseLocalIndexIT {
public void testUseUncoveredLocalIndex() throws Exception {
String tableName = schemaName + "." + generateUniqueName();
String indexName = "IDX_" + generateUniqueName();
+ String fullIndexName = SchemaUtil.getTableName(schemaName, indexName);
TableName physicalTableName = SchemaUtil.getPhysicalTableName(tableName.getBytes(), isNamespaceMapped);
String indexPhysicalTableName = physicalTableName.getNameAsString();
@@ -514,7 +519,7 @@ public class LocalIndexIT extends BaseLocalIndexIT {
ResultSet rs = conn.createStatement().executeQuery("EXPLAIN SELECT COUNT(*) FROM " + tableName);
assertEquals(
"CLIENT PARALLEL 1-WAY RANGE SCAN OVER "
- + indexPhysicalTableName + " [1]\n"
+ + fullIndexName + "(" + indexPhysicalTableName + ") [1]\n"
+ " SERVER FILTER BY FIRST KEY ONLY\n"
+ " SERVER AGGREGATE INTO SINGLE ROW",
QueryUtil.getExplainPlan(rs));
@@ -531,7 +536,7 @@ public class LocalIndexIT extends BaseLocalIndexIT {
rs = conn.createStatement().executeQuery("EXPLAIN SELECT * FROM " + tableName + " ORDER BY v2");
assertEquals(
"CLIENT PARALLEL 1-WAY RANGE SCAN OVER "
- + indexPhysicalTableName + " [1]\n"
+ + fullIndexName + "(" + indexPhysicalTableName + ") [1]\n"
+ " SERVER MERGE [0.V1]\n"
+ " SERVER FILTER BY FIRST KEY ONLY\n"
+ "CLIENT MERGE SORT",
@@ -552,7 +557,7 @@ public class LocalIndexIT extends BaseLocalIndexIT {
rs = conn.createStatement().executeQuery("EXPLAIN SELECT * FROM " + tableName + " WHERE v2 = 2 ORDER BY v3");
assertEquals(
"CLIENT PARALLEL 1-WAY RANGE SCAN OVER "
- + indexPhysicalTableName + " [1,2]\n"
+ + fullIndexName + "(" + indexPhysicalTableName + ") [1,2]\n"
+ " SERVER MERGE [0.V1]\n"
+ " SERVER FILTER BY FIRST KEY ONLY\n"
+ "CLIENT MERGE SORT",
@@ -581,7 +586,7 @@ public class LocalIndexIT extends BaseLocalIndexIT {
rs = conn.createStatement().executeQuery("EXPLAIN SELECT * FROM " + tableName + " WHERE v2 = 2");
assertEquals(
"CLIENT PARALLEL 1-WAY RANGE SCAN OVER "
- + indexPhysicalTableName + " [1,2]\n"
+ + fullIndexName + "(" + indexPhysicalTableName + ") [1,2]\n"
+ " SERVER MERGE [0.V1]\n"
+ " SERVER FILTER BY FIRST KEY ONLY\n"
+ "CLIENT MERGE SORT",
@@ -592,7 +597,7 @@ public class LocalIndexIT extends BaseLocalIndexIT {
rs = conn.createStatement().executeQuery("EXPLAIN SELECT * FROM " + tableName + " WHERE v2 = 2 AND v4 = 4");
assertEquals(
"CLIENT PARALLEL 1-WAY RANGE SCAN OVER "
- + indexPhysicalTableName + " [1,2]\n"
+ + fullIndexName + "(" + indexPhysicalTableName + ") [1,2]\n"
+ " SERVER MERGE [0.V1]\n"
+ " SERVER FILTER BY FIRST KEY ONLY AND TO_INTEGER(\"V4\") = 4\n"
+ "CLIENT MERGE SORT",
@@ -603,7 +608,7 @@ public class LocalIndexIT extends BaseLocalIndexIT {
rs = conn.createStatement().executeQuery("EXPLAIN SELECT * FROM " + tableName + " WHERE v2 = 2 AND v1 = 3");
assertEquals(
"CLIENT PARALLEL 1-WAY RANGE SCAN OVER "
- + indexPhysicalTableName + " [1,2]\n"
+ + fullIndexName + "(" + indexPhysicalTableName + ") [1,2]\n"
+ " SERVER MERGE [0.V1]\n"
+ " SERVER FILTER BY FIRST KEY ONLY AND \"V1\" = 3.0\n"
+ "CLIENT MERGE SORT",
@@ -794,6 +799,7 @@ public class LocalIndexIT extends BaseLocalIndexIT {
public void testLocalIndexUsedForUncoveredOrderBy() throws Exception {
String tableName = schemaName + "." + generateUniqueName();
String indexName = "IDX_" + generateUniqueName();
+ String fullIndexName = SchemaUtil.getTableName(schemaName, indexName);
TableName physicalTableName = SchemaUtil.getPhysicalTableName(tableName.getBytes(), isNamespaceMapped);
String indexPhysicalTableName = physicalTableName.getNameAsString();
@@ -814,7 +820,7 @@ public class LocalIndexIT extends BaseLocalIndexIT {
assertEquals(
"CLIENT PARALLEL " + numRegions + "-WAY RANGE SCAN OVER "
- + indexPhysicalTableName + " [1]\n"
+ + fullIndexName + "(" + indexPhysicalTableName + ") [1]\n"
+ " SERVER MERGE [0.K3]\n"
+ " SERVER FILTER BY FIRST KEY ONLY\n"
+ "CLIENT MERGE SORT",
@@ -837,7 +843,7 @@ public class LocalIndexIT extends BaseLocalIndexIT {
rs = conn1.createStatement().executeQuery("EXPLAIN "+ query);
assertEquals(
"CLIENT PARALLEL " + numRegions + "-WAY REVERSE RANGE SCAN OVER "
- + indexPhysicalTableName + " [1]\n"
+ + fullIndexName + "(" + indexPhysicalTableName + ") [1]\n"
+ " SERVER MERGE [0.K3]\n"
+ " SERVER FILTER BY FIRST KEY ONLY\n"
+ "CLIENT MERGE SORT",
@@ -863,6 +869,7 @@ public class LocalIndexIT extends BaseLocalIndexIT {
public void testLocalIndexReverseScanShouldReturnAllRows() throws Exception {
String tableName = schemaName + "." + generateUniqueName();
String indexName = "IDX_" + generateUniqueName();
+ String fullIndexName = SchemaUtil.getTableName(schemaName, indexName);
TableName physicalTableName = SchemaUtil.getPhysicalTableName(tableName.getBytes(), isNamespaceMapped);
String indexPhysicalTableName = physicalTableName.getNameAsString();
@@ -883,7 +890,7 @@ public class LocalIndexIT extends BaseLocalIndexIT {
assertEquals(
"CLIENT PARALLEL " + numRegions + "-WAY REVERSE RANGE SCAN OVER "
- + indexPhysicalTableName + " [1]\n"
+ + fullIndexName + "(" + indexPhysicalTableName + ") [1]\n"
+ " SERVER FILTER BY FIRST KEY ONLY\n"
+ "CLIENT MERGE SORT",
QueryUtil.getExplainPlan(rs));
@@ -908,6 +915,7 @@ public class LocalIndexIT extends BaseLocalIndexIT {
public void testLocalIndexScanJoinColumnsFromDataTable() throws Exception {
String tableName = schemaName + "." + generateUniqueName();
String indexName = "IDX_" + generateUniqueName();
+ String fullIndexName = SchemaUtil.getTableName(schemaName, indexName);
String indexTableName = schemaName + "." + indexName;
TableName physicalTableName = SchemaUtil.getPhysicalTableName(tableName.getBytes(), isNamespaceMapped);
String indexPhysicalTableName = physicalTableName.getNameAsString();
@@ -933,7 +941,7 @@ public class LocalIndexIT extends BaseLocalIndexIT {
assertEquals(
"CLIENT PARALLEL " + numRegions + "-WAY RANGE SCAN OVER "
- + indexPhysicalTableName + " [1,'a']\n"
+ + fullIndexName + "(" + indexPhysicalTableName + ") [1,'a']\n"
+ " SERVER MERGE [0.K3]\n"
+ " SERVER FILTER BY FIRST KEY ONLY\n"
+ "CLIENT MERGE SORT",
@@ -957,7 +965,7 @@ public class LocalIndexIT extends BaseLocalIndexIT {
assertEquals(
"CLIENT PARALLEL " + numRegions + "-WAY RANGE SCAN OVER "
- + indexPhysicalTableName +" [1,*] - [1,'z']\n"
+ + fullIndexName + "(" + indexPhysicalTableName + ") [1,*] - [1,'z']\n"
+ " SERVER MERGE [0.K3]\n"
+ " SERVER FILTER BY FIRST KEY ONLY\n"
+ "CLIENT MERGE SORT",
@@ -994,7 +1002,7 @@ public class LocalIndexIT extends BaseLocalIndexIT {
assertEquals(
"CLIENT PARALLEL " + numRegions + "-WAY RANGE SCAN OVER "
- + indexPhysicalTableName +" [1,*] - [1,'z']\n"
+ + fullIndexName + "(" + indexPhysicalTableName + ") [1,*] - [1,'z']\n"
+ " SERVER MERGE [0.K3]\n"
+ " SERVER FILTER BY FIRST KEY ONLY\n"
+ " SERVER AGGREGATE INTO DISTINCT ROWS BY [\"V1\", \"T_ID\", \"K3\"]\nCLIENT MERGE SORT",
@@ -1023,7 +1031,7 @@ public class LocalIndexIT extends BaseLocalIndexIT {
rs = conn1.createStatement().executeQuery("EXPLAIN " + query);
assertEquals(
"CLIENT PARALLEL " + numRegions + "-WAY RANGE SCAN OVER "
- + indexPhysicalTableName +" [1,*] - [1,'z']\n"
+ + fullIndexName + "(" + indexPhysicalTableName + ") [1,*] - [1,'z']\n"
+ " SERVER MERGE [0.K3]\n"
+ " SERVER FILTER BY FIRST KEY ONLY\n"
+ " SERVER AGGREGATE INTO ORDERED DISTINCT ROWS BY [\"V1\"]\nCLIENT MERGE SORT",
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/MutableIndexFailureIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/MutableIndexFailureIT.java
index 624c4ab0bc..0d25b34c79 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/MutableIndexFailureIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/MutableIndexFailureIT.java
@@ -507,8 +507,9 @@ public class MutableIndexFailureIT extends BaseTest {
ResultSet rs = conn.createStatement().executeQuery(query);
String expectedPlan = " OVER "
+ (localIndex
- ? Bytes.toString(
- SchemaUtil.getPhysicalTableName(fullTableName.getBytes(), isNamespaceMapped).getName())
+ ? fullIndexName + "(" + Bytes.toString(
+ SchemaUtil.getPhysicalTableName(fullTableName.getBytes(),
+ isNamespaceMapped).getName()) + ")"
: SchemaUtil.getPhysicalTableName(fullIndexName.getBytes(), isNamespaceMapped).getNameAsString());
String explainPlan = QueryUtil.getExplainPlan(conn.createStatement().executeQuery("EXPLAIN " + query));
assertTrue(explainPlan, explainPlan.contains(expectedPlan));
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/MutableIndexIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/MutableIndexIT.java
index 91a309ecb7..c7913189d3 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/MutableIndexIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/MutableIndexIT.java
@@ -123,7 +123,9 @@ public class MutableIndexIT extends ParallelStatsDisabledIT {
String query = "SELECT char_col1, int_col1, long_col2 from " + fullTableName;
ResultSet rs = conn.createStatement().executeQuery("EXPLAIN " + query);
if (localIndex) {
- assertEquals("CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + fullTableName +" [1]\nCLIENT MERGE SORT", QueryUtil.getExplainPlan(rs));
+ assertEquals("CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + fullIndexName +
+ "(" + fullTableName + ") [1]\nCLIENT MERGE SORT",
+ QueryUtil.getExplainPlan(rs));
} else {
assertEquals("CLIENT PARALLEL 1-WAY FULL SCAN OVER " + fullIndexName, QueryUtil.getExplainPlan(rs));
}
@@ -190,7 +192,8 @@ public class MutableIndexIT extends ParallelStatsDisabledIT {
if(localIndex) {
query = "SELECT b.* from " + fullTableName + " where int_col1 = 4 AND char_col1 = 'chara'";
rs = conn.createStatement().executeQuery("EXPLAIN " + query);
- assertEquals("CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + fullTableName +" [1,'chara',4]\n" +
+ assertEquals("CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + fullIndexName +
+ "(" + fullTableName + ") [1,'chara',4]\n" +
" SERVER MERGE [B.VARCHAR_COL2, B.CHAR_COL2, B.INT_COL2, B.DECIMAL_COL2, B.DATE_COL]\n" +
"CLIENT MERGE SORT", QueryUtil.getExplainPlan(rs));
rs = conn.createStatement().executeQuery(query);
@@ -291,7 +294,9 @@ public class MutableIndexIT extends ParallelStatsDisabledIT {
query = "SELECT * FROM " + fullTableName;
rs = conn.createStatement().executeQuery("EXPLAIN " + query);
if(localIndex) {
- assertEquals("CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + fullTableName+" [1]\nCLIENT MERGE SORT", QueryUtil.getExplainPlan(rs));
+ assertEquals("CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + fullIndexName +
+ "(" + fullTableName + ") [1]\nCLIENT MERGE SORT",
+ QueryUtil.getExplainPlan(rs));
} else {
assertEquals("CLIENT PARALLEL 1-WAY FULL SCAN OVER " + fullIndexName, QueryUtil.getExplainPlan(rs));
}
@@ -312,7 +317,9 @@ public class MutableIndexIT extends ParallelStatsDisabledIT {
query = "SELECT * FROM " + fullTableName;
rs = conn.createStatement().executeQuery("EXPLAIN " + query);
if(localIndex) {
- assertEquals("CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + fullTableName + " [1]\nCLIENT MERGE SORT", QueryUtil.getExplainPlan(rs));
+ assertEquals("CLIENT PARALLEL 1-WAY RANGE SCAN OVER " +
+ fullIndexName + "(" + fullTableName + ") [1]\nCLIENT MERGE SORT",
+ QueryUtil.getExplainPlan(rs));
} else {
assertEquals("CLIENT PARALLEL 1-WAY FULL SCAN OVER " + fullIndexName, QueryUtil.getExplainPlan(rs));
}
@@ -333,7 +340,9 @@ public class MutableIndexIT extends ParallelStatsDisabledIT {
query = "SELECT * FROM " + fullTableName;
rs = conn.createStatement().executeQuery("EXPLAIN " + query);
if(localIndex) {
- assertEquals("CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + fullTableName+" [1]\nCLIENT MERGE SORT", QueryUtil.getExplainPlan(rs));
+ assertEquals("CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + fullIndexName +
+ "(" + fullTableName + ") [1]\nCLIENT MERGE SORT",
+ QueryUtil.getExplainPlan(rs));
} else {
assertEquals("CLIENT PARALLEL 1-WAY FULL SCAN OVER " + fullIndexName, QueryUtil.getExplainPlan(rs));
}
@@ -401,7 +410,8 @@ public class MutableIndexIT extends ParallelStatsDisabledIT {
query = "SELECT * FROM " + fullTableName;
rs = conn.createStatement().executeQuery("EXPLAIN " + query);
if (localIndex) {
- assertEquals("CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + fullTableName+" [1]\n"
+ assertEquals("CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + fullIndexName +
+ "(" + fullTableName + ") [1]\n"
+ " SERVER FILTER BY " + (columnEncoded ? "FIRST KEY" : "EMPTY COLUMN") + " ONLY\n"
+ "CLIENT MERGE SORT", QueryUtil.getExplainPlan(rs));
} else {
@@ -530,7 +540,8 @@ public class MutableIndexIT extends ParallelStatsDisabledIT {
query = "SELECT * FROM " + fullTableName;
rs = conn.createStatement().executeQuery("EXPLAIN " + query);
if(localIndex) {
- assertEquals("CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + fullTableName+" [1]\n"
+ assertEquals("CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + fullIndexName +
+ "(" + fullTableName + ") [1]\n"
+ " SERVER FILTER BY " + (columnEncoded ? "FIRST KEY" : "EMPTY COLUMN") + " ONLY\n"
+ "CLIENT MERGE SORT",
QueryUtil.getExplainPlan(rs));
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/ViewIndexIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/ViewIndexIT.java
index 246f80745a..ecd896f060 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/ViewIndexIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/ViewIndexIT.java
@@ -201,6 +201,7 @@ public class ViewIndexIT extends SplitSystemCatalogIT {
String indexName = "IND_" + generateUniqueName();
String fullTableName = SchemaUtil.getTableName(SCHEMA1, tableName);
String fullViewName = SchemaUtil.getTableName(SCHEMA2, generateUniqueName());
+ String fullIndexName = SchemaUtil.getTableName(SCHEMA2, indexName);
try (Connection conn = getConnection();
Connection conn1 = getTenantConnection("10")) {
@@ -249,7 +250,9 @@ public class ViewIndexIT extends SplitSystemCatalogIT {
String sql = "SELECT * FROM " + fullViewName + " WHERE v2 = 100";
ResultSet rs = conn1.prepareStatement("EXPLAIN " + sql).executeQuery();
assertEquals(
- "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + SchemaUtil.getPhysicalTableName(Bytes.toBytes(fullTableName), isNamespaceMapped) + " [1,'10',100]\n" +
+ "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + fullIndexName + "(" +
+ SchemaUtil.getPhysicalTableName(Bytes.toBytes(fullTableName),
+ isNamespaceMapped) + ") [1,'10',100]\n" +
" SERVER MERGE [0.V1]\n" +
" SERVER FILTER BY FIRST KEY ONLY\n" +
"CLIENT MERGE SORT", QueryUtil.getExplainPlan(rs));
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/txn/TxWriteFailureIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/txn/TxWriteFailureIT.java
index b8e46a244c..37aade19a3 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/txn/TxWriteFailureIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/txn/TxWriteFailureIT.java
@@ -172,7 +172,8 @@ public class TxWriteFailureIT extends BaseTest {
rs = conn.createStatement().executeQuery("EXPLAIN "+indexSql);
if(localIndex) {
assertEquals(
- "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + dataTableFullName + " [1]\n" +
+ "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + indexFullName +
+ "(" + dataTableFullName + ") [1]\n" +
" SERVER FILTER BY EMPTY COLUMN ONLY\n" +
"CLIENT MERGE SORT",
QueryUtil.getExplainPlan(rs));
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/BaseJoinIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/BaseJoinIT.java
index 92bd585d4e..c800bd4570 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/BaseJoinIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/BaseJoinIT.java
@@ -57,6 +57,16 @@ public abstract class BaseJoinIT extends ParallelStatsDisabledIT {
protected static final String JOIN_SUPPLIER_TABLE_FULL_NAME = '"' + JOIN_SCHEMA + "\".\"" + JOIN_SUPPLIER_TABLE + '"';
protected static final String JOIN_COITEM_TABLE_FULL_NAME = '"' + JOIN_SCHEMA + "\".\"" + JOIN_COITEM_TABLE + '"';
+ protected static final String JOIN_CUSTOMER_INDEX = "IDX_CUSTOMER";
+ protected static final String JOIN_ITEM_INDEX = "IDX_ITEM";
+ protected static final String JOIN_SUPPLIER_INDEX = "IDX_SUPPLIER";
+ protected static final String JOIN_CUSTOMER_INDEX_FULL_NAME =
+ SchemaUtil.getTableName(JOIN_SCHEMA, JOIN_CUSTOMER_INDEX);
+ protected static final String JOIN_ITEM_INDEX_FULL_NAME =
+ SchemaUtil.getTableName(JOIN_SCHEMA, JOIN_ITEM_INDEX);
+ protected static final String JOIN_SUPPLIER_INDEX_FULL_NAME =
+ SchemaUtil.getTableName(JOIN_SCHEMA, JOIN_SUPPLIER_INDEX);
+
private static final Map<String,String> tableDDLMap;
static {
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 ea5ca56292..299091f779 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
@@ -72,9 +72,13 @@ public class HashJoinLocalIndexIT extends HashJoinIT {
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)"
+ "CREATE LOCAL INDEX " + JOIN_CUSTOMER_INDEX + " ON " +
+ JOIN_CUSTOMER_TABLE_FULL_NAME + " (name)",
+ "CREATE LOCAL INDEX " + JOIN_ITEM_INDEX + " ON " +
+ JOIN_ITEM_TABLE_FULL_NAME + " (name) " +
+ "INCLUDE (price, discount1, discount2, \"supplier_id\", description)",
+ "CREATE LOCAL INDEX " + JOIN_SUPPLIER_INDEX + " ON " +
+ JOIN_SUPPLIER_TABLE_FULL_NAME + " (name)"
}, {
/*
* testLeftJoinWithAggregation()
@@ -86,7 +90,8 @@ public class HashJoinLocalIndexIT extends HashJoinIT {
" SERVER AGGREGATE INTO DISTINCT ROWS BY [\"I.0:NAME\"]\n" +
"CLIENT MERGE SORT\n" +
" PARALLEL LEFT-JOIN TABLE 0\n" +
- " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " +JOIN_ITEM_TABLE_FULL_NAME +" [1]\n" +
+ " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_INDEX_FULL_NAME +
+ "(" + JOIN_ITEM_TABLE_FULL_NAME + ") [1]\n" +
" SERVER FILTER BY FIRST KEY ONLY\n" +
" CLIENT MERGE SORT",
/*
@@ -100,7 +105,8 @@ public class HashJoinLocalIndexIT extends HashJoinIT {
"CLIENT MERGE SORT\n" +
"CLIENT SORTED BY [SUM(O.QUANTITY) DESC]\n" +
" PARALLEL LEFT-JOIN TABLE 0\n" +
- " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_TABLE_FULL_NAME +" [1]\n" +
+ " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_INDEX_FULL_NAME +
+ "(" + JOIN_ITEM_TABLE_FULL_NAME + ") [1]\n" +
" SERVER FILTER BY FIRST KEY ONLY\n" +
" CLIENT MERGE SORT",
/*
@@ -121,7 +127,8 @@ public class HashJoinLocalIndexIT extends HashJoinIT {
* RIGHT JOIN joinItemTable i ON o.item_id = i.item_id
* GROUP BY i.name ORDER BY i.name
*/
- "CLIENT PARALLEL 1-WAY RANGE SCAN OVER "+ JOIN_ITEM_TABLE_FULL_NAME+" [1]\n" +
+ "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_INDEX_FULL_NAME +
+ "(" + JOIN_ITEM_TABLE_FULL_NAME + ") [1]\n" +
" SERVER FILTER BY FIRST KEY ONLY\n" +
" SERVER AGGREGATE INTO ORDERED DISTINCT ROWS BY [\"I.0:NAME\"]\n" +
"CLIENT MERGE SORT\n" +
@@ -156,11 +163,13 @@ public class HashJoinLocalIndexIT extends HashJoinIT {
* AND (supp.name BETWEEN 'S1' AND 'S5')
* WHERE item.name BETWEEN 'T1' AND 'T5'
*/
- "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_TABLE_FULL_NAME + " [1,'T1'] - [1,'T5']\n" +
+ "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_INDEX_FULL_NAME +
+ "(" + JOIN_ITEM_TABLE_FULL_NAME + ") [1,'T1'] - [1,'T5']\n" +
" SERVER FILTER BY FIRST KEY ONLY\n" +
"CLIENT MERGE SORT\n" +
" PARALLEL LEFT-JOIN TABLE 0\n" +
- " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_SUPPLIER_TABLE_FULL_NAME +" [1,'S1'] - [1,'S5']\n" +
+ " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_SUPPLIER_INDEX_FULL_NAME +
+ "(" + JOIN_SUPPLIER_TABLE_FULL_NAME + ") [1,'S1'] - [1,'S5']\n" +
" SERVER FILTER BY FIRST KEY ONLY\n" +
" CLIENT MERGE SORT",
/*
@@ -171,10 +180,13 @@ public class HashJoinLocalIndexIT extends HashJoinIT {
* WHERE (item.name = 'T1' OR item.name = 'T5')
* AND (supp.name = 'S1' OR supp.name = 'S5')
*/
- "CLIENT PARALLEL 1-WAY SKIP SCAN ON 2 KEYS OVER " + JOIN_ITEM_TABLE_FULL_NAME + " [1,'T1'] - [1,'T5']\n" +
+ "CLIENT PARALLEL 1-WAY SKIP SCAN ON 2 KEYS OVER " + JOIN_ITEM_INDEX_FULL_NAME +
+ "(" + JOIN_ITEM_TABLE_FULL_NAME + ") [1,'T1'] - [1,'T5']\n" +
"CLIENT MERGE SORT\n" +
" PARALLEL INNER-JOIN TABLE 0\n" +
- " CLIENT PARALLEL 1-WAY SKIP SCAN ON 2 KEYS OVER " + JOIN_SUPPLIER_TABLE_FULL_NAME +" [1,'S1'] - [1,'S5']\n" +
+ " CLIENT PARALLEL 1-WAY SKIP SCAN ON 2 KEYS OVER " +
+ JOIN_SUPPLIER_INDEX_FULL_NAME + "(" +
+ JOIN_SUPPLIER_TABLE_FULL_NAME + ") [1,'S1'] - [1,'S5']\n" +
" SERVER FILTER BY FIRST KEY ONLY\n" +
" CLIENT MERGE SORT",
/*
@@ -183,13 +195,15 @@ public class HashJoinLocalIndexIT extends HashJoinIT {
* JOIN joinOrderTable o ON o.item_id = i.item_id AND quantity < 5000
* JOIN joinSupplierTable s ON i.supplier_id = s.supplier_id
*/
- "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " +JOIN_ITEM_TABLE_FULL_NAME + " [1]\n" +
+ "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_INDEX_FULL_NAME +
+ "(" + JOIN_ITEM_TABLE_FULL_NAME + ") [1]\n" +
"CLIENT MERGE SORT\n" +
" PARALLEL INNER-JOIN TABLE 0 (SKIP MERGE)\n" +
" CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_ORDER_TABLE_FULL_NAME + "\n" +
" SERVER FILTER BY QUANTITY < 5000\n" +
" PARALLEL INNER-JOIN TABLE 1\n" +
- " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_SUPPLIER_TABLE_FULL_NAME + " [1]\n" +
+ " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_SUPPLIER_INDEX_FULL_NAME +
+ "(" + JOIN_SUPPLIER_TABLE_FULL_NAME + ") [1]\n" +
" SERVER FILTER BY FIRST KEY ONLY\n" +
" CLIENT MERGE SORT\n" +
" DYNAMIC SERVER FILTER BY \"I.:item_id\" IN (\"O.item_id\")",
@@ -201,7 +215,8 @@ public class HashJoinLocalIndexIT extends HashJoinIT {
*/
"CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_ITEM_TABLE_FULL_NAME + "\n" +
" PARALLEL INNER-JOIN TABLE 0\n" +
- " CLIENT PARALLEL 1-WAY RANGE SCAN OVER "+ JOIN_ITEM_TABLE_FULL_NAME +" [1]\n" +
+ " CLIENT PARALLEL 1-WAY RANGE SCAN OVER "+ JOIN_ITEM_INDEX_FULL_NAME +
+ "(" + JOIN_ITEM_TABLE_FULL_NAME + ") [1]\n" +
" SERVER FILTER BY FIRST KEY ONLY\n" +
" CLIENT MERGE SORT\n" +
" DYNAMIC SERVER FILTER BY \"I1.item_id\" IN (\"I2.:item_id\")",
@@ -211,12 +226,14 @@ public class HashJoinLocalIndexIT extends HashJoinIT {
* JOIN joinItemTable i2 ON i1.item_id = i2.supplier_id
* ORDER BY i1.name, i2.name
*/
- "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_TABLE_FULL_NAME +" [1]\n" +
+ "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_INDEX_FULL_NAME +
+ "(" + JOIN_ITEM_TABLE_FULL_NAME + ") [1]\n" +
" SERVER FILTER BY FIRST KEY ONLY\n" +
" SERVER SORTED BY [\"I1.0:NAME\", \"I2.0:NAME\"]\n" +
"CLIENT MERGE SORT\n" +
" PARALLEL INNER-JOIN TABLE 0\n" +
- " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_TABLE_FULL_NAME +" [1]\n" +
+ " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_INDEX_FULL_NAME +
+ "(" + JOIN_ITEM_TABLE_FULL_NAME + ") [1]\n" +
" CLIENT MERGE SORT\n" +
" DYNAMIC SERVER FILTER BY \"I1.:item_id\" IN (\"I2.0:supplier_id\")",
/*
@@ -229,11 +246,13 @@ public class HashJoinLocalIndexIT extends HashJoinIT {
*/
"CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_ORDER_TABLE_FULL_NAME + "\n" +
" PARALLEL INNER-JOIN TABLE 0\n" +
- " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_CUSTOMER_TABLE_FULL_NAME + " [1]\n" +
+ " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_CUSTOMER_INDEX_FULL_NAME +
+ "(" + JOIN_CUSTOMER_TABLE_FULL_NAME + ") [1]\n" +
" SERVER FILTER BY FIRST KEY ONLY\n" +
" CLIENT MERGE SORT\n" +
" PARALLEL INNER-JOIN TABLE 1\n" +
- " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_TABLE_FULL_NAME + " [1]\n" +
+ " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_INDEX_FULL_NAME +
+ "(" + JOIN_ITEM_TABLE_FULL_NAME + ") [1]\n" +
" SERVER FILTER BY FIRST KEY ONLY\n" +
" CLIENT MERGE SORT",
/*
@@ -244,14 +263,17 @@ public class HashJoinLocalIndexIT extends HashJoinIT {
* JOIN joinItemTable i ON o.item_id = i.item_id
* ORDER BY order_id
*/
- "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_TABLE_FULL_NAME + " [1]\n" +
+ "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_INDEX_FULL_NAME +
+ "(" + JOIN_ITEM_TABLE_FULL_NAME + ") [1]\n" +
" SERVER FILTER BY FIRST KEY ONLY\n" +
" SERVER SORTED BY [\"O.order_id\"]\n"+
"CLIENT MERGE SORT\n" +
" PARALLEL INNER-JOIN TABLE 0\n" +
" CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_ORDER_TABLE_FULL_NAME + "\n" +
" PARALLEL INNER-JOIN TABLE 0\n" +
- " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_CUSTOMER_TABLE_FULL_NAME+" [1]\n"+
+ " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " +
+ JOIN_CUSTOMER_INDEX_FULL_NAME + "(" +
+ JOIN_CUSTOMER_TABLE_FULL_NAME + ") [1]\n" +
" SERVER FILTER BY FIRST KEY ONLY\n" +
" CLIENT MERGE SORT\n" +
" DYNAMIC SERVER FILTER BY \"I.:item_id\" IN (\"O.item_id\")",
@@ -275,7 +297,8 @@ public class HashJoinLocalIndexIT extends HashJoinIT {
" CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_ORDER_TABLE_FULL_NAME + "\n" +
" SERVER FILTER BY \"order_id\" != '000000000000003'\n" +
" PARALLEL INNER-JOIN TABLE 0\n" +
- " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_TABLE_FULL_NAME +" [1]\n" +
+ " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " +
+ JOIN_ITEM_INDEX_FULL_NAME + "(" + JOIN_ITEM_TABLE_FULL_NAME + ") [1]\n" +
" SERVER FILTER BY \"NAME\" != 'T3'\n" +
" CLIENT MERGE SORT\n" +
" PARALLEL LEFT-JOIN TABLE 0\n" +
@@ -292,7 +315,8 @@ public class HashJoinLocalIndexIT extends HashJoinIT {
" SERVER AGGREGATE INTO DISTINCT ROWS BY [I.NAME]\n" +
"CLIENT MERGE SORT\n" +
" PARALLEL LEFT-JOIN TABLE 0\n" +
- " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " +JOIN_ITEM_TABLE_FULL_NAME+" [1]\n"+
+ " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_INDEX_FULL_NAME +
+ "(" + JOIN_ITEM_TABLE_FULL_NAME + ") [1]\n" +
" SERVER FILTER BY FIRST KEY ONLY\n" +
" CLIENT MERGE SORT",
/*
@@ -308,7 +332,8 @@ public class HashJoinLocalIndexIT extends HashJoinIT {
"CLIENT MERGE SORT\n" +
"CLIENT SORTED BY [SUM(O.QUANTITY) DESC]\n" +
" PARALLEL LEFT-JOIN TABLE 0 (SKIP MERGE)\n" +
- " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " +JOIN_ITEM_TABLE_FULL_NAME + " [1]\n" +
+ " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_INDEX_FULL_NAME +
+ "(" + JOIN_ITEM_TABLE_FULL_NAME + ") [1]\n" +
" SERVER FILTER BY FIRST KEY ONLY\n" +
" CLIENT MERGE SORT",
/*
@@ -319,7 +344,8 @@ public class HashJoinLocalIndexIT extends HashJoinIT {
* ON o.iid = i.iid
* ORDER BY o.q DESC NULLS LAST, i.iid
*/
- "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_TABLE_FULL_NAME + " [1]\n" +
+ "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_INDEX_FULL_NAME +
+ "(" + JOIN_ITEM_TABLE_FULL_NAME + ") [1]\n" +
" SERVER FILTER BY FIRST KEY ONLY\n" +
" SERVER SORTED BY [O.Q DESC NULLS LAST, I.IID]\n"+
"CLIENT MERGE SORT\n" +
@@ -335,7 +361,8 @@ public class HashJoinLocalIndexIT extends HashJoinIT {
* ON o.iid = i.iid
* ORDER BY o.q DESC, i.iid
*/
- "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_TABLE_FULL_NAME + " [1]\n" +
+ "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_INDEX_FULL_NAME +
+ "(" + JOIN_ITEM_TABLE_FULL_NAME + ") [1]\n" +
" SERVER FILTER BY FIRST KEY ONLY\n" +
" SERVER SORTED BY [O.Q DESC, I.IID]\n"+
"CLIENT MERGE SORT\n" +
@@ -369,7 +396,8 @@ public class HashJoinLocalIndexIT extends HashJoinIT {
" CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_ORDER_TABLE_FULL_NAME + "\n" +
" SERVER FILTER BY \"order_id\" != '000000000000003'\n" +
" PARALLEL INNER-JOIN TABLE 0\n" +
- " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_TABLE_FULL_NAME + " [1]\n" +
+ " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " +
+ JOIN_ITEM_INDEX_FULL_NAME + "(" + JOIN_ITEM_TABLE_FULL_NAME + ") [1]\n" +
" SERVER FILTER BY \"NAME\" != 'T3'\n" +
" CLIENT MERGE SORT\n" +
" PARALLEL LEFT-JOIN TABLE 0\n" +
@@ -385,7 +413,8 @@ public class HashJoinLocalIndexIT extends HashJoinIT {
" SERVER 4 ROW LIMIT\n" +
"CLIENT 4 ROW LIMIT\n" +
" PARALLEL LEFT-JOIN TABLE 0\n" +
- " CLIENT PARALLEL 1-WAY RANGE SCAN OVER "+ JOIN_ITEM_TABLE_FULL_NAME + " [1]\n" +
+ " CLIENT PARALLEL 1-WAY RANGE SCAN OVER "+ JOIN_ITEM_INDEX_FULL_NAME +
+ "(" + JOIN_ITEM_TABLE_FULL_NAME + ") [1]\n" +
" CLIENT MERGE SORT\n" +
" PARALLEL LEFT-JOIN TABLE 1(DELAYED EVALUATION)\n" +
" CLIENT PARALLEL 1-WAY FULL SCAN OVER "+ JOIN_ORDER_TABLE_FULL_NAME + "\n" +
@@ -400,7 +429,8 @@ public class HashJoinLocalIndexIT extends HashJoinIT {
"CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_SUPPLIER_TABLE_FULL_NAME + "\n" +
"CLIENT 4 ROW LIMIT\n" +
" PARALLEL INNER-JOIN TABLE 0\n" +
- " CLIENT PARALLEL 1-WAY RANGE SCAN OVER "+ JOIN_ITEM_TABLE_FULL_NAME + " [1]\n" +
+ " CLIENT PARALLEL 1-WAY RANGE SCAN OVER "+ JOIN_ITEM_INDEX_FULL_NAME +
+ "(" + JOIN_ITEM_TABLE_FULL_NAME + ") [1]\n" +
" CLIENT MERGE SORT\n" +
" PARALLEL INNER-JOIN TABLE 1(DELAYED EVALUATION)\n" +
" CLIENT PARALLEL 1-WAY FULL SCAN OVER "+ JOIN_ORDER_TABLE_FULL_NAME + "\n" +
@@ -415,7 +445,8 @@ public class HashJoinLocalIndexIT extends HashJoinIT {
* JOIN (SELECT order_id, item_id, quantity FROM joinOrderTable) o
* ON o.item_id = i.item_id;
*/
- "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_TABLE_FULL_NAME + " [1]\n" +
+ "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_INDEX_FULL_NAME +
+ "(" + JOIN_ITEM_TABLE_FULL_NAME + ") [1]\n" +
" SERVER FILTER BY FIRST KEY ONLY\n" +
"CLIENT MERGE SORT\n" +
"CLIENT 4 ROW LIMIT\n" +
@@ -435,7 +466,8 @@ public class HashJoinLocalIndexIT extends HashJoinIT {
" SERVER 3 ROW LIMIT\n" +
"CLIENT 1 ROW LIMIT\n" +
" PARALLEL LEFT-JOIN TABLE 0\n" +
- " CLIENT PARALLEL 1-WAY RANGE SCAN OVER "+ JOIN_ITEM_TABLE_FULL_NAME + " [1]\n" +
+ " CLIENT PARALLEL 1-WAY RANGE SCAN OVER "+ JOIN_ITEM_INDEX_FULL_NAME +
+ "(" + JOIN_ITEM_TABLE_FULL_NAME + ") [1]\n" +
" CLIENT MERGE SORT\n" +
" PARALLEL LEFT-JOIN TABLE 1(DELAYED EVALUATION)\n" +
" CLIENT PARALLEL 1-WAY FULL SCAN OVER "+ JOIN_ORDER_TABLE_FULL_NAME + "\n" +
@@ -451,7 +483,8 @@ public class HashJoinLocalIndexIT extends HashJoinIT {
" SERVER OFFSET 2\n" +
"CLIENT 1 ROW LIMIT\n" +
" PARALLEL INNER-JOIN TABLE 0\n" +
- " CLIENT PARALLEL 1-WAY RANGE SCAN OVER "+ JOIN_ITEM_TABLE_FULL_NAME + " [1]\n" +
+ " CLIENT PARALLEL 1-WAY RANGE SCAN OVER "+ JOIN_ITEM_INDEX_FULL_NAME +
+ "(" + JOIN_ITEM_TABLE_FULL_NAME + ") [1]\n" +
" CLIENT MERGE SORT\n" +
" PARALLEL INNER-JOIN TABLE 1(DELAYED EVALUATION)\n" +
" CLIENT PARALLEL 1-WAY FULL SCAN OVER "+ JOIN_ORDER_TABLE_FULL_NAME + "\n" +
@@ -464,12 +497,14 @@ public class HashJoinLocalIndexIT extends HashJoinIT {
* JOIN joinItemTable i ON s.supplier_id = i.supplier_id
* WHERE s.name = 'S1' AND i.name < 'T6'
*/
- "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_SUPPLIER_TABLE_FULL_NAME + " [1,'S1']\n" +
+ "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_SUPPLIER_INDEX_FULL_NAME +
+ "(" + JOIN_SUPPLIER_TABLE_FULL_NAME + ") [1,'S1']\n" +
" SERVER MERGE [0.PHONE]\n" +
" SERVER FILTER BY FIRST KEY ONLY\n" +
"CLIENT MERGE SORT\n" +
" PARALLEL INNER-JOIN TABLE 0\n" +
- " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_TABLE_FULL_NAME + " [1,*] - [1,'T6']\n" +
+ " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_INDEX_FULL_NAME +
+ "(" + JOIN_ITEM_TABLE_FULL_NAME + ") [1,*] - [1,'T6']\n" +
" CLIENT MERGE SORT\n" +
" DYNAMIC SERVER FILTER BY \"S.:supplier_id\" IN (\"I.0:supplier_id\")",
@@ -481,13 +516,15 @@ public class HashJoinLocalIndexIT extends HashJoinIT {
* WHERE s.name = 'S1' AND i.name < 'T6'
* GROUP BY phone
*/
- "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_SUPPLIER_TABLE_FULL_NAME + " [1,'S1']\n" +
+ "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_SUPPLIER_INDEX_FULL_NAME +
+ "(" + JOIN_SUPPLIER_TABLE_FULL_NAME + ") [1,'S1']\n" +
" SERVER MERGE [0.PHONE]\n" +
" SERVER FILTER BY FIRST KEY ONLY\n" +
" SERVER AGGREGATE INTO DISTINCT ROWS BY [\"S.PHONE\"]\n" +
"CLIENT MERGE SORT\n" +
" PARALLEL INNER-JOIN TABLE 0\n" +
- " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_TABLE_FULL_NAME + " [1,*] - [1,'T6']\n" +
+ " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_INDEX_FULL_NAME +
+ "(" + JOIN_ITEM_TABLE_FULL_NAME + ") [1,*] - [1,'T6']\n" +
" CLIENT MERGE SORT\n" +
" DYNAMIC SERVER FILTER BY \"S.:supplier_id\" IN (\"I.0:supplier_id\")",
@@ -498,12 +535,14 @@ public class HashJoinLocalIndexIT extends HashJoinIT {
* LEFT JOIN joinItemTable i ON s."supplier_id" = i."supplier_id" AND i.name < 'T6'
* WHERE s.name <= 'S3'
*/
- "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_SUPPLIER_TABLE_FULL_NAME + " [1,*] - [1,'S3']\n" +
+ "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_SUPPLIER_INDEX_FULL_NAME +
+ "(" + JOIN_SUPPLIER_TABLE_FULL_NAME + ") [1,*] - [1,'S3']\n" +
" SERVER MERGE [0.PHONE]\n" +
" SERVER FILTER BY FIRST KEY ONLY\n" +
" SERVER AGGREGATE INTO SINGLE ROW\n" +
" PARALLEL LEFT-JOIN TABLE 0\n" +
- " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_TABLE_FULL_NAME + " [1,*] - [1,'T6']\n" +
+ " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_INDEX_FULL_NAME +
+ "(" + JOIN_ITEM_TABLE_FULL_NAME + ") [1,*] - [1,'T6']\n" +
" CLIENT MERGE SORT",
}});
return testCases;
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
index 9548c25d84..9fc5c716e7 100644
--- 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
@@ -54,18 +54,21 @@ public class SortMergeJoinLocalIndexIT extends SortMergeJoinIT {
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)"
+ "CREATE LOCAL INDEX " + JOIN_CUSTOMER_INDEX + " ON " + JOIN_CUSTOMER_TABLE_FULL_NAME + "(name)",
+ "CREATE LOCAL INDEX " + JOIN_ITEM_INDEX + " ON " + JOIN_ITEM_TABLE_FULL_NAME + "(name) " +
+ "INCLUDE (price, discount1, discount2, \"supplier_id\", description)",
+ "CREATE LOCAL INDEX " + JOIN_SUPPLIER_INDEX + " 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" +
+ " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_SUPPLIER_INDEX_FULL_NAME +
+ "(" + 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" +
+ " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_INDEX_FULL_NAME +
+ "(" + JOIN_ITEM_TABLE_FULL_NAME + ") [1]\n" +
" SERVER SORTED BY [\"I.:item_id\"]\n" +
" CLIENT MERGE SORT\n" +
" AND (SKIP MERGE)\n" +
@@ -76,7 +79,8 @@ public class SortMergeJoinLocalIndexIT extends SortMergeJoinIT {
" 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" +
+ " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_INDEX_FULL_NAME +
+ "(" + 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" +
@@ -87,12 +91,14 @@ public class SortMergeJoinLocalIndexIT extends SortMergeJoinIT {
"CLIENT 4 ROW LIMIT",
"SORT-MERGE-JOIN (INNER) TABLES\n" +
- " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_TABLE_FULL_NAME + " [1]\n" +
+ " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_INDEX_FULL_NAME +
+ "(" + 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" +
+ " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_INDEX_FULL_NAME +
+ "(" + JOIN_ITEM_TABLE_FULL_NAME + ") [1]\n" +
" SERVER FILTER BY FIRST KEY ONLY\n" +
" SERVER SORTED BY [\"I2.:item_id\"]\n" +
" CLIENT MERGE SORT"
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/SubqueryIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/SubqueryIT.java
index 6d3a474557..841390fcd2 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/SubqueryIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/SubqueryIT.java
@@ -191,14 +191,17 @@ public class SubqueryIT extends BaseJoinIT {
}});
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)"
+ "CREATE LOCAL INDEX " + JOIN_CUSTOMER_INDEX + " ON " + JOIN_CUSTOMER_TABLE_FULL_NAME + " (name)",
+ "CREATE LOCAL INDEX " + JOIN_ITEM_INDEX + " ON " + JOIN_ITEM_TABLE_FULL_NAME + " " +
+ "(name) INCLUDE (price, discount1, discount2, \"supplier_id\", description)",
+ "CREATE LOCAL INDEX " + JOIN_SUPPLIER_INDEX + " ON " + JOIN_SUPPLIER_TABLE_FULL_NAME + " (name)"
}, {
- "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_TABLE_FULL_NAME + " \\[1\\]\n" +
+ "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_INDEX_FULL_NAME +
+ "\\(" + JOIN_ITEM_TABLE_FULL_NAME + "\\) \\[1\\]\n" +
"CLIENT MERGE SORT\n" +
" PARALLEL INNER-JOIN TABLE 0\n" +
- " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_SUPPLIER_TABLE_FULL_NAME + " \\[1\\]\n" +
+ " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_SUPPLIER_INDEX_FULL_NAME +
+ "\\(" + JOIN_SUPPLIER_TABLE_FULL_NAME + "\\) \\[1\\]\n" +
" SERVER FILTER BY FIRST KEY ONLY\n" +
" CLIENT MERGE SORT\n" +
" PARALLEL SEMI-JOIN TABLE 1 \\(SKIP MERGE\\)\n" +
@@ -207,12 +210,14 @@ public class SubqueryIT extends BaseJoinIT {
" CLIENT MERGE SORT\n" +
" DYNAMIC SERVER FILTER BY \"I.:item_id\" IN \\(\\$\\d+.\\$\\d+\\)",
- "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_SUPPLIER_TABLE_FULL_NAME + " [1]\n" +
+ "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_SUPPLIER_INDEX_FULL_NAME +
+ "(" + JOIN_SUPPLIER_TABLE_FULL_NAME + ") [1]\n" +
" SERVER FILTER BY FIRST KEY ONLY\n" +
" SERVER SORTED BY [\"I.0:NAME\"]\n" +
"CLIENT MERGE SORT\n" +
" PARALLEL LEFT-JOIN TABLE 0\n" +
- " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_TABLE_FULL_NAME + " [1]\n" +
+ " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_INDEX_FULL_NAME +
+ "(" + JOIN_ITEM_TABLE_FULL_NAME + ") [1]\n" +
" CLIENT MERGE SORT\n" +
" PARALLEL SEMI-JOIN TABLE 1(DELAYED EVALUATION) (SKIP MERGE)\n" +
" CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_ORDER_TABLE_FULL_NAME + "\n" +
@@ -222,7 +227,8 @@ public class SubqueryIT extends BaseJoinIT {
"CLIENT PARALLEL 4-WAY FULL SCAN OVER " + JOIN_COITEM_TABLE_FULL_NAME + "\n" +
"CLIENT MERGE SORT\n" +
" PARALLEL LEFT-JOIN TABLE 0\n" +
- " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_TABLE_FULL_NAME + " \\[1\\]\n" +
+ " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_INDEX_FULL_NAME +
+ "\\(" + JOIN_ITEM_TABLE_FULL_NAME + "\\) \\[1\\]\n" +
" SERVER FILTER BY FIRST KEY ONLY\n" +
" SERVER AGGREGATE INTO ORDERED DISTINCT ROWS BY \\[\".+.0:NAME\", \".+.:item_id\"\\]\n" +
" CLIENT MERGE SORT\n" +
@@ -231,7 +237,8 @@ public class SubqueryIT extends BaseJoinIT {
" SERVER AGGREGATE INTO DISTINCT ROWS BY \\[\"item_id\"\\]\n" +
" CLIENT MERGE SORT\n" +
" PARALLEL LEFT-JOIN TABLE 1\n" +
- " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_TABLE_FULL_NAME + " \\[1\\]\n" +
+ " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_INDEX_FULL_NAME +
+ "\\(" + JOIN_ITEM_TABLE_FULL_NAME + "\\) \\[1\\]\n" +
" SERVER FILTER BY FIRST KEY ONLY\n" +
" SERVER AGGREGATE INTO ORDERED DISTINCT ROWS BY \\[\".+.0:NAME\", \".+.:item_id\"\\]\n" +
" CLIENT MERGE SORT\n" +
@@ -239,10 +246,12 @@ public class SubqueryIT extends BaseJoinIT {
" CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_ORDER_TABLE_FULL_NAME + "\n" +
" SERVER AGGREGATE INTO DISTINCT ROWS BY \\[\"item_id\"\\]\n" +
" CLIENT MERGE SORT\n" +
- " DYNAMIC SERVER FILTER BY \"" + JOIN_SCHEMA + ".idx_item.:item_id\" IN \\(\\$\\d+.\\$\\d+\\)\n" +
+ " DYNAMIC SERVER FILTER BY \"" + JOIN_ITEM_INDEX_FULL_NAME +
+ ".:item_id\" IN \\(\\$\\d+.\\$\\d+\\)\n" +
" AFTER-JOIN SERVER FILTER BY \\(\\$\\d+.\\$\\d+ IS NOT NULL OR \\$\\d+.\\$\\d+ IS NOT NULL\\)",
- "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_TABLE_FULL_NAME + " [1]\n" +
+ "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_INDEX_FULL_NAME +
+ "(" + JOIN_ITEM_TABLE_FULL_NAME + ") [1]\n" +
" SERVER FILTER BY FIRST KEY ONLY\n" +
"CLIENT MERGE SORT\n" +
" PARALLEL ANTI-JOIN TABLE 0 (SKIP MERGE)\n" +
@@ -250,11 +259,13 @@ public class SubqueryIT extends BaseJoinIT {
" SERVER AGGREGATE INTO DISTINCT ROWS BY [\"item_id\"]\n" +
" CLIENT MERGE SORT",
- "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_CUSTOMER_TABLE_FULL_NAME + " \\[1\\]\n" +
+ "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_CUSTOMER_INDEX_FULL_NAME +
+ "\\(" + JOIN_CUSTOMER_TABLE_FULL_NAME + "\\) \\[1\\]\n" +
" SERVER FILTER BY FIRST KEY ONLY\n" +
"CLIENT MERGE SORT\n" +
" PARALLEL SEMI-JOIN TABLE 0 \\(SKIP MERGE\\)\n" +
- " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_TABLE_FULL_NAME + " \\[1\\]\n" +
+ " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " +JOIN_ITEM_INDEX_FULL_NAME +
+ "\\(" + JOIN_ITEM_TABLE_FULL_NAME + "\\) \\[1\\]\n" +
" SERVER FILTER BY FIRST KEY ONLY\n" +
" SERVER AGGREGATE INTO DISTINCT ROWS BY \\[\"O.customer_id\"\\]\n" +
" CLIENT MERGE SORT\n" +
@@ -266,7 +277,8 @@ public class SubqueryIT extends BaseJoinIT {
" CLIENT MERGE SORT\n" +
" DYNAMIC SERVER FILTER BY \"I.:item_id\" IN \\(\"O.item_id\"\\)\n" +
" AFTER-JOIN SERVER FILTER BY \\(\"I.0:NAME\" = 'T2' OR O.QUANTITY > \\$\\d+.\\$\\d+\\)\n" +
- " DYNAMIC SERVER FILTER BY \"" + JOIN_SCHEMA + ".idx_customer.:customer_id\" IN \\(\\$\\d+.\\$\\d+\\)"
+ " DYNAMIC SERVER FILTER BY \"" + JOIN_CUSTOMER_INDEX_FULL_NAME + ".:customer_id\" IN " +
+ "\\(\\$\\d+.\\$\\d+\\)"
}});
return testCases;
}
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/SubqueryUsingSortMergeJoinIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/SubqueryUsingSortMergeJoinIT.java
index b1f56ed7d6..28e5ffbd1d 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/SubqueryUsingSortMergeJoinIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/SubqueryUsingSortMergeJoinIT.java
@@ -183,17 +183,20 @@ public class SubqueryUsingSortMergeJoinIT extends BaseJoinIT {
}});
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)"
+ "CREATE LOCAL INDEX " + JOIN_CUSTOMER_INDEX + " ON " + JOIN_CUSTOMER_TABLE_FULL_NAME + " (name)",
+ "CREATE LOCAL INDEX "+ JOIN_ITEM_INDEX + " ON " + JOIN_ITEM_TABLE_FULL_NAME +
+ " (name) INCLUDE (price, discount1, discount2, \"supplier_id\", description)",
+ "CREATE LOCAL INDEX " + JOIN_SUPPLIER_INDEX + " ON " + JOIN_SUPPLIER_TABLE_FULL_NAME + " (name)"
}, {
"SORT-MERGE-JOIN (SEMI) TABLES\n" +
" SORT-MERGE-JOIN (INNER) TABLES\n" +
- " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_TABLE_FULL_NAME + " [1]\n" +
+ " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_INDEX_FULL_NAME +
+ "(" + JOIN_ITEM_TABLE_FULL_NAME + ") [1]\n" +
" SERVER SORTED BY [\"I.0:supplier_id\"]\n" +
" CLIENT MERGE SORT\n" +
" AND\n" +
- " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_SUPPLIER_TABLE_FULL_NAME + " [1]\n" +
+ " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_SUPPLIER_INDEX_FULL_NAME +
+ "(" + 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" +
@@ -209,7 +212,8 @@ public class SubqueryUsingSortMergeJoinIT extends BaseJoinIT {
" CLIENT PARALLEL 4-WAY FULL SCAN OVER " + JOIN_COITEM_TABLE_FULL_NAME + "\n" +
" CLIENT MERGE SORT\n" +
" AND\n" +
- " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_TABLE_FULL_NAME + " \\[1\\]\n" +
+ " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_INDEX_FULL_NAME +
+ "\\(" + JOIN_ITEM_TABLE_FULL_NAME + "\\) \\[1\\]\n" +
" SERVER FILTER BY FIRST KEY ONLY\n" +
" SERVER AGGREGATE INTO ORDERED DISTINCT ROWS BY \\[\".+.0:NAME\", \".+.:item_id\"\\]\n" +
" CLIENT MERGE SORT\n" +
@@ -220,7 +224,8 @@ public class SubqueryUsingSortMergeJoinIT extends BaseJoinIT {
" CLIENT MERGE SORT\n" +
" CLIENT SORTED BY \\[.*.CO_ITEM_ID, .*.CO_ITEM_NAME\\]\n" +
"AND\n" +
- " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_TABLE_FULL_NAME + " \\[1\\]\n" +
+ " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_INDEX_FULL_NAME +
+ "\\(" + JOIN_ITEM_TABLE_FULL_NAME + "\\) \\[1\\]\n" +
" SERVER FILTER BY FIRST KEY ONLY\n" +
" SERVER AGGREGATE INTO ORDERED DISTINCT ROWS BY \\[\".+.0:NAME\", \".+.:item_id\"\\]\n" +
" CLIENT MERGE SORT\n" +
@@ -229,16 +234,19 @@ public class SubqueryUsingSortMergeJoinIT extends BaseJoinIT {
" CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_ORDER_TABLE_FULL_NAME + "\n" +
" SERVER AGGREGATE INTO DISTINCT ROWS BY \\[\"item_id\"\\]\n" +
" CLIENT MERGE SORT\n" +
- " DYNAMIC SERVER FILTER BY \"" + JOIN_SCHEMA + ".idx_item.:item_id\" IN \\(\\$\\d+.\\$\\d+\\)\n" +
+ " DYNAMIC SERVER FILTER BY \"" + JOIN_ITEM_INDEX_FULL_NAME + ".:item_id\" IN \\(\\$\\d+" +
+ ".\\$\\d+\\)\n" +
"CLIENT FILTER BY \\(\\$\\d+.\\$\\d+ IS NOT NULL OR \\$\\d+.\\$\\d+ IS NOT NULL\\)",
"SORT-MERGE-JOIN \\(SEMI\\) TABLES\n" +
- " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_CUSTOMER_TABLE_FULL_NAME + " \\[1\\]\n" +
+ " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_CUSTOMER_INDEX_FULL_NAME +
+ "\\(" + JOIN_CUSTOMER_TABLE_FULL_NAME + "\\) \\[1\\]\n" +
" SERVER FILTER BY FIRST KEY ONLY\n" +
- " SERVER SORTED BY \\[\"Join.idx_customer.:customer_id\"\\]\n" +
+ " SERVER SORTED BY \\[\"" + JOIN_CUSTOMER_INDEX_FULL_NAME + ".:customer_id\"\\]\n" +
" CLIENT MERGE SORT\n" +
"AND \\(SKIP MERGE\\)\n" +
- " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_TABLE_FULL_NAME + " \\[1\\]\n" +
+ " CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + JOIN_ITEM_INDEX_FULL_NAME +
+ "\\(" + JOIN_ITEM_TABLE_FULL_NAME + "\\) \\[1\\]\n" +
" SERVER FILTER BY FIRST KEY ONLY\n" +
" SERVER AGGREGATE INTO DISTINCT ROWS BY \\[\"O.customer_id\"\\]\n" +
" CLIENT MERGE SORT\n" +
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/iterate/ExplainTable.java b/phoenix-core/src/main/java/org/apache/phoenix/iterate/ExplainTable.java
index 494226327b..226bb90da2 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/iterate/ExplainTable.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/iterate/ExplainTable.java
@@ -50,9 +50,11 @@ import org.apache.phoenix.parse.HintNode;
import org.apache.phoenix.parse.HintNode.Hint;
import org.apache.phoenix.query.KeyRange;
import org.apache.phoenix.query.KeyRange.Bound;
+import org.apache.phoenix.query.QueryConstants;
import org.apache.phoenix.query.QueryServices;
import org.apache.phoenix.query.QueryServicesOptions;
import org.apache.phoenix.schema.PColumn;
+import org.apache.phoenix.schema.PTable;
import org.apache.phoenix.schema.RowKeySchema;
import org.apache.phoenix.schema.SortOrder;
import org.apache.phoenix.schema.TableRef;
@@ -147,7 +149,20 @@ public abstract class ExplainTable {
scanTypeDetails = explainSkipScan();
}
buf.append(scanTypeDetails);
- buf.append("OVER ").append(tableRef.getTable().getPhysicalName().getString());
+
+ String tableName = tableRef.getTable().getPhysicalName().getString();
+ if (tableRef.getTable().getIndexType() == PTable.IndexType.LOCAL) {
+ String indexName = tableRef.getTable().getName().getString();
+ if (tableRef.getTable().getViewIndexId() != null
+ && indexName.contains(QueryConstants.CHILD_VIEW_INDEX_NAME_SEPARATOR)) {
+ int lastIndexOf = indexName.lastIndexOf(
+ QueryConstants.CHILD_VIEW_INDEX_NAME_SEPARATOR);
+ indexName = indexName.substring(lastIndexOf + 1);
+ }
+ tableName = indexName + "(" + tableName + ")";
+ }
+ buf.append("OVER ").append(tableName);
+
if (!scanRanges.isPointLookup()) {
buf.append(appendKeyRanges());
}
@@ -161,8 +176,7 @@ public abstract class ExplainTable {
explainPlanAttributesBuilder.setClientSortedBy("REVERSE");
}
explainPlanAttributesBuilder.setExplainScanType(scanTypeDetails);
- explainPlanAttributesBuilder.setTableName(tableRef.getTable()
- .getPhysicalName().getString());
+ explainPlanAttributesBuilder.setTableName(tableName);
if (!scanRanges.isPointLookup()) {
explainPlanAttributesBuilder.setKeyRanges(appendKeyRanges());
}