This is an automated email from the ASF dual-hosted git repository.

skadam pushed a commit to branch 4.x
in repository https://gitbox.apache.org/repos/asf/phoenix.git


The following commit(s) were added to refs/heads/4.x by this push:
     new 883170e  PHOENIX-6344: CASCADE on ALTER should NOOP when there are no 
secondary indexes (#1135)
883170e is described below

commit 883170ef5d0bddde5a78dd13717e3f57996d1d8b
Author: Swaroopa Kadam <swaroopa.kada...@gmail.com>
AuthorDate: Tue Feb 9 13:52:29 2021 -0800

    PHOENIX-6344: CASCADE on ALTER should NOOP when there are no secondary 
indexes (#1135)
---
 .../phoenix/end2end/AlterAddCascadeIndexIT.java    | 83 +++++++++++++++-------
 .../org/apache/phoenix/schema/MetaDataClient.java  | 12 +++-
 2 files changed, 68 insertions(+), 27 deletions(-)

diff --git 
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/AlterAddCascadeIndexIT.java
 
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/AlterAddCascadeIndexIT.java
index def4814..dc35013 100644
--- 
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/AlterAddCascadeIndexIT.java
+++ 
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/AlterAddCascadeIndexIT.java
@@ -64,15 +64,15 @@ public class AlterAddCascadeIndexIT extends 
ParallelStatsDisabledIT {
     public ExpectedException exception = ExpectedException.none();
     private static Connection conn;
     private Properties prop;
-    private boolean isViewIndex, mutable;
+    private boolean isViewScenario, mutable;
     private String phoenixObjectName;
     private String indexNames;
     private final String tableDDLOptions;
     String fullIndexNameOne, fullIndexNameTwo, fullTableName;
 
 
-    public AlterAddCascadeIndexIT(boolean isViewIndex, boolean mutable) {
-        this.isViewIndex = isViewIndex;
+    public AlterAddCascadeIndexIT(boolean isViewScenario, boolean mutable) {
+        this.isViewScenario = isViewScenario;
         StringBuilder optionBuilder = new 
StringBuilder("COLUMN_ENCODED_BYTES=0");
         if (!mutable) {
 
@@ -110,7 +110,7 @@ public class AlterAddCascadeIndexIT extends 
ParallelStatsDisabledIT {
                 "      population BIGINT,\n" +
                 "      CONSTRAINT my_pk PRIMARY KEY (state, city)) " + 
tableDDLOptions);
 
-        if(isViewIndex) {
+        if(isViewScenario) {
             conn.createStatement().execute("CREATE VIEW IF NOT EXISTS " + 
fullViewName +
                     " (city_area INTEGER, avg_fam_size INTEGER) AS " +
                     "SELECT * FROM "+fullTableName+" WHERE state = 'CA'");
@@ -136,10 +136,10 @@ public class AlterAddCascadeIndexIT extends 
ParallelStatsDisabledIT {
     // Test with ALTER TABLE/VIEW CASCADE INDEX ALL with upserting into new 
column
     @Test
     public void testAlterDBOAddCascadeIndexAllUpsert() throws Exception {
-        String query = "ALTER " +(isViewIndex? "VIEW " : "TABLE ") + 
phoenixObjectName + " ADD new_column_3 VARCHAR(64) CASCADE INDEX ALL";
+        String query = "ALTER " +(isViewScenario ? "VIEW " : "TABLE ") + 
phoenixObjectName + " ADD new_column_3 VARCHAR(64) CASCADE INDEX ALL";
         conn.createStatement().execute(query);
         PreparedStatement ps;
-        if(isViewIndex) {
+        if(isViewScenario) {
             ps = conn.prepareStatement("UPSERT INTO " + phoenixObjectName +
                     
"(state,city,population,city_area,avg_fam_size,new_column_3) " +
                     "VALUES('CA','Santa 
Barbara',912332,1300,4,'test_column')");
@@ -151,7 +151,7 @@ public class AlterAddCascadeIndexIT extends 
ParallelStatsDisabledIT {
         ps.executeUpdate();
         ColumnInfo [] columnArray =  {new ColumnInfo("new_column_3", 
PVarchar.INSTANCE.getSqlType(), 64)};
         ColumnInfo [] columnIndexArray =  {new ColumnInfo("0:new_column_3", 
PVarchar.INSTANCE.getSqlType(), 64)};
-        if(isViewIndex) {
+        if(isViewScenario) {
             assertDBODefinition(conn, phoenixObjectName, PTableType.VIEW, 6, 
columnArray, false);
             assertDBODefinition(conn, fullIndexNameOne, PTableType.INDEX, 5, 
columnIndexArray, false);
             assertDBODefinition(conn, fullIndexNameTwo, PTableType.INDEX, 5, 
columnIndexArray, false);
@@ -172,16 +172,51 @@ public class AlterAddCascadeIndexIT extends 
ParallelStatsDisabledIT {
 
     }
 
+    // Test with ALTER TABLE/VIEW CASCADE INDEX ALL with no indexes
+    @Test
+    public void testAlterDBOAddCascadeIndexAll_noIndexes() throws Exception {
+        String schemaName = "S_"+generateUniqueName();
+        String tableName = "T_"+generateUniqueName();
+        String viewName = "V_"+generateUniqueName();
+
+        String fullViewName = SchemaUtil.getQualifiedTableName(schemaName, 
viewName);
+        String fullTableName = SchemaUtil.getQualifiedTableName(schemaName, 
tableName);
+
+        conn.createStatement().execute("CREATE TABLE IF NOT EXISTS " + 
fullTableName + " (\n" +
+                "      state CHAR(2) NOT NULL,\n" +
+                "      city VARCHAR NOT NULL,\n" +
+                "      population BIGINT,\n" +
+                "      CONSTRAINT my_pk PRIMARY KEY (state, city)) " + 
tableDDLOptions);
+
+        if(isViewScenario) {
+            conn.createStatement().execute("CREATE VIEW IF NOT EXISTS " + 
fullViewName
+                    + " (city_area INTEGER, avg_fam_size INTEGER) AS " + 
"SELECT * FROM "
+                    + fullTableName + " WHERE state = 'CA'");
+        }
+
+        String query = "ALTER " +(isViewScenario ? "VIEW " : "TABLE ") + 
(isViewScenario ? fullViewName : fullTableName)
+                + " ADD new_column_3 VARCHAR(64) CASCADE INDEX ALL";
+        conn.createStatement().execute(query);
+
+        ColumnInfo [] columnArray =  {new ColumnInfo("new_column_3", 
PVarchar.INSTANCE.getSqlType(), 64)};
+        if(isViewScenario) {
+            assertDBODefinition(conn, fullViewName, PTableType.VIEW, 6, 
columnArray, false);
+        } else {
+            assertDBODefinition(conn, fullTableName, PTableType.TABLE, 4, 
columnArray, false);
+        }
+
+    }
+
     // Test with CASCADE INDEX <index_name>
     @Test
     public void testAlterDBOAddCascadeIndex() throws Exception {
         ColumnInfo [] columnArray =  {new ColumnInfo("new_column_1", 
PFloat.INSTANCE.getSqlType())};
         ColumnInfo [] columnIndexArray =  {new ColumnInfo("0:new_column_1", 
PDecimal.INSTANCE.getSqlType())};
 
-        String query = "ALTER " + (isViewIndex? "VIEW " : "TABLE ")
+        String query = "ALTER " + (isViewScenario ? "VIEW " : "TABLE ")
                 + phoenixObjectName + " ADD new_column_1 FLOAT CASCADE INDEX " 
+ indexNames.split(",")[0];
         conn.createStatement().execute(query);
-        if(isViewIndex) {
+        if(isViewScenario) {
             assertDBODefinition(conn, phoenixObjectName, PTableType.VIEW, 6, 
columnArray, false);
             assertDBODefinition(conn, fullIndexNameOne, PTableType.INDEX, 5, 
columnIndexArray, false);
             assertDBODefinition(conn, fullIndexNameTwo, PTableType.INDEX, 4, 
columnIndexArray, true);
@@ -199,10 +234,10 @@ public class AlterAddCascadeIndexIT extends 
ParallelStatsDisabledIT {
                 new ColumnInfo("new_column_2", PDouble.INSTANCE.getSqlType())};
         ColumnInfo [] columnIndexArray =  {new ColumnInfo("0:new_column_1", 
PDecimal.INSTANCE.getSqlType()),
                 new ColumnInfo("0:new_column_2", 
PDecimal.INSTANCE.getSqlType())};
-        String query = "ALTER " + (isViewIndex ? "VIEW " : "TABLE ") + 
phoenixObjectName
+        String query = "ALTER " + (isViewScenario ? "VIEW " : "TABLE ") + 
phoenixObjectName
                 + " ADD new_column_1 FLOAT, new_column_2 DOUBLE CASCADE INDEX 
" + indexNames.split(",")[0];
         conn.createStatement().execute(query);
-        if(isViewIndex) {
+        if(isViewScenario) {
             assertDBODefinition(conn, phoenixObjectName, PTableType.VIEW, 7, 
columnArray, false);
             assertDBODefinition(conn, fullIndexNameOne, PTableType.INDEX, 6, 
columnIndexArray, false);
             assertDBODefinition(conn, fullIndexNameTwo, PTableType.INDEX, 4, 
columnIndexArray, true);
@@ -219,10 +254,10 @@ public class AlterAddCascadeIndexIT extends 
ParallelStatsDisabledIT {
     public void testAlterDBOAddCascadeIndexes() throws Exception {
         ColumnInfo [] columnArray = {new ColumnInfo("new_column_1", 
PDouble.INSTANCE.getSqlType())};
         ColumnInfo [] columnIndexArray = {new ColumnInfo("0:new_column_1", 
PDecimal.INSTANCE.getSqlType())};
-        String query = "ALTER " + (isViewIndex ? "VIEW " : "TABLE ")
+        String query = "ALTER " + (isViewScenario ? "VIEW " : "TABLE ")
                 + phoenixObjectName + " ADD new_column_1 DOUBLE CASCADE INDEX 
" + indexNames;
         conn.createStatement().execute(query);
-        if(isViewIndex) {
+        if(isViewScenario) {
             assertDBODefinition(conn, phoenixObjectName, PTableType.VIEW, 6, 
columnArray, false);
             assertDBODefinition(conn, fullIndexNameOne, PTableType.INDEX, 5, 
columnIndexArray, false);
             assertDBODefinition(conn, fullIndexNameTwo, PTableType.INDEX, 5, 
columnIndexArray, false);
@@ -241,10 +276,10 @@ public class AlterAddCascadeIndexIT extends 
ParallelStatsDisabledIT {
         ColumnInfo [] columIndexArray =  {new ColumnInfo("0:new_column_1", 
PDecimal.INSTANCE.getSqlType()),
                 new ColumnInfo("0:new_column_2", 
PDecimal.INSTANCE.getSqlType())};
 
-        String query = "ALTER " + (isViewIndex ? "VIEW " : "TABLE ")
+        String query = "ALTER " + (isViewScenario ? "VIEW " : "TABLE ")
                 + phoenixObjectName + " ADD new_column_1 FLOAT, new_column_2 
DOUBLE CASCADE INDEX " + indexNames;
         conn.createStatement().execute(query);
-        if(isViewIndex) {
+        if(isViewScenario) {
             assertDBODefinition(conn, phoenixObjectName, PTableType.VIEW, 7, 
columnArray, false);
             assertDBODefinition(conn, fullIndexNameOne, PTableType.INDEX, 6, 
columIndexArray, false);
             assertDBODefinition(conn, fullIndexNameTwo, PTableType.INDEX, 6, 
columIndexArray, false);
@@ -260,14 +295,14 @@ public class AlterAddCascadeIndexIT extends 
ParallelStatsDisabledIT {
     @Test
     public void testAlterDBOException() throws SQLException {
 
-        String query = "ALTER " + (isViewIndex ? "VIEW " : "TABLE ") + 
phoenixObjectName + " ADD new_column VARCHAR ALL";
+        String query = "ALTER " + (isViewScenario ? "VIEW " : "TABLE ") + 
phoenixObjectName + " ADD new_column VARCHAR ALL";
         try {
             conn.createStatement().execute(query);
         } catch (Exception e) {
             assertTrue(e.getMessage().contains(SYNTAX_ERROR));
         }
 
-        query = "ALTER " + (isViewIndex ? "VIEW " : "TABLE ") + 
phoenixObjectName
+        query = "ALTER " + (isViewScenario ? "VIEW " : "TABLE ") + 
phoenixObjectName
                 + " ADD new_column VARCHAR CASCADE " + 
indexNames.split(",")[0];
         try {
             conn.createStatement().execute(query);
@@ -275,7 +310,7 @@ public class AlterAddCascadeIndexIT extends 
ParallelStatsDisabledIT {
             assertTrue(e.getMessage().contains(SYNTAX_ERROR));
         }
 
-        query = "ALTER " + (isViewIndex ? "VIEW " : "TABLE ") + 
phoenixObjectName
+        query = "ALTER " + (isViewScenario ? "VIEW " : "TABLE ") + 
phoenixObjectName
                 + " ADD new_column VARCHAR INDEX " + indexNames.split(",")[0];
         try {
             conn.createStatement().execute(query);
@@ -283,7 +318,7 @@ public class AlterAddCascadeIndexIT extends 
ParallelStatsDisabledIT {
             assertTrue(e.getMessage().contains(SYNTAX_ERROR));
         }
 
-        query = "ALTER " + (isViewIndex ? "VIEW " : "TABLE ")
+        query = "ALTER " + (isViewScenario ? "VIEW " : "TABLE ")
                 + phoenixObjectName + " ADD new_column_1 DOUBLE CASCADE INDEX 
INCORRECT_NAME";
         try {
             conn.createStatement().execute(query);
@@ -294,13 +329,13 @@ public class AlterAddCascadeIndexIT extends 
ParallelStatsDisabledIT {
         String localIndex = generateUniqueName();
         String createLocalIndex = "CREATE LOCAL INDEX " + localIndex + " ON "
                 + phoenixObjectName + "(avg_fam_size) INCLUDE (population)";
-        if(!isViewIndex) {
+        if(!isViewScenario) {
             createLocalIndex = "CREATE LOCAL INDEX " + localIndex + " ON "
                     + phoenixObjectName + "(state, population)";
 
         }
         conn.createStatement().execute(createLocalIndex);
-        query = "ALTER " + (isViewIndex ? "VIEW " : "TABLE ")
+        query = "ALTER " + (isViewScenario ? "VIEW " : "TABLE ")
                 + phoenixObjectName + " ADD new_column_1 DOUBLE CASCADE INDEX 
"+localIndex;
         try {
             conn.createStatement().execute(query);
@@ -309,7 +344,7 @@ public class AlterAddCascadeIndexIT extends 
ParallelStatsDisabledIT {
                     .NOT_SUPPORTED_CASCADE_FEATURE_LOCAL_INDEX.getMessage()));
         }
 
-        query = "ALTER " + (isViewIndex ? "VIEW " : "TABLE ")
+        query = "ALTER " + (isViewScenario ? "VIEW " : "TABLE ")
                 + phoenixObjectName + " ADD new_column_2 DOUBLE CASCADE INDEX 
"+localIndex + "," + indexNames;
         try {
             conn.createStatement().execute(query);
@@ -323,7 +358,7 @@ public class AlterAddCascadeIndexIT extends 
ParallelStatsDisabledIT {
     // Exception for incorrect index name
     @Test
     public void testAlterDBOIncorrectIndexNameCombination() throws Exception {
-        String query = "ALTER " + (isViewIndex ? "VIEW " : "TABLE ")
+        String query = "ALTER " + (isViewScenario ? "VIEW " : "TABLE ")
                 + phoenixObjectName + " ADD new_column_1 DOUBLE CASCADE INDEX 
INCORRECT_NAME, "+ indexNames;
         try {
             conn.createStatement().execute(query);
@@ -332,7 +367,7 @@ public class AlterAddCascadeIndexIT extends 
ParallelStatsDisabledIT {
         }
         ColumnInfo [] columnArray =  {new ColumnInfo("new_column_1", 
PFloat.INSTANCE.getSqlType())};
         ColumnInfo [] columnIndexArray =  {new ColumnInfo("0:new_column_1", 
PDecimal.INSTANCE.getSqlType())};
-        if(isViewIndex) {
+        if(isViewScenario) {
             assertDBODefinition(conn, phoenixObjectName, PTableType.VIEW, 5, 
columnArray, true);
             assertDBODefinition(conn, fullIndexNameOne, PTableType.INDEX, 4, 
columnIndexArray, true);
             assertDBODefinition(conn, fullIndexNameTwo, PTableType.INDEX, 4, 
columnIndexArray, true);
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/schema/MetaDataClient.java 
b/phoenix-core/src/main/java/org/apache/phoenix/schema/MetaDataClient.java
index 919e072..6b54b53 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/schema/MetaDataClient.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/schema/MetaDataClient.java
@@ -3765,8 +3765,13 @@ public class MetaDataClient {
         // if cascade keyword is passed and indexes are provided either 
implicitly or explicitly
         if (cascade && (indexes == null || !indexes.isEmpty())) {
             indexesPTable = getIndexesPTableForCascade(indexes, table);
-            for (PTable index : indexesPTable) {
-                indexToColumnSizeMap.put(index, index.getColumns().size());
+            if(indexesPTable.size() == 0) {
+                // go back to regular behavior of altering the table/view
+                cascade = false;
+            } else {
+                for (PTable index : indexesPTable) {
+                    indexToColumnSizeMap.put(index, index.getColumns().size());
+                }
             }
         }
         boolean wasAutoCommit = connection.getAutoCommit();
@@ -4232,7 +4237,8 @@ public class MetaDataClient {
                 // this if clause ensures we only get the indexes that
                 // are only created on the view itself.
                 if (index.getIndexType().equals(IndexType.LOCAL)
-                        || (isView && 
index.getTableName().toString().contains("#"))) {
+                        || (isView && index.getTableName().toString().contains(
+                        QueryConstants.CHILD_VIEW_INDEX_NAME_SEPARATOR))) {
                     indexesPTable.remove(index);
                 }
             }

Reply via email to