[
https://issues.apache.org/jira/browse/PHOENIX-1077?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Samarth Jain updated PHOENIX-1077:
----------------------------------
Description:
1) Table - Salted. Query - IN list of RVCs. Result - fails with exception.
Details:
Table DDL - CREATE TABLE t (pk1 varchar(5) NOT NULL, pk2 varchar(5) NOT NULL,
pk3 INTEGER NOT NULL, c1 INTEGER constraint pk primary key (pk1,pk2,pk3))
SALT_BUCKETS=4
Query - select pk1, pk2, pk3 from t WHERE (pk1, pk2, pk3) IN ((?, ?, ?), (?, ?,
?))
Exception:
java.lang.ArrayIndexOutOfBoundsException: 1
at org.apache.phoenix.schema.ValueSchema.getField(ValueSchema.java:300)
at org.apache.phoenix.util.ScanUtil.setKey(ScanUtil.java:260)
at
org.apache.phoenix.compile.ScanRanges.getPointKeys(ScanRanges.java:185)
at org.apache.phoenix.compile.ScanRanges.create(ScanRanges.java:61)
at
org.apache.phoenix.compile.WhereOptimizer.pushKeyExpressionsToScan(WhereOptimizer.java:224)
at
org.apache.phoenix.compile.WhereCompiler.compile(WhereCompiler.java:105)
at
org.apache.phoenix.compile.QueryCompiler.compileSingleQuery(QueryCompiler.java:260)
at
org.apache.phoenix.compile.QueryCompiler.compile(QueryCompiler.java:128)
at
org.apache.phoenix.jdbc.PhoenixStatement$ExecutableSelectStatement.compilePlan(PhoenixStatement.java:264)
at
org.apache.phoenix.jdbc.PhoenixStatement$ExecutableSelectStatement.compilePlan(PhoenixStatement.java:1)
at
org.apache.phoenix.jdbc.PhoenixStatement.executeQuery(PhoenixStatement.java:199)
at
org.apache.phoenix.jdbc.PhoenixPreparedStatement.executeQuery(PhoenixPreparedStatement.java:157)
at
org.apache.phoenix.end2end.RowValueConstructorIT.testInListOfRVC5(RowValueConstructorIT.java:1078)
2) Most likely related to 1) Table - multi-tenant and salted. Query - IN list
of RVCs. Result - Fails with exception.
Details:
Base Table DDL - CREATE TABLE t (tenantId varchar(5) NOT NULL, pk2 varchar(5)
NOT NULL, pk3 INTEGER NOT NULL, c1 INTEGER constraint pk primary key
(tenantId,pk2,pk3)) SALT_BUCKETS=4, MULTI_TENANT=true
Tenant View DDL - CREATE VIEW t_view (tenant_col VARCHAR) AS SELECT * FROM t
Query using global connection : select pk2, pk3 from t WHERE (tenantId, pk2,
pk3) IN ((?, ?, ?), (?, ?, ?))
Stacktrace:
java.lang.ArrayIndexOutOfBoundsException: 1
at org.apache.phoenix.schema.ValueSchema.getField(ValueSchema.java:300)
at org.apache.phoenix.util.ScanUtil.setKey(ScanUtil.java:260)
at
org.apache.phoenix.compile.ScanRanges.getPointKeys(ScanRanges.java:185)
at org.apache.phoenix.compile.ScanRanges.create(ScanRanges.java:61)
at
org.apache.phoenix.compile.WhereOptimizer.pushKeyExpressionsToScan(WhereOptimizer.java:224)
at
org.apache.phoenix.compile.WhereCompiler.compile(WhereCompiler.java:105)
at
org.apache.phoenix.compile.QueryCompiler.compileSingleQuery(QueryCompiler.java:260)
at
org.apache.phoenix.compile.QueryCompiler.compile(QueryCompiler.java:128)
at
org.apache.phoenix.jdbc.PhoenixStatement$ExecutableSelectStatement.compilePlan(PhoenixStatement.java:264)
at
org.apache.phoenix.jdbc.PhoenixStatement$ExecutableSelectStatement.compilePlan(PhoenixStatement.java:1)
at
org.apache.phoenix.jdbc.PhoenixStatement.executeQuery(PhoenixStatement.java:199)
at
org.apache.phoenix.jdbc.PhoenixPreparedStatement.executeQuery(PhoenixPreparedStatement.java:157)
at
org.apache.phoenix.end2end.RowValueConstructorIT.testInListOfRVC4(RowValueConstructorIT.java:1042)
was:
IN list of row value constructors doesn't work when queried against tenant
views for multi-tenant phoenix tables. Consider this test (added in
TenantSpecificTablesDMLIT.java)
{code}
public void testRVCOnTenantSpecificTable() throws Exception {
Connection conn = nextConnection(PHOENIX_JDBC_TENANT_SPECIFIC_URL);
try {
conn.setAutoCommit(true);
conn.createStatement().executeUpdate("upsert into " +
TENANT_TABLE_NAME + " (id, user) values (1, 'BonA')");
conn.createStatement().executeUpdate("upsert into " +
TENANT_TABLE_NAME + " (id, user) values (2, 'BonB')");
conn.createStatement().executeUpdate("upsert into " +
TENANT_TABLE_NAME + " (id, user) values (3, 'BonC')");
conn.close();
conn = nextConnection(PHOENIX_JDBC_TENANT_SPECIFIC_URL);
PreparedStatement stmt = conn.prepareStatement("select id from " +
TENANT_TABLE_NAME + " WHERE (id, user) IN ((?, ?), (?, ?), (?, ?))");
stmt.setInt(1, 1);
stmt.setString(2, "BonA");
stmt.setInt(3, 2);
stmt.setString(4, "BonB");
stmt.setInt(5, 3);
stmt.setString(6, "BonC");
ResultSet rs = stmt.executeQuery();
assertTrue(rs.next());
assertEquals(1, rs.getInt(1));
assertTrue(rs.next());
assertEquals(2, rs.getInt(1));
assertTrue(rs.next());
assertEquals(3, rs.getInt(1));
assertFalse(rs.next());
}
finally {
conn.close();
}
}
{code}
Replacing TENANT_TABLE_NAME with PARENT_TABLE_NAME (that is the base table),
the test works fine.
Assignee: Kyle Buzsaki (was: James Taylor)
Summary: Exception thrown when executing an IN list of Row Value
Constructors against salted tables. (was: Bugs when executing an IN list of
Row Value Constructors.)
> Exception thrown when executing an IN list of Row Value Constructors against
> salted tables.
> -------------------------------------------------------------------------------------------
>
> Key: PHOENIX-1077
> URL: https://issues.apache.org/jira/browse/PHOENIX-1077
> Project: Phoenix
> Issue Type: Bug
> Affects Versions: 3.0.0, 4.0.0, 5.0.0
> Reporter: Samarth Jain
> Assignee: Kyle Buzsaki
>
> 1) Table - Salted. Query - IN list of RVCs. Result - fails with exception.
> Details:
> Table DDL - CREATE TABLE t (pk1 varchar(5) NOT NULL, pk2 varchar(5) NOT NULL,
> pk3 INTEGER NOT NULL, c1 INTEGER constraint pk primary key (pk1,pk2,pk3))
> SALT_BUCKETS=4
> Query - select pk1, pk2, pk3 from t WHERE (pk1, pk2, pk3) IN ((?, ?, ?), (?,
> ?, ?))
> Exception:
> java.lang.ArrayIndexOutOfBoundsException: 1
> at org.apache.phoenix.schema.ValueSchema.getField(ValueSchema.java:300)
> at org.apache.phoenix.util.ScanUtil.setKey(ScanUtil.java:260)
> at
> org.apache.phoenix.compile.ScanRanges.getPointKeys(ScanRanges.java:185)
> at org.apache.phoenix.compile.ScanRanges.create(ScanRanges.java:61)
> at
> org.apache.phoenix.compile.WhereOptimizer.pushKeyExpressionsToScan(WhereOptimizer.java:224)
> at
> org.apache.phoenix.compile.WhereCompiler.compile(WhereCompiler.java:105)
> at
> org.apache.phoenix.compile.QueryCompiler.compileSingleQuery(QueryCompiler.java:260)
> at
> org.apache.phoenix.compile.QueryCompiler.compile(QueryCompiler.java:128)
> at
> org.apache.phoenix.jdbc.PhoenixStatement$ExecutableSelectStatement.compilePlan(PhoenixStatement.java:264)
> at
> org.apache.phoenix.jdbc.PhoenixStatement$ExecutableSelectStatement.compilePlan(PhoenixStatement.java:1)
> at
> org.apache.phoenix.jdbc.PhoenixStatement.executeQuery(PhoenixStatement.java:199)
> at
> org.apache.phoenix.jdbc.PhoenixPreparedStatement.executeQuery(PhoenixPreparedStatement.java:157)
> at
> org.apache.phoenix.end2end.RowValueConstructorIT.testInListOfRVC5(RowValueConstructorIT.java:1078)
> 2) Most likely related to 1) Table - multi-tenant and salted. Query - IN
> list of RVCs. Result - Fails with exception.
> Details:
> Base Table DDL - CREATE TABLE t (tenantId varchar(5) NOT NULL, pk2 varchar(5)
> NOT NULL, pk3 INTEGER NOT NULL, c1 INTEGER constraint pk primary key
> (tenantId,pk2,pk3)) SALT_BUCKETS=4, MULTI_TENANT=true
> Tenant View DDL - CREATE VIEW t_view (tenant_col VARCHAR) AS SELECT * FROM t
> Query using global connection : select pk2, pk3 from t WHERE (tenantId, pk2,
> pk3) IN ((?, ?, ?), (?, ?, ?))
> Stacktrace:
> java.lang.ArrayIndexOutOfBoundsException: 1
> at org.apache.phoenix.schema.ValueSchema.getField(ValueSchema.java:300)
> at org.apache.phoenix.util.ScanUtil.setKey(ScanUtil.java:260)
> at
> org.apache.phoenix.compile.ScanRanges.getPointKeys(ScanRanges.java:185)
> at org.apache.phoenix.compile.ScanRanges.create(ScanRanges.java:61)
> at
> org.apache.phoenix.compile.WhereOptimizer.pushKeyExpressionsToScan(WhereOptimizer.java:224)
> at
> org.apache.phoenix.compile.WhereCompiler.compile(WhereCompiler.java:105)
> at
> org.apache.phoenix.compile.QueryCompiler.compileSingleQuery(QueryCompiler.java:260)
> at
> org.apache.phoenix.compile.QueryCompiler.compile(QueryCompiler.java:128)
> at
> org.apache.phoenix.jdbc.PhoenixStatement$ExecutableSelectStatement.compilePlan(PhoenixStatement.java:264)
> at
> org.apache.phoenix.jdbc.PhoenixStatement$ExecutableSelectStatement.compilePlan(PhoenixStatement.java:1)
> at
> org.apache.phoenix.jdbc.PhoenixStatement.executeQuery(PhoenixStatement.java:199)
> at
> org.apache.phoenix.jdbc.PhoenixPreparedStatement.executeQuery(PhoenixPreparedStatement.java:157)
> at
> org.apache.phoenix.end2end.RowValueConstructorIT.testInListOfRVC4(RowValueConstructorIT.java:1042)
--
This message was sent by Atlassian JIRA
(v6.2#6252)