Github user JamesRTaylor commented on a diff in the pull request: https://github.com/apache/phoenix/pull/303#discussion_r191926624 --- 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 -- I think it's fine to consider the view invalid (i.e. fail any query that attempts to use it) if all it's columns can no longer be found. This is pretty typical in RDBMS.
---