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]