Skip to content

Commit c475165

Browse files
committed
Test refactoring and removed SYSTEM schema checks during index creation
1 parent 7154375 commit c475165

File tree

4 files changed

+8
-56
lines changed

4 files changed

+8
-56
lines changed

phoenix-core-client/src/main/java/org/apache/phoenix/compile/CreateIndexCompiler.java

-34
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919

2020
import org.apache.hadoop.hbase.Cell;
2121
import org.apache.hadoop.hbase.CellComparator;
22-
import org.apache.hadoop.hbase.CompareOperator;
2322
import org.apache.hadoop.hbase.client.Scan;
2423
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
2524
import org.apache.hadoop.hbase.util.Pair;
@@ -32,9 +31,7 @@
3231
import org.apache.phoenix.jdbc.PhoenixDatabaseMetaData;
3332
import org.apache.phoenix.jdbc.PhoenixStatement;
3433
import org.apache.phoenix.jdbc.PhoenixStatement.Operation;
35-
import org.apache.phoenix.parse.ComparisonParseNode;
3634
import org.apache.phoenix.parse.CreateIndexStatement;
37-
import org.apache.phoenix.parse.LiteralParseNode;
3835
import org.apache.phoenix.parse.ParseNode;
3936
import org.apache.phoenix.parse.StatelessTraverseAllParseNodeVisitor;
4037
import org.apache.phoenix.parse.SubqueryParseNode;
@@ -90,35 +87,12 @@ public CreateIndexCompiler(PhoenixStatement statement, Operation operation) {
9087
*/
9188
private static class IndexWhereParseNodeVisitor extends StatelessTraverseAllParseNodeVisitor {
9289
private boolean hasSubquery = false;
93-
private boolean hasExcludedSystemSchema = false;
9490

9591
@Override
9692
public Void visit(SubqueryParseNode node) throws SQLException {
9793
hasSubquery = true;
9894
return null;
9995
}
100-
101-
@Override
102-
public boolean visitEnter(ComparisonParseNode node) throws SQLException {
103-
if (node.getFilterOp() == CompareOperator.NOT_EQUAL) {
104-
boolean hasTableSchemColumn = node.getLHS().toString().equals(PhoenixDatabaseMetaData.TABLE_SCHEM) ||
105-
node.getRHS().toString().equals(PhoenixDatabaseMetaData.TABLE_SCHEM);
106-
boolean hasSystemLiteralNode = false;
107-
if (node.getLHS().getClass().isAssignableFrom(LiteralParseNode.class)) {
108-
hasSystemLiteralNode =
109-
SchemaUtil.normalizeLiteral((LiteralParseNode) node.getLHS())
110-
.equalsIgnoreCase(PhoenixDatabaseMetaData.SYSTEM_SCHEMA_NAME);
111-
}
112-
if (node.getRHS().getClass().isAssignableFrom(LiteralParseNode.class)) {
113-
hasSystemLiteralNode =
114-
SchemaUtil.normalizeLiteral((LiteralParseNode) node.getRHS())
115-
.equalsIgnoreCase(PhoenixDatabaseMetaData.SYSTEM_SCHEMA_NAME);
116-
}
117-
hasExcludedSystemSchema = hasTableSchemColumn && hasSystemLiteralNode;
118-
}
119-
return true;
120-
}
121-
12296
}
12397

12498
private String getValue(PDataType type) {
@@ -164,14 +138,6 @@ private void verifyIndexWhere(ParseNode indexWhere, StatementContext context,
164138
throw new SQLExceptionInfo.Builder(SQLExceptionCode.INVALID_INDEX_WHERE_WITH_SUBQUERY).
165139
build().buildException();
166140
}
167-
// Verify that index WHERE clause on SYSTEM.CATALOG table excludes the SYSTEM schema
168-
// TABLE_SCHEM <> 'SYSTEM'
169-
if (SchemaUtil.isMetaTable(dataTableName.getSchemaName(), dataTableName.getTableName())
170-
&& !indexWhereParseNodeVisitor.hasExcludedSystemSchema) {
171-
throw new SQLExceptionInfo.Builder(SQLExceptionCode.INVALID_INDEX_WHERE_WITH_SYSTEM_CATALOG_ROWS_NOT_EXCLUDED).
172-
build().buildException();
173-
}
174-
175141

176142
// Verify that index WHERE clause can be evaluated on a single data table row
177143

phoenix-core-client/src/main/java/org/apache/phoenix/exception/SQLExceptionCode.java

-3
Original file line numberDiff line numberDiff line change
@@ -113,9 +113,6 @@ public SQLException newException(SQLExceptionInfo info) {
113113
" Index where clause cannot include a subquery."),
114114
CANNOT_EVALUATE_INDEX_WHERE(304, "23102",
115115
"Invalid index where clause. It cannot be evaluated on a data table row."),
116-
INVALID_INDEX_WHERE_WITH_SYSTEM_CATALOG_ROWS_NOT_EXCLUDED(305, "23103",
117-
"Invalid index where clause. Index on SYSTEM.CATALOG should always exclude system catalog rows (TABLE_SCHEM <> 'SYSTEM')."),
118-
119116
/**
120117
* Invalid Cursor State (errorcode 04, sqlstate 24)
121118
*/

phoenix-core/src/it/java/org/apache/phoenix/end2end/BaseRowKeyMatcherTestIT.java

+3-14
Original file line numberDiff line numberDiff line change
@@ -859,9 +859,9 @@ public void testViewsWithExtendedPK() {
859859
try (Connection conn = DriverManager.getConnection(getUrl());
860860
Statement stmt = conn.createStatement()) {
861861
//TestUtil.dumpTable(conn, TableName.valueOf(PhoenixDatabaseMetaData.SYSTEM_CATALOG_NAME_BYTES));
862-
stmt.execute("CREATE INDEX IF NOT EXISTS SYS_VIEW_HDR_IDX ON SYSTEM.CATALOG(TENANT_ID, TABLE_SCHEM, TABLE_NAME, COLUMN_NAME, COLUMN_FAMILY) INCLUDE (TABLE_TYPE, VIEW_STATEMENT, TTL, ROW_KEY_MATCHER) WHERE TABLE_SCHEM <> 'SYSTEM' AND TABLE_TYPE = 'v'");
863-
stmt.execute("CREATE INDEX IF NOT EXISTS SYS_ROW_KEY_MATCHER_IDX ON SYSTEM.CATALOG(ROW_KEY_MATCHER, TTL, TABLE_TYPE, TENANT_ID, TABLE_SCHEM, TABLE_NAME) WHERE TABLE_SCHEM <> 'SYSTEM' AND ROW_KEY_MATCHER IS NOT NULL");
864-
stmt.execute("CREATE INDEX IF NOT EXISTS SYS_VIEW_INDEX_HDR_IDX ON SYSTEM.CATALOG(DECODE_VIEW_INDEX_ID(VIEW_INDEX_ID, VIEW_INDEX_ID_DATA_TYPE), TENANT_ID, TABLE_SCHEM, TABLE_NAME) INCLUDE(TABLE_TYPE, LINK_TYPE, VIEW_INDEX_ID, VIEW_INDEX_ID_DATA_TYPE) WHERE TABLE_SCHEM <> 'SYSTEM' AND TABLE_TYPE = 'i' AND LINK_TYPE IS NULL AND VIEW_INDEX_ID IS NOT NULL");
862+
stmt.execute("CREATE INDEX IF NOT EXISTS SYS_VIEW_HDR_IDX ON SYSTEM.CATALOG(TENANT_ID, TABLE_SCHEM, TABLE_NAME, COLUMN_NAME, COLUMN_FAMILY) INCLUDE (TABLE_TYPE, VIEW_STATEMENT, TTL, ROW_KEY_MATCHER) WHERE TABLE_TYPE = 'v'");
863+
stmt.execute("CREATE INDEX IF NOT EXISTS SYS_ROW_KEY_MATCHER_IDX ON SYSTEM.CATALOG(ROW_KEY_MATCHER, TTL, TABLE_TYPE, TENANT_ID, TABLE_SCHEM, TABLE_NAME) INCLUDE (VIEW_STATEMENT) WHERE TABLE_TYPE = 'v' AND ROW_KEY_MATCHER IS NOT NULL");
864+
stmt.execute("CREATE INDEX IF NOT EXISTS SYS_VIEW_INDEX_HDR_IDX ON SYSTEM.CATALOG(DECODE_VIEW_INDEX_ID(VIEW_INDEX_ID, VIEW_INDEX_ID_DATA_TYPE), TENANT_ID, TABLE_SCHEM, TABLE_NAME) INCLUDE(TABLE_TYPE, LINK_TYPE, VIEW_INDEX_ID, VIEW_INDEX_ID_DATA_TYPE) WHERE TABLE_TYPE = 'i' AND LINK_TYPE IS NULL AND VIEW_INDEX_ID IS NOT NULL");
865865
conn.commit();
866866
}
867867

@@ -936,20 +936,9 @@ public void testViewsWithVariousTenantIdTypes() {
936936
@Test
937937
public void testViewsWithoutExtendedPK() {
938938
try {
939-
940939
List<PDataType[]> testCases = getTestCases();
941940
SortOrder[][] sortOrders = getSortOrders();
942941
String tableName = "";
943-
944-
try (Connection conn = DriverManager.getConnection(getUrl());
945-
Statement stmt = conn.createStatement()) {
946-
//TestUtil.dumpTable(conn, TableName.valueOf(PhoenixDatabaseMetaData.SYSTEM_CATALOG_NAME_BYTES));
947-
stmt.execute("CREATE INDEX IF NOT EXISTS SYS_VIEW_HDR_IDX ON SYSTEM.CATALOG(TENANT_ID, TABLE_SCHEM, TABLE_NAME, COLUMN_NAME, COLUMN_FAMILY) INCLUDE (TABLE_TYPE, VIEW_STATEMENT, TTL, ROW_KEY_MATCHER) WHERE TABLE_SCHEM <> 'SYSTEM' AND TABLE_TYPE = 'v'");
948-
stmt.execute("CREATE INDEX IF NOT EXISTS SYS_ROW_KEY_MATCHER_IDX ON SYSTEM.CATALOG(ROW_KEY_MATCHER, TTL, TABLE_TYPE, TENANT_ID, TABLE_SCHEM, TABLE_NAME, COLUMN_NAME, COLUMN_FAMILY) WHERE TABLE_SCHEM <> 'SYSTEM' AND TABLE_TYPE IS NOT NULL AND LINK_TYPE IS NULL AND ROW_KEY_MATCHER IS NOT NULL");
949-
stmt.execute("CREATE INDEX IF NOT EXISTS SYS_VIEW_INDEX_HDR_IDX ON SYSTEM.CATALOG(DECODE_VIEW_INDEX_ID(VIEW_INDEX_ID, VIEW_INDEX_ID_DATA_TYPE), TENANT_ID, TABLE_SCHEM, TABLE_NAME) INCLUDE(TABLE_TYPE, LINK_TYPE, VIEW_INDEX_ID, VIEW_INDEX_ID_DATA_TYPE) WHERE TABLE_SCHEM <> 'SYSTEM' AND TABLE_TYPE = 'i' AND LINK_TYPE IS NULL AND VIEW_INDEX_ID IS NOT NULL");
950-
conn.commit();
951-
}
952-
953942
tableName =
954943
createViewHierarchy(
955944
testCases, sortOrders, 100, 1000, 3,

phoenix-core/src/it/java/org/apache/phoenix/end2end/index/PartialSystemCatalogIndexIT.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -572,9 +572,9 @@ public void testIndexesOfViewAndIndexHeadersCondition() throws Exception {
572572
try (Connection conn = DriverManager.getConnection(getUrl());
573573
Statement stmt = conn.createStatement()) {
574574
//TestUtil.dumpTable(conn, TableName.valueOf(PhoenixDatabaseMetaData.SYSTEM_CATALOG_NAME_BYTES));
575-
stmt.execute("CREATE INDEX IF NOT EXISTS SYS_VIEW_HDR_IDX ON SYSTEM.CATALOG(TENANT_ID, TABLE_SCHEM, TABLE_NAME, COLUMN_NAME, COLUMN_FAMILY) INCLUDE (TABLE_TYPE, VIEW_STATEMENT, TTL, ROW_KEY_MATCHER) WHERE TABLE_SCHEM <> 'SYSTEM' AND TABLE_TYPE = 'v'");
576-
stmt.execute("CREATE INDEX IF NOT EXISTS SYS_ROW_KEY_MATCHER_IDX ON SYSTEM.CATALOG(ROW_KEY_MATCHER, TTL, TABLE_TYPE, TENANT_ID, TABLE_SCHEM, TABLE_NAME) INCLUDE (VIEW_STATEMENT) WHERE TABLE_SCHEM <> 'SYSTEM' AND TABLE_TYPE = 'v' AND ROW_KEY_MATCHER IS NOT NULL");
577-
stmt.execute("CREATE INDEX IF NOT EXISTS SYS_VIEW_INDEX_HDR_IDX ON SYSTEM.CATALOG(DECODE_VIEW_INDEX_ID(VIEW_INDEX_ID, VIEW_INDEX_ID_DATA_TYPE), TENANT_ID, TABLE_SCHEM, TABLE_NAME) INCLUDE(TABLE_TYPE, LINK_TYPE, VIEW_INDEX_ID, VIEW_INDEX_ID_DATA_TYPE) WHERE TABLE_SCHEM <> 'SYSTEM' AND TABLE_TYPE = 'i' AND LINK_TYPE IS NULL AND VIEW_INDEX_ID IS NOT NULL");
575+
stmt.execute("CREATE INDEX IF NOT EXISTS SYS_VIEW_HDR_IDX ON SYSTEM.CATALOG(TENANT_ID, TABLE_SCHEM, TABLE_NAME, COLUMN_NAME, COLUMN_FAMILY) INCLUDE (TABLE_TYPE, VIEW_STATEMENT, TTL, ROW_KEY_MATCHER) WHERE TABLE_TYPE = 'v'");
576+
stmt.execute("CREATE INDEX IF NOT EXISTS SYS_ROW_KEY_MATCHER_IDX ON SYSTEM.CATALOG(ROW_KEY_MATCHER, TTL, TABLE_TYPE, TENANT_ID, TABLE_SCHEM, TABLE_NAME) INCLUDE (VIEW_STATEMENT) WHERE TABLE_TYPE = 'v' AND ROW_KEY_MATCHER IS NOT NULL");
577+
stmt.execute("CREATE INDEX IF NOT EXISTS SYS_VIEW_INDEX_HDR_IDX ON SYSTEM.CATALOG(DECODE_VIEW_INDEX_ID(VIEW_INDEX_ID, VIEW_INDEX_ID_DATA_TYPE), TENANT_ID, TABLE_SCHEM, TABLE_NAME) INCLUDE(TABLE_TYPE, LINK_TYPE, VIEW_INDEX_ID, VIEW_INDEX_ID_DATA_TYPE) WHERE TABLE_TYPE = 'i' AND LINK_TYPE IS NULL AND VIEW_INDEX_ID IS NOT NULL");
578578

579579
conn.commit();
580580
}
@@ -596,13 +596,13 @@ public void testIndexesOfViewAndIndexHeadersCondition() throws Exception {
596596
* Testing explain plans
597597
*/
598598

599-
List<String> plans = getExplain("select TENANT_ID, TABLE_SCHEM, TABLE_NAME, COLUMN_NAME, COLUMN_FAMILY, TABLE_TYPE FROM SYSTEM.CATALOG WHERE TABLE_SCHEM <> 'SYSTEM' AND TABLE_TYPE = 'v' ", new Properties());
599+
List<String> plans = getExplain("select TENANT_ID, TABLE_SCHEM, TABLE_NAME, COLUMN_NAME, COLUMN_FAMILY, TABLE_TYPE FROM SYSTEM.CATALOG WHERE TABLE_TYPE = 'v' ", new Properties());
600600
assertEquals("CLIENT PARALLEL 1-WAY FULL SCAN OVER SYSTEM.SYS_VIEW_HDR_IDX", plans.get(0));
601601

602602
plans = getExplain("select VIEW_INDEX_ID, VIEW_INDEX_ID_DATA_TYPE FROM SYSTEM.CATALOG WHERE TABLE_TYPE = 'i' AND LINK_TYPE IS NULL AND VIEW_INDEX_ID IS NOT NULL", new Properties());
603603
assertEquals("CLIENT PARALLEL 1-WAY FULL SCAN OVER SYSTEM.SYS_VIEW_INDEX_HDR_IDX", plans.get(0));
604604

605-
plans = getExplain("select ROW_KEY_MATCHER, TTL, TABLE_NAME FROM SYSTEM.CATALOG WHERE TABLE_SCHEM <> 'SYSTEM' AND ROW_KEY_MATCHER IS NOT NULL", new Properties());
605+
plans = getExplain("select ROW_KEY_MATCHER, TTL, TABLE_NAME FROM SYSTEM.CATALOG WHERE TABLE_TYPE = 'v' AND ROW_KEY_MATCHER IS NOT NULL", new Properties());
606606
assertEquals("CLIENT PARALLEL 1-WAY RANGE SCAN OVER SYSTEM.SYS_ROW_KEY_MATCHER_IDX [not null]", plans.get(0));
607607

608608
/**

0 commit comments

Comments
 (0)