This is an automated email from the ASF dual-hosted git repository.
lokiore pushed a commit to branch PHOENIX-6978-feature
in repository https://gitbox.apache.org/repos/asf/phoenix.git
The following commit(s) were added to refs/heads/PHOENIX-6978-feature by this
push:
new 0dfa094a70 PHOENIX-7041 (ADDENDUM ): Populate ROW_KEY_PREFIX column
when creating views (#1821)
0dfa094a70 is described below
commit 0dfa094a7032cf353c01101c460bc2e19c854ab8
Author: Jacob Isaac <[email protected]>
AuthorDate: Fri Feb 16 11:34:07 2024 -0800
PHOENIX-7041 (ADDENDUM ): Populate ROW_KEY_PREFIX column when creating
views (#1821)
* Refactored ROW_KEY_PREFIX column name to ROW_KEY_MATCHER
---
...fixTestIT.java => BaseRowKeyMatcherTestIT.java} | 721 ++++++++++++---------
... LongViewIndexDisabledBaseRowKeyMatcherIT.java} | 26 +-
...> LongViewIndexEnabledBaseRowKeyMatcherIT.java} | 26 +-
.../phoenix/end2end/ReadOnlyViewOnReadOnlyIT.java | 3 +-
.../apache/phoenix/end2end/TTLAsPhoenixTTLIT.java | 7 +-
.../phoenix/compile/CreateTableCompiler.java | 14 +-
.../org/apache/phoenix/compile/WhereOptimizer.java | 40 +-
.../phoenix/coprocessor/MetaDataEndpointImpl.java | 23 +-
.../phoenix/jdbc/PhoenixDatabaseMetaData.java | 4 +-
.../phoenix/query/ConnectionQueryServicesImpl.java | 3 +-
.../org/apache/phoenix/query/QueryConstants.java | 4 +-
.../org/apache/phoenix/schema/DelegateTable.java | 4 +-
.../org/apache/phoenix/schema/MetaDataClient.java | 21 +-
.../java/org/apache/phoenix/schema/PTable.java | 2 +-
.../java/org/apache/phoenix/schema/PTableImpl.java | 30 +-
.../apache/phoenix/schema/transform/Transform.java | 2 +-
phoenix-core/src/main/protobuf/PTable.proto | 2 +-
17 files changed, 541 insertions(+), 391 deletions(-)
diff --git
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/prefix/BaseRowKeyPrefixTestIT.java
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/BaseRowKeyMatcherTestIT.java
similarity index 54%
rename from
phoenix-core/src/it/java/org/apache/phoenix/end2end/prefix/BaseRowKeyPrefixTestIT.java
rename to
phoenix-core/src/it/java/org/apache/phoenix/end2end/BaseRowKeyMatcherTestIT.java
index d66403cae6..76d4f5da41 100644
---
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/prefix/BaseRowKeyPrefixTestIT.java
+++
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/BaseRowKeyMatcherTestIT.java
@@ -16,7 +16,7 @@
* limitations under the License.
*/
-package org.apache.phoenix.end2end.prefix;
+package org.apache.phoenix.end2end;
import org.apache.commons.lang3.RandomStringUtils;
import org.apache.hadoop.hbase.CompareOperator;
@@ -40,7 +40,6 @@ import org.apache.phoenix.compile.FromCompiler;
import org.apache.phoenix.compile.StatementContext;
import org.apache.phoenix.compile.WhereOptimizer;
import org.apache.phoenix.coprocessor.TableInfo;
-import org.apache.phoenix.end2end.ParallelStatsDisabledIT;
import org.apache.phoenix.expression.Expression;
import org.apache.phoenix.expression.RowKeyColumnExpression;
import org.apache.phoenix.jdbc.PhoenixConnection;
@@ -72,7 +71,6 @@ import org.apache.phoenix.util.PhoenixRuntime;
import org.apache.phoenix.util.PropertiesUtil;
import org.apache.phoenix.util.SchemaUtil;
import org.apache.phoenix.util.ViewUtil;
-import org.junit.Ignore;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -104,9 +102,9 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
-public abstract class BaseRowKeyPrefixTestIT extends ParallelStatsDisabledIT {
+public abstract class BaseRowKeyMatcherTestIT extends ParallelStatsDisabledIT {
- private static final Logger LOGGER =
LoggerFactory.getLogger(BaseRowKeyPrefixTestIT.class);
+ private static final Logger LOGGER =
LoggerFactory.getLogger(BaseRowKeyMatcherTestIT.class);
public static final String TENANT_URL_FMT = "%s;%s=%s";
public static final String ORG_ID_PREFIX = "00D0x0000";
@@ -126,34 +124,33 @@ public abstract class BaseRowKeyPrefixTestIT extends
ParallelStatsDisabledIT {
public static final Random RANDOM_GEN = new Random();
public static final int MAX_ROWS = 10000;
-
// Returns the String form of the data type
private String getType(PDataType pkType) {
String pkTypeStr = "VARCHAR(25)";
switch (pkType.getSqlType()) {
- case Types.VARCHAR:
- pkTypeStr = "VARCHAR(25)";
- break;
- case Types.CHAR:
- pkTypeStr = "CHAR(15)";
- break;
- case Types.DECIMAL:
- pkTypeStr = "DECIMAL(8,2)";
- break;
- case Types.INTEGER:
- pkTypeStr = "INTEGER";
- break;
- case Types.BIGINT:
- pkTypeStr = "BIGINT";
- break;
- case Types.DATE:
- pkTypeStr = "DATE";
- break;
- case Types.TIMESTAMP:
- pkTypeStr = "TIMESTAMP";
- break;
- default:
- pkTypeStr = "VARCHAR(25)";
+ case Types.VARCHAR:
+ pkTypeStr = "VARCHAR(25)";
+ break;
+ case Types.CHAR:
+ pkTypeStr = "CHAR(15)";
+ break;
+ case Types.DECIMAL:
+ pkTypeStr = "DECIMAL(8,2)";
+ break;
+ case Types.INTEGER:
+ pkTypeStr = "INTEGER";
+ break;
+ case Types.BIGINT:
+ pkTypeStr = "BIGINT";
+ break;
+ case Types.DATE:
+ pkTypeStr = "DATE";
+ break;
+ case Types.TIMESTAMP:
+ pkTypeStr = "TIMESTAMP";
+ break;
+ default:
+ pkTypeStr = "VARCHAR(25)";
}
return pkTypeStr;
}
@@ -192,35 +189,35 @@ public abstract class BaseRowKeyPrefixTestIT extends
ParallelStatsDisabledIT {
private Object getPKData(String testPKTypes) {
Random rnd = new Random();
switch (testPKTypes) {
- case "VARCHAR": {
- return RandomStringUtils.randomAlphanumeric(25);
- }
- case "CHAR(15)": {
- //pkTypeStr = "CHAR(15)";
- return RandomStringUtils.randomAlphanumeric(15);
- }
- case "CHAR(3)": {
- //pkTypeStr = "CHAR(3)";
- return RandomStringUtils.randomAlphanumeric(3);
- }
- case "DECIMAL":
- //pkTypeStr = "DECIMAL(8,2)";
- return Math.floor(rnd.nextInt(50000) * rnd.nextDouble());
- case "INTEGER":
- //pkTypeStr = "INTEGER";
- return rnd.nextInt(50000);
- case "BIGINT":
- //pkTypeStr = "BIGINT";
- return rnd.nextInt(50000);
- case "DATE":
- //pkTypeStr = "DATE";
- return new Date(System.currentTimeMillis() +
rnd.nextInt(50000));
- case "TIMESTAMP":
- //pkTypeStr = "TIMESTAMP";
- return new Timestamp(System.currentTimeMillis() +
rnd.nextInt(50000));
- default:
- // pkTypeStr = "VARCHAR(25)";
- return RandomStringUtils.randomAlphanumeric(25);
+ case "VARCHAR": {
+ return RandomStringUtils.randomAlphanumeric(25);
+ }
+ case "CHAR(15)": {
+ //pkTypeStr = "CHAR(15)";
+ return RandomStringUtils.randomAlphanumeric(15);
+ }
+ case "CHAR(3)": {
+ //pkTypeStr = "CHAR(3)";
+ return RandomStringUtils.randomAlphanumeric(3);
+ }
+ case "DECIMAL":
+ //pkTypeStr = "DECIMAL(8,2)";
+ return Math.floor(rnd.nextInt(50000) * rnd.nextDouble());
+ case "INTEGER":
+ //pkTypeStr = "INTEGER";
+ return rnd.nextInt(50000);
+ case "BIGINT":
+ //pkTypeStr = "BIGINT";
+ return rnd.nextInt(50000);
+ case "DATE":
+ //pkTypeStr = "DATE";
+ return new Date(System.currentTimeMillis() + rnd.nextInt(50000));
+ case "TIMESTAMP":
+ //pkTypeStr = "TIMESTAMP";
+ return new Timestamp(System.currentTimeMillis() +
rnd.nextInt(50000));
+ default:
+ // pkTypeStr = "VARCHAR(25)";
+ return RandomStringUtils.randomAlphanumeric(25);
}
}
@@ -231,19 +228,24 @@ public abstract class BaseRowKeyPrefixTestIT extends
ParallelStatsDisabledIT {
try (Connection globalConnection =
DriverManager.getConnection(getUrl())) {
try (Statement cstmt = globalConnection.createStatement()) {
- String CO_BASE_TBL_TEMPLATE = "CREATE TABLE IF NOT EXISTS
%s(OID CHAR(15) NOT NULL,KP CHAR(3) NOT NULL, COL1 VARCHAR,CREATED_DATE
DATE,CREATED_BY CHAR(15),LAST_UPDATE DATE,LAST_UPDATE_BY
CHAR(15),SYSTEM_MODSTAMP DATE CONSTRAINT pk PRIMARY KEY (OID,KP))
COLUMN_ENCODED_BYTES=0 %s";
- cstmt.execute(String.format(CO_BASE_TBL_TEMPLATE,
baseTableName, isMultiTenant ? ", MULTI_TENANT=true" : ""));
+ String
+ CO_BASE_TBL_TEMPLATE =
+ "CREATE TABLE IF NOT EXISTS %s(" +
+ "OID CHAR(15) NOT NULL,KP CHAR(3) NOT NULL, " +
+ "COL1 VARCHAR,CREATED_DATE DATE,CREATED_BY
CHAR(15)," +
+ "LAST_UPDATE DATE,LAST_UPDATE_BY
CHAR(15),SYSTEM_MODSTAMP DATE " +
+ "CONSTRAINT pk PRIMARY KEY (OID,KP))
COLUMN_ENCODED_BYTES=0 %s";
+ cstmt.execute(String.format(CO_BASE_TBL_TEMPLATE,
baseTableName,
+ isMultiTenant ? ", MULTI_TENANT=true" : ""));
}
}
}
// Helper method to create a global view
- // Return a pair [view-key, row-prefix for the view]
- private Pair<String, byte[]> createGlobalView(String tableName,
- int partition,
- PDataType[] pkTypes,
- SortOrder[] pkOrders,
- boolean hasGlobalViewIndexes) throws SQLException {
+ // Return a pair [view-key, row-key-matcher for the view]
+ private Pair<String, byte[]> createGlobalView(String tableName, int
partition,
+ PDataType[] pkTypes, SortOrder[] pkOrders, boolean
hasGlobalViewIndexes)
+ throws SQLException {
String pkType1Str = getType(pkTypes[0]);
String pkType2Str = getType(pkTypes[1]);
@@ -252,71 +254,77 @@ public abstract class BaseRowKeyPrefixTestIT extends
ParallelStatsDisabledIT {
String baseTableName = String.format(BASE_TABLE_NAME_FMT, tableName);
String partitionName = String.format(PARTITION_FMT, partition);
String globalViewName = String.format(GLOBAL_VIEW_NAME_FMT,
partitionName);
- try (PhoenixConnection globalConnection =
DriverManager.getConnection(getUrl()).unwrap(PhoenixConnection.class)) {
+ try (PhoenixConnection globalConnection =
DriverManager.getConnection(getUrl())
+ .unwrap(PhoenixConnection.class)) {
try (Statement cstmt = globalConnection.createStatement()) {
- String VIEW_TEMPLATE = "CREATE VIEW IF NOT EXISTS %s(ID1 %s
not null,ID2 %s not null,ID3 %s not null, ROW_ID CHAR(15) not null, COL2
VARCHAR " +
- "CONSTRAINT pk PRIMARY KEY (ID1 %s, ID2 %s, ID3 %s,
ROW_ID)) " +
- "AS SELECT * FROM %s WHERE KP = '%s'";
-
- cstmt.execute(String.format(VIEW_TEMPLATE, globalViewName,
pkType1Str, pkType2Str, pkType3Str,
-
pkOrders[0].name(),pkOrders[1].name(),pkOrders[2].name(), baseTableName,
partitionName));
+ String
+ VIEW_TEMPLATE =
+ "CREATE VIEW IF NOT EXISTS %s(" +
+ "ID1 %s not null,ID2 %s not null,ID3 %s not
null, " +
+ "ROW_ID CHAR(15) not null, COL2 VARCHAR " +
+ "CONSTRAINT pk PRIMARY KEY (ID1 %s, ID2 %s,
ID3 %s, ROW_ID)) " +
+ "AS SELECT * FROM %s WHERE KP = '%s'";
+
+ cstmt.execute(String.format(VIEW_TEMPLATE, globalViewName,
pkType1Str, pkType2Str,
+ pkType3Str, pkOrders[0].name(), pkOrders[1].name(),
pkOrders[2].name(),
+ baseTableName, partitionName));
if (hasGlobalViewIndexes) {
String indexNamePrefix = String.format("G%s", partition);
- String GLOBAL_INDEX_TEMPLATE = "CREATE INDEX IF NOT EXISTS
%s_COL2_INDEX ON %s (COL2) INCLUDE(SYSTEM_MODSTAMP)";
- cstmt.execute(String.format(GLOBAL_INDEX_TEMPLATE,
indexNamePrefix, globalViewName));
+ String
+ GLOBAL_INDEX_TEMPLATE =
+ "CREATE INDEX IF NOT EXISTS %s_COL2_INDEX ON %s
(COL2) " +
+ "INCLUDE(SYSTEM_MODSTAMP)";
+ cstmt.execute(
+ String.format(GLOBAL_INDEX_TEMPLATE,
indexNamePrefix, globalViewName));
}
- return
getRowKeyPrefixesFromView(globalConnection.unwrap(PhoenixConnection.class),
globalViewName);
+ return
getRowKeyMatchersFromView(globalConnection.unwrap(PhoenixConnection.class),
+ globalViewName);
}
}
}
// Helper method to create a tenant view
- // Return a pair [view-key, row-prefix for the view]
+ // Return a pair [view-key, row-key-matcher for the view]
- private Pair<String, byte[]> createTenantView(
- boolean extendPK,
- int partition,
- int tenant,
- int tenantViewNum,
- String[] pkNames,
- PDataType[] pkTypes) throws SQLException {
+ private Pair<String, byte[]> createTenantView(boolean extendPK, int
partition, int tenant,
+ int tenantViewNum, String[] pkNames, PDataType[] pkTypes) throws
SQLException {
String partitionName = String.format(PARTITION_FMT, partition);
String globalViewName = String.format(GLOBAL_VIEW_NAME_FMT,
partitionName);
String tenantId = String.format(ORG_ID_FMT, ORG_ID_PREFIX, tenant);
- String tenantConnectionUrl = String.format(TENANT_URL_FMT, getUrl(),
TENANT_ID_ATTRIB, tenantId);
+ String
+ tenantConnectionUrl =
+ String.format(TENANT_URL_FMT, getUrl(), TENANT_ID_ATTRIB,
tenantId);
String tenantViewName = String.format(TENANT_VIEW_NAME_FMT,
partitionName, tenantViewNum);
- //String tenantViewOptions = (partition % 2 != 0) ?
String.format("TTL=%d", new Random().nextInt(300)) : "";
String tenantViewOptions = "";
try (Connection tenantConnection =
DriverManager.getConnection(tenantConnectionUrl)) {
tenantConnection.setAutoCommit(true);
try (Statement cstmt = tenantConnection.createStatement()) {
- String VIEW_WITH_PK_TEMPLATE = "CREATE VIEW IF NOT EXISTS
%s(ZID CHAR(15) NOT NULL,COL3 VARCHAR CONSTRAINT pk PRIMARY KEY (ZID)) " +
- "AS SELECT * FROM %s %s %s";
+ String
+ VIEW_WITH_PK_TEMPLATE =
+ "CREATE VIEW IF NOT EXISTS %s(ZID CHAR(15) NOT
NULL,COL3 VARCHAR " +
+ "CONSTRAINT pk PRIMARY KEY (ZID)) " + "AS
SELECT * FROM %s %s %s";
String VIEW_WO_PK_TEMPLATE = "CREATE VIEW IF NOT EXISTS %s AS
SELECT * from %s %s";
if (extendPK) {
- cstmt.execute(String.format(VIEW_WITH_PK_TEMPLATE,
tenantViewName, globalViewName, getWhereClause(pkNames, pkTypes),
tenantViewOptions));
+ cstmt.execute(
+ String.format(VIEW_WITH_PK_TEMPLATE,
tenantViewName, globalViewName,
+ getWhereClause(pkNames, pkTypes),
tenantViewOptions));
} else {
- cstmt.execute(String.format(VIEW_WO_PK_TEMPLATE,
tenantViewName, globalViewName, tenantViewOptions));
+ cstmt.execute(String.format(VIEW_WO_PK_TEMPLATE,
tenantViewName, globalViewName,
+ tenantViewOptions));
}
- return
getRowKeyPrefixesFromView(tenantConnection.unwrap(PhoenixConnection.class),
tenantViewName);
+ return
getRowKeyMatchersFromView(tenantConnection.unwrap(PhoenixConnection.class),
+ tenantViewName);
}
}
}
// Helper method to create rows for a given tenant view
- private void upsertTenantViewRows(
- boolean isMultiTenant,
- boolean extendPK,
- int partition,
- int tenant,
- int tenantViewNum,
- int rowIndex,
- String[] pkNames,
- PDataType[] pkTypes
- ) throws SQLException {
+ private void upsertTenantViewRows(boolean isMultiTenant, boolean extendPK,
int partition,
+ int tenant, int tenantViewNum, int rowIndex, String[] pkNames,
PDataType[] pkTypes)
+ throws SQLException {
String rid = String.format(ROW_ID_FMT, rowIndex);
String zid = String.format(ZID_FMT, rowIndex);
@@ -330,19 +338,44 @@ public abstract class BaseRowKeyPrefixTestIT extends
ParallelStatsDisabledIT {
String partitionName = String.format(PARTITION_FMT, partition);
String tenantId = String.format(ORG_ID_FMT, ORG_ID_PREFIX, tenant);
- String tenantConnectionUrl = String.format(TENANT_URL_FMT, getUrl(),
TENANT_ID_ATTRIB, tenantId);
+ String
+ tenantConnectionUrl =
+ String.format(TENANT_URL_FMT, getUrl(), TENANT_ID_ATTRIB,
tenantId);
String tenantViewName = String.format(TENANT_VIEW_NAME_FMT,
partitionName, tenantViewNum);
- try (PhoenixConnection tenantConnection =
DriverManager.getConnection(tenantConnectionUrl).unwrap(PhoenixConnection.class))
{
+ try (PhoenixConnection tenantConnection =
DriverManager.getConnection(tenantConnectionUrl)
+ .unwrap(PhoenixConnection.class)) {
tenantConnection.setAutoCommit(true);
- String TENANT_VIEW_WITH_PK = String.format("UPSERT INTO %s(ROW_ID,
ZID, COL1, COL2, COL3, SYSTEM_MODSTAMP) VALUES(?, ?, ?, ?, ?, ?)",
tenantViewName);
- String TENANT_VIEW_WO_PK = String.format("UPSERT INTO %s(ID1, ID2,
ID3, ROW_ID, COL1, COL2, SYSTEM_MODSTAMP) VALUES(?, ?, ?, ?, ?, ?, ?)",
tenantViewName);
- String NON_MULTI_TENANT_VIEW_WO_PK = String.format("UPSERT INTO
%s(OID, ID1, ID2, ID3, ROW_ID, COL1, COL2, SYSTEM_MODSTAMP) VALUES(?, ?, ?, ?,
?, ?, ?, ?)", tenantViewName);
- String NON_MULTI_TENANT_VIEW_WITH_PK = String.format("UPSERT INTO
%s(OID, ROW_ID, ZID, COL1, COL2, COL3, SYSTEM_MODSTAMP) VALUES(?, ?, ?, ?, ?,
?, ?)", tenantViewName);
+ String
+ TENANT_VIEW_WITH_PK =
+ String.format(
+ "UPSERT INTO %s(ROW_ID, ZID, COL1, COL2, COL3,
SYSTEM_MODSTAMP) " +
+ "VALUES(?, ?, ?, ?, ?, ?)",
+ tenantViewName);
+ String
+ TENANT_VIEW_WO_PK =
+ String.format(
+ "UPSERT INTO %s(ID1, ID2, ID3, ROW_ID, COL1, COL2,
SYSTEM_MODSTAMP) " +
+ "VALUES(?, ?, ?, ?, ?, ?, ?)",
+ tenantViewName);
+ String
+ NON_MULTI_TENANT_VIEW_WO_PK =
+ String.format(
+ "UPSERT INTO %s(OID, ID1, ID2, ID3, ROW_ID, COL1,
COL2, " +
+ "SYSTEM_MODSTAMP) " +
+ "VALUES(?, ?, ?, ?, ?, ?, ?, ?)",
+ tenantViewName);
+ String
+ NON_MULTI_TENANT_VIEW_WITH_PK =
+ String.format(
+ "UPSERT INTO %s(OID, ROW_ID, ZID, COL1, COL2,
COL3, SYSTEM_MODSTAMP) " +
+ "VALUES(?, ?, ?, ?, ?, ?, ?)",
+ tenantViewName);
if (isMultiTenant) {
if (extendPK) {
// Case: MultiTenant and ExtendedPK
- try (PreparedStatement pstmt =
tenantConnection.prepareStatement(TENANT_VIEW_WITH_PK)) {
+ try (PreparedStatement pstmt =
tenantConnection.prepareStatement(
+ TENANT_VIEW_WITH_PK)) {
pstmt.setObject(1, rid);
pstmt.setObject(2, zid);
pstmt.setObject(3, col1);
@@ -356,7 +389,8 @@ public abstract class BaseRowKeyPrefixTestIT extends
ParallelStatsDisabledIT {
pk1 = getData(pkTypes[0]);
pk2 = getData(pkTypes[1]);
pk3 = getData(pkTypes[2]);
- try (PreparedStatement pstmt =
tenantConnection.prepareStatement(TENANT_VIEW_WO_PK)) {
+ try (PreparedStatement pstmt =
tenantConnection.prepareStatement(
+ TENANT_VIEW_WO_PK)) {
pstmt.setObject(1, pk1);
pstmt.setObject(2, pk2);
pstmt.setObject(3, pk3);
@@ -371,7 +405,8 @@ public abstract class BaseRowKeyPrefixTestIT extends
ParallelStatsDisabledIT {
} else {
if (extendPK) {
// Case: Non MultiTenant and ExtendedPK
- try (PreparedStatement pstmt =
tenantConnection.prepareStatement(NON_MULTI_TENANT_VIEW_WITH_PK)) {
+ try (PreparedStatement pstmt =
tenantConnection.prepareStatement(
+ NON_MULTI_TENANT_VIEW_WITH_PK)) {
pstmt.setObject(1, tenantId);
pstmt.setObject(2, rid);
pstmt.setObject(3, zid);
@@ -386,7 +421,8 @@ public abstract class BaseRowKeyPrefixTestIT extends
ParallelStatsDisabledIT {
pk1 = getData(pkTypes[0]);
pk2 = getData(pkTypes[1]);
pk3 = getData(pkTypes[2]);
- try (PreparedStatement pstmt =
tenantConnection.prepareStatement(NON_MULTI_TENANT_VIEW_WO_PK)) {
+ try (PreparedStatement pstmt =
tenantConnection.prepareStatement(
+ NON_MULTI_TENANT_VIEW_WO_PK)) {
pstmt.setObject(1, tenantId);
pstmt.setObject(2, pk1);
pstmt.setObject(3, pk2);
@@ -401,50 +437,48 @@ public abstract class BaseRowKeyPrefixTestIT extends
ParallelStatsDisabledIT {
}
- }
- finally {
- LOGGER.debug(String.format("Upsert values " +
- "tenantId = %s, pk1 = %s, pk2 = %s, pk3 = %s, rid = %s,
col1 = %s, col2 = %s",
- tenantId,
- pk1,
- pk2,
- pk3,
- rid,
- col1,
- col2));
+ } finally {
+ LOGGER.debug(String.format(
+ "Upsert values " +
+ "tenantId = %s, pk1 = %s, pk2 = %s, pk3 = %s, " +
+ "rid = %s, col1 = %s, col2 = %s",
+ tenantId, pk1, pk2, pk3, rid, col1, col2));
}
}
- // Helper to get rowKeyPrefix from Metadata.
- private Pair<String, byte[]> getRowKeyPrefixesFromView(PhoenixConnection
connection, String viewName)
- throws SQLException {
+ // Helper to get rowKeyMatcher from Metadata.
+ private Pair<String, byte[]> getRowKeyMatchersFromView(PhoenixConnection
connection,
+ String viewName) throws SQLException {
PName tenantId = connection.getTenantId();
PTable view = PhoenixRuntime.getTable(connection, viewName);
String tenantViewKey = String.format("%s.%s", tenantId, viewName);
- byte[] rowkeyPrefix = view.getRowKeyPrefix();
- return new Pair(tenantViewKey, rowkeyPrefix);
+ byte[] rowKeyMatcher = view.getRowKeyMatcher();
+ return new Pair(tenantViewKey, rowKeyMatcher);
}
- // Helper to get rowKeyPrefix from Metadata.
- private Pair<String, byte[]> getRowKeyPrefixesFromView(PhoenixConnection
connection, PTable view)
- throws SQLException {
- return getRowKeyPrefixesFromView(connection,
view.getName().getString());
- }
+ // Helper to get rowKeyMatcher from Metadata.
+ private Pair<String, byte[]> getRowKeyMatchersFromView(PhoenixConnection
connection,
+ PTable view) throws SQLException {
+ return getRowKeyMatchersFromView(connection,
view.getName().getString());
+ }
- // Helper to assert that row prefix generated by the 2 WhereOptimizer
methods are the same
- private byte[] assertRowKeyPrefixForView(PhoenixConnection connection,
PTable view, Pair<String, byte[]> rowKeyInfo)
- throws SQLException {
+ // Helper to assert that row key matcher generated by the 2 WhereOptimizer
methods are the same
+ private byte[] assertRowKeyMatcherForView(PhoenixConnection connection,
PTable view,
+ Pair<String, byte[]> rowKeyInfo) throws SQLException {
String viewStatement = view.getViewStatement();
SelectStatement viewSelectStatement = new
SQLParser(viewStatement).parseQuery();
- PhoenixPreparedStatement preparedViewStatement =
+ PhoenixPreparedStatement
+ preparedViewStatement =
connection.prepareStatement(viewStatement).unwrap(PhoenixPreparedStatement.class);
ColumnResolver resolver =
FromCompiler.getResolverForQuery(viewSelectStatement, connection);
- StatementContext viewStatementContext = new
StatementContext(preparedViewStatement, resolver);
+ StatementContext
+ viewStatementContext =
+ new StatementContext(preparedViewStatement, resolver);
PTable viewStatementTable =
viewStatementContext.getCurrentTable().getTable();
@@ -452,58 +486,87 @@ public abstract class BaseRowKeyPrefixTestIT extends
ParallelStatsDisabledIT {
BitSet isViewColumnReferencedToBe = new BitSet(nColumns);
// Used to track column references in a view
ExpressionCompiler
- expressionCompiler = new
CreateTableCompiler.ColumnTrackingExpressionCompiler(viewStatementContext,
isViewColumnReferencedToBe);
+ expressionCompiler =
+ new
CreateTableCompiler.ColumnTrackingExpressionCompiler(viewStatementContext,
+ isViewColumnReferencedToBe);
ParseNode whereNode = viewSelectStatement.getWhere();
Expression whereExpression = whereNode.accept(expressionCompiler);
-
byte[][] viewColumnConstantsToBe = new byte[nColumns][];
CreateTableCompiler.ViewWhereExpressionVisitor
- visitor = new
CreateTableCompiler.ViewWhereExpressionVisitor(viewStatementTable,
viewColumnConstantsToBe);
+ visitor =
+ new
CreateTableCompiler.ViewWhereExpressionVisitor(viewStatementTable,
+ viewColumnConstantsToBe);
whereExpression.accept(visitor);
- TableName tableName =
TableName.createNormalized(view.getSchemaName().getString(),
view.getTableName().getString());
- byte[] rowKeyPrefix1 =
WhereOptimizer.getRowKeyPrefix(viewStatementContext, tableName,
viewStatementTable, whereExpression);
- byte[] rowKeyPrefix2 = WhereOptimizer.getRowKeyPrefix(connection,
tableName, viewStatementTable, viewColumnConstantsToBe,
isViewColumnReferencedToBe);
- LOGGER.debug(String.format("target-view-name = %s, physical = %s,
stmt-table = %s\n, row-prefix-0 = %s (syscat)\n, row-prefix-1 = %s\n,
row-prefix-2 = %s\n",
- view.getName().getString(),
- viewStatementTable.getPhysicalName().getString(),
+ TableName
+ tableName =
+ TableName.createNormalized(view.getSchemaName().getString(),
+ view.getTableName().getString());
+ byte[]
+ rowKeyMatcher1 =
+ WhereOptimizer.getRowKeyMatcher(viewStatementContext,
tableName, viewStatementTable,
+ whereExpression);
+ byte[]
+ rowKeyMatcher2 =
+ WhereOptimizer.getRowKeyMatcher(connection, tableName,
viewStatementTable,
+ viewColumnConstantsToBe, isViewColumnReferencedToBe);
+ LOGGER.debug(String.format(
+ "target-view-name = %s, physical = %s, stmt-table = %s\n, " +
+ "row-matcher-0 = %s (syscat)\n, row-matcher-1 = %s\n,
row-matcher-2 = %s\n",
+ view.getName().getString(),
viewStatementTable.getPhysicalName().getString(),
viewStatementTable.getName().getString(),
- Bytes.toStringBinary(rowKeyInfo.getSecond()),
- Bytes.toStringBinary(rowKeyPrefix1),
- Bytes.toStringBinary(rowKeyPrefix2)
- ));
- assertTrue("RowKey Prefixes do not match",
Bytes.compareTo(rowKeyInfo.getSecond(), rowKeyPrefix1) == 0);
- assertTrue("RowKey Prefixes do not match",
Bytes.compareTo(rowKeyInfo.getSecond(), rowKeyPrefix2) == 0);
- return rowKeyPrefix1;
+ Bytes.toStringBinary(rowKeyInfo.getSecond()),
Bytes.toStringBinary(rowKeyMatcher1),
+ Bytes.toStringBinary(rowKeyMatcher2)));
+ assertTrue("RowKey matcher pattern do not match",
+ Bytes.compareTo(rowKeyInfo.getSecond(), rowKeyMatcher1) == 0);
+ assertTrue("RowKey matcher patterns do not match",
+ Bytes.compareTo(rowKeyInfo.getSecond(), rowKeyMatcher2) == 0);
+ return rowKeyMatcher1;
}
- // Helper method to return the row prefixes for the whole view hierarchy
under the table.
- private Map<String, byte[]> assertRowKeyPrefixesForTable(String url,
String parentSchemaName, String parentTableName) {
+ // Helper method to return the row-key matcher patterns
+ // for the whole view hierarchy under the table.
+ private Map<String, byte[]> assertRowKeyMatchersForTable(String url,
String parentSchemaName,
+ String parentTableName) {
Map<String, byte[]> viewToRowKeyMap = Maps.newHashMap();
Properties tenantProps = PropertiesUtil.deepCopy(new Properties());
try (Connection globalConnection = DriverManager.getConnection(url)) {
- ConnectionQueryServices cqs =
globalConnection.unwrap(PhoenixConnection.class).getQueryServices();
- try (Table childLinkTable =
cqs.getTable(SchemaUtil.getPhysicalName(
- SYSTEM_LINK_HBASE_TABLE_NAME.toBytes(),
cqs.getProps()).getName())) {
- Pair<List<PTable>, List<TableInfo>> allDescendants =
+ ConnectionQueryServices
+ cqs =
+
globalConnection.unwrap(PhoenixConnection.class).getQueryServices();
+ try (Table childLinkTable = cqs.getTable(
+
SchemaUtil.getPhysicalName(SYSTEM_LINK_HBASE_TABLE_NAME.toBytes(),
+ cqs.getProps()).getName())) {
+ Pair<List<PTable>, List<TableInfo>>
+ allDescendants =
ViewUtil.findAllDescendantViews(childLinkTable,
cqs.getConfiguration(),
EMPTY_BYTE_ARRAY, parentSchemaName.getBytes(),
- parentTableName.getBytes(),
HConstants.LATEST_TIMESTAMP, false);
+ parentTableName.getBytes(),
+ HConstants.LATEST_TIMESTAMP, false);
for (PTable view : allDescendants.getFirst()) {
PName tenantId = view.getTenantId();
String viewName = view.getName().getString();
- Connection stmtConnection = tenantId == null?
- globalConnection : DriverManager.getConnection(
- String.format("%s;%s=%s", url, TENANT_ID_ATTRIB,
tenantId.getString()), tenantProps);
-
- Pair<String, byte[]> rowKeyInfo =
getRowKeyPrefixesFromView(stmtConnection.unwrap(PhoenixConnection.class), view);
-
assertRowKeyPrefixForView(stmtConnection.unwrap(PhoenixConnection.class), view,
rowKeyInfo);
+ Connection
+ stmtConnection =
+ tenantId == null ?
+ globalConnection :
+ DriverManager.getConnection(
+ String.format("%s;%s=%s", url,
TENANT_ID_ATTRIB,
+ tenantId.getString()),
tenantProps);
+
+ Pair<String, byte[]>
+ rowKeyInfo =
+ getRowKeyMatchersFromView(
+
stmtConnection.unwrap(PhoenixConnection.class), view);
+
assertRowKeyMatcherForView(stmtConnection.unwrap(PhoenixConnection.class), view,
+ rowKeyInfo);
viewToRowKeyMap.put(rowKeyInfo.getFirst(),
rowKeyInfo.getSecond());
}
- };
+ }
+ ;
} catch (SQLException | IOException e) {
throw new RuntimeException(e);
}
@@ -516,53 +579,55 @@ public abstract class BaseRowKeyPrefixTestIT extends
ParallelStatsDisabledIT {
StringBuilder builder = new StringBuilder("WHERE ");
Random rnd = new Random();
- for (int b=0;b<testPKTypes.length;b++) {
- if (b>0) builder.append(" AND ");
+ for (int b = 0; b < testPKTypes.length; b++) {
+ if (b > 0) builder.append(" AND ");
switch (testPKTypes[b].getSqlType()) {
- case Types.VARCHAR: {
- // pkTypeStr = "VARCHAR(25)";
- builder.append(pkNames[b]).append(" = ").append("'")
-
.append(RandomStringUtils.randomAlphanumeric(25)).append("'");
- break;
- }
- case Types.CHAR: {
- //pkTypeStr = "CHAR(15)";
- builder.append(pkNames[b]).append(" = ").append("'")
-
.append(RandomStringUtils.randomAlphanumeric(15)).append("'");
- break;
- }
- case Types.DECIMAL:
- //pkTypeStr = "DECIMAL(8,2)";
- builder.append(pkNames[b]).append(" =
").append(rnd.nextDouble());
- break;
- case Types.INTEGER:
- //pkTypeStr = "INTEGER";
- builder.append(pkNames[b]).append(" =
").append(rnd.nextInt(500000));
- break;
- case Types.BIGINT:
- //pkTypeStr = "BIGINT";
- builder.append(pkNames[b]).append(" =
").append(rnd.nextLong());
- break;
- case Types.DATE:
- //pkTypeStr = "DATE";
- builder.append(pkNames[b]).append(" = ").append("
TO_DATE('2022-03-21T15:03:57+00:00') ");
- break;
- case Types.TIMESTAMP:
- //pkTypeStr = "TIMESTAMP";
- builder.append(pkNames[b]).append(" = ").append("
TO_TIMESTAMP('2019-10-27T16:17:57+00:00') ");
- break;
- default:
- // pkTypeStr = "VARCHAR(25)";
- builder.append(pkNames[b]).append("=").append("'")
-
.append(RandomStringUtils.randomAlphanumeric(15)).append("'");
+ case Types.VARCHAR: {
+ // pkTypeStr = "VARCHAR(25)";
+ builder.append(pkNames[b]).append(" = ").append("'")
+
.append(RandomStringUtils.randomAlphanumeric(25)).append("'");
+ break;
+ }
+ case Types.CHAR: {
+ //pkTypeStr = "CHAR(15)";
+ builder.append(pkNames[b]).append(" = ").append("'")
+
.append(RandomStringUtils.randomAlphanumeric(15)).append("'");
+ break;
+ }
+ case Types.DECIMAL:
+ //pkTypeStr = "DECIMAL(8,2)";
+ builder.append(pkNames[b]).append(" =
").append(rnd.nextDouble());
+ break;
+ case Types.INTEGER:
+ //pkTypeStr = "INTEGER";
+ builder.append(pkNames[b]).append(" =
").append(rnd.nextInt(500000));
+ break;
+ case Types.BIGINT:
+ //pkTypeStr = "BIGINT";
+ builder.append(pkNames[b]).append(" =
").append(rnd.nextLong());
+ break;
+ case Types.DATE:
+ //pkTypeStr = "DATE";
+ builder.append(pkNames[b]).append(" = ")
+ .append(" TO_DATE('2022-03-21T15:03:57+00:00') ");
+ break;
+ case Types.TIMESTAMP:
+ //pkTypeStr = "TIMESTAMP";
+ builder.append(pkNames[b]).append(" = ")
+ .append(" TO_TIMESTAMP('2019-10-27T16:17:57+00:00') ");
+ break;
+ default:
+ // pkTypeStr = "VARCHAR(25)";
+ builder.append(pkNames[b]).append("=").append("'")
+
.append(RandomStringUtils.randomAlphanumeric(15)).append("'");
}
}
return builder.toString();
}
// Asserts that the row matched by the rowId and tenantId matches the
prefix
- private void assertHBaseRowKeyMatchesPrefix(PhoenixConnection connection,
byte[] hbaseTableName, int rowId, byte[] prefix)
- throws IOException, SQLException {
+ private void assertHBaseRowKeyMatchesPrefix(PhoenixConnection connection,
byte[] hbaseTableName,
+ int rowId, byte[] prefix) throws IOException, SQLException {
byte[] rowkey = ByteUtil.EMPTY_BYTE_ARRAY;
String rid = String.format(ROW_ID_FMT, rowId);
@@ -589,29 +654,26 @@ public abstract class BaseRowKeyPrefixTestIT extends
ParallelStatsDisabledIT {
PrefixFilter matchFilter = new PrefixFilter(prefix);
LOGGER.debug(String.format("row-key = %s, tenantId = %s, prefix =
%s, matched = %s",
- Bytes.toStringBinary(rowkey),
- tenantId,
- Bytes.toStringBinary(prefix),
+ Bytes.toStringBinary(rowkey), tenantId,
Bytes.toStringBinary(prefix),
!matchFilter.filterRowKey(KeyValueUtil.createFirstOnRow(rowkey))));
}
}
-
// Asserts that the row matching the tenantId and rowId matches with the
viewIndexId
- private void assertIndexTableRowKeyMatchesPrefix(PhoenixConnection
connection, PTable viewIndex, byte[] hbaseIndexTableName, int rowId)
- throws IOException, SQLException {
+ private void assertIndexTableRowKeyMatchesPrefix(PhoenixConnection
connection, PTable viewIndex,
+ byte[] hbaseIndexTableName, int rowId) throws IOException,
SQLException {
byte[] rowkey = ByteUtil.EMPTY_BYTE_ARRAY;
String rid = String.format(ROW_ID_FMT, rowId);
-
try (Table tbl =
connection.getQueryServices().getTable(hbaseIndexTableName)) {
PName tenantId = connection.getTenantId();
Scan allRows = new Scan();
FilterList andFilter = new FilterList();
if (tenantId != null) {
- andFilter.addFilter(new RowFilter(CompareOperator.EQUAL, new
SubstringComparator(tenantId.getString())));
+ andFilter.addFilter(new RowFilter(CompareOperator.EQUAL,
+ new SubstringComparator(tenantId.getString())));
}
andFilter.addFilter(new RowFilter(CompareOperator.EQUAL, new
SubstringComparator(rid)));
allRows.setFilter(andFilter);
@@ -620,23 +682,29 @@ public abstract class BaseRowKeyPrefixTestIT extends
ParallelStatsDisabledIT {
for (Result result = scanner.next(); result != null; result =
scanner.next()) {
PColumn viewIndexIdPKColumn = viewIndex.getPKColumns().get(0);
RowKeyColumnExpression
- viewIndexIdColExpr = new
RowKeyColumnExpression(viewIndexIdPKColumn, new
RowKeyValueAccessor(viewIndex.getPKColumns(), 0));
+ viewIndexIdColExpr =
+ new RowKeyColumnExpression(viewIndexIdPKColumn,
+ new
RowKeyValueAccessor(viewIndex.getPKColumns(), 0));
ImmutableBytesWritable ptr = new ImmutableBytesWritable();
viewIndexIdColExpr.evaluate(new ResultTuple(result), ptr);
long actualViewIndexID;
if (hasLongViewIndexEnabled()) {
actualViewIndexID =
PLong.INSTANCE.getCodec().decodeLong(ptr, SortOrder.ASC);
} else {
- actualViewIndexID =
PSmallint.INSTANCE.getCodec().decodeShort(ptr, SortOrder.ASC);
+ actualViewIndexID =
+ PSmallint.INSTANCE.getCodec().decodeShort(ptr,
SortOrder.ASC);
}
- assertTrue("ViewIndexId's not match",
viewIndex.getViewIndexId() == actualViewIndexID);
+ assertTrue("ViewIndexId's not match",
+ viewIndex.getViewIndexId() == actualViewIndexID);
rowkey = result.getRow();
numMatchingRows++;
}
- assertEquals(String.format("Expected rows do match for index table
= %s, row-key = %s, rowId = %s",
- Bytes.toString(hbaseIndexTableName),
Bytes.toStringBinary(rowkey), rowId),
- 1, numMatchingRows);
+ assertEquals(String.format(
+ "Expected rows do match for index table = %s,
row-key = %s, rowId = %s",
+ Bytes.toString(hbaseIndexTableName),
+ Bytes.toStringBinary(rowkey), rowId), 1,
+ numMatchingRows);
}
}
@@ -644,16 +712,16 @@ public abstract class BaseRowKeyPrefixTestIT extends
ParallelStatsDisabledIT {
protected abstract boolean hasLongViewIndexEnabled();
private SortOrder[][] getSortOrders() {
- SortOrder[][] sortOrders = new SortOrder[][] {
- {SortOrder.ASC, SortOrder.ASC, SortOrder.ASC},
- {SortOrder.ASC, SortOrder.ASC, SortOrder.DESC},
- {SortOrder.ASC, SortOrder.DESC, SortOrder.ASC},
- {SortOrder.ASC, SortOrder.DESC, SortOrder.DESC},
- {SortOrder.DESC, SortOrder.ASC, SortOrder.ASC},
- {SortOrder.DESC, SortOrder.ASC, SortOrder.DESC},
- {SortOrder.DESC, SortOrder.DESC, SortOrder.ASC},
- {SortOrder.DESC, SortOrder.DESC, SortOrder.DESC}
- };
+ SortOrder[][]
+ sortOrders =
+ new SortOrder[][] { { SortOrder.ASC, SortOrder.ASC,
SortOrder.ASC },
+ { SortOrder.ASC, SortOrder.ASC, SortOrder.DESC },
+ { SortOrder.ASC, SortOrder.DESC, SortOrder.ASC },
+ { SortOrder.ASC, SortOrder.DESC, SortOrder.DESC },
+ { SortOrder.DESC, SortOrder.ASC, SortOrder.ASC },
+ { SortOrder.DESC, SortOrder.ASC, SortOrder.DESC },
+ { SortOrder.DESC, SortOrder.DESC, SortOrder.ASC },
+ { SortOrder.DESC, SortOrder.DESC, SortOrder.DESC } };
return sortOrders;
}
@@ -661,21 +729,22 @@ public abstract class BaseRowKeyPrefixTestIT extends
ParallelStatsDisabledIT {
List<PDataType[]> testCases = new ArrayList<>();
// Test Case 1: PK1 = Integer, PK2 = Integer, PK3 = Integer
- testCases.add(new PDataType[] { PInteger.INSTANCE, PInteger.INSTANCE,
PInteger.INSTANCE});
+ testCases.add(new PDataType[] { PInteger.INSTANCE, PInteger.INSTANCE,
PInteger.INSTANCE });
// Test Case 2: PK1 = Long, PK2 = Long, PK3 = Long
- testCases.add(new PDataType[] {PLong.INSTANCE, PLong.INSTANCE,
PLong.INSTANCE});
+ testCases.add(new PDataType[] { PLong.INSTANCE, PLong.INSTANCE,
PLong.INSTANCE });
// Test Case 3: PK1 = Timestamp, PK2 = Timestamp, PK3 = Timestamp
- testCases.add(new PDataType[] { PTimestamp.INSTANCE,
PTimestamp.INSTANCE, PTimestamp.INSTANCE});
+ testCases.add(
+ new PDataType[] { PTimestamp.INSTANCE, PTimestamp.INSTANCE,
PTimestamp.INSTANCE });
// Test Case 4: PK1 = Char, PK2 = Char, PK3 = Char
- testCases.add(new PDataType[] {PChar.INSTANCE, PChar.INSTANCE,
PChar.INSTANCE});
+ testCases.add(new PDataType[] { PChar.INSTANCE, PChar.INSTANCE,
PChar.INSTANCE });
// Test Case 5: PK1 = Decimal, PK2 = Decimal, PK3 = Integer
// last PK cannot be of variable length when creating a view on top of
it
- testCases.add(new PDataType[] { PDecimal.INSTANCE, PDecimal.INSTANCE,
PInteger.INSTANCE});
+ testCases.add(new PDataType[] { PDecimal.INSTANCE, PDecimal.INSTANCE,
PInteger.INSTANCE });
// Test Case 6: PK1 = Date, PK2 = Date, PK3 = Date
- testCases.add(new PDataType[] { PDate.INSTANCE, PDate.INSTANCE,
PDate.INSTANCE});
+ testCases.add(new PDataType[] { PDate.INSTANCE, PDate.INSTANCE,
PDate.INSTANCE });
// Test Case 7: PK1 = Varchar, PK2 = Varchar, PK3 = Integer
// last PK cannot be of variable length when creating a view on top of
it
- testCases.add(new PDataType[] {PVarchar.INSTANCE, PVarchar.INSTANCE,
PInteger.INSTANCE});
+ testCases.add(new PDataType[] { PVarchar.INSTANCE, PVarchar.INSTANCE,
PInteger.INSTANCE });
return testCases;
}
@@ -687,15 +756,16 @@ public abstract class BaseRowKeyPrefixTestIT extends
ParallelStatsDisabledIT {
SortOrder[][] sortOrders = getSortOrders();
String tableName = "";
- tableName = createViewHierarchy(testCases, sortOrders,
500,5000,3,true, true, false);
- assertRowKeyPrefixesForTable(
- getUrl(),
- SchemaUtil.getSchemaNameFromFullName(tableName),
+ tableName = createViewHierarchy(
+ testCases, sortOrders, 500, 5000, 3,
+ true, true, false);
+ assertRowKeyMatchersForTable(getUrl(),
SchemaUtil.getSchemaNameFromFullName(tableName),
SchemaUtil.getTableNameFromFullName(tableName));
- tableName = createViewHierarchy(testCases, sortOrders,
600,6000,3,false, true, false);
- assertRowKeyPrefixesForTable(
- getUrl(),
- SchemaUtil.getSchemaNameFromFullName(tableName),
+ tableName =
+ createViewHierarchy(
+ testCases, sortOrders, 600, 6000, 3,
+ false, true, false);
+ assertRowKeyMatchersForTable(getUrl(),
SchemaUtil.getSchemaNameFromFullName(tableName),
SchemaUtil.getTableNameFromFullName(tableName));
} catch (Exception e) {
@@ -710,29 +780,31 @@ public abstract class BaseRowKeyPrefixTestIT extends
ParallelStatsDisabledIT {
List<PDataType[]> testCases = getTestCases();
SortOrder[][] sortOrders = getSortOrders();
String tableName = "";
- tableName = createViewHierarchy(testCases, sortOrders,
100,1000,3,true, false, false);
- assertRowKeyPrefixesForTable(
- getUrl(),
- SchemaUtil.getSchemaNameFromFullName(tableName),
+ tableName =
+ createViewHierarchy(
+ testCases, sortOrders, 100, 1000, 3,
+ true, false, false);
+ assertRowKeyMatchersForTable(getUrl(),
SchemaUtil.getSchemaNameFromFullName(tableName),
SchemaUtil.getTableNameFromFullName(tableName));
- tableName = createViewHierarchy(testCases, sortOrders,
200,2000,3,false, false, false);
- assertRowKeyPrefixesForTable(
- getUrl(),
- SchemaUtil.getSchemaNameFromFullName(tableName),
+ tableName =
+ createViewHierarchy(
+ testCases, sortOrders, 200, 2000, 3,
+ false, false, false);
+ assertRowKeyMatchersForTable(getUrl(),
SchemaUtil.getSchemaNameFromFullName(tableName),
SchemaUtil.getTableNameFromFullName(tableName));
- tableName = createViewHierarchy(testCases, sortOrders,
300,3000,3,true, false, true);
- assertRowKeyPrefixesForTable(
- getUrl(),
- SchemaUtil.getSchemaNameFromFullName(tableName),
+ tableName = createViewHierarchy(
+ testCases, sortOrders, 300, 3000, 3,
+ true, false, true);
+ assertRowKeyMatchersForTable(getUrl(),
SchemaUtil.getSchemaNameFromFullName(tableName),
SchemaUtil.getTableNameFromFullName(tableName));
- tableName = createViewHierarchy(testCases, sortOrders,
400,4000,3,false, false, true);
- assertRowKeyPrefixesForTable(
- getUrl(),
- SchemaUtil.getSchemaNameFromFullName(tableName),
+ tableName =
+ createViewHierarchy(
+ testCases, sortOrders, 400, 4000, 3,
+ false, false, true);
+ assertRowKeyMatchersForTable(getUrl(),
SchemaUtil.getSchemaNameFromFullName(tableName),
SchemaUtil.getTableNameFromFullName(tableName));
-
} catch (Exception e) {
e.printStackTrace();
LOGGER.error(e.getMessage());
@@ -745,12 +817,15 @@ public abstract class BaseRowKeyPrefixTestIT extends
ParallelStatsDisabledIT {
try {
List<PDataType[]> testCases = new ArrayList<>();
// Test Case 1: PK1 = Integer, PK2 = Integer, PK3 = Integer
- testCases.add(new PDataType[] {PInteger.INSTANCE,
PInteger.INSTANCE, PInteger.INSTANCE});
-
- SortOrder[][] sortOrders = new SortOrder[][] {
- {SortOrder.ASC, SortOrder.ASC, SortOrder.ASC}
- };
- createViewHierarchy(testCases, sortOrders, 900,9000,3,false, true,
true);
+ testCases.add(
+ new PDataType[] { PInteger.INSTANCE, PInteger.INSTANCE,
PInteger.INSTANCE });
+
+ SortOrder[][]
+ sortOrders =
+ new SortOrder[][] { { SortOrder.ASC, SortOrder.ASC,
SortOrder.ASC } };
+ createViewHierarchy(
+ testCases, sortOrders, 900, 9000, 3,
+ false, true, true);
fail();
} catch (SQLException sqle) {
assertEquals(VIEW_CANNOT_EXTEND_PK_WITH_PARENT_INDEXES.getErrorCode(),
@@ -766,16 +841,17 @@ public abstract class BaseRowKeyPrefixTestIT extends
ParallelStatsDisabledIT {
try {
List<PDataType[]> testCases = new ArrayList<>();
// Test Case 1: PK1 = Integer, PK2 = Integer, PK3 = Integer
- testCases.add(new PDataType[] {PInteger.INSTANCE,
PInteger.INSTANCE, PInteger.INSTANCE});
+ testCases.add(
+ new PDataType[] { PInteger.INSTANCE, PInteger.INSTANCE,
PInteger.INSTANCE });
- SortOrder[][] sortOrders = new SortOrder[][] {
- {SortOrder.ASC, SortOrder.ASC, SortOrder.ASC}
- };
+ SortOrder[][]
+ sortOrders =
+ new SortOrder[][] { { SortOrder.ASC, SortOrder.ASC,
SortOrder.ASC } };
String tableName = "";
- tableName = createViewHierarchy(testCases, sortOrders,
910,9100,3,true, true, true);
- assertRowKeyPrefixesForTable(
- getUrl(),
- SchemaUtil.getSchemaNameFromFullName(tableName),
+ tableName = createViewHierarchy(
+ testCases, sortOrders, 910, 9100, 3,
+ true, true, true);
+ assertRowKeyMatchersForTable(getUrl(),
SchemaUtil.getSchemaNameFromFullName(tableName),
SchemaUtil.getTableNameFromFullName(tableName));
fail();
} catch (SQLException sqle) {
@@ -787,7 +863,9 @@ public abstract class BaseRowKeyPrefixTestIT extends
ParallelStatsDisabledIT {
}
- private String createViewHierarchy(List<PDataType[]> testCases,
SortOrder[][] sortOrders, int startPartition, int startRowId, int numTenants,
boolean isMultiTenant, boolean extendPK, boolean hasGlobalViewIndexes) throws
Exception {
+ private String createViewHierarchy(List<PDataType[]> testCases,
SortOrder[][] sortOrders,
+ int startPartition, int startRowId, int numTenants, boolean
isMultiTenant,
+ boolean extendPK, boolean hasGlobalViewIndexes) throws Exception {
Map<String, byte[]> actualViewToRowKeyMap = Maps.newHashMap();
String tableName = BaseTest.generateUniqueName();
@@ -797,51 +875,73 @@ public abstract class BaseRowKeyPrefixTestIT extends
ParallelStatsDisabledIT {
String baseTableName = String.format(BASE_TABLE_NAME_FMT, tableName);
String indexTableName = String.format(INDEX_TABLE_NAME_FMT, tableName);
-
int partition = startPartition;
int rowId = startRowId;
// Create the global view
- for (int testCase=0;testCase<testCases.size();testCase++) {
- for (int index=0;index<sortOrders.length;index++) {
+ for (int testCase = 0; testCase < testCases.size(); testCase++) {
+ for (int index = 0; index < sortOrders.length; index++) {
partition++;
- Pair<String, byte[]> gvRowKeyInfo =
createGlobalView(tableName,partition, testCases.get(testCase),
sortOrders[index], hasGlobalViewIndexes);
+ Pair<String, byte[]>
+ gvRowKeyInfo =
+ createGlobalView(tableName, partition,
testCases.get(testCase),
+ sortOrders[index], hasGlobalViewIndexes);
actualViewToRowKeyMap.put(gvRowKeyInfo.getFirst(),
gvRowKeyInfo.getSecond());
- LOGGER.debug(String.format("Created global view %s with
partition = %d", gvRowKeyInfo.getFirst(), partition));
+ LOGGER.debug(String.format("Created global view %s with
partition = %d",
+ gvRowKeyInfo.getFirst(), partition));
}
}
partition = startPartition;
- String[] globalViewPKNames = new String[] {"ID1", "ID2", "ID3"};
+ String[] globalViewPKNames = new String[] { "ID1", "ID2", "ID3" };
// Create the tenant view for each partition
- for (int testCase=0;testCase<testCases.size();testCase++) {
- for (int index=0;index<sortOrders.length;index++) {
+ for (int testCase = 0; testCase < testCases.size(); testCase++) {
+ for (int index = 0; index < sortOrders.length; index++) {
partition++;
- for (int tenant=1;tenant<=numTenants;tenant++) {
- Pair<String, byte[]> tvRowKeyInfo =
createTenantView(extendPK, partition, tenant, 1, globalViewPKNames,
testCases.get(testCase));
+ for (int tenant = 1; tenant <= numTenants; tenant++) {
+ Pair<String, byte[]>
+ tvRowKeyInfo =
+ createTenantView(
+ extendPK, partition, tenant, 1,
globalViewPKNames,
+ testCases.get(testCase));
actualViewToRowKeyMap.put(tvRowKeyInfo.getFirst(),
tvRowKeyInfo.getSecond());
- LOGGER.debug(String.format("Created tenant view %s
[partition = %d]", tvRowKeyInfo.getFirst(), partition));
+ LOGGER.debug(String.format("Created tenant view %s
[partition = %d]",
+ tvRowKeyInfo.getFirst(), partition));
}
}
}
partition = startPartition;
// Upsert rows into the tenant view for each partition
- for (int testCase=0;testCase<testCases.size();testCase++) {
- for (int index=0;index<sortOrders.length;index++) {
+ for (int testCase = 0; testCase < testCases.size(); testCase++) {
+ for (int index = 0; index < sortOrders.length; index++) {
partition++;
- for (int tenant=1;tenant<=numTenants;tenant++) {
+ for (int tenant = 1; tenant <= numTenants; tenant++) {
rowId++;
try {
- upsertTenantViewRows(isMultiTenant, extendPK,
partition, tenant, 1, rowId, globalViewPKNames, testCases.get(testCase));
+ upsertTenantViewRows(
+ isMultiTenant, extendPK, partition, tenant, 1,
rowId,
+ globalViewPKNames, testCases.get(testCase));
} catch (Exception ex) {
- String testInfo =
Arrays.stream(testCases.get(testCase)).map(String::valueOf).collect(Collectors.joining(","));
- String sortInfo =
Arrays.stream(sortOrders[index]).map(String::valueOf).collect(Collectors.joining(","));
- String pkInfo =
Arrays.stream(globalViewPKNames).map(String::valueOf).collect(Collectors.joining(","));
+ String
+ testInfo =
+
Arrays.stream(testCases.get(testCase)).map(String::valueOf)
+ .collect(Collectors.joining(","));
+ String
+ sortInfo =
+
Arrays.stream(sortOrders[index]).map(String::valueOf)
+ .collect(Collectors.joining(","));
+ String
+ pkInfo =
+
Arrays.stream(globalViewPKNames).map(String::valueOf)
+ .collect(Collectors.joining(","));
LOGGER.error(ex.getMessage());
ex.printStackTrace();
- fail(String.format("isMultiTenant(%s), extendPK(%s),
partition(%d), tenant(%s), rowId(%s), pkInfo(%s), testInfo(%s), sortInfo(%s)",
- isMultiTenant, extendPK, partition, tenant,
rowId, pkInfo, testInfo, sortInfo));
+ fail(String.format(
+ "isMultiTenant(%s), extendPK(%s),
partition(%d), tenant(%s), " +
+ "rowId(%s), pkInfo(%s), testInfo(%s),
sortInfo(%s)",
+ isMultiTenant, extendPK, partition, tenant,
+ rowId, pkInfo, testInfo, sortInfo));
}
}
}
@@ -849,25 +949,32 @@ public abstract class BaseRowKeyPrefixTestIT extends
ParallelStatsDisabledIT {
partition = startPartition;
rowId = startRowId;
- // Validate the rowPrefix from SYSTEM.CATALOG prefix matches the
rowkey from HBase
+ // Validate the matcher pattern from SYSTEM.CATALOG matches the rowkey
from HBase
// for each tenant view
- // actualViewToRowKeyMap holds row prefix for each view (global and
tenant specific)
- for (int testCase=0;testCase<testCases.size();testCase++) {
- for (int index=0;index<sortOrders.length;index++) {
+ // actualViewToRowKeyMap holds matcher pattern for each view (global
and tenant specific)
+ for (int testCase = 0; testCase < testCases.size(); testCase++) {
+ for (int index = 0; index < sortOrders.length; index++) {
partition++;
- for (int tenant=1;tenant<=numTenants;tenant++) {
+ for (int tenant = 1; tenant <= numTenants; tenant++) {
rowId++;
String partitionName = String.format(PARTITION_FMT,
partition);
String tenantId = String.format(ORG_ID_FMT, ORG_ID_PREFIX,
tenant);
- String tenantConnectionUrl = String.format(TENANT_URL_FMT,
getUrl(), TENANT_ID_ATTRIB, tenantId);
+ String
+ tenantConnectionUrl =
+ String.format(TENANT_URL_FMT, getUrl(),
TENANT_ID_ATTRIB, tenantId);
String tenantViewName =
String.format(TENANT_VIEW_NAME_FMT, partitionName, 1);
String tenantViewKey = String.format("%s.%s", tenantId,
tenantViewName);
- try (PhoenixConnection tenantConnection =
DriverManager.getConnection(tenantConnectionUrl).unwrap(PhoenixConnection.class))
{
- assertHBaseRowKeyMatchesPrefix(tenantConnection,
baseTableName.getBytes(StandardCharsets.UTF_8), rowId,
actualViewToRowKeyMap.get(tenantViewKey));
+ try (PhoenixConnection tenantConnection =
DriverManager.getConnection(
+
tenantConnectionUrl).unwrap(PhoenixConnection.class)) {
+ assertHBaseRowKeyMatchesPrefix(tenantConnection,
+
baseTableName.getBytes(StandardCharsets.UTF_8), rowId,
+ actualViewToRowKeyMap.get(tenantViewKey));
if (hasGlobalViewIndexes) {
PTable view =
PhoenixRuntime.getTable(tenantConnection, tenantViewName);
-
assertIndexTableRowKeyMatchesPrefix(tenantConnection, view.getIndexes().get(0),
indexTableName.getBytes(StandardCharsets.UTF_8), rowId);
+
assertIndexTableRowKeyMatchesPrefix(tenantConnection,
+ view.getIndexes().get(0),
+
indexTableName.getBytes(StandardCharsets.UTF_8), rowId);
}
}
}
diff --git
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/prefix/LongViewIndexDisabledBaseRowKeyPrefixIT.java
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/LongViewIndexDisabledBaseRowKeyMatcherIT.java
similarity index 63%
rename from
phoenix-core/src/it/java/org/apache/phoenix/end2end/prefix/LongViewIndexDisabledBaseRowKeyPrefixIT.java
rename to
phoenix-core/src/it/java/org/apache/phoenix/end2end/LongViewIndexDisabledBaseRowKeyMatcherIT.java
index a4fc076a6a..a8ae4aa759 100644
---
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/prefix/LongViewIndexDisabledBaseRowKeyPrefixIT.java
+++
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/LongViewIndexDisabledBaseRowKeyMatcherIT.java
@@ -1,8 +1,25 @@
-package org.apache.phoenix.end2end.prefix;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.phoenix.end2end;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
-import org.apache.phoenix.end2end.NeedsOwnMiniClusterTest;
import org.apache.phoenix.hbase.index.util.IndexManagementUtil;
import org.apache.phoenix.query.ConfigurationFactory;
import org.apache.phoenix.query.QueryServices;
@@ -15,7 +32,7 @@ import java.util.HashMap;
import java.util.Map;
@Category(NeedsOwnMiniClusterTest.class)
-public class LongViewIndexDisabledBaseRowKeyPrefixIT extends
BaseRowKeyPrefixTestIT {
+public class LongViewIndexDisabledBaseRowKeyMatcherIT extends
BaseRowKeyMatcherTestIT {
@BeforeClass
public static synchronized void doSetup() throws Exception {
@@ -23,7 +40,8 @@ public class LongViewIndexDisabledBaseRowKeyPrefixIT extends
BaseRowKeyPrefixTes
conf.set(QueryServices.PHOENIX_TABLE_TTL_ENABLED,
String.valueOf(true));
conf.set(QueryServices.LONG_VIEW_INDEX_ENABLED_ATTRIB,
String.valueOf(false));
conf.set(QueryServices.INDEX_REGION_OBSERVER_ENABLED_ATTRIB, "true");
- conf.set(IndexManagementUtil.WAL_EDIT_CODEC_CLASS_KEY,
"org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec");
+ conf.set(IndexManagementUtil.WAL_EDIT_CODEC_CLASS_KEY,
+
"org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec");
// Clear the cached singletons so we can inject our own.
InstanceResolver.clearSingletons();
diff --git
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/prefix/LongViewIndexEnabledBaseRowKeyPrefixIT.java
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/LongViewIndexEnabledBaseRowKeyMatcherIT.java
similarity index 63%
rename from
phoenix-core/src/it/java/org/apache/phoenix/end2end/prefix/LongViewIndexEnabledBaseRowKeyPrefixIT.java
rename to
phoenix-core/src/it/java/org/apache/phoenix/end2end/LongViewIndexEnabledBaseRowKeyMatcherIT.java
index 11358c8d94..a7778aea1e 100644
---
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/prefix/LongViewIndexEnabledBaseRowKeyPrefixIT.java
+++
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/LongViewIndexEnabledBaseRowKeyMatcherIT.java
@@ -1,8 +1,25 @@
-package org.apache.phoenix.end2end.prefix;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.phoenix.end2end;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
-import org.apache.phoenix.end2end.NeedsOwnMiniClusterTest;
import org.apache.phoenix.hbase.index.util.IndexManagementUtil;
import org.apache.phoenix.query.ConfigurationFactory;
import org.apache.phoenix.query.QueryServices;
@@ -15,7 +32,7 @@ import java.util.HashMap;
import java.util.Map;
@Category(NeedsOwnMiniClusterTest.class)
-public class LongViewIndexEnabledBaseRowKeyPrefixIT extends
BaseRowKeyPrefixTestIT {
+public class LongViewIndexEnabledBaseRowKeyMatcherIT extends
BaseRowKeyMatcherTestIT {
@BeforeClass
public static synchronized void doSetup() throws Exception {
@@ -23,7 +40,8 @@ public class LongViewIndexEnabledBaseRowKeyPrefixIT extends
BaseRowKeyPrefixTest
conf.set(QueryServices.PHOENIX_TABLE_TTL_ENABLED,
String.valueOf(true));
conf.set(QueryServices.LONG_VIEW_INDEX_ENABLED_ATTRIB,
String.valueOf(true));
conf.set(QueryServices.INDEX_REGION_OBSERVER_ENABLED_ATTRIB, "true");
- conf.set(IndexManagementUtil.WAL_EDIT_CODEC_CLASS_KEY,
"org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec");
+ conf.set(IndexManagementUtil.WAL_EDIT_CODEC_CLASS_KEY,
+
"org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec");
// Clear the cached singletons so we can inject our own.
InstanceResolver.clearSingletons();
diff --git
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/ReadOnlyViewOnReadOnlyIT.java
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/ReadOnlyViewOnReadOnlyIT.java
index 5825990a47..774f0f9864 100644
---
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/ReadOnlyViewOnReadOnlyIT.java
+++
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/ReadOnlyViewOnReadOnlyIT.java
@@ -46,12 +46,13 @@ public class ReadOnlyViewOnReadOnlyIT extends
BaseTenantSpecificViewIndexIT {
//base table
String tableName = generateUniqueName();
conn.createStatement().execute("CREATE TABLE IF NOT EXISTS " +
tableName + " ("
+ + "TID CHAR(15) NOT NULL,"
+ " ID INTEGER NOT NULL,"
+ " COL1 INTEGER NOT NULL,"
+ " COL2 bigint NOT NULL,"
+ " CREATED_DATE DATE,"
+ " CREATION_TIME BIGINT,"
- + " CONSTRAINT NAME_PK PRIMARY KEY (ID, COL1, COL2))"
+ + " CONSTRAINT NAME_PK PRIMARY KEY (TID, ID, COL1, COL2))"
+ " TTL = " + DEFAULT_TTL_FOR_TEST
+ "," + UPDATE_CACHE_FREQUENCY + " = 100000000"
+ ", MULTI_TENANT = true");
diff --git
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/TTLAsPhoenixTTLIT.java
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/TTLAsPhoenixTTLIT.java
index a2c959b16f..62fc219e9c 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/TTLAsPhoenixTTLIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/TTLAsPhoenixTTLIT.java
@@ -47,6 +47,7 @@ import static
org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.TTL_NOT_DEFINED;
import static org.apache.phoenix.util.PhoenixRuntime.TENANT_ID_ATTRIB;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
@Category(ParallelStatsDisabledTest.class)
@@ -66,6 +67,8 @@ public class TTLAsPhoenixTTLIT extends
ParallelStatsDisabledIT{
createTableWithOrWithOutTTLAsItsProperty(conn, true)));
assertEquals("TTL is not set correctly at Phoenix level",
DEFAULT_TTL_FOR_TEST,
table.getTTL());
+ assertTrue("RowKeyMatcher should be Null",
+ (Bytes.compareTo(HConstants.EMPTY_BYTE_ARRAY,
table.getRowKeyMatcher()) == 0));
}
}
@@ -182,7 +185,9 @@ public class TTLAsPhoenixTTLIT extends
ParallelStatsDisabledIT{
indexes = conn.unwrap(PhoenixConnection.class).getTable(new
PTableKey(null, tableName)).getIndexes();
for (PTable index : indexes) {
assertTTLValueOfIndex(PhoenixDatabaseMetaData.TTL_NOT_DEFINED,
index);
- assertNull(index.getRowKeyPrefix());
+ assertTrue(Bytes.compareTo(
+ index.getRowKeyMatcher(), HConstants.EMPTY_BYTE_ARRAY)
== 0
+ );
}
//Test setting TTL as index property not allowed while creating
them or setting them explicitly.
diff --git
a/phoenix-core/src/main/java/org/apache/phoenix/compile/CreateTableCompiler.java
b/phoenix-core/src/main/java/org/apache/phoenix/compile/CreateTableCompiler.java
index 45b4f9958d..6250ed8799 100644
---
a/phoenix-core/src/main/java/org/apache/phoenix/compile/CreateTableCompiler.java
+++
b/phoenix-core/src/main/java/org/apache/phoenix/compile/CreateTableCompiler.java
@@ -98,7 +98,7 @@ public class CreateTableCompiler {
String viewStatementToBe = null;
byte[][] viewColumnConstantsToBe = null;
BitSet isViewColumnReferencedToBe = null;
- byte[] rowKeyPrefix = ByteUtil.EMPTY_BYTE_ARRAY;
+ byte[] rowKeyMatcher = ByteUtil.EMPTY_BYTE_ARRAY;
// Check whether column families having local index column family
suffix or not if present
// don't allow creating table.
@@ -186,7 +186,7 @@ public class CreateTableCompiler {
validateCreateViewCompilation(connection, parentToBe,
columnDefs, pkConstraint);
} else if (where != null && viewTypeToBe == ViewType.UPDATABLE) {
- rowKeyPrefix = WhereOptimizer.getRowKeyPrefix(context,
create.getTableName(),
+ rowKeyMatcher = WhereOptimizer.getRowKeyMatcher(context,
create.getTableName(),
parentToBe, where);
}
verifyIfAnyParentHasIndexesAndViewExtendsPk(parentToBe,
columnDefs, pkConstraint);
@@ -218,7 +218,7 @@ public class CreateTableCompiler {
final PTable parent = parentToBe;
return new CreateTableMutationPlan(context, client, finalCreate,
splits, parent,
- viewStatement, viewType, rowKeyPrefix,
+ viewStatement, viewType, rowKeyMatcher,
viewColumnConstants, isViewColumnReferenced, connection);
}
@@ -474,12 +474,12 @@ public class CreateTableCompiler {
private final byte[][] viewColumnConstants;
private final BitSet isViewColumnReferenced;
- private final byte[] rowKeyPrefix;
+ private final byte[] rowKeyMatcher;
private final PhoenixConnection connection;
private CreateTableMutationPlan(StatementContext context,
MetaDataClient client,
CreateTableStatement finalCreate, byte[][] splits, PTable
parent,
- String viewStatement, ViewType viewType, byte[] rowKeyPrefix,
+ String viewStatement, ViewType viewType, byte[] rowKeyMatcher,
byte[][] viewColumnConstants, BitSet isViewColumnReferenced,
PhoenixConnection connection) {
super(context, CreateTableCompiler.this.operation);
@@ -489,7 +489,7 @@ public class CreateTableCompiler {
this.parent = parent;
this.viewStatement = viewStatement;
this.viewType = viewType;
- this.rowKeyPrefix = rowKeyPrefix;
+ this.rowKeyMatcher = rowKeyMatcher;
this.viewColumnConstants = viewColumnConstants;
this.isViewColumnReferenced = isViewColumnReferenced;
this.connection = connection;
@@ -499,7 +499,7 @@ public class CreateTableCompiler {
public MutationState execute() throws SQLException {
try {
return client.createTable(finalCreate, splits, parent,
viewStatement,
- viewType, MetaDataUtil.getViewIndexIdDataType(),
rowKeyPrefix,
+ viewType, MetaDataUtil.getViewIndexIdDataType(),
rowKeyMatcher,
viewColumnConstants, isViewColumnReferenced);
} finally {
if (client.getConnection() != connection) {
diff --git
a/phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java
b/phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java
index c18778d449..4b174aaf4f 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java
@@ -482,7 +482,7 @@ public class WhereOptimizer {
return keyRanges;
}
- public static byte[] getRowKeyPrefix(
+ public static byte[] getRowKeyMatcher(
final StatementContext context,
final TableName tableNameNode,
final PTable parentTable,
@@ -498,7 +498,9 @@ public class WhereOptimizer {
}
KeyExpressionVisitor visitor = new KeyExpressionVisitor(context,
parentTable);
KeyExpressionVisitor.KeySlots keySlots =
viewWhereExpression.accept(visitor);
-
+ if (keySlots == null) {
+ return ByteUtil.EMPTY_BYTE_ARRAY;
+ }
for (KeyExpressionVisitor.KeySlot slot : keySlots.getSlots()) {
if (slot != null) {
if (schema.getField(slot.getPKPosition()).getSortOrder() ==
SortOrder.DESC) {
@@ -510,28 +512,28 @@ public class WhereOptimizer {
}
ScanRanges scanRange = ScanRanges.createSingleSpan(
schema, rowKeySlotRangesList, null, false);
- byte[] rowKeyPrefix = scanRange.getScanRange().getLowerRange();
+ byte[] rowKeyMatcher = scanRange.getScanRange().getLowerRange();
// TODO : make it a TRACE log before submission
if (LOGGER.isTraceEnabled()) {
- String rowKeyPrefixStr = Bytes.toStringBinary(rowKeyPrefix);
- String rowKeyPrefixHex = Bytes.toHex(rowKeyPrefix);
- byte[] rowKeyPrefixFromHex = Bytes.fromHex(rowKeyPrefixHex);
- assert Bytes.compareTo(rowKeyPrefix, rowKeyPrefixFromHex) == 0;
+ String rowKeyMatcherStr = Bytes.toStringBinary(rowKeyMatcher);
+ String rowKeyMatcherHex = Bytes.toHex(rowKeyMatcher);
+ byte[] rowKeyMatcherFromHex = Bytes.fromHex(rowKeyMatcherHex);
+ assert Bytes.compareTo(rowKeyMatcher, rowKeyMatcherFromHex) == 0;
LOGGER.trace(String.format("View info view-name = %s,
view-stmt-name (parent) = %s, "
+ "primary-keys = %d, key-ranges: size = %d, list
= %s ",
tableNameNode.toString(), parentTable.getName().toString(),
parentTable.getPKColumns().size(),
rowKeySlotRangesList.size(),
rowKeySlotRangesList.isEmpty() ? "null" :
rowKeySlotRangesList.toString()));
- LOGGER.trace(String.format("RowKey Prefix info Hex-value = %s,
StringBinary value = %s",
- rowKeyPrefixHex, rowKeyPrefixStr));
+ LOGGER.trace(String.format("RowKey Matcher info Hex-value =
%s,StringBinary value = %s",
+ rowKeyMatcherHex, rowKeyMatcherStr));
}
- return rowKeyPrefix;
+ return rowKeyMatcher;
}
@VisibleForTesting
- public static byte[] getRowKeyPrefix(
+ public static byte[] getRowKeyMatcher(
final PhoenixConnection connection,
final TableName tableNameNode,
final PTable parentTable,
@@ -578,25 +580,25 @@ public class WhereOptimizer {
ScanRanges scanRange = ScanRanges.createSingleSpan(
schema, rowKeySlotRangesList, null, false);
- byte[] rowKeyPrefix = scanRange.getScanRange().getLowerRange();
+ byte[] rowKeyMatcher = scanRange.getScanRange().getLowerRange();
// TODO : make it a TRACE log before submission
if (LOGGER.isTraceEnabled()) {
- String rowKeyPrefixStr = Bytes.toStringBinary(rowKeyPrefix);
- String rowKeyPrefixHex = Bytes.toHex(rowKeyPrefix);
- byte[] rowKeyPrefixFromHex = Bytes.fromHex(rowKeyPrefixHex);
- assert Bytes.compareTo(rowKeyPrefix, rowKeyPrefixFromHex) == 0;
+ String rowKeyMatcherStr = Bytes.toStringBinary(rowKeyMatcher);
+ String rowKeyMatcherHex = Bytes.toHex(rowKeyMatcher);
+ byte[] rowKeyMatcherFromHex = Bytes.fromHex(rowKeyMatcherHex);
+ assert Bytes.compareTo(rowKeyMatcher, rowKeyMatcherFromHex) == 0;
LOGGER.trace(String.format("View info view-name = %s,
view-stmt-name (parent) = %s, "
+ "primary-keys = %d, key-ranges: size = %d, list
= %s ",
tableNameNode.toString(), parentTable.getName().toString(),
parentTable.getPKColumns().size(),
rowKeySlotRangesList.size(),
rowKeySlotRangesList.isEmpty() ? "null" :
rowKeySlotRangesList.toString()));
- LOGGER.trace(String.format("RowKey Prefix info Hex-value = %s,
StringBinary value = %s",
- rowKeyPrefixHex, rowKeyPrefixStr));
+ LOGGER.trace(String.format("RowKey Matcher info Hex-value =
%s,StringBinary value = %s",
+ rowKeyMatcherHex, rowKeyMatcherStr));
}
- return rowKeyPrefix;
+ return rowKeyMatcher;
}
diff --git
a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java
b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java
index ae5046c1b6..c79adaf030 100644
---
a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java
+++
b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java
@@ -62,7 +62,7 @@ import static
org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.TTL_NOT_DEFINED;
import static
org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.PHYSICAL_TABLE_NAME_BYTES;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.PK_NAME_BYTES;
import static
org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.RETURN_TYPE_BYTES;
-import static
org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.ROW_KEY_PREFIX_BYTES;
+import static
org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.ROW_KEY_MATCHER_BYTES;
import static
org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.SALT_BUCKETS_BYTES;
import static
org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.SCHEMA_VERSION_BYTES;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.SORT_ORDER_BYTES;
@@ -374,8 +374,8 @@ TABLE_FAMILY_BYTES, TABLE_SEQ_NUM_BYTES);
TABLE_FAMILY_BYTES, STREAMING_TOPIC_NAME_BYTES);
private static final Cell TTL_KV =
createFirstOnRow(ByteUtil.EMPTY_BYTE_ARRAY,
TABLE_FAMILY_BYTES, TTL_BYTES);
- private static final Cell ROW_KEY_PREFIX_KV =
createFirstOnRow(ByteUtil.EMPTY_BYTE_ARRAY,
- TABLE_FAMILY_BYTES, ROW_KEY_PREFIX_BYTES);
+ private static final Cell ROW_KEY_MATCHER_KV =
createFirstOnRow(ByteUtil.EMPTY_BYTE_ARRAY,
+ TABLE_FAMILY_BYTES, ROW_KEY_MATCHER_BYTES);
private static final Cell INDEX_WHERE_KV =
createFirstOnRow(ByteUtil.EMPTY_BYTE_ARRAY,
TABLE_FAMILY_BYTES, INDEX_WHERE_BYTES);
@@ -416,8 +416,7 @@ TABLE_FAMILY_BYTES, TABLE_SEQ_NUM_BYTES);
SCHEMA_VERSION_KV,
EXTERNAL_SCHEMA_ID_KV,
STREAMING_TOPIC_NAME_KV,
- TTL_KV,
- ROW_KEY_PREFIX_KV,
+ TTL_KV, ROW_KEY_MATCHER_KV,
INDEX_WHERE_KV
);
@@ -465,7 +464,7 @@ TABLE_FAMILY_BYTES, TABLE_SEQ_NUM_BYTES);
private static final int STREAMING_TOPIC_NAME_INDEX =
TABLE_KV_COLUMNS.indexOf(STREAMING_TOPIC_NAME_KV);
private static final int TTL_INDEX = TABLE_KV_COLUMNS.indexOf(TTL_KV);
- private static final int ROW_KEY_PREFIX_INDEX =
TABLE_KV_COLUMNS.indexOf(ROW_KEY_PREFIX_KV);
+ private static final int ROW_KEY_MATCHER_INDEX =
TABLE_KV_COLUMNS.indexOf(ROW_KEY_MATCHER_KV);
private static final int INDEX_WHERE_INDEX =
TABLE_KV_COLUMNS.indexOf(INDEX_WHERE_KV);
// KeyValues for Column
@@ -1431,12 +1430,12 @@ TABLE_FAMILY_BYTES, TABLE_SEQ_NUM_BYTES);
// TODO: Need to Update Cache for Alter Commands, can use
PHOENIX-6883.
}
- Cell rowKeyPrefixKv = tableKeyValues[ROW_KEY_PREFIX_INDEX];
- byte[] rowKeyPrefix = rowKeyPrefixKv != null
- ? CellUtil.cloneValue(rowKeyPrefixKv)
- : null;
- builder.setRowKeyPrefix(rowKeyPrefix != null ? rowKeyPrefix
- : oldTable != null ? oldTable.getRowKeyPrefix() : null);
+ Cell rowKeyMatcherKv = tableKeyValues[ROW_KEY_MATCHER_INDEX];
+ byte[] rowKeyMatcher = rowKeyMatcherKv != null
+ ? CellUtil.cloneValue(rowKeyMatcherKv)
+ : HConstants.EMPTY_BYTE_ARRAY;
+ builder.setRowKeyMatcher(rowKeyMatcher != null ? rowKeyMatcher
+ : oldTable != null ? oldTable.getRowKeyMatcher() :
HConstants.EMPTY_BYTE_ARRAY);
Cell indexWhereKv = tableKeyValues[INDEX_WHERE_INDEX];
diff --git
a/phoenix-core/src/main/java/org/apache/phoenix/jdbc/PhoenixDatabaseMetaData.java
b/phoenix-core/src/main/java/org/apache/phoenix/jdbc/PhoenixDatabaseMetaData.java
index 1b3ebddb45..8632f056ba 100644
---
a/phoenix-core/src/main/java/org/apache/phoenix/jdbc/PhoenixDatabaseMetaData.java
+++
b/phoenix-core/src/main/java/org/apache/phoenix/jdbc/PhoenixDatabaseMetaData.java
@@ -417,8 +417,8 @@ public class PhoenixDatabaseMetaData implements
DatabaseMetaData {
public static final String STREAMING_TOPIC_NAME = "STREAMING_TOPIC_NAME";
public static final byte[] STREAMING_TOPIC_NAME_BYTES =
Bytes.toBytes(STREAMING_TOPIC_NAME);
- public static final String ROW_KEY_PREFIX = "ROW_KEY_PREFIX";
- public static final byte[] ROW_KEY_PREFIX_BYTES =
Bytes.toBytes(ROW_KEY_PREFIX);
+ public static final String ROW_KEY_MATCHER = "ROW_KEY_MATCHER";
+ public static final byte[] ROW_KEY_MATCHER_BYTES =
Bytes.toBytes(ROW_KEY_MATCHER);
public static final String INDEX_WHERE = "INDEX_WHERE";
public static final byte[] INDEX_WHERE_BYTES = Bytes.toBytes(INDEX_WHERE);
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 fdc51bb36c..eea4a0f72a 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
@@ -4208,8 +4208,7 @@ public class ConnectionQueryServicesImpl extends
DelegateQueryServices implement
PhoenixDatabaseMetaData.TTL + " " +
PInteger.INSTANCE.getSqlTypeName());
metaConnection = addColumnsIfNotExists(metaConnection,
PhoenixDatabaseMetaData.SYSTEM_CATALOG,
MIN_SYSTEM_TABLE_TIMESTAMP_5_2_0 - 1,
- PhoenixDatabaseMetaData.ROW_KEY_PREFIX + " " +
- PVarbinary.INSTANCE.getSqlTypeName());
+ PhoenixDatabaseMetaData.ROW_KEY_MATCHER + " " +
PVarbinary.INSTANCE.getSqlTypeName());
metaConnection = addColumnsIfNotExists(metaConnection,
PhoenixDatabaseMetaData.SYSTEM_CATALOG,
MIN_SYSTEM_TABLE_TIMESTAMP_5_2_0,
PhoenixDatabaseMetaData.INDEX_WHERE + " " +
PVarchar.INSTANCE.getSqlTypeName());
diff --git
a/phoenix-core/src/main/java/org/apache/phoenix/query/QueryConstants.java
b/phoenix-core/src/main/java/org/apache/phoenix/query/QueryConstants.java
index 2ef9404a33..13f9ce86d5 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/query/QueryConstants.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/query/QueryConstants.java
@@ -119,7 +119,7 @@ import static
org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.QUERY_STATUS;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.REF_GENERATION;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.REMARKS;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.RETURN_TYPE;
-import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.ROW_KEY_PREFIX;
+import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.ROW_KEY_MATCHER;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.SALT_BUCKETS;
import static
org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.SCAN_METRICS_JSON;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.SCHEMA_VERSION;
@@ -345,7 +345,7 @@ public interface QueryConstants {
EXTERNAL_SCHEMA_ID + " VARCHAR, \n" +
STREAMING_TOPIC_NAME + " VARCHAR, \n" +
TTL + " INTEGER, \n" +
- ROW_KEY_PREFIX + " VARBINARY, \n" +
+ ROW_KEY_MATCHER + " VARBINARY, \n" +
INDEX_WHERE + " VARCHAR, \n" +
// Column metadata (will be null for table row)
DATA_TYPE + " INTEGER," +
diff --git
a/phoenix-core/src/main/java/org/apache/phoenix/schema/DelegateTable.java
b/phoenix-core/src/main/java/org/apache/phoenix/schema/DelegateTable.java
index f928aef134..d6c03e2898 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/schema/DelegateTable.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/schema/DelegateTable.java
@@ -403,8 +403,8 @@ public class DelegateTable implements PTable {
public String getStreamingTopicName() { return
delegate.getStreamingTopicName(); }
@Override
- public byte[] getRowKeyPrefix() {
- return delegate.getRowKeyPrefix();
+ public byte[] getRowKeyMatcher() {
+ return delegate.getRowKeyMatcher();
}
public String getIndexWhere() {
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 f34cb3f0a6..28cc250444 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
@@ -241,7 +241,7 @@ import static
org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.PHYSICAL_NAME;
import static
org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.PHYSICAL_TABLE_NAME;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.PK_NAME;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.RETURN_TYPE;
-import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.ROW_KEY_PREFIX;
+import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.ROW_KEY_MATCHER;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.SALT_BUCKETS;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.SCHEMA_VERSION;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.SORT_ORDER;
@@ -353,7 +353,7 @@ public class MetaDataClient {
SCHEMA_VERSION + "," +
STREAMING_TOPIC_NAME + "," +
TTL + "," +
- ROW_KEY_PREFIX + "," +
+ ROW_KEY_MATCHER + "," +
INDEX_WHERE +
") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,
?, ?, ?, ?, ?, ?, " +
"?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
@@ -968,7 +968,7 @@ public class MetaDataClient {
String viewStatement,
ViewType viewType,
PDataType viewIndexIdType,
- byte[] rowKeyPrefix,
+ byte[] rowKeyMatcher,
byte[][] viewColumnConstants,
BitSet isViewColumnReferenced
) throws SQLException {
@@ -1043,7 +1043,7 @@ public class MetaDataClient {
viewStatement,
viewType,
viewIndexIdType,
- rowKeyPrefix,
+ rowKeyMatcher,
viewColumnConstants,
isViewColumnReferenced,
false,
@@ -1731,7 +1731,7 @@ public class MetaDataClient {
PTableType.INDEX,
statement.ifNotExists(),
null,
- null,
+ statement.getWhere(),
statement.getBindCount(),
null
);
@@ -2117,7 +2117,7 @@ public class MetaDataClient {
private PTable createTableInternal(CreateTableStatement statement,
byte[][] splits,
final PTable parent, String viewStatement, ViewType viewType,
PDataType viewIndexIdType,
- final byte[] rowKeyPrefix,
+ final byte[] rowKeyMatcher,
final byte[][] viewColumnConstants, final BitSet
isViewColumnReferenced,
boolean allocateIndexId, IndexType indexType, Date
asyncCreatedDate,
Map<String,Object> tableProps,
@@ -2988,7 +2988,7 @@ public class MetaDataClient {
.setIndexes(Collections.<PTable>emptyList())
.setPhysicalNames(ImmutableList.<PName>of())
.setColumns(columns.values())
- .setRowKeyPrefix(rowKeyPrefix)
+ .setRowKeyMatcher(rowKeyMatcher)
.setTTL(TTL_NOT_DEFINED)
.setIndexWhere(statement.getWhereClause() == null ?
null
: statement.getWhereClause().toString())
@@ -3243,10 +3243,11 @@ public class MetaDataClient {
tableUpsert.setInt(34, ttl);
}
- if (rowKeyPrefix == null) {
+ if ((rowKeyMatcher == null) ||
+ Bytes.compareTo(rowKeyMatcher,
HConstants.EMPTY_BYTE_ARRAY) == 0) {
tableUpsert.setNull(35, Types.VARBINARY);
} else {
- tableUpsert.setBytes(35, rowKeyPrefix);
+ tableUpsert.setBytes(35, rowKeyMatcher);
}
if (tableType == INDEX && statement.getWhereClause() != null) {
tableUpsert.setString(36,
statement.getWhereClause().toString());
@@ -3396,7 +3397,7 @@ public class MetaDataClient {
result.getTable().getExternalSchemaId() : null)
.setStreamingTopicName(streamingTopicName)
.setTTL(ttl == null || ttl == TTL_NOT_DEFINED ?
ttlFromHierarchy : ttl)
- .setRowKeyPrefix(rowKeyPrefix)
+ .setRowKeyMatcher(rowKeyMatcher)
.setIndexWhere(statement.getWhereClause() == null ?
null
: statement.getWhereClause().toString())
.build();
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/schema/PTable.java
b/phoenix-core/src/main/java/org/apache/phoenix/schema/PTable.java
index eb0d42a1c4..820593e8c6 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/schema/PTable.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/schema/PTable.java
@@ -969,7 +969,7 @@ public interface PTable extends PMetaDataEntity {
* @return Prefixed KeyRange generated by the expression representing the
view statement. In
* other words this will be one-to-one mapping between view and PREFIXED
KeyRange that'll exist.
*/
- byte[] getRowKeyPrefix();
+ byte[] getRowKeyMatcher();
/**
*
diff --git
a/phoenix-core/src/main/java/org/apache/phoenix/schema/PTableImpl.java
b/phoenix-core/src/main/java/org/apache/phoenix/schema/PTableImpl.java
index 15adf81813..e9ceb59969 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/schema/PTableImpl.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/schema/PTableImpl.java
@@ -213,7 +213,7 @@ public class PTableImpl implements PTable {
private String schemaVersion;
private String externalSchemaId;
private String streamingTopicName;
- private byte[] rowKeyPrefix;
+ private byte[] rowKeyMatcher;
private String indexWhere;
private Expression indexWhereExpression;
private Set<ColumnReference> indexWhereColumns;
@@ -281,7 +281,7 @@ public class PTableImpl implements PTable {
private String externalSchemaId;
private String streamingTopicName;
private int ttl;
- private byte[] rowKeyPrefix;
+ private byte[] rowKeyMatcher;
private String indexWhere;
// Used to denote which properties a view has explicitly modified
@@ -693,9 +693,9 @@ public class PTableImpl implements PTable {
return this;
}
- public Builder setRowKeyPrefix(byte[] rowKeyPrefix) {
- if (rowKeyPrefix != null) {
- this.rowKeyPrefix = rowKeyPrefix;
+ public Builder setRowKeyMatcher(byte[] rowKeyMatcher) {
+ if (rowKeyMatcher != null) {
+ this.rowKeyMatcher = rowKeyMatcher;
}
return this;
}
@@ -996,7 +996,7 @@ public class PTableImpl implements PTable {
this.schemaVersion = builder.schemaVersion;
this.externalSchemaId = builder.externalSchemaId;
this.streamingTopicName = builder.streamingTopicName;
- this.rowKeyPrefix = builder.rowKeyPrefix;
+ this.rowKeyMatcher = builder.rowKeyMatcher;
this.indexWhere = builder.indexWhere;
}
@@ -1076,7 +1076,7 @@ public class PTableImpl implements PTable {
.setExternalSchemaId(table.getExternalSchemaId())
.setStreamingTopicName(table.getStreamingTopicName())
.setTTL(table.getTTL())
- .setRowKeyPrefix(table.getRowKeyPrefix())
+ .setRowKeyMatcher(table.getRowKeyMatcher())
.setIndexWhere(table.getIndexWhere());
}
@@ -2012,9 +2012,9 @@ public class PTableImpl implements PTable {
ttl = table.getTtl();
}
- byte[] rowKeyPrefix = null;
- if (table.hasRowKeyPrefix()) {
- rowKeyPrefix = table.getRowKeyPrefix().toByteArray();
+ byte[] rowKeyMatcher = null;
+ if (table.hasRowKeyMatcher()) {
+ rowKeyMatcher = table.getRowKeyMatcher().toByteArray();
}
String indexWhere = null;
@@ -2077,7 +2077,7 @@ public class PTableImpl implements PTable {
.setExternalSchemaId(externalSchemaId)
.setStreamingTopicName(streamingTopicName)
.setTTL(ttl)
- .setRowKeyPrefix(rowKeyPrefix)
+ .setRowKeyMatcher(rowKeyMatcher)
.setIndexWhere(indexWhere)
.build();
} catch (SQLException e) {
@@ -2216,8 +2216,8 @@ public class PTableImpl implements PTable {
builder.setStreamingTopicName(ByteStringer.wrap(PVarchar.INSTANCE.toBytes(table.getStreamingTopicName())));
}
builder.setTtl(table.getTTL());
- if (table.getRowKeyPrefix() != null) {
-
builder.setRowKeyPrefix(ByteStringer.wrap(table.getRowKeyPrefix()));
+ if (table.getRowKeyMatcher() != null) {
+
builder.setRowKeyMatcher(ByteStringer.wrap(table.getRowKeyMatcher()));
}
if (table.getIndexWhere() != null) {
builder.setIndexWhere(ByteStringer.wrap(PVarchar.INSTANCE.toBytes(
@@ -2357,8 +2357,8 @@ public class PTableImpl implements PTable {
}
@Override
- public byte[] getRowKeyPrefix() {
- return rowKeyPrefix;
+ public byte[] getRowKeyMatcher() {
+ return rowKeyMatcher;
}
public String getIndexWhere() {
diff --git
a/phoenix-core/src/main/java/org/apache/phoenix/schema/transform/Transform.java
b/phoenix-core/src/main/java/org/apache/phoenix/schema/transform/Transform.java
index af67012912..e9ca0e56f8 100644
---
a/phoenix-core/src/main/java/org/apache/phoenix/schema/transform/Transform.java
+++
b/phoenix-core/src/main/java/org/apache/phoenix/schema/transform/Transform.java
@@ -201,7 +201,7 @@ public class Transform {
.setIsChangeDetectionEnabled(table.isChangeDetectionEnabled())
.setStreamingTopicName(table.getStreamingTopicName())
.setTTL(table.getTTL())
- .setRowKeyPrefix(table.getRowKeyPrefix())
+ .setRowKeyMatcher(table.getRowKeyMatcher())
// Transformables
.setImmutableStorageScheme(
(changedProps.getImmutableStorageSchemeProp() != null?
changedProps.getImmutableStorageSchemeProp():table.getImmutableStorageScheme()))
diff --git a/phoenix-core/src/main/protobuf/PTable.proto
b/phoenix-core/src/main/protobuf/PTable.proto
index 8d685937dd..46a4be6a79 100644
--- a/phoenix-core/src/main/protobuf/PTable.proto
+++ b/phoenix-core/src/main/protobuf/PTable.proto
@@ -118,7 +118,7 @@ message PTable {
optional PTable transformingNewTable=51;
optional bytes streamingTopicName=52;
optional int32 ttl = 53;
- optional bytes rowKeyPrefix = 54;
+ optional bytes rowKeyMatcher = 54;
optional bytes indexWhere=55;
}