Samarth Jain created PHOENIX-3340:
-------------------------------------

             Summary: Dropping column doesn't drop index for local immutable 
indexes with STORE_COLUMNS_IN_SINGLE_CELL
                 Key: PHOENIX-3340
                 URL: https://issues.apache.org/jira/browse/PHOENIX-3340
             Project: Phoenix
          Issue Type: Bug
            Reporter: Samarth Jain


Test case on encode columns branch that fails:
{code}
@Test
public void testDropIndexedColumnImmutableIndex() throws Exception {
        helpTestDropIndexedColumn(true);
    }
    
    private void helpTestDropIndexedColumn(boolean immutable) throws Exception {
        String query;
        ResultSet rs;
        PreparedStatement stmt;

        Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
        Connection conn = DriverManager.getConnection(getUrl(), props);
        conn.setAutoCommit(false);

        // make sure that the tables are empty, but reachable
        conn.createStatement().execute(
          "CREATE TABLE " + DATA_TABLE_FULL_NAME
              + " (k VARCHAR NOT NULL PRIMARY KEY, v1 VARCHAR, v2 VARCHAR) " + 
(immutable ? "IMMUTABLE_ROWS = true" : ""));
        query = "SELECT * FROM " + DATA_TABLE_FULL_NAME;
        rs = conn.createStatement().executeQuery(query);
        assertFalse(rs.next());

        conn.createStatement().execute(
          "CREATE INDEX " + INDEX_TABLE_NAME + " ON " + DATA_TABLE_FULL_NAME + 
" (v1, v2)");
        conn.createStatement().execute(
            "CREATE LOCAL INDEX " + LOCAL_INDEX_TABLE_NAME + " ON " + 
DATA_TABLE_FULL_NAME + " (v1, v2)");

        query = "SELECT * FROM " + INDEX_TABLE_FULL_NAME;
        rs = conn.createStatement().executeQuery(query);
        assertFalse(rs.next());

        // load some data into the table
        stmt = conn.prepareStatement("UPSERT INTO " + DATA_TABLE_FULL_NAME + " 
VALUES(?,?,?)");
        stmt.setString(1, "a");
        stmt.setString(2, "x");
        stmt.setString(3, "1");
        stmt.execute();
        conn.commit();

        assertIndexExists(conn,true);
        conn.createStatement().execute("ALTER TABLE " + DATA_TABLE_FULL_NAME + 
" DROP COLUMN v1");
        assertIndexExists(conn,false);

        query = "SELECT * FROM " + DATA_TABLE_FULL_NAME;
        rs = conn.createStatement().executeQuery(query);
        assertTrue(rs.next());
        assertEquals("a",rs.getString(1));
        assertEquals("1",rs.getString(2));
        assertFalse(rs.next());

        // load some data into the table
        stmt = conn.prepareStatement("UPSERT INTO " + DATA_TABLE_FULL_NAME + " 
VALUES(?,?)");
        stmt.setString(1, "a");
        stmt.setString(2, "2");
        stmt.execute();
        conn.commit();

        query = "SELECT * FROM " + DATA_TABLE_FULL_NAME;
        rs = conn.createStatement().executeQuery(query);
        assertTrue(rs.next());
        assertEquals("a",rs.getString(1));
        assertEquals("2",rs.getString(2));
        assertFalse(rs.next());
    }

{code}

FYI, [~tdsilva]



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to