[
https://issues.apache.org/jira/browse/PHOENIX-1077?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14057056#comment-14057056
]
Eli Levine commented on PHOENIX-1077:
-------------------------------------
Interestingly enough, the test passes if there is only a single IN clause, e.g.
{{WHERE (id, user) IN ((?, ?))}}.
Tenant constraint is added in WhereCompiler.compile() to produce {{((ID, USER)
IN ((1, 'BonA'),(2, 'BonB'),(3, 'BonC')) AND TENANT_TYPE_ID = 'abc')}} for the
original query.
But for a single IN clause version of the query the where clause is translated
into {{((ID = 1 AND USER = 'BonA') AND TENANT_TYPE_ID = 'abc')}}. Notice that
IN is translated an AND. Digging deeper.
> IN list of row value constructors doesn't work for tenant specific views
> ------------------------------------------------------------------------
>
> 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: Eli Levine
>
> 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.
--
This message was sent by Atlassian JIRA
(v6.2#6252)