You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@phoenix.apache.org by "Daniel Wong (Jira)" <ji...@apache.org> on 2020/05/27 21:24:00 UTC

[jira] [Created] (PHOENIX-5924) RVC Offset does not handle variable length fields exclusive scan boundary correctly

Daniel Wong created PHOENIX-5924:
------------------------------------

             Summary: RVC Offset does not handle variable length fields exclusive scan boundary correctly
                 Key: PHOENIX-5924
                 URL: https://issues.apache.org/jira/browse/PHOENIX-5924
             Project: Phoenix
          Issue Type: Bug
            Reporter: Daniel Wong
            Assignee: Daniel Wong


The way exclusive boundary was handled by incrementing the key for variable length fields is incorrect in the scan boundary.

 

In the following case we incrementing incorrectly from 0x490049 -> 0x490050 ('1','1' -> '1','2')

We should increment from 0x490049 -> 0x49004900 ('1','1' -> '1','1'\x00) 
@Test
public void testScenario() throws Exception \{
    String TEST_DDL = "CREATE TABLE IF NOT EXISTS TEST_SCHEMA (\n"
            + "    ORGANIZATION_ID VARCHAR(15), \n" + "    TEST_ID VARCHAR(15), \n"
            + "    CREATED_DATE DATE, \n" + "    LAST_UPDATE DATE\n"
            + "    CONSTRAINT TEST_SCHEMA_PK PRIMARY KEY (ORGANIZATION_ID, TEST_ID) \n" + ")";

    try (Statement statement = conn.createStatement()) {
        statement.execute(TEST_DDL);
    }

    //setup
    List<String> upserts = new ArrayList<>();
    upserts.add("UPSERT INTO TEST_SCHEMA(ORGANIZATION_ID,TEST_ID) VALUES ('1','1')");
    upserts.add("UPSERT INTO TEST_SCHEMA(ORGANIZATION_ID,TEST_ID) VALUES ('1','10')");
    upserts.add("UPSERT INTO TEST_SCHEMA(ORGANIZATION_ID,TEST_ID) VALUES ('2','2')");

    for(String sql : upserts) \{
        try (Statement statement = conn.createStatement()) {
            statement.execute(sql);
        }
    }

    conn.commit();

    String query1 = "SELECT * FROM TEST_SCHEMA";
    String query2 = "SELECT * FROM TEST_SCHEMA OFFSET (ORGANIZATION_ID,TEST_ID) = ('1','1')";

    try (Statement statement = conn.createStatement() ; ResultSet rs1 = statement.executeQuery(query1) ) \{
        TestUtil.printResultSet(rs1);
    }

    try (Statement statement = conn.createStatement() ; ResultSet rs2 = statement.executeQuery(query2) ) \{
        TestUtil.printResultSet(rs2);
    }
}
 



--
This message was sent by Atlassian Jira
(v8.3.4#803005)