You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@phoenix.apache.org by "Samarth Jain (JIRA)" <ji...@apache.org> on 2014/10/11 01:46:33 UTC
[jira] [Created] (PHOENIX-1337) Querying using tenant specific
connections is broken
Samarth Jain created PHOENIX-1337:
-------------------------------------
Summary: Querying using tenant specific connections is broken
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)