Github user twdsilva commented on a diff in the pull request:
https://github.com/apache/phoenix/pull/303#discussion_r191939222
--- Diff: phoenix-core/src/it/java/org/apache/phoenix/end2end/ViewIT.java
---
@@ -388,51 +435,65 @@ public void
testViewAndTableInDifferentSchemas(boolean isNamespaceMapped) throws
} catch (TableNotFoundException ignore) {
}
ddl = "DROP TABLE " + fullTableName1;
- validateCannotDropTableWithChildViewsWithoutCascade(conn,
fullTableName1);
ddl = "DROP VIEW " + fullViewName2;
conn.createStatement().execute(ddl);
ddl = "DROP TABLE " + fullTableName1;
conn.createStatement().execute(ddl);
}
-
+
@Test
- public void testDisallowDropOfColumnOnParentTable() throws Exception {
+ public void testDropOfColumnOnParentTableInvalidatesView() throws
Exception {
Connection conn = DriverManager.getConnection(getUrl());
+ String fullTableName = generateUniqueTableName();
+ String viewName = generateUniqueViewName();
+ splitSystemCatalog(Lists.newArrayList(fullTableName, viewName));
+
String ddl = "CREATE TABLE " + fullTableName + " (k1 INTEGER NOT
NULL, k2 INTEGER NOT NULL, v1 DECIMAL, CONSTRAINT pk PRIMARY KEY (k1, k2))" +
tableDDLOptions;
conn.createStatement().execute(ddl);
- String viewName = "V_" + generateUniqueName();
ddl = "CREATE VIEW " + viewName + "(v2 VARCHAR, v3 VARCHAR) AS
SELECT * FROM " + fullTableName + " WHERE v1 = 1.0";
conn.createStatement().execute(ddl);
- try {
- conn.createStatement().execute("ALTER TABLE " + fullTableName
+ " DROP COLUMN v1");
- fail();
- } catch (SQLException e) {
-
assertEquals(SQLExceptionCode.CANNOT_MUTATE_TABLE.getErrorCode(),
e.getErrorCode());
+ conn.createStatement().execute("ALTER TABLE " + fullTableName + "
DROP COLUMN v1");
+ // TODO see if its possibel to prevent the dropping of a column
thats required by a child view (for its view where clause)
+ // the view should be invalid
--- End diff --
Previously we used to prevent a base table column from being dropped if the
column was used in a child view index.
It's possible to detect this and prevent the column drop even with
splittable system.catalog if you think we should maintain the existing behavior.
---