dbwong commented on a change in pull request #830:
URL: https://github.com/apache/phoenix/pull/830#discussion_r455505467



##########
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:
       sure




----------------------------------------------------------------
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]


Reply via email to