Skip to content

Commit

Permalink
Revert "comment tests that failed on UnsupportedOperation due to Conn…
Browse files Browse the repository at this point in the history
…ectionlessQueryServices used"

This reverts commit d82f36f.
  • Loading branch information
jinggou committed Oct 18, 2023
1 parent a66e4d9 commit d1614d4
Show file tree
Hide file tree
Showing 6 changed files with 71 additions and 77 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2750,33 +2750,32 @@ public void testNullAlterTableDefaultRemoved() throws Exception {
assertNull(table.getColumnForColumnName("V").getExpressionStr());
}

/*
@Test
public void testIndexOnViewWithChildView() throws SQLException {
try (Connection conn = DriverManager.getConnection(getUrl())) {
conn.createStatement().execute("CREATE TABLE PLATFORM_ENTITY.GLOBAL_TABLE (\n" +
" ORGANIZATION_ID CHAR(15) NOT NULL,\n" +
" KEY_PREFIX CHAR(3) NOT NULL,\n" +
" CREATED_DATE DATE,\n" +
" CREATED_BY CHAR(15),\n" +
" CONSTRAINT PK PRIMARY KEY (\n" +
" ORGANIZATION_ID,\n" +
" KEY_PREFIX\n" +
" )\n" +
conn.createStatement().execute("CREATE TABLE PLATFORM_ENTITY.GLOBAL_TABLE (\n" +
" ORGANIZATION_ID CHAR(15) NOT NULL,\n" +
" KEY_PREFIX CHAR(3) NOT NULL,\n" +
" CREATED_DATE DATE,\n" +
" CREATED_BY CHAR(15),\n" +
" CONSTRAINT PK PRIMARY KEY (\n" +
" ORGANIZATION_ID,\n" +
" KEY_PREFIX\n" +
" )\n" +
") VERSIONS=1, IMMUTABLE_ROWS=true, MULTI_TENANT=true");
conn.createStatement().execute("CREATE VIEW PLATFORM_ENTITY.GLOBAL_VIEW (\n" +
" INT1 BIGINT NOT NULL,\n" +
" DOUBLE1 DECIMAL(12, 3),\n" +
" IS_BOOLEAN BOOLEAN,\n" +
" TEXT1 VARCHAR,\n" +
" CONSTRAINT PKVIEW PRIMARY KEY\n" +
" (\n" +
" INT1\n" +
" )\n" +
")\n" +
conn.createStatement().execute("CREATE VIEW PLATFORM_ENTITY.GLOBAL_VIEW (\n" +
" INT1 BIGINT NOT NULL,\n" +
" DOUBLE1 DECIMAL(12, 3),\n" +
" IS_BOOLEAN BOOLEAN,\n" +
" TEXT1 VARCHAR,\n" +
" CONSTRAINT PKVIEW PRIMARY KEY\n" +
" (\n" +
" INT1\n" +
" )\n" +
")\n" +
"AS SELECT * FROM PLATFORM_ENTITY.GLOBAL_TABLE WHERE KEY_PREFIX = '123'");
conn.createStatement().execute("CREATE INDEX GLOBAL_INDEX\n" +
"ON PLATFORM_ENTITY.GLOBAL_VIEW (TEXT1 DESC, INT1)\n" +
conn.createStatement().execute("CREATE INDEX GLOBAL_INDEX\n" +
"ON PLATFORM_ENTITY.GLOBAL_VIEW (TEXT1 DESC, INT1)\n" +
"INCLUDE (CREATED_BY, DOUBLE1, IS_BOOLEAN, CREATED_DATE)");
String query = "SELECT DOUBLE1 FROM PLATFORM_ENTITY.GLOBAL_VIEW\n"
+ "WHERE ORGANIZATION_ID = '00Dxx0000002Col' AND TEXT1='Test' AND INT1=1";
Expand All @@ -2789,7 +2788,6 @@ public void testIndexOnViewWithChildView() throws SQLException {
assertEquals("PLATFORM_ENTITY.GLOBAL_INDEX", plan.getContext().getCurrentTable().getTable().getName().getString());
}
}
*/

@Test
public void testNotNullKeyValueColumnSalted() throws Exception {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,25 +36,23 @@

public class TenantSpecificViewIndexCompileTest extends BaseConnectionlessQueryTest {

/*
@Test
public void testOrderByOptimizedOut() throws Exception {
Properties props = new Properties();
Connection conn = DriverManager.getConnection(getUrl());
conn.createStatement().execute("CREATE TABLE t(t_id VARCHAR NOT NULL, k1 VARCHAR, k2 VARCHAR, v1 VARCHAR," +
" CONSTRAINT pk PRIMARY KEY(t_id, k1, k2)) multi_tenant=true");
String tenantId = "me";
props.setProperty(PhoenixRuntime.TENANT_ID_ATTRIB, tenantId); // connection is tenant-specific
conn = DriverManager.getConnection(getUrl(), props);
conn.createStatement().execute("CREATE VIEW v(v2 VARCHAR) AS SELECT * FROM t WHERE k1 = 'a'");
conn.createStatement().execute("CREATE INDEX i1 ON v(v2) INCLUDE(v1)");
ResultSet rs = conn.createStatement().executeQuery("EXPLAIN SELECT v1,v2 FROM v WHERE v2 > 'a' ORDER BY v2");
assertEquals("CLIENT PARALLEL 1-WAY RANGE SCAN OVER _IDX_T [-9223372036854775808,'me','a'] - [-9223372036854775808,'me',*]",
QueryUtil.getExplainPlan(rs));
}
*/

@Test
public void testOrderByOptimizedOutWithoutPredicateInView() throws Exception {
Expand Down Expand Up @@ -98,7 +96,6 @@ public void testOrderByOptimizedOutWithoutPredicateInView() throws Exception {
assertOrderByHasBeenOptimizedOut(conn, sql);
}

/*
@Test
public void testOrderByOptimizedOutWithPredicateInView() throws Exception {
// Arrange
Expand All @@ -110,16 +107,16 @@ public void testOrderByOptimizedOutWithPredicateInView() throws Exception {

// Query without predicate ordered by full row key
String sql = "SELECT * FROM v1 ORDER BY k2, k3";
String expectedExplainOutput = "CLIENT PARALLEL 1-WAY RANGE SCAN OVER T ['tenant123456789','xyz']";
String expectedExplainOutput = "CLIENT PARALLEL 1-WAY RANGE SCAN OVER T ['tenant123456789','xyz']";
assertExplainPlanIsCorrect(conn, sql, expectedExplainOutput);
assertOrderByHasBeenOptimizedOut(conn, sql);
// Query without predicate ordered by full row key, but without column view predicate
sql = "SELECT * FROM v1 ORDER BY k2, k3";
expectedExplainOutput = "CLIENT PARALLEL 1-WAY RANGE SCAN OVER T ['tenant123456789','xyz']";
expectedExplainOutput = "CLIENT PARALLEL 1-WAY RANGE SCAN OVER T ['tenant123456789','xyz']";
assertExplainPlanIsCorrect(conn, sql, expectedExplainOutput);
assertOrderByHasBeenOptimizedOut(conn, sql);
// Predicate with valid partial PK
sql = "SELECT * FROM v1 WHERE k1 = 'xyz' ORDER BY k2, k3";
expectedExplainOutput = "CLIENT PARALLEL 1-WAY RANGE SCAN OVER T ['tenant123456789','xyz']";
Expand All @@ -138,14 +135,15 @@ public void testOrderByOptimizedOutWithPredicateInView() throws Exception {
assertExplainPlanIsCorrect(conn, sql, expectedExplainOutput);
assertOrderByHasBeenOptimizedOut(conn, sql);

// Predicate with valid partial PK
sql = "SELECT * FROM v1 WHERE k3 < TO_DATE('" + datePredicate + "') ORDER BY k2, k3";
expectedExplainOutput = "CLIENT PARALLEL 1-WAY RANGE SCAN OVER T ['tenant123456789','xyz']\n" +
" SERVER FILTER BY K3 < DATE '" + datePredicate + "'";
assertExplainPlanIsCorrect(conn, sql, expectedExplainOutput);
assertOrderByHasBeenOptimizedOut(conn, sql);
}

@Test
public void testOrderByOptimizedOutWithMultiplePredicatesInView() throws Exception {
// Arrange
Expand All @@ -157,13 +155,13 @@ public void testOrderByOptimizedOutWithMultiplePredicatesInView() throws Excepti

// Query without predicate ordered by full row key
String sql = "SELECT * FROM v1 ORDER BY k3 DESC";
String expectedExplainOutput = "CLIENT PARALLEL 1-WAY RANGE SCAN OVER T ['tenant123456789','xyz','abcde']";
String expectedExplainOutput = "CLIENT PARALLEL 1-WAY RANGE SCAN OVER T ['tenant123456789','xyz','abcde']";
assertExplainPlanIsCorrect(conn, sql, expectedExplainOutput);
assertOrderByHasBeenOptimizedOut(conn, sql);
// Query without predicate ordered by full row key, but without column view predicate
sql = "SELECT * FROM v1 ORDER BY k3 DESC";
expectedExplainOutput = "CLIENT PARALLEL 1-WAY RANGE SCAN OVER T ['tenant123456789','xyz','abcde']";
expectedExplainOutput = "CLIENT PARALLEL 1-WAY RANGE SCAN OVER T ['tenant123456789','xyz','abcde']";
assertExplainPlanIsCorrect(conn, sql, expectedExplainOutput);
assertOrderByHasBeenOptimizedOut(conn, sql);

Expand All @@ -178,29 +176,32 @@ public void testOrderByOptimizedOutWithMultiplePredicatesInView() throws Excepti
expectedExplainOutput = "CLIENT PARALLEL 1-WAY REVERSE RANGE SCAN OVER T ['tenant123456789','xyz','abcde',~'2015-01-01 08:00:00.000'] - ['tenant123456789','xyz','abcde',*]";
assertExplainPlanIsCorrect(conn, sql, expectedExplainOutput);
assertOrderByHasBeenOptimizedOut(conn, sql);

}


@Test
public void testViewConstantsOptimizedOut() throws Exception {
Properties props = new Properties();
Connection conn = DriverManager.getConnection(getUrl());
conn.createStatement().execute("CREATE TABLE t(t_id VARCHAR NOT NULL, k1 VARCHAR, k2 VARCHAR, v1 VARCHAR," +
" CONSTRAINT pk PRIMARY KEY(t_id, k1, k2)) multi_tenant=true");
String tenantId = "me";
props.setProperty(PhoenixRuntime.TENANT_ID_ATTRIB, tenantId); // connection is tenant-specific
conn = DriverManager.getConnection(getUrl(), props);
conn.createStatement().execute("CREATE VIEW v(v2 VARCHAR) AS SELECT * FROM t WHERE k2 = 'a'");
conn.createStatement().execute("CREATE INDEX i1 ON v(v2)");
ResultSet rs = conn.createStatement().executeQuery("EXPLAIN SELECT v2 FROM v WHERE v2 > 'a' and k2 = 'a' ORDER BY v2,k2");
assertEquals("CLIENT PARALLEL 1-WAY RANGE SCAN OVER _IDX_T [-9223372036854775808,'me','a'] - [-9223372036854775808,'me',*]\n" +
" SERVER FILTER BY FIRST KEY ONLY",
QueryUtil.getExplainPlan(rs));
// Won't use index b/c v1 is not in index, but should optimize out k2 still from the order by
// K2 will still be referenced in the filter, as these are automatically tacked on to the where clause.
rs = conn.createStatement().executeQuery("EXPLAIN SELECT v1 FROM v WHERE v2 > 'a' ORDER BY k2");
assertEquals("CLIENT PARALLEL 1-WAY RANGE SCAN OVER T ['me']\n" +
assertEquals("CLIENT PARALLEL 1-WAY RANGE SCAN OVER T ['me']\n" +
" SERVER FILTER BY (V2 > 'a' AND K2 = 'a')",
QueryUtil.getExplainPlan(rs));

Expand All @@ -209,27 +210,27 @@ public void testViewConstantsOptimizedOut() throws Exception {
assertEquals("DEGENERATE SCAN OVER V",
QueryUtil.getExplainPlan(rs));
}

@Test
public void testViewConstantsOptimizedOutOnReadOnlyView() throws Exception {
Properties props = new Properties();
Connection conn = DriverManager.getConnection(getUrl());
conn.createStatement().execute("CREATE TABLE t(t_id VARCHAR NOT NULL, k1 VARCHAR, k2 VARCHAR, v1 VARCHAR," +
" CONSTRAINT pk PRIMARY KEY(t_id, k1, k2)) multi_tenant=true");
String tenantId = "me";
props.setProperty(PhoenixRuntime.TENANT_ID_ATTRIB, tenantId); // connection is tenant-specific
conn = DriverManager.getConnection(getUrl(), props);
conn.createStatement().execute("CREATE VIEW v(v2 VARCHAR) AS SELECT * FROM t WHERE k2 = 'a'");
conn.createStatement().execute("CREATE VIEW v2(v3 VARCHAR) AS SELECT * FROM v WHERE k1 > 'a'");
conn.createStatement().execute("CREATE INDEX i2 ON v2(v3) include(v2)");
// Confirm that a read-only view on an updatable view still optimizes out the read-only parts of the updatable view
ResultSet rs = conn.createStatement().executeQuery("EXPLAIN SELECT v2 FROM v2 WHERE v3 > 'a' and k2 = 'a' ORDER BY v3,k2");
assertEquals("CLIENT PARALLEL 1-WAY RANGE SCAN OVER _IDX_T [-9223372036854775808,'me','a'] - [-9223372036854775808,'me',*]",
QueryUtil.getExplainPlan(rs));
}
*/


//-----------------------------------------------------------------
// Private Helper Methods
//-----------------------------------------------------------------
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@
import org.junit.Test;

public class ViewCompilerTest extends BaseConnectionlessQueryTest {
/*
@Test
public void testViewTypeCalculation() throws Exception {
assertViewType(new String[] {"V1","V2","V3","V4"}, new String[] {
Expand All @@ -53,21 +52,21 @@ public void testViewTypeCalculation() throws Exception {
"CREATE VIEW v4 AS SELECT * FROM t WHERE 'bar'=v or 3 = k1",
}, ViewType.READ_ONLY);
}
public void assertViewType(String[] viewNames, String[] viewDDLs, ViewType viewType) throws Exception {
Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
PhoenixConnection conn = DriverManager.getConnection(getUrl(), props).unwrap(PhoenixConnection.class);
String ct = "CREATE TABLE t (k1 INTEGER NOT NULL, k2 VARCHAR, v VARCHAR, CONSTRAINT pk PRIMARY KEY (k1,k2))";
conn.createStatement().execute(ct);
for (String viewDDL : viewDDLs) {
conn.createStatement().execute(viewDDL);
}
StringBuilder buf = new StringBuilder();
int count = 0;
for (String view : viewNames) {
PTable table = conn.getTable(new PTableKey(null, view));
PTable table = conn.getTable(new PTableKey(null, view));
assertEquals(viewType, table.getViewType());
conn.createStatement().execute("DROP VIEW " + table.getName().getString());
buf.append(' ');
Expand All @@ -76,7 +75,6 @@ public void assertViewType(String[] viewNames, String[] viewDDLs, ViewType viewT
}
assertEquals("Expected " + viewDDLs.length + ", but got " + count + ":"+ buf.toString(), viewDDLs.length, count);
}
*/

@Test
public void testViewInvalidation() throws Exception {
Expand All @@ -101,21 +99,20 @@ public void testViewInvalidation() throws Exception {
conn.createStatement().execute("DROP VIEW s2.v3");
}

/*

@Test
public void testInvalidUpsertSelect() throws Exception {
Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
PhoenixConnection conn = DriverManager.getConnection(getUrl(), props).unwrap(PhoenixConnection.class);
conn.createStatement().execute("CREATE TABLE t1 (k1 INTEGER NOT NULL, k2 VARCHAR, v VARCHAR, CONSTRAINT pk PRIMARY KEY (k1,k2))");
conn.createStatement().execute("CREATE TABLE t2 (k3 INTEGER NOT NULL, v VARCHAR, CONSTRAINT pk PRIMARY KEY (k3))");
conn.createStatement().execute("CREATE VIEW v1 AS SELECT * FROM t1 WHERE k1 = 1");
try {
conn.createStatement().executeUpdate("UPSERT INTO v1 SELECT k3,'foo',v FROM t2");
fail();
} catch (SQLException e) {
assertEquals(SQLExceptionCode.CANNOT_UPDATE_VIEW_COLUMN.getErrorCode(), e.getErrorCode());
}
}
*/
}
Original file line number Diff line number Diff line change
Expand Up @@ -930,7 +930,6 @@ public void testNotBetweenFilter() throws SQLException {
filter.toString());
}

/*
@Test
public void testTenantConstraintsAddedToScan() throws SQLException {
String tenantTypeId = "5678";
Expand Down Expand Up @@ -966,7 +965,6 @@ public void testTenantConstraintsAddedToScan() throws SQLException {
byte[] stopRow = startRow;
assertArrayEquals(ByteUtil.nextKey(stopRow), scan.getStopRow());
}
*/

@Test
public void testTenantConstraintsAddedToScanWithNullTenantTypeId() throws SQLException {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2483,24 +2483,24 @@ public void testRVCWithCompareOpsForRowKeyColumnValuesSmallerThanSchema() throws
}


// @Test
// public void testRVCInView() throws Exception {
// Connection conn = DriverManager.getConnection(getUrl());
// conn.createStatement().execute("CREATE TABLE TEST_TABLE.TEST1 (\n" +
// "PK1 CHAR(3) NOT NULL, \n" +
// "PK2 CHAR(3) NOT NULL,\n" +
// "DATA1 CHAR(10)\n" +
// "CONSTRAINT PK PRIMARY KEY (PK1, PK2))");
// conn.createStatement().execute("CREATE VIEW TEST_TABLE.FOO AS SELECT * FROM TEST_TABLE.TEST1 WHERE PK1 = 'FOO'");
// String query = "SELECT * FROM TEST_TABLE.FOO WHERE PK2 < '004' AND (PK1,PK2) > ('FOO','002') LIMIT 2";
// Scan scan = compileStatement(query, Collections.emptyList(), 2).getScan();
// byte[] startRow = ByteUtil.nextKey(ByteUtil.concat(PChar.INSTANCE.toBytes("FOO"),
// PVarchar.INSTANCE.toBytes("002")));
// assertArrayEquals(startRow, scan.getStartRow());
// byte[] stopRow = ByteUtil.concat(PChar.INSTANCE.toBytes("FOO"),
// PChar.INSTANCE.toBytes("004"));
// assertArrayEquals(stopRow, scan.getStopRow());
// }
@Test
public void testRVCInView() throws Exception {
Connection conn = DriverManager.getConnection(getUrl());
conn.createStatement().execute("CREATE TABLE TEST_TABLE.TEST1 (\n" +
"PK1 CHAR(3) NOT NULL, \n" +
"PK2 CHAR(3) NOT NULL,\n" +
"DATA1 CHAR(10)\n" +
"CONSTRAINT PK PRIMARY KEY (PK1, PK2))");
conn.createStatement().execute("CREATE VIEW TEST_TABLE.FOO AS SELECT * FROM TEST_TABLE.TEST1 WHERE PK1 = 'FOO'");
String query = "SELECT * FROM TEST_TABLE.FOO WHERE PK2 < '004' AND (PK1,PK2) > ('FOO','002') LIMIT 2";
Scan scan = compileStatement(query, Collections.emptyList(), 2).getScan();
byte[] startRow = ByteUtil.nextKey(ByteUtil.concat(PChar.INSTANCE.toBytes("FOO"),
PVarchar.INSTANCE.toBytes("002")));
assertArrayEquals(startRow, scan.getStartRow());
byte[] stopRow = ByteUtil.concat(PChar.INSTANCE.toBytes("FOO"),
PChar.INSTANCE.toBytes("004"));
assertArrayEquals(stopRow, scan.getStopRow());
}

private static StatementContext compileStatementTenantSpecific(String tenantId, String query, List<Object> binds) throws Exception {
PhoenixConnection pconn = getTenantSpecificConnection("tenantId").unwrap(PhoenixConnection.class);
Expand Down Expand Up @@ -3424,7 +3424,6 @@ public void testRVCClipBug5753() throws Exception {
}


/*
@Test
public void testWithLargeORs() throws Exception {

Expand Down Expand Up @@ -3458,7 +3457,6 @@ public void testWithLargeORs() throws Exception {
testTSVarIntAndLargeORs(tenantId, view1Name, sortOrders[index]);
}
}
*/

private void createBaseTable(String baseTable) throws SQLException {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,10 +133,12 @@ public void testView() throws Exception {
Connection conn = DriverManager.getConnection(getUrl());
conn.createStatement().execute(
"CREATE TABLE IF NOT EXISTS S.T (A INTEGER PRIMARY KEY, B INTEGER, C VARCHAR, D INTEGER)");
conn.createStatement().execute(
"UPSERT INTO S.T (A, B, C, D) VALUES (2, 200, 'def', -20)");
conn.createStatement().execute(
"CREATE VIEW IF NOT EXISTS S.V (VA INTEGER, VB INTEGER) AS SELECT * FROM S.T WHERE B=200");
conn.createStatement().execute(
"UPSERT INTO S.V (A, B, C, D, VA, VB) VALUES (2, 200, 'def', -20, 91, 101)");
conn.createStatement().execute(
"ALTER VIEW S.V DROP COLUMN C");

ResultSet rs = conn.createStatement().executeQuery("SELECT * FROM S.V");
assertEquals("A", rs.getMetaData().getColumnName(1));
Expand Down

0 comments on commit d1614d4

Please sign in to comment.