You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by ew...@apache.org on 2017/12/07 17:20:15 UTC
phoenix git commit: PHOENIX-3837 Feature enabling to set property on
an index with Alter statement
Repository: phoenix
Updated Branches:
refs/heads/4.x-HBase-0.98 1df7aa5bb -> 794d42833
PHOENIX-3837 Feature enabling to set property on an index with Alter statement
Signed-off-by: aertoria <ca...@gmail.com>
Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/794d4283
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/794d4283
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/794d4283
Branch: refs/heads/4.x-HBase-0.98
Commit: 794d4283392fdf80471c51f1c2055845848d979e
Parents: 1df7aa5
Author: aertoria <ca...@gmail.com>
Authored: Mon Nov 27 11:58:01 2017 -0800
Committer: aertoria <ca...@gmail.com>
Committed: Thu Dec 7 09:18:05 2017 -0800
----------------------------------------------------------------------
.../apache/phoenix/end2end/AlterTableIT.java | 2 +-
.../phoenix/end2end/index/IndexMetadataIT.java | 55 ++
phoenix-core/src/main/antlr3/PhoenixSQL.g | 5 +-
.../apache/phoenix/jdbc/PhoenixStatement.java | 10 +-
.../phoenix/parse/AddColumnStatement.java | 2 +-
.../phoenix/parse/AlterIndexStatement.java | 14 +
.../apache/phoenix/parse/ParseNodeFactory.java | 6 +-
.../phoenix/query/ConnectionQueryServices.java | 2 +
.../query/ConnectionQueryServicesImpl.java | 20 +
.../query/ConnectionlessQueryServicesImpl.java | 7 +
.../query/DelegateConnectionQueryServices.java | 8 +-
.../apache/phoenix/schema/MetaDataClient.java | 566 +++++++++++++------
12 files changed, 520 insertions(+), 177 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/phoenix/blob/794d4283/phoenix-core/src/it/java/org/apache/phoenix/end2end/AlterTableIT.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/AlterTableIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/AlterTableIT.java
index c21b023..ab75d34 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/AlterTableIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/AlterTableIT.java
@@ -1082,7 +1082,7 @@ public class AlterTableIT extends ParallelStatsDisabledIT {
} catch (SQLException e) {
assertEquals(SQLExceptionCode.CANNOT_CREATE_TXN_TABLE_IF_TXNS_DISABLED.getErrorCode(), e.getErrorCode());
}
- // altering a table to be transactional should fail if transactions are disabled
+ // altering a table to be transactional should fail if transactions are disabled
conn.createStatement().execute("CREATE TABLE " + dataTableFullName + "(k INTEGER PRIMARY KEY, v VARCHAR)");
try {
conn.createStatement().execute("ALTER TABLE " + dataTableFullName + " SET TRANSACTIONAL=true");
http://git-wip-us.apache.org/repos/asf/phoenix/blob/794d4283/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/IndexMetadataIT.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/IndexMetadataIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/IndexMetadataIT.java
index 0ce36dd..986c317 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/IndexMetadataIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/IndexMetadataIT.java
@@ -674,4 +674,59 @@ public class IndexMetadataIT extends ParallelStatsDisabledIT {
conn.close();
}
}
+
+
+
+ @Test
+ public void testIndexAlterPhoenixProperty() throws Exception {
+ Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
+ Connection conn = DriverManager.getConnection(getUrl(), props);
+ String testTable = generateUniqueName();
+
+
+ String ddl = "create table " + testTable + " (k varchar primary key, v1 varchar)";
+ Statement stmt = conn.createStatement();
+ stmt.execute(ddl);
+ String indexName = "IDX_" + generateUniqueName();
+
+ ddl = "CREATE INDEX " + indexName + " ON " + testTable + " (v1) ";
+ stmt.execute(ddl);
+ conn.createStatement().execute("ALTER INDEX "+indexName+" ON " + testTable +" ACTIVE SET GUIDE_POSTS_WIDTH = 10");
+
+ ResultSet rs = conn.createStatement().executeQuery(
+ "select GUIDE_POSTS_WIDTH from SYSTEM.\"CATALOG\" where TABLE_NAME='" + indexName + "'");assertTrue(rs.next());
+ assertEquals(10,rs.getInt(1));
+
+ conn.createStatement().execute("ALTER INDEX "+indexName+" ON " + testTable +" ACTIVE SET GUIDE_POSTS_WIDTH = 20");
+ rs = conn.createStatement().executeQuery(
+ "select GUIDE_POSTS_WIDTH from SYSTEM.\"CATALOG\" where TABLE_NAME='" + indexName + "'");assertTrue(rs.next());
+ assertEquals(20,rs.getInt(1));
+ }
+
+
+ @Test
+ public void testIndexAlterHBaseProperty() throws Exception {
+ Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
+ Connection conn = DriverManager.getConnection(getUrl(), props);
+ String testTable = generateUniqueName();
+
+ String ddl = "create table " + testTable + " (k varchar primary key, v1 varchar)";
+ Statement stmt = conn.createStatement();
+ stmt.execute(ddl);
+ String indexName = "IDX_" + generateUniqueName();
+
+ ddl = "CREATE INDEX " + indexName + " ON " + testTable + " (v1) ";
+ stmt.execute(ddl);
+
+ conn.createStatement().execute("ALTER INDEX "+indexName+" ON " + testTable +" ACTIVE SET DISABLE_WAL=false");
+ asssertIsWALDisabled(conn,indexName,false);
+ conn.createStatement().execute("ALTER INDEX "+indexName+" ON " + testTable +" ACTIVE SET DISABLE_WAL=true");
+ asssertIsWALDisabled(conn,indexName,true);
+ }
+
+ private static void asssertIsWALDisabled(Connection conn, String fullTableName, boolean expectedValue) throws SQLException {
+ PhoenixConnection pconn = conn.unwrap(PhoenixConnection.class);
+ assertEquals(expectedValue, pconn.getTable(new PTableKey(pconn.getTenantId(), fullTableName)).isWALDisabled());
+ }
+
}
http://git-wip-us.apache.org/repos/asf/phoenix/blob/794d4283/phoenix-core/src/main/antlr3/PhoenixSQL.g
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/antlr3/PhoenixSQL.g b/phoenix-core/src/main/antlr3/PhoenixSQL.g
index 45acb88..c7971e5 100644
--- a/phoenix-core/src/main/antlr3/PhoenixSQL.g
+++ b/phoenix-core/src/main/antlr3/PhoenixSQL.g
@@ -574,8 +574,9 @@ drop_index_node returns [DropIndexStatement ret]
// Parse a alter index statement
alter_index_node returns [AlterIndexStatement ret]
- : ALTER INDEX (IF ex=EXISTS)? i=index_name ON t=from_table_name s=(USABLE | UNUSABLE | REBUILD | DISABLE | ACTIVE) (async=ASYNC)?
- {ret = factory.alterIndex(factory.namedTable(null, TableName.create(t.getSchemaName(), i.getName())), t.getTableName(), ex!=null, PIndexState.valueOf(SchemaUtil.normalizeIdentifier(s.getText())), async!=null); }
+ : ALTER INDEX (IF ex=EXISTS)? i=index_name ON t=from_table_name
+ ((s=(USABLE | UNUSABLE | REBUILD | DISABLE | ACTIVE)) (async=ASYNC)? ((SET?)p=fam_properties)?)
+ {ret = factory.alterIndex(factory.namedTable(null, TableName.create(t.getSchemaName(), i.getName())), t.getTableName(), ex!=null, PIndexState.valueOf(SchemaUtil.normalizeIdentifier(s.getText())), async!=null, p); }
;
// Parse a trace statement.
http://git-wip-us.apache.org/repos/asf/phoenix/blob/794d4283/phoenix-core/src/main/java/org/apache/phoenix/jdbc/PhoenixStatement.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/jdbc/PhoenixStatement.java b/phoenix-core/src/main/java/org/apache/phoenix/jdbc/PhoenixStatement.java
index 4ff243a..1fd15df 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/jdbc/PhoenixStatement.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/jdbc/PhoenixStatement.java
@@ -1180,8 +1180,8 @@ public class PhoenixStatement implements Statement, SQLCloseable {
private static class ExecutableAlterIndexStatement extends AlterIndexStatement implements CompilableStatement {
- public ExecutableAlterIndexStatement(NamedTableNode indexTableNode, String dataTableName, boolean ifExists, PIndexState state, boolean async) {
- super(indexTableNode, dataTableName, ifExists, state, async);
+ public ExecutableAlterIndexStatement(NamedTableNode indexTableNode, String dataTableName, boolean ifExists, PIndexState state, boolean async, ListMultimap<String,Pair<String,Object>> props) {
+ super(indexTableNode, dataTableName, ifExists, state, async, props);
}
@SuppressWarnings("unchecked")
@@ -1483,10 +1483,10 @@ public class PhoenixStatement implements Statement, SQLCloseable {
public DropIndexStatement dropIndex(NamedNode indexName, TableName tableName, boolean ifExists) {
return new ExecutableDropIndexStatement(indexName, tableName, ifExists);
}
-
+
@Override
- public AlterIndexStatement alterIndex(NamedTableNode indexTableNode, String dataTableName, boolean ifExists, PIndexState state, boolean async) {
- return new ExecutableAlterIndexStatement(indexTableNode, dataTableName, ifExists, state, async);
+ public AlterIndexStatement alterIndex(NamedTableNode indexTableNode, String dataTableName, boolean ifExists, PIndexState state, boolean async, ListMultimap<String,Pair<String,Object>> props) {
+ return new ExecutableAlterIndexStatement(indexTableNode, dataTableName, ifExists, state, async, props);
}
@Override
http://git-wip-us.apache.org/repos/asf/phoenix/blob/794d4283/phoenix-core/src/main/java/org/apache/phoenix/parse/AddColumnStatement.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/parse/AddColumnStatement.java b/phoenix-core/src/main/java/org/apache/phoenix/parse/AddColumnStatement.java
index 1890d31..678e560 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/parse/AddColumnStatement.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/parse/AddColumnStatement.java
@@ -48,4 +48,4 @@ public class AddColumnStatement extends AlterTableStatement {
public ListMultimap<String,Pair<String,Object>> getProps() {
return props;
}
-}
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/phoenix/blob/794d4283/phoenix-core/src/main/java/org/apache/phoenix/parse/AlterIndexStatement.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/parse/AlterIndexStatement.java b/phoenix-core/src/main/java/org/apache/phoenix/parse/AlterIndexStatement.java
index 11328c2..de04505 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/parse/AlterIndexStatement.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/parse/AlterIndexStatement.java
@@ -17,20 +17,31 @@
*/
package org.apache.phoenix.parse;
+import com.google.common.collect.ImmutableListMultimap;
+import com.google.common.collect.ListMultimap;
+import org.apache.hadoop.hbase.util.Pair;
import org.apache.phoenix.schema.PIndexState;
+import org.apache.phoenix.schema.PTableType;
public class AlterIndexStatement extends SingleTableStatement {
private final String dataTableName;
private final boolean ifExists;
private final PIndexState indexState;
private boolean async;
+ private ListMultimap<String,Pair<String,Object>> props;
+ private static final PTableType tableType=PTableType.INDEX;
public AlterIndexStatement(NamedTableNode indexTableNode, String dataTableName, boolean ifExists, PIndexState indexState, boolean async) {
+ this(indexTableNode,dataTableName,ifExists,indexState,async,null);
+ }
+
+ public AlterIndexStatement(NamedTableNode indexTableNode, String dataTableName, boolean ifExists, PIndexState indexState, boolean async, ListMultimap<String,Pair<String,Object>> props) {
super(indexTableNode,0);
this.dataTableName = dataTableName;
this.ifExists = ifExists;
this.indexState = indexState;
this.async = async;
+ this.props= props==null ? ImmutableListMultimap.<String,Pair<String,Object>>of() : props;
}
public String getTableName() {
@@ -54,4 +65,7 @@ public class AlterIndexStatement extends SingleTableStatement {
return async;
}
+ public ListMultimap<String,Pair<String,Object>> getProps() { return props; }
+
+ public PTableType getTableType(){ return tableType; }
}
http://git-wip-us.apache.org/repos/asf/phoenix/blob/794d4283/phoenix-core/src/main/java/org/apache/phoenix/parse/ParseNodeFactory.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/parse/ParseNodeFactory.java b/phoenix-core/src/main/java/org/apache/phoenix/parse/ParseNodeFactory.java
index 086b53c..13876eb 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/parse/ParseNodeFactory.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/parse/ParseNodeFactory.java
@@ -374,10 +374,10 @@ public class ParseNodeFactory {
return new DropIndexStatement(indexName, tableName, ifExists);
}
- public AlterIndexStatement alterIndex(NamedTableNode indexTableNode, String dataTableName, boolean ifExists, PIndexState state, boolean async) {
- return new AlterIndexStatement(indexTableNode, dataTableName, ifExists, state, async);
+ public AlterIndexStatement alterIndex(NamedTableNode indexTableNode, String dataTableName, boolean ifExists, PIndexState state, boolean async, ListMultimap<String,Pair<String,Object>> props) {
+ return new AlterIndexStatement(indexTableNode, dataTableName, ifExists, state, async, props);
}
-
+
public AlterIndexStatement alterIndex(NamedTableNode indexTableNode, String dataTableName, boolean ifExists, PIndexState state) {
return new AlterIndexStatement(indexTableNode, dataTableName, ifExists, state, false);
}
http://git-wip-us.apache.org/repos/asf/phoenix/blob/794d4283/phoenix-core/src/main/java/org/apache/phoenix/query/ConnectionQueryServices.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/query/ConnectionQueryServices.java b/phoenix-core/src/main/java/org/apache/phoenix/query/ConnectionQueryServices.java
index 45ab5fa..90f8089 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/query/ConnectionQueryServices.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/query/ConnectionQueryServices.java
@@ -86,6 +86,8 @@ public interface ConnectionQueryServices extends QueryServices, MetaDataMutated
public MetaDataMutationResult addColumn(List<Mutation> tableMetaData, PTable table, Map<String, List<Pair<String,Object>>> properties, Set<String> colFamiliesForPColumnsToBeAdded, List<PColumn> columns) throws SQLException;
public MetaDataMutationResult dropColumn(List<Mutation> tableMetadata, PTableType tableType) throws SQLException;
public MetaDataMutationResult updateIndexState(List<Mutation> tableMetadata, String parentTableName) throws SQLException;
+ public MetaDataMutationResult updateIndexState(List<Mutation> tableMetadata, String parentTableName, Map<String, List<Pair<String,Object>>> stmtProperties, PTable table) throws SQLException;
+
public MutationState updateData(MutationPlan plan) throws SQLException;
public void init(String url, Properties props) throws SQLException;
http://git-wip-us.apache.org/repos/asf/phoenix/blob/794d4283/phoenix-core/src/main/java/org/apache/phoenix/query/ConnectionQueryServicesImpl.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/query/ConnectionQueryServicesImpl.java b/phoenix-core/src/main/java/org/apache/phoenix/query/ConnectionQueryServicesImpl.java
index bc30161..5410d8c 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/query/ConnectionQueryServicesImpl.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/query/ConnectionQueryServicesImpl.java
@@ -3579,6 +3579,26 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement
}
@Override
+ public MetaDataMutationResult updateIndexState(final List<Mutation> tableMetaData, String parentTableName, Map<String, List<Pair<String,Object>>> stmtProperties, PTable table) throws SQLException {
+ if(stmtProperties==null) return updateIndexState(tableMetaData,parentTableName);
+
+ Map<String, Object> tableProps = new HashMap<String, Object>();
+ Pair<HTableDescriptor,HTableDescriptor> tableDescriptorPair = separateAndValidateProperties(table, stmtProperties, new HashSet<String>(), tableProps);
+ HTableDescriptor tableDescriptor = tableDescriptorPair.getSecond();
+ HTableDescriptor origTableDescriptor = tableDescriptorPair.getFirst();
+ Set<HTableDescriptor> tableDescriptors = Collections.emptySet();
+ Set<HTableDescriptor> origTableDescriptors = Collections.emptySet();
+ if (tableDescriptor != null) {
+ tableDescriptors = Sets.newHashSetWithExpectedSize(3 + table.getIndexes().size());
+ origTableDescriptors = Sets.newHashSetWithExpectedSize(3 + table.getIndexes().size());
+ tableDescriptors.add(tableDescriptor);
+ origTableDescriptors.add(origTableDescriptor);
+ }
+ sendHBaseMetaData(tableDescriptors, true);
+ return updateIndexState(tableMetaData,parentTableName);
+ }
+
+ @Override
public long createSequence(String tenantId, String schemaName, String sequenceName,
long startWith, long incrementBy, long cacheSize, long minValue, long maxValue,
boolean cycle, long timestamp) throws SQLException {
http://git-wip-us.apache.org/repos/asf/phoenix/blob/794d4283/phoenix-core/src/main/java/org/apache/phoenix/query/ConnectionlessQueryServicesImpl.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/query/ConnectionlessQueryServicesImpl.java b/phoenix-core/src/main/java/org/apache/phoenix/query/ConnectionlessQueryServicesImpl.java
index a7ff40e..4ffbb23 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/query/ConnectionlessQueryServicesImpl.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/query/ConnectionlessQueryServicesImpl.java
@@ -383,6 +383,13 @@ public class ConnectionlessQueryServicesImpl extends DelegateQueryServices imple
}
@Override
+ public MetaDataMutationResult updateIndexState(List<Mutation> tableMetadata,
+ String parentTableName, Map<String, List<Pair<String, Object>>> stmtProperties,
+ PTable table) throws SQLException {
+ return updateIndexState(tableMetadata,parentTableName);
+ }
+
+ @Override
public HTableDescriptor getTableDescriptor(byte[] tableName) throws SQLException {
return null;
}
http://git-wip-us.apache.org/repos/asf/phoenix/blob/794d4283/phoenix-core/src/main/java/org/apache/phoenix/query/DelegateConnectionQueryServices.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/query/DelegateConnectionQueryServices.java b/phoenix-core/src/main/java/org/apache/phoenix/query/DelegateConnectionQueryServices.java
index 1750414..dbab9e0 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/query/DelegateConnectionQueryServices.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/query/DelegateConnectionQueryServices.java
@@ -135,7 +135,13 @@ public class DelegateConnectionQueryServices extends DelegateQueryServices imple
public MetaDataMutationResult updateIndexState(List<Mutation> tableMetadata, String parentTableName) throws SQLException {
return getDelegate().updateIndexState(tableMetadata, parentTableName);
}
-
+
+ @Override public MetaDataMutationResult updateIndexState(List<Mutation> tableMetadata,
+ String parentTableName, Map<String, List<Pair<String, Object>>> stmtProperties,
+ PTable table) throws SQLException {
+ return getDelegate().updateIndexState(tableMetadata, parentTableName, stmtProperties,table);
+ }
+
@Override
public void init(String url, Properties props) throws SQLException {
getDelegate().init(url, props);
http://git-wip-us.apache.org/repos/asf/phoenix/blob/794d4283/phoenix-core/src/main/java/org/apache/phoenix/schema/MetaDataClient.java
----------------------------------------------------------------------
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 88b9cac..07d4000 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
@@ -3000,6 +3000,21 @@ public class MetaDataClient {
return mutationCode;
}
+ private long incrementTableSeqNum(PTable table, PTableType expectedType, int columnCountDelta, MetaPropertiesEvaluated metaPropertiesEvaluated)
+ throws SQLException {
+ return incrementTableSeqNum(table, expectedType, columnCountDelta,
+ metaPropertiesEvaluated.getIsTransactional(),
+ metaPropertiesEvaluated.getUpdateCacheFrequency(),
+ metaPropertiesEvaluated.getIsImmutableRows(),
+ metaPropertiesEvaluated.getDisableWAL(),
+ metaPropertiesEvaluated.getMultiTenant(),
+ metaPropertiesEvaluated.getStoreNulls(),
+ metaPropertiesEvaluated.getGuidePostWidth(),
+ metaPropertiesEvaluated.getAppendOnlySchema(),
+ metaPropertiesEvaluated.getImmutableStorageScheme(),
+ metaPropertiesEvaluated.getUseStatsForParallelization());
+ }
+
private long incrementTableSeqNum(PTable table, PTableType expectedType, int columnCountDelta, Boolean isTransactional, Long updateCacheFrequency) throws SQLException {
return incrementTableSeqNum(table, expectedType, columnCountDelta, isTransactional, updateCacheFrequency, null, null, null, null, -1L, null, null, null);
}
@@ -3131,18 +3146,7 @@ public class MetaDataClient {
PName tenantId = connection.getTenantId();
String schemaName = table.getSchemaName().getString();
String tableName = table.getTableName().getString();
- Boolean isImmutableRowsProp = null;
- Boolean multiTenantProp = null;
- Boolean disableWALProp = null;
- Boolean storeNullsProp = null;
- Boolean isTransactionalProp = null;
- Long updateCacheFrequencyProp = null;
- Boolean appendOnlySchemaProp = null;
- Long guidePostWidth = -1L;
- ImmutableStorageScheme immutableStorageSchemeProp = null;
- Boolean useStatsForParallelizationProp = null;
-
- Map<String, List<Pair<String, Object>>> properties = new HashMap<>(stmtProperties.size());
+
List<ColumnDef> columnDefs = null;
if (table.isAppendOnlySchema()) {
// only make the rpc if we are adding new columns
@@ -3178,48 +3182,14 @@ public class MetaDataClient {
else {
columnDefs = origColumnDefs == null ? Collections.<ColumnDef>emptyList() : origColumnDefs;
}
- for (String family : stmtProperties.keySet()) {
- List<Pair<String, Object>> origPropsList = stmtProperties.get(family);
- List<Pair<String, Object>> propsList = Lists.newArrayListWithExpectedSize(origPropsList.size());
- for (Pair<String, Object> prop : origPropsList) {
- String propName = prop.getFirst();
- if (TableProperty.isPhoenixTableProperty(propName)) {
- TableProperty tableProp = TableProperty.valueOf(propName);
- tableProp.validate(true, !family.equals(QueryConstants.ALL_FAMILY_PROPERTIES_KEY), table.getType());
- Object value = tableProp.getValue(prop.getSecond());
- if (propName.equals(PTable.IS_IMMUTABLE_ROWS_PROP_NAME)) {
- isImmutableRowsProp = (Boolean)value;
- } else if (propName.equals(PhoenixDatabaseMetaData.MULTI_TENANT)) {
- multiTenantProp = (Boolean)value;
- } else if (propName.equals(DISABLE_WAL)) {
- disableWALProp = (Boolean)value;
- } else if (propName.equals(STORE_NULLS)) {
- storeNullsProp = (Boolean)value;
- } else if (propName.equals(TRANSACTIONAL)) {
- isTransactionalProp = (Boolean)value;
- } else if (propName.equals(UPDATE_CACHE_FREQUENCY)) {
- updateCacheFrequencyProp = (Long)value;
- } else if (propName.equals(GUIDE_POSTS_WIDTH)) {
- guidePostWidth = (Long)value;
- } else if (propName.equals(APPEND_ONLY_SCHEMA)) {
- appendOnlySchemaProp = (Boolean) value;
- } else if (propName.equalsIgnoreCase(IMMUTABLE_STORAGE_SCHEME)) {
- immutableStorageSchemeProp = (ImmutableStorageScheme)value;
- } else if (propName.equalsIgnoreCase(USE_STATS_FOR_PARALLELIZATION)) {
- useStatsForParallelizationProp = (Boolean)value;
- }
- }
- // if removeTableProps is true only add the property if it is not a HTable or Phoenix Table property
- if (!removeTableProps || (!TableProperty.isPhoenixTableProperty(propName) && !MetaDataUtil.isHTableProperty(propName))) {
- propsList.add(prop);
- }
- }
- properties.put(family, propsList);
- }
+
boolean retried = false;
boolean changingPhoenixTableProperty = false;
- boolean nonTxToTx = false;
+ MetaProperties metaProperties = new MetaProperties();
while (true) {
+ Map<String, List<Pair<String, Object>>> properties=new HashMap<>(stmtProperties.size());;
+ metaProperties = loadStmtProperties(stmtProperties,properties,table,removeTableProps);
+
ColumnResolver resolver = FromCompiler.getResolver(namedTableNode, connection);
table = resolver.getTables().get(0).getTable();
int nIndexes = table.getIndexes().size();
@@ -3246,108 +3216,11 @@ public class MetaDataClient {
.setColumnName(lastPK.getName().getString()).build().buildException();
}
- Boolean isImmutableRows = null;
- if (isImmutableRowsProp != null) {
- if (isImmutableRowsProp.booleanValue() != table.isImmutableRows()) {
- if (table.getImmutableStorageScheme() != ImmutableStorageScheme.ONE_CELL_PER_COLUMN) {
- throw new SQLExceptionInfo.Builder(SQLExceptionCode.CANNOT_ALTER_IMMUTABLE_ROWS_PROPERTY)
- .setSchemaName(schemaName).setTableName(tableName).build().buildException();
- }
- isImmutableRows = isImmutableRowsProp;
- changingPhoenixTableProperty = true;
- }
- }
- Boolean multiTenant = null;
- if (multiTenantProp != null) {
- if (multiTenantProp.booleanValue() != table.isMultiTenant()) {
- multiTenant = multiTenantProp;
- changingPhoenixTableProperty = true;
- }
- }
- Boolean disableWAL = null;
- if (disableWALProp != null) {
- if (disableWALProp.booleanValue() != table.isWALDisabled()) {
- disableWAL = disableWALProp;
- changingPhoenixTableProperty = true;
- }
- }
- Long updateCacheFrequency = null;
- if (updateCacheFrequencyProp != null) {
- if (updateCacheFrequencyProp.longValue() != table.getUpdateCacheFrequency()) {
- updateCacheFrequency = updateCacheFrequencyProp;
- changingPhoenixTableProperty = true;
- }
- }
- Boolean appendOnlySchema = null;
- if (appendOnlySchemaProp !=null) {
- if (appendOnlySchemaProp != table.isAppendOnlySchema()) {
- appendOnlySchema = appendOnlySchemaProp;
- changingPhoenixTableProperty = true;
- }
- }
- ImmutableStorageScheme immutableStorageScheme = null;
- if (immutableStorageSchemeProp!=null) {
- if (table.getImmutableStorageScheme() == ONE_CELL_PER_COLUMN ||
- immutableStorageSchemeProp == ONE_CELL_PER_COLUMN) {
- throw new SQLExceptionInfo.Builder(SQLExceptionCode.INVALID_IMMUTABLE_STORAGE_SCHEME_CHANGE)
- .setSchemaName(schemaName).setTableName(tableName).build().buildException();
- }
- else if (immutableStorageSchemeProp != table.getImmutableStorageScheme()) {
- immutableStorageScheme = immutableStorageSchemeProp;
- changingPhoenixTableProperty = true;
- }
- }
-
- if (guidePostWidth == null || guidePostWidth >= 0) {
- changingPhoenixTableProperty = true;
- }
- Boolean storeNulls = null;
- if (storeNullsProp != null) {
- if (storeNullsProp.booleanValue() != table.getStoreNulls()) {
- storeNulls = storeNullsProp;
- changingPhoenixTableProperty = true;
- }
- }
- Boolean useStatsForParallelization = null;
- if (useStatsForParallelizationProp != null
- && (table.useStatsForParallelization() == null
- || (useStatsForParallelizationProp.booleanValue() != table
- .useStatsForParallelization()))) {
- useStatsForParallelization = useStatsForParallelizationProp;
- changingPhoenixTableProperty = true;
- }
- Boolean isTransactional = null;
- if (isTransactionalProp != null) {
- if (isTransactionalProp.booleanValue() != table.isTransactional()) {
- isTransactional = isTransactionalProp;
- // We can only go one way: from non transactional to transactional
- // Going the other way would require rewriting the cell timestamps
- // and doing a major compaction to get rid of any Tephra specific
- // delete markers.
- if (!isTransactional) {
- throw new SQLExceptionInfo.Builder(SQLExceptionCode.TX_MAY_NOT_SWITCH_TO_NON_TX)
- .setSchemaName(schemaName).setTableName(tableName).build().buildException();
- }
- // cannot create a transactional table if transactions are disabled
- boolean transactionsEnabled = connection.getQueryServices().getProps().getBoolean(
- QueryServices.TRANSACTIONS_ENABLED,
- QueryServicesOptions.DEFAULT_TRANSACTIONS_ENABLED);
- if (!transactionsEnabled) {
- throw new SQLExceptionInfo.Builder(SQLExceptionCode.CANNOT_ALTER_TO_BE_TXN_IF_TXNS_DISABLED)
- .setSchemaName(schemaName).setTableName(tableName).build().buildException();
- }
- // cannot make a table transactional if it has a row timestamp column
- if (SchemaUtil.hasRowTimestampColumn(table)) {
- throw new SQLExceptionInfo.Builder(SQLExceptionCode.CANNOT_ALTER_TO_BE_TXN_WITH_ROW_TIMESTAMP)
- .setSchemaName(schemaName).setTableName(tableName)
- .build().buildException();
- }
- changingPhoenixTableProperty = true;
- nonTxToTx = true;
- }
- }
- Long timeStamp = TransactionUtil.getTableTimestamp(connection, table.isTransactional() || nonTxToTx);
+ MetaPropertiesEvaluated metaPropertiesEvaluated = new MetaPropertiesEvaluated();
+ changingPhoenixTableProperty = evaluateStmtProperties(metaProperties,metaPropertiesEvaluated,table,schemaName,tableName);
+
+ Long timeStamp = TransactionUtil.getTableTimestamp(connection, table.isTransactional() || metaProperties.getNonTxToTx());
int numPkColumnsAdded = 0;
List<PColumn> columns = Lists.newArrayListWithExpectedSize(numCols);
Set<String> colFamiliesForPColumnsToBeAdded = new LinkedHashSet<>();
@@ -3464,7 +3337,7 @@ public class MetaDataClient {
// Check that HBase configured properly for mutable secondary indexing
// if we're changing from an immutable table to a mutable table and we
// have existing indexes.
- if (Boolean.FALSE.equals(isImmutableRows) && !table.getIndexes().isEmpty()) {
+ if (Boolean.FALSE.equals(metaPropertiesEvaluated.getIsImmutableRows()) && !table.getIndexes().isEmpty()) {
int hbaseVersion = connection.getQueryServices().getLowestClusterHBaseVersion();
if (hbaseVersion < PhoenixDatabaseMetaData.MUTABLE_SI_VERSION_THRESHOLD) {
throw new SQLExceptionInfo.Builder(SQLExceptionCode.NO_MUTABLE_INDEXES)
@@ -3475,22 +3348,22 @@ public class MetaDataClient {
.setSchemaName(schemaName).setTableName(tableName).build().buildException();
}
}
- if (Boolean.TRUE.equals(multiTenant)) {
- throwIfInsufficientColumns(schemaName, tableName, table.getPKColumns(), table.getBucketNum()!=null, multiTenant);
+ if (Boolean.TRUE.equals(metaPropertiesEvaluated.getMultiTenant())) {
+ throwIfInsufficientColumns(schemaName, tableName, table.getPKColumns(), table.getBucketNum()!=null, metaPropertiesEvaluated.getMultiTenant());
}
}
- if (!table.getIndexes().isEmpty() && (numPkColumnsAdded>0 || nonTxToTx)) {
+ if (!table.getIndexes().isEmpty() && (numPkColumnsAdded>0 || metaProperties.getNonTxToTx())) {
for (PTable index : table.getIndexes()) {
- incrementTableSeqNum(index, index.getType(), numPkColumnsAdded, nonTxToTx ? Boolean.TRUE : null, updateCacheFrequency);
+ incrementTableSeqNum(index, index.getType(), numPkColumnsAdded, metaProperties.getNonTxToTx() ? Boolean.TRUE : null, metaPropertiesEvaluated.getUpdateCacheFrequency());
}
tableMetaData.addAll(connection.getMutationState().toMutations(timeStamp).next().getSecond());
connection.rollback();
}
if (changingPhoenixTableProperty || columnDefs.size() > 0) {
- incrementTableSeqNum(table, tableType, columnDefs.size(), isTransactional, updateCacheFrequency, isImmutableRows,
- disableWAL, multiTenant, storeNulls, guidePostWidth, appendOnlySchema, immutableStorageScheme, useStatsForParallelization);
+ incrementTableSeqNum(table, tableType, columnDefs.size(), metaPropertiesEvaluated);
+
tableMetaData.addAll(connection.getMutationState().toMutations(timeStamp).next().getSecond());
connection.rollback();
}
@@ -3560,10 +3433,10 @@ public class MetaDataClient {
// We could update the cache manually then too, it'd just be a pain.
String fullTableName = SchemaUtil.getTableName(schemaName, tableName);
long resolvedTimeStamp = TransactionUtil.getResolvedTime(connection, result);
- if (table.getIndexes().isEmpty() || (numPkColumnsAdded==0 && !nonTxToTx)) {
+ if (table.getIndexes().isEmpty() || (numPkColumnsAdded==0 && ! metaProperties.getNonTxToTx())) {
connection.addTable(result.getTable(), resolvedTimeStamp);
table = result.getTable();
- } else if (updateCacheFrequency != null) {
+ } else if (metaPropertiesEvaluated.getUpdateCacheFrequency() != null) {
// Force removal from cache as the update cache frequency has changed
// Note that clients outside this JVM won't be affected.
connection.removeTable(tenantId, fullTableName, null, resolvedTimeStamp);
@@ -3571,7 +3444,7 @@ public class MetaDataClient {
// Delete rows in view index if we haven't dropped it already
// We only need to do this if the multiTenant transitioned to false
if (table.getType() == PTableType.TABLE
- && Boolean.FALSE.equals(multiTenant)
+ && Boolean.FALSE.equals(metaPropertiesEvaluated.getMultiTenant())
&& MetaDataUtil.hasViewIndexTable(connection, table.getPhysicalName())) {
connection.setAutoCommit(true);
MetaDataUtil.deleteViewIndexSequences(connection, table.getPhysicalName(), table.isNamespaceMapped());
@@ -3933,9 +3806,19 @@ public class MetaDataClient {
boolean wasAutoCommit = connection.getAutoCommit();
try {
String dataTableName = statement.getTableName();
- String schemaName = statement.getTable().getName().getSchemaName();
String indexName = statement.getTable().getName().getTableName();
boolean isAsync = statement.isAsync();
+ String tenantId = connection.getTenantId() == null ? null : connection.getTenantId().getString();
+ PTable table = FromCompiler.getResolver(statement, connection).getTables().get(0).getTable();
+ String schemaName = statement.getTable().getName().getSchemaName();
+ String tableName = table.getTableName().getString();
+
+ Map<String, List<Pair<String, Object>>> properties=new HashMap<>(statement.getProps().size());;
+ MetaProperties metaProperties = loadStmtProperties(statement.getProps(),properties,table,false);
+
+ MetaPropertiesEvaluated metaPropertiesEvaluated = new MetaPropertiesEvaluated();
+ boolean changingPhoenixTableProperty= evaluateStmtProperties(metaProperties,metaPropertiesEvaluated,table,schemaName,tableName);
+
PIndexState newIndexState = statement.getIndexState();
if (isAsync && newIndexState != PIndexState.REBUILD) { throw new SQLExceptionInfo.Builder(
SQLExceptionCode.ASYNC_NOT_ALLOWED)
@@ -3973,7 +3856,15 @@ public class MetaDataClient {
List<Mutation> tableMetadata = connection.getMutationState().toMutations(timeStamp).next().getSecond();
connection.rollback();
- MetaDataMutationResult result = connection.getQueryServices().updateIndexState(tableMetadata, dataTableName);
+
+ if (changingPhoenixTableProperty) {
+ incrementTableSeqNum(table,statement.getTableType(), 0, metaPropertiesEvaluated);
+ tableMetadata.addAll(connection.getMutationState().toMutations(timeStamp).next().getSecond());
+ connection.rollback();
+ }
+
+ MetaDataMutationResult result = connection.getQueryServices().updateIndexState(tableMetadata, dataTableName, properties, table);
+
MutationCode code = result.getMutationCode();
if (code == MutationCode.TABLE_NOT_FOUND) {
throw new TableNotFoundException(schemaName,indexName);
@@ -4169,4 +4060,351 @@ public class MetaDataClient {
}
return new MutationState(0, 0, connection);
}
+
+ private MetaProperties loadStmtProperties(ListMultimap<String, Pair<String, Object>> stmtProperties, Map<String, List<Pair<String, Object>>> properties, PTable table, boolean removeTableProps)
+ throws SQLException {
+ MetaProperties metaProperties = new MetaProperties();
+ for (String family : stmtProperties.keySet()) {
+ List<Pair<String, Object>> origPropsList = stmtProperties.get(family);
+ List<Pair<String, Object>> propsList = Lists.newArrayListWithExpectedSize(origPropsList.size());
+ for (Pair<String, Object> prop : origPropsList) {
+ String propName = prop.getFirst();
+ if (TableProperty.isPhoenixTableProperty(propName)) {
+ TableProperty tableProp = TableProperty.valueOf(propName);
+ tableProp.validate(true, !family.equals(QueryConstants.ALL_FAMILY_PROPERTIES_KEY), table.getType());
+ Object value = tableProp.getValue(prop.getSecond());
+ if (propName.equals(PTable.IS_IMMUTABLE_ROWS_PROP_NAME)) {
+ metaProperties.setImmutableRowsProp((Boolean)value);
+ } else if (propName.equals(PhoenixDatabaseMetaData.MULTI_TENANT)) {
+ metaProperties.setMultiTenantProp((Boolean)value);
+ } else if (propName.equals(DISABLE_WAL)) {
+ metaProperties.setDisableWALProp((Boolean)value);
+ } else if (propName.equals(STORE_NULLS)) {
+ metaProperties.setStoreNullsProp((Boolean)value);
+ } else if (propName.equals(TRANSACTIONAL)) {
+ metaProperties.setIsTransactionalProp((Boolean)value);
+ } else if (propName.equals(UPDATE_CACHE_FREQUENCY)) {
+ metaProperties.setUpdateCacheFrequencyProp((Long)value);
+ } else if (propName.equals(GUIDE_POSTS_WIDTH)) {
+ metaProperties.setGuidePostWidth((Long)value);
+ } else if (propName.equals(APPEND_ONLY_SCHEMA)) {
+ metaProperties.setAppendOnlySchemaProp((Boolean) value);
+ } else if (propName.equalsIgnoreCase(IMMUTABLE_STORAGE_SCHEME)) {
+ metaProperties.setImmutableStorageSchemeProp((ImmutableStorageScheme)value);
+ } else if (propName.equalsIgnoreCase(USE_STATS_FOR_PARALLELIZATION)) {
+ metaProperties.setUseStatsForParallelizationProp((Boolean)value);
+ }
+ }
+ // if removeTableProps is true only add the property if it is not a HTable or Phoenix Table property
+ if (!removeTableProps || (!TableProperty.isPhoenixTableProperty(propName) && !MetaDataUtil.isHTableProperty(propName))) {
+ propsList.add(prop);
+ }
+ }
+ properties.put(family, propsList);
+ }
+ return metaProperties;
+ }
+
+ private boolean evaluateStmtProperties(MetaProperties metaProperties, MetaPropertiesEvaluated metaPropertiesEvaluated, PTable table, String schemaName, String tableName)
+ throws SQLException {
+ boolean changingPhoenixTableProperty = false;
+
+ if (metaProperties.getImmutableRowsProp() != null) {
+ if (metaProperties.getImmutableRowsProp().booleanValue() != table.isImmutableRows()) {
+ if (table.getImmutableStorageScheme() != ImmutableStorageScheme.ONE_CELL_PER_COLUMN) {
+ throw new SQLExceptionInfo.Builder(SQLExceptionCode.CANNOT_ALTER_IMMUTABLE_ROWS_PROPERTY)
+ .setSchemaName(schemaName).setTableName(tableName).build().buildException();
+ }
+ metaPropertiesEvaluated.setIsImmutableRows(metaProperties.getImmutableRowsProp());
+ changingPhoenixTableProperty = true;
+ }
+ }
+
+ if (metaProperties.getMultiTenantProp() != null) {
+ if (metaProperties.getMultiTenantProp().booleanValue() != table.isMultiTenant()) {
+ metaPropertiesEvaluated.setMultiTenant(metaProperties.getMultiTenantProp());
+ changingPhoenixTableProperty = true;
+ }
+ }
+
+ if (metaProperties.getDisableWALProp() != null) {
+ if (metaProperties.getDisableWALProp().booleanValue() != table.isWALDisabled()) {
+ metaPropertiesEvaluated.setDisableWAL(metaProperties.getDisableWALProp());
+ changingPhoenixTableProperty = true;
+ }
+ }
+
+ if (metaProperties.getUpdateCacheFrequencyProp() != null) {
+ if (metaProperties.getUpdateCacheFrequencyProp().longValue() != table.getUpdateCacheFrequency()) {
+ metaPropertiesEvaluated.setUpdateCacheFrequency(metaProperties.getUpdateCacheFrequencyProp());
+ changingPhoenixTableProperty = true;
+ }
+ }
+
+ if (metaProperties.getAppendOnlySchemaProp() !=null) {
+ if (metaProperties.getAppendOnlySchemaProp() != table.isAppendOnlySchema()) {
+ metaPropertiesEvaluated.setAppendOnlySchema(metaProperties.getAppendOnlySchemaProp());
+ changingPhoenixTableProperty = true;
+ }
+ }
+
+ if (metaProperties.getImmutableStorageSchemeProp()!=null) {
+ if (table.getImmutableStorageScheme() == ONE_CELL_PER_COLUMN ||
+ metaProperties.getImmutableStorageSchemeProp() == ONE_CELL_PER_COLUMN) {
+ throw new SQLExceptionInfo.Builder(SQLExceptionCode.INVALID_IMMUTABLE_STORAGE_SCHEME_CHANGE)
+ .setSchemaName(schemaName).setTableName(tableName).build().buildException();
+ }
+ else if (metaProperties.getImmutableStorageSchemeProp() != table.getImmutableStorageScheme()) {
+ metaPropertiesEvaluated.setImmutableStorageScheme(metaProperties.getImmutableStorageSchemeProp());
+ changingPhoenixTableProperty = true;
+ }
+ }
+
+ if (metaProperties.getGuidePostWidth() == null || metaProperties.getGuidePostWidth() >= 0) {
+ metaPropertiesEvaluated.setGuidePostWidth(metaProperties.getGuidePostWidth());
+ changingPhoenixTableProperty = true;
+ }
+
+ if (metaProperties.getStoreNullsProp() != null) {
+ if (metaProperties.getStoreNullsProp().booleanValue() != table.getStoreNulls()) {
+ metaPropertiesEvaluated.setStoreNulls(metaProperties.getStoreNullsProp());
+ changingPhoenixTableProperty = true;
+ }
+ }
+
+ if (metaProperties.getUseStatsForParallelizationProp() != null
+ && (table.useStatsForParallelization() == null
+ || (metaProperties.getUseStatsForParallelizationProp().booleanValue() != table
+ .useStatsForParallelization()))) {
+ metaPropertiesEvaluated.setUseStatsForParallelization(metaProperties.getUseStatsForParallelizationProp());
+ changingPhoenixTableProperty = true;
+ }
+
+ if (metaProperties.getIsTransactionalProp() != null) {
+ if (metaProperties.getIsTransactionalProp().booleanValue() != table.isTransactional()) {
+ metaPropertiesEvaluated.setIsTransactional(metaProperties.getIsTransactionalProp());
+ // We can only go one way: from non transactional to transactional
+ // Going the other way would require rewriting the cell timestamps
+ // and doing a major compaction to get rid of any Tephra specific
+ // delete markers.
+ if (!metaPropertiesEvaluated.getIsTransactional()) {
+ throw new SQLExceptionInfo.Builder(SQLExceptionCode.TX_MAY_NOT_SWITCH_TO_NON_TX)
+ .setSchemaName(schemaName).setTableName(tableName).build().buildException();
+ }
+ // cannot create a transactional table if transactions are disabled
+ boolean transactionsEnabled = connection.getQueryServices().getProps().getBoolean(
+ QueryServices.TRANSACTIONS_ENABLED,
+ QueryServicesOptions.DEFAULT_TRANSACTIONS_ENABLED);
+ if (!transactionsEnabled) {
+ throw new SQLExceptionInfo.Builder(SQLExceptionCode.CANNOT_ALTER_TO_BE_TXN_IF_TXNS_DISABLED)
+ .setSchemaName(schemaName).setTableName(tableName).build().buildException();
+ }
+ // cannot make a table transactional if it has a row timestamp column
+ if (SchemaUtil.hasRowTimestampColumn(table)) {
+ throw new SQLExceptionInfo.Builder(SQLExceptionCode.CANNOT_ALTER_TO_BE_TXN_WITH_ROW_TIMESTAMP)
+ .setSchemaName(schemaName).setTableName(tableName)
+ .build().buildException();
+ }
+ changingPhoenixTableProperty = true;
+ metaProperties.setNonTxToTx(true);
+ }
+ }
+ return changingPhoenixTableProperty;
+ }
+
+ class MetaProperties{
+ private Boolean isImmutableRowsProp = null;
+ private Boolean multiTenantProp = null;
+ private Boolean disableWALProp = null;
+ private Boolean storeNullsProp = null;
+ private Boolean isTransactionalProp = null;
+ private Long updateCacheFrequencyProp = null;
+ private Boolean appendOnlySchemaProp = null;
+ private Long guidePostWidth = -1L;
+ private ImmutableStorageScheme immutableStorageSchemeProp = null;
+ private Boolean useStatsForParallelizationProp = null;
+ private boolean nonTxToTx = false;
+
+ public Boolean getImmutableRowsProp() {
+ return isImmutableRowsProp;
+ }
+
+ public void setImmutableRowsProp(Boolean isImmutableRowsProp) {
+ this.isImmutableRowsProp = isImmutableRowsProp;
+ }
+
+ public Boolean getMultiTenantProp() {
+ return multiTenantProp;
+ }
+
+ public void setMultiTenantProp(Boolean multiTenantProp) {
+ this.multiTenantProp = multiTenantProp;
+ }
+
+ public Boolean getDisableWALProp() {
+ return disableWALProp;
+ }
+
+ public void setDisableWALProp(Boolean disableWALProp) {
+ this.disableWALProp = disableWALProp;
+ }
+
+ public Boolean getStoreNullsProp() {
+ return storeNullsProp;
+ }
+
+ public void setStoreNullsProp(Boolean storeNullsProp) {
+ this.storeNullsProp = storeNullsProp;
+ }
+
+ public Boolean getIsTransactionalProp() {
+ return isTransactionalProp;
+ }
+
+ public void setIsTransactionalProp(Boolean isTransactionalProp) {
+ this.isTransactionalProp = isTransactionalProp;
+ }
+
+ public Long getUpdateCacheFrequencyProp() {
+ return updateCacheFrequencyProp;
+ }
+
+ public void setUpdateCacheFrequencyProp(Long updateCacheFrequencyProp) {
+ this.updateCacheFrequencyProp = updateCacheFrequencyProp;
+ }
+
+ public Boolean getAppendOnlySchemaProp() {
+ return appendOnlySchemaProp;
+ }
+
+ public void setAppendOnlySchemaProp(Boolean appendOnlySchemaProp) {
+ this.appendOnlySchemaProp = appendOnlySchemaProp;
+ }
+
+ public Long getGuidePostWidth() {
+ return guidePostWidth;
+ }
+
+ public void setGuidePostWidth(Long guidePostWidth) {
+ this.guidePostWidth = guidePostWidth;
+ }
+
+ public ImmutableStorageScheme getImmutableStorageSchemeProp() {
+ return immutableStorageSchemeProp;
+ }
+
+ public void setImmutableStorageSchemeProp(
+ ImmutableStorageScheme immutableStorageSchemeProp) {
+ this.immutableStorageSchemeProp = immutableStorageSchemeProp;
+ }
+
+ public Boolean getUseStatsForParallelizationProp() {
+ return useStatsForParallelizationProp;
+ }
+
+ public void setUseStatsForParallelizationProp(Boolean useStatsForParallelizationProp) {
+ this.useStatsForParallelizationProp = useStatsForParallelizationProp;
+ }
+
+ public boolean getNonTxToTx() {
+ return nonTxToTx;
+ }
+
+ public void setNonTxToTx(boolean nonTxToTx) {
+ this.nonTxToTx = nonTxToTx;
+ }
+ }
+
+ class MetaPropertiesEvaluated{
+ private Boolean isImmutableRows;
+ private Boolean multiTenant = null;
+ private Boolean disableWAL = null;
+ private Long updateCacheFrequency = null;
+ private Boolean appendOnlySchema = null;
+ private Long guidePostWidth = -1L;
+ private ImmutableStorageScheme immutableStorageScheme = null;
+ private Boolean storeNulls = null;
+ private Boolean useStatsForParallelization = null;
+ private Boolean isTransactional = null;
+
+ public Boolean getIsImmutableRows() {
+ return isImmutableRows;
+ }
+
+ public void setIsImmutableRows(Boolean isImmutableRows) {
+ this.isImmutableRows = isImmutableRows;
+ }
+
+ public Boolean getMultiTenant() {
+ return multiTenant;
+ }
+
+ public void setMultiTenant(Boolean multiTenant) {
+ this.multiTenant = multiTenant;
+ }
+
+ public Boolean getDisableWAL() {
+ return disableWAL;
+ }
+
+ public void setDisableWAL(Boolean disableWAL) {
+ this.disableWAL = disableWAL;
+ }
+
+ public Long getUpdateCacheFrequency() {
+ return updateCacheFrequency;
+ }
+
+ public void setUpdateCacheFrequency(Long updateCacheFrequency) {
+ this.updateCacheFrequency = updateCacheFrequency;
+ }
+
+ public Boolean getAppendOnlySchema() {
+ return appendOnlySchema;
+ }
+
+ public void setAppendOnlySchema(Boolean appendOnlySchema) {
+ this.appendOnlySchema = appendOnlySchema;
+ }
+
+ public Long getGuidePostWidth() {
+ return guidePostWidth;
+ }
+
+ public void setGuidePostWidth(Long guidePostWidth) {
+ this.guidePostWidth = guidePostWidth;
+ }
+
+ public ImmutableStorageScheme getImmutableStorageScheme() {
+ return immutableStorageScheme;
+ }
+
+ public void setImmutableStorageScheme(ImmutableStorageScheme immutableStorageScheme) {
+ this.immutableStorageScheme = immutableStorageScheme;
+ }
+
+ public Boolean getStoreNulls() {
+ return storeNulls;
+ }
+
+ public void setStoreNulls(Boolean storeNulls) {
+ this.storeNulls = storeNulls;
+ }
+
+ public Boolean getUseStatsForParallelization() {
+ return useStatsForParallelization;
+ }
+
+ public void setUseStatsForParallelization(Boolean useStatsForParallelization) {
+ this.useStatsForParallelization = useStatsForParallelization;
+ }
+
+ public Boolean getIsTransactional() {
+ return isTransactional;
+ }
+
+ public void setIsTransactional(Boolean isTransactional) {
+ this.isTransactional = isTransactional;
+ }
+ }
}