yanxinyi commented on a change in pull request #830:
URL: https://github.com/apache/phoenix/pull/830#discussion_r455504520
##########
File path:
phoenix-core/src/it/java/org/apache/phoenix/end2end/RowValueConstructorOffsetIT.java
##########
@@ -931,6 +933,101 @@ public void testIndexMultiColumnsMultiIndexesRVCOffset()
throws SQLException {
}
}
+ @Test
+ public void
testIndexMultiColumnsMultiIndexesVariableLengthNullLiteralsRVCOffset() throws
SQLException {
+ String ddlTemplate = "CREATE TABLE %s (k1 VARCHAR,\n" +
+ "k2 VARCHAR,\n" +
+ "k3 VARCHAR,\n" +
+ "k4 VARCHAR,\n" +
+ "k5 VARCHAR,\n" +
+ "k6 VARCHAR,\n" +
+ "v1 VARCHAR,\n" +
+ "v2 VARCHAR,\n" +
+ "v3 VARCHAR,\n" +
+ "v4 VARCHAR,\n" +
+ "CONSTRAINT pk PRIMARY KEY (k1, k2, k3, k4, k5, k6)) ";
+
+ String longKeyTableName = "T_" + generateUniqueName();
+ String longKeyIndex1Name = "INDEX_1_" + longKeyTableName;
+
+ String ddl = String.format(ddlTemplate,longKeyTableName);
+ try(Statement statement = conn.createStatement()) {
+ statement.execute(ddl);
+ }
+
+ String createIndex1 = "CREATE INDEX IF NOT EXISTS " +
longKeyIndex1Name + " ON " + longKeyTableName + " (k2 ,v1, k4)";
+
+ try(Statement statement = conn.createStatement()) {
+ statement.execute(createIndex1);
+ }
+
+ String sql0 = "SELECT v1,v3 FROM " + longKeyTableName + " LIMIT 3
OFFSET (k1 ,k2, k3, k4, k5, k6)=('0','1',null,null,null,'2')";
+ try(Statement statement = conn.createStatement(); ResultSet rs =
statement.executeQuery(sql0)) {
+ PhoenixResultSet phoenixResultSet =
rs.unwrap(PhoenixResultSet.class);
+
assertEquals(1,phoenixResultSet.getStatement().getQueryPlan().getScans().size());
+
assertEquals(1,phoenixResultSet.getStatement().getQueryPlan().getScans().get(0).size());
+ byte[] startRow =
phoenixResultSet.getStatement().getQueryPlan().getScans().get(0).get(0).getStartRow();
+ byte[] expectedRow = new byte[] {'0',0,'1',0,0,0,0,'2',1}; //note
trailing 1 not 0 due to phoenix internal inconsistency
+ assertArrayEquals(expectedRow,startRow);
+ }
+
+ String sql = "SELECT k2,v1,k4 FROM " + longKeyTableName + " LIMIT 3
OFFSET (k2,v1,k4,k1,k3,k5,k6)=('2',null,'4','1','3','5','6')";
+ try(Statement statement = conn.createStatement(); ResultSet rs =
statement.executeQuery(sql)) {
+ PhoenixResultSet phoenixResultSet =
rs.unwrap(PhoenixResultSet.class);
+
assertEquals(1,phoenixResultSet.getStatement().getQueryPlan().getScans().size());
+
assertEquals(1,phoenixResultSet.getStatement().getQueryPlan().getScans().get(0).size());
+ byte[] startRow =
phoenixResultSet.getStatement().getQueryPlan().getScans().get(0).get(0).getStartRow();
+ byte[] expectedRow = new byte[]
{'2',0,0,'4',0,'1',0,'3',0,'5',0,'6',1}; //note trailing 1 not 0 due to phoenix
internal inconsistency
+ assertArrayEquals(expectedRow,startRow);
+ }
+ }
+
+ @Test
+ public void testIndexMultiColumnsIndexedFixedLengthNullLiteralsRVCOffset()
throws SQLException {
+ String ddlTemplate = "CREATE TABLE %s (k1 VARCHAR,\n" +
+ "v1 TINYINT,\n" +
+ "v2 TINYINT,\n" +
+ "v3 TINYINT,\n" +
+ "v4 TINYINT,\n" +
+ "CONSTRAINT pk PRIMARY KEY (k1)) ";
+
+ String longKeyTableName = "T_" + generateUniqueName();
+ String longKeyIndex1Name = "INDEX_1_" + longKeyTableName;
+
+ String ddl = String.format(ddlTemplate,longKeyTableName);
+ try(Statement statement = conn.createStatement()) {
+ statement.execute(ddl);
+ }
+
+ String createIndex1 = "CREATE INDEX IF NOT EXISTS " +
longKeyIndex1Name + " ON " + longKeyTableName + " (v1, k1, v2, v3)";
+
+ try(Statement statement = conn.createStatement()) {
+ statement.execute(createIndex1);
+ }
+
+ String sql0 = "SELECT v1,v3 FROM " + longKeyTableName + " LIMIT 3
OFFSET (k1)=('-1')";
+ try(Statement statement = conn.createStatement(); ResultSet rs =
statement.executeQuery(sql0)) {
+ PhoenixResultSet phoenixResultSet =
rs.unwrap(PhoenixResultSet.class);
+
assertEquals(1,phoenixResultSet.getStatement().getQueryPlan().getScans().size());
+
assertEquals(1,phoenixResultSet.getStatement().getQueryPlan().getScans().get(0).size());
+ byte[] startRow =
phoenixResultSet.getStatement().getQueryPlan().getScans().get(0).get(0).getStartRow();
+ byte[] expectedRow = new byte[] {'-','1',1}; //note trailing 1 not
0 due to phoenix internal inconsistency
+ assertArrayEquals(expectedRow,startRow);
+ }
+
+ String sql = "SELECT v1,v3 FROM " + longKeyTableName + " LIMIT 3
OFFSET (v1, k1, v2, v3)=(null,'a',null,0)";
+ try(Statement statement = conn.createStatement(); ResultSet rs =
statement.executeQuery(sql)) {
+ PhoenixResultSet phoenixResultSet =
rs.unwrap(PhoenixResultSet.class);
+
assertEquals(1,phoenixResultSet.getStatement().getQueryPlan().getScans().size());
+
assertEquals(1,phoenixResultSet.getStatement().getQueryPlan().getScans().get(0).size());
+ byte[] startRow =
phoenixResultSet.getStatement().getQueryPlan().getScans().get(0).get(0).getStartRow();
+ //decimal is used for fixed with types
+ byte[] expectedRow = new byte[] {0,'a',0,0,-128,1}; //note
trailing 1 not 0 due to phoenix internal inconsistency
Review comment:
i see. can you add this to the comment so that ppl can have a better
understanding and also knowledge transfer, thx!
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]