PHOENIX-6158 create table/view should not update VIEW_INDEX_ID_DATA_TYPE column
Signed-off-by: Xinyi Yan <yanxinyi@apache.org>
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/ViewIndexIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/ViewIndexIT.java
index 6bb7ee3..a2407dd 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/ViewIndexIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/ViewIndexIT.java
@@ -17,11 +17,17 @@
*/
package org.apache.phoenix.end2end.index;
+import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.COLUMN_COUNT;
+import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.SYSTEM_CATALOG_NAME;
+import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.TABLE_NAME;
+import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.TABLE_SCHEM;
+import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.VIEW_INDEX_ID_DATA_TYPE;
import static org.apache.phoenix.util.MetaDataUtil.getViewIndexSequenceName;
import static org.apache.phoenix.util.MetaDataUtil.getViewIndexSequenceSchemaName;
import static org.apache.phoenix.util.TestUtil.TEST_PROPERTIES;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
@@ -33,6 +39,7 @@
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
+import java.sql.Types;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
@@ -53,6 +60,7 @@
import org.apache.phoenix.jdbc.PhoenixStatement;
import org.apache.phoenix.query.KeyRange;
import org.apache.phoenix.query.QueryServices;
+import org.apache.phoenix.query.QueryServicesOptions;
import org.apache.phoenix.schema.PNameFactory;
import org.apache.phoenix.schema.PTable;
import org.apache.phoenix.schema.TableNotFoundException;
@@ -626,4 +634,48 @@
}
return size;
}
+
+ @Test
+ public void testIndexIdDataTypeDefaultValue() throws Exception {
+ String tableName = "T_" + generateUniqueName();
+ String globalViewName = "V_" + generateUniqueName();
+ String globalViewIndexName = "GV_" + generateUniqueName();
+ try (Connection globalConn = getConnection()) {
+ createBaseTable(SCHEMA1, tableName, true, 0, null, true);
+ createView(globalConn, SCHEMA1, globalViewName, tableName);
+ createViewIndex(globalConn, SCHEMA1, globalViewIndexName, globalViewName, "v1");
+
+ String sql = "SELECT " + VIEW_INDEX_ID_DATA_TYPE + " FROM " + SYSTEM_CATALOG_NAME + " WHERE " +
+ TABLE_SCHEM + " = '%s' AND " +
+ TABLE_NAME + " = '%s' AND " +
+ COLUMN_COUNT + " IS NOT NULL";
+ // should not have default value for table
+ ResultSet rs = globalConn.createStatement().executeQuery(String.format(sql, SCHEMA1, tableName));
+ if (rs.next()) {
+ assertNull(rs.getObject(1));
+ } else {
+ fail();
+ }
+ // should not have default value for view
+ rs = globalConn.createStatement().executeQuery(String.format(sql, SCHEMA1, globalViewName));
+ if (rs.next()) {
+ assertNull(rs.getObject(1));
+ } else {
+ fail();
+ }
+ // should have default value
+ rs = globalConn.createStatement().executeQuery(String.format(sql, SCHEMA1, globalViewIndexName));
+ if (rs.next()) {
+ /*
+ quote from hbase-site.xml so default value is BIGINT
+ We have some hardcoded viewIndex ids in the IT tests which assumes viewIndexId is of type Long.
+ However the default viewIndexId type is set to "short" by default until we upgrade all clients to
+ support long viewIndex ids.
+ */
+ assertEquals(Types.BIGINT, rs.getInt(1));
+ } else {
+ fail();
+ }
+ }
+ }
}
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 68bdfde..61bf44d 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
@@ -2956,7 +2956,14 @@
} else {
tableUpsert.setBoolean(28, useStatsForParallelizationProp);
}
- tableUpsert.setInt(29, viewIndexIdType.getSqlType());
+ if (indexType == IndexType.LOCAL ||
+ (parent != null && parent.getType() == PTableType.VIEW
+ && tableType == PTableType.INDEX)) {
+ tableUpsert.setInt(29, viewIndexIdType.getSqlType());
+ } else {
+ tableUpsert.setNull(29, Types.NULL);
+ }
+
if (phoenixTTL == null || phoenixTTL == PHOENIX_TTL_NOT_DEFINED) {
tableUpsert.setNull(30, Types.BIGINT);
tableUpsert.setNull(31, Types.BIGINT);