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)

Reply via email to