[
https://issues.apache.org/jira/browse/PHOENIX-7770?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Viraj Jasani updated PHOENIX-7770:
----------------------------------
Summary: Incorrect index scan range while using RVC on VARBINARY_ENCODED
(was: Incorrect index scan range when using greater-than RVC and equality on
leading key in RVC)
> Incorrect index scan range while using RVC on VARBINARY_ENCODED
> ---------------------------------------------------------------
>
> Key: PHOENIX-7770
> URL: https://issues.apache.org/jira/browse/PHOENIX-7770
> Project: Phoenix
> Issue Type: Bug
> Affects Versions: 5.3.0
> Reporter: Palash Chauhan
> Priority: Major
>
> {code:java}
> String ddl = "CREATE TABLE " + tableName
> + " (HK VARBINARY_ENCODED NOT NULL, "
> + " SK VARBINARY_ENCODED NOT NULL, "
> + " GSI_HK VARBINARY_ENCODED, "
> + " GSI_SK VARBINARY_ENCODED, "
> + " DATA VARCHAR, "
> + " CONSTRAINT pk PRIMARY KEY(HK, SK))";{code}
> {code:java}
> String indexDdl = "CREATE UNCOVERED INDEX " + indexName + " ON " + tableName
> + " (GSI_HK, GSI_SK)";
> {code}
>
> {code:java}
> // Insert 3 rows with same GSI_HK and GSI_SK
> "UPSERT INTO " + tableName + " (HK, SK, GSI_HK, GSI_SK, DATA) VALUES (?, ?,
> ?, ?, ?)");
> // Common values
> byte[] gsiHk = new byte[]{0x00, 0x00, 0x00, 0x0A};
> byte[] gsiSk = "1".getBytes();
> // Row 1: HK=[0x0B,0x01], SK="1" - query should start from this row excluded
> byte[] hk1 = new byte[]{0x0B, 0x01};
> byte[] sk1 = "1".getBytes();
> upsert.setBytes(1, hk1);
> upsert.setBytes(2, sk1);
> upsert.setBytes(3, gsiHk);
> upsert.setBytes(4, gsiSk);
> upsert.setString(5, "row1-should-be-excluded");
> upsert.execute();
> // Row 2: HK=[0x0B,0x01], SK="2" - should be INCLUDED (SK "2" > "1")
> byte[] hk2 = new byte[]{0x0B, 0x01};
> byte[] sk2 = "2".getBytes();
> upsert.setBytes(1, hk2);
> upsert.setBytes(2, sk2);
> upsert.setBytes(3, gsiHk);
> upsert.setBytes(4, gsiSk);
> upsert.setString(5, "row2-include");
> upsert.execute();
> // Row 3: HK=[0x0B,0x02], SK="1" - should be INCLUDED (HK [0x0B,0x02] >
> [0x0B,0x01])
> byte[] hk3 = new byte[]{0x0B, 0x02};
> byte[] sk3 = "1".getBytes();
> upsert.setBytes(1, hk3);
> upsert.setBytes(2, sk3);
> upsert.setBytes(3, gsiHk);
> upsert.setBytes(4, gsiSk);
> upsert.setString(5, "row3-include");
> upsert.execute();
> conn.commit();{code}
> {code:java}
> String q = "SELECT /*+ INDEX(" + tableName + " " + indexName + ") */ "
> + "HK, SK, DATA FROM " + tableName
> + " WHERE GSI_HK = ?"
> + " AND GSI_SK = ?"
> + " AND (GSI_SK, HK, SK) > (?, ?, ?)"
> + " ORDER BY GSI_SK, HK, SK";
> PreparedStatement stmt1 = conn.prepareStatement(q);
> stmt1.setBytes(1, gsiHk);
> stmt1.setBytes(2, gsiSk);
> stmt1.setBytes(3, gsiSk);
> stmt1.setBytes(4, hk1);
> stmt1.setBytes(5, sk1);
> ResultSet rs1 = stmt1.executeQuery(); {code}
> This query should skip the first row due to the RVC constraint but it does
> not.
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)