Description
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())
}
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);
}
}
Attachments
Attachments
Issue Links
- links to