[
https://issues.apache.org/jira/browse/PHOENIX-1337?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
James Taylor updated PHOENIX-1337:
----------------------------------
Summary: Unpadded fixed length tenant ID causes erroneous results (was:
Querying using tenant specific connections is broken)
> Unpadded fixed length tenant ID causes erroneous results
> --------------------------------------------------------
>
> Key: PHOENIX-1337
> URL: https://issues.apache.org/jira/browse/PHOENIX-1337
> Project: Phoenix
> Issue Type: Bug
> Affects Versions: 5.0.0, 4.1
> Reporter: Samarth Jain
> Priority: Critical
>
> The test fails both on 4.1.0 and master. The test can be added in any class
> that extends our BaseHBaseManagedTimeTest.
> {code}
> @Test
> public void testQueryingUsingTenantSpecific() throws Exception {
> String tenantId1 = "org1";
> String tenantId2 = "org2";
> String ddl = "CREATE TABLE T (tenantId char(15) NOT NULL, pk1 varchar
> NOT NULL, pk2 INTEGER NOT NULL, val1 VARCHAR CONSTRAINT pk primary key
> (tenantId,pk1,pk2)) MULTI_TENANT = true";
> Connection conn = DriverManager.getConnection(getUrl());
> conn.createStatement().execute(ddl);
> String dml = "UPSERT INTO T (tenantId, pk1, pk2, val1) VALUES (?, ?,
> ?, ?)";
> PreparedStatement stmt = conn.prepareStatement(dml);
>
> // insert two rows in table T. One for tenantId1 and other for
> tenantId2.
> stmt.setString(1, tenantId1);
> stmt.setString(2, "pk1b");
> stmt.setInt(3, 100);
> stmt.setString(4, "value1");
> stmt.executeUpdate();
>
> stmt.setString(1, tenantId2);
> stmt.setString(2, "pk1b");
> stmt.setInt(3, 200);
> stmt.setString(4, "value2");
> stmt.executeUpdate();
> conn.commit();
>
> // get a tenant specific url.
> String tenantUrl = getUrl() + ';' + TENANT_ID_ATTRIB + '=' +
> tenantId1;
> Connection tenantConn = DriverManager.getConnection(tenantUrl);
>
> // create a tenant specific view.
> tenantConn.createStatement().execute("CREATE VIEW V AS select * from
> T");
> String query = "SELECT val1 FROM V WHERE pk1 = ?";
>
> // using the tenant connection query the view.
> PreparedStatement stmt2 = tenantConn.prepareStatement(query);
> stmt2.setString(1, "pk1b"); // for tenantId1 the row inserted has pk1
> = "pk1b"
> ResultSet rs = stmt2.executeQuery();
> assertTrue(rs.next());
> assertEquals("value1", rs.getString(1));
> assertFalse("No other rows should have been returned for the tenant",
> rs.next()); // should have just returned one record since for org1 we have
> only one row.
> }
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)