maedhroz commented on a change in pull request #1200:
URL: https://github.com/apache/cassandra/pull/1200#discussion_r708628793



##########
File path: 
test/unit/org/apache/cassandra/cql3/validation/miscellaneous/SSTablesIteratedTest.java
##########
@@ -983,4 +988,129 @@ public void 
testCompactTableWithMultipleRegularColumnsAndColumnDeletion() throws
         executeAndCheck("SELECT v1, v2 FROM %s WHERE pk = 4", 3, row(3, null));
         executeAndCheck("SELECT v2 FROM %s WHERE pk = 4", 3, row((Integer) 
null));
     }
+
+    @Test
+    public void testNonCompactTableWithStaticColumnAndRowDeletion() throws 
Throwable
+    {
+        createTable("CREATE TABLE %s (pk int, c int, s int static, v int, 
PRIMARY KEY(pk, c))");
+
+        execute("INSERT INTO %s (pk, c, s, v) VALUES (?, ?, ?, ?) USING 
TIMESTAMP 1000", 1, 1, 1, 1);
+        execute("INSERT INTO %s (pk, s) VALUES (?, ?) USING TIMESTAMP 1001", 
2, 2);
+        execute("INSERT INTO %s (pk, c, v) VALUES (?, ?, ?) USING TIMESTAMP 
1002", 3, 1, 1);
+        flush();
+        execute("UPDATE %s USING TIMESTAMP 2000 SET v = ? WHERE pk = ? AND c = 
?", 2, 1, 1);
+        execute("INSERT INTO %s (pk, c, v) VALUES (?, ?, ?) USING TIMESTAMP 
2001", 2, 1, 2);
+        execute("DELETE FROM %s USING TIMESTAMP 2001 WHERE pk = ? AND c = ?", 
3, 1);
+        flush();
+        execute("DELETE FROM %s USING TIMESTAMP 3000 WHERE pk = ? AND c = ?", 
1, 1);
+        execute("DELETE FROM %s USING TIMESTAMP 3001 WHERE pk = ? AND c = ?", 
2, 1);
+        execute("INSERT INTO %s (pk, s) VALUES (?, ?) USING TIMESTAMP 3002", 
3, 3);
+        flush();
+
+        executeAndCheck("SELECT * FROM %s WHERE pk = 1", 3, row(1, null, 1, 
null));
+        executeAndCheck("SELECT * FROM %s WHERE pk = 1 AND c = 1", 3);
+        // In 3.0 the SinglePartitionReadCommand is looking for all the 
fetching columns which always includes the
+        // static ones so it needs to go through all the SSTables.
+        executeAndCheck("SELECT v FROM %s WHERE pk = 1 AND c = 1", 3);
+
+        executeAndCheck("SELECT * FROM %s WHERE pk = 2", 3, row(2, null, 2, 
null));
+        executeAndCheck("SELECT * FROM %s WHERE pk = 2 AND c = 1", 3);
+        executeAndCheck("SELECT v FROM %s WHERE pk = 2 AND c = 1", 3);
+
+        executeAndCheck("SELECT * FROM %s WHERE pk = 3", 3, row(3, null, 3, 
null));
+        executeAndCheck("SELECT * FROM %s WHERE pk = 3 AND c = 1", 2);
+        executeAndCheck("SELECT v FROM %s WHERE pk = 3 AND c = 1", 2);
+    }
+
+    @Test
+    public void testNonCompactTableWithStaticColumnAndRangeDeletion() throws 
Throwable
+    {
+        createTable("CREATE TABLE %s (pk int, c int, s int static, v int, 
PRIMARY KEY(pk, c))");
+
+        execute("INSERT INTO %s (pk, c, s, v) VALUES (?, ?, ?, ?) USING 
TIMESTAMP 1000", 1, 1, 1, 1);
+        execute("INSERT INTO %s (pk, s) VALUES (?, ?) USING TIMESTAMP 1001", 
2, 2);
+        execute("INSERT INTO %s (pk, c, v) VALUES (?, ?, ?) USING TIMESTAMP 
1002", 3, 1, 1);
+        flush();
+        execute("UPDATE %s USING TIMESTAMP 2000 SET v = ? WHERE pk = ? AND c = 
?", 2, 1, 1);
+        execute("INSERT INTO %s (pk, c, v) VALUES (?, ?, ?) USING TIMESTAMP 
2001", 2, 1, 2);
+        execute("DELETE FROM %s USING TIMESTAMP 2001 WHERE pk = ? AND c >= ?", 
3, 0);
+        flush();
+        execute("DELETE FROM %s USING TIMESTAMP 3000 WHERE pk = ? AND c > ?", 
1, 0);
+        execute("DELETE FROM %s USING TIMESTAMP 3001 WHERE pk = ? AND c > ?", 
2, 0);
+        execute("INSERT INTO %s (pk, s) VALUES (?, ?) USING TIMESTAMP 3002", 
3, 3);
+        flush();
+
+        executeAndCheck("SELECT * FROM %s WHERE pk = 1", 3, row(1, null, 1, 
null));
+        executeAndCheck("SELECT * FROM %s WHERE pk = 1 AND c = 1", 3);
+        // In 3.0 the SinglePartitionReadCommand is looking for all the 
fetching columns which always includes the
+        // static ones so it needs to go through all the SSTables.
+        executeAndCheck("SELECT v FROM %s WHERE pk = 1 AND c = 1", 3);
+
+        executeAndCheck("SELECT * FROM %s WHERE pk = 2", 3, row(2, null, 2, 
null));
+        executeAndCheck("SELECT * FROM %s WHERE pk = 2 AND c = 1", 3);
+        executeAndCheck("SELECT v FROM %s WHERE pk = 2 AND c = 1", 3);
+
+        executeAndCheck("SELECT * FROM %s WHERE pk = 3", 3, row(3, null, 3, 
null));
+        executeAndCheck("SELECT * FROM %s WHERE pk = 3 AND c = 1", 2);
+        executeAndCheck("SELECT v FROM %s WHERE pk = 3 AND c = 1", 2);
+    }
+
+    @Test
+    public void testNonCompactTableWithStaticColumn() throws Throwable
+    {
+        createTable("CREATE TABLE %s (pk int, c int, s int static, v int, 
PRIMARY KEY(pk, c))");
+
+        execute("INSERT INTO %s (pk, c, s, v) VALUES (?, ?, ?, ?) USING 
TIMESTAMP 1000", 1, 1, 1, 1);
+        execute("INSERT INTO %s (pk, c, v) VALUES (?, ?, ?) USING TIMESTAMP 
1001", 2, 1, 1);
+        execute("INSERT INTO %s (pk, c, v) VALUES (?, ?, ?) USING TIMESTAMP 
1002", 3, 1, 1);
+        flush();
+        execute("UPDATE %s USING TIMESTAMP 2000 SET v = ? WHERE pk = ? AND c = 
?", 2, 1, 1);
+        execute("UPDATE %s USING TIMESTAMP 2001 SET v = ? WHERE pk = ? AND c = 
?", 2, 2, 1);
+        execute("INSERT INTO %s (pk, c, v) VALUES (?, ?, ?) USING TIMESTAMP 
2002", 3, 1, 2);
+        flush();
+        execute("UPDATE %s USING TIMESTAMP 3000 SET s = ? WHERE pk = ?", 2, 1);
+        execute("INSERT INTO %s (pk, s) VALUES (?, ?) USING TIMESTAMP 3001", 
2, 1);
+        execute("INSERT INTO %s (pk, c, s, v) VALUES (?, ?, ?, ?) USING 
TIMESTAMP 3002", 3, 1, 1, 3);
+        flush();
+
+        executeAndCheck("SELECT * FROM %s WHERE pk = 1", 3, row(1, 1, 2, 2));
+        executeAndCheck("SELECT * FROM %s WHERE pk = 1 AND c = 1", 3, row(1, 
1, 2, 2));
+        executeAndCheck("SELECT v FROM %s WHERE pk = 1 AND c = 1", 3, row(2));
+        executeAndCheck("SELECT s FROM %s WHERE pk = 1", 3, row(2));
+        executeAndCheck("SELECT DISTINCT s FROM %s WHERE pk = 1", 3, row(2));
+
+        executeAndCheck("SELECT * FROM %s WHERE pk = 2", 3, row(2, 1, 1, 2));
+        executeAndCheck("SELECT * FROM %s WHERE pk = 2 AND c = 1", 3, row(2, 
1, 1, 2));
+        executeAndCheck("SELECT v FROM %s WHERE pk = 2 AND c = 1", 3, row(2));
+        executeAndCheck("SELECT s FROM %s WHERE pk = 2", 3, row(1));
+        executeAndCheck("SELECT DISTINCT s FROM %s WHERE pk = 2", 3, row(1));
+
+        executeAndCheck("SELECT * FROM %s WHERE pk = 3", 3, row(3, 1, 1, 3));
+        executeAndCheck("SELECT * FROM %s WHERE pk = 3 AND c = 1", 1, row(3, 
1, 1, 3));
+        executeAndCheck("SELECT v FROM %s WHERE pk = 3 AND c = 1", 1, row(3));
+        executeAndCheck("SELECT s FROM %s WHERE pk = 3", 3, row(1));
+        executeAndCheck("SELECT DISTINCT s FROM %s WHERE pk = 3", 3, row(1));
+    }
+
+    @Test
+    public void testCompactStaticTable() throws Throwable
+    {
+        createTable("CREATE TABLE %s (pk int PRIMARY KEY, v int) WITH COMPACT 
STORAGE");

Review comment:
       The case where we have a compact table but more than one non-key column 
might be interesting, although scouring this class, it seems like 
`testCompactAndNonCompactTableWithPartitionTombstones()` sort of already hits 
it. WDYT?




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

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to