1717
1818import org .junit .Test ;
1919
20+ import org .apache .cassandra .config .DatabaseDescriptor ;
21+ import org .apache .cassandra .db .marshal .Int32Type ;
22+ import org .apache .cassandra .dht .IPartitioner ;
2023import org .assertj .core .api .Assertions ;
2124
2225public class PartitionRangeReadCommandCQLTest extends ReadCommandCQLTester <PartitionRangeReadCommand >
@@ -28,19 +31,62 @@ public void testToCQLString()
2831
2932 assertToCQLString ("SELECT * FROM %s" , "SELECT * FROM %s" );
3033
31- assertToCQLString ("SELECT * FROM %s WHERE c = 0 ALLOW FILTERING" , "SELECT * FROM %s WHERE (c) = (0) " );
32- assertToCQLString ("SELECT * FROM %s WHERE (c) = (0) ALLOW FILTERING" , "SELECT * FROM %s WHERE (c) = (0) " );
34+ assertToCQLString ("SELECT * FROM %s WHERE c = 0 ALLOW FILTERING" , "SELECT * FROM %s WHERE c = 0 " );
35+ assertToCQLString ("SELECT * FROM %s WHERE (c) = (0) ALLOW FILTERING" , "SELECT * FROM %s WHERE c = 0 " );
3336 assertToCQLString ("SELECT * FROM %s WHERE c > 0 ALLOW FILTERING" , "SELECT * FROM %s WHERE c > 0" );
3437 assertToCQLString ("SELECT * FROM %s WHERE c < 0 ALLOW FILTERING" , "SELECT * FROM %s WHERE c < 0" );
3538 assertToCQLString ("SELECT * FROM %s WHERE c >= 0 ALLOW FILTERING" , "SELECT * FROM %s WHERE c >= 0" );
3639 assertToCQLString ("SELECT * FROM %s WHERE c <= 0 ALLOW FILTERING" , "SELECT * FROM %s WHERE c <= 0" );
3740
3841 assertToCQLString ("SELECT * FROM %s WHERE v = 1 ALLOW FILTERING" , "SELECT * FROM %s WHERE v = 1" );
39- assertToCQLString ("SELECT * FROM %s WHERE c = 0 AND v = 1 ALLOW FILTERING" , "SELECT * FROM %s WHERE v = 1 AND (c) = (0) " );
42+ assertToCQLString ("SELECT * FROM %s WHERE c = 0 AND v = 1 ALLOW FILTERING" , "SELECT * FROM %s WHERE v = 1 AND c = 0 " );
4043 assertToCQLString ("SELECT * FROM %s WHERE c > 0 AND v = 1 ALLOW FILTERING" , "SELECT * FROM %s WHERE v = 1 AND c > 0" );
4144 assertToCQLString ("SELECT * FROM %s WHERE c < 0 AND v = 1 ALLOW FILTERING" , "SELECT * FROM %s WHERE v = 1 AND c < 0" );
4245 assertToCQLString ("SELECT * FROM %s WHERE c >= 0 AND v = 1 ALLOW FILTERING" , "SELECT * FROM %s WHERE v = 1 AND c >= 0" );
4346 assertToCQLString ("SELECT * FROM %s WHERE c <= 0 AND v = 1 ALLOW FILTERING" , "SELECT * FROM %s WHERE v = 1 AND c <= 0" );
47+
48+ // test with token restrictions
49+ IPartitioner partitioner = DatabaseDescriptor .getPartitioner ();
50+ String token = partitioner .getToken (Int32Type .instance .decompose (0 )).toString ();
51+ assertToCQLString ("SELECT * FROM %s WHERE token(k) > token(0)" ,
52+ "SELECT * FROM %s WHERE token(k) > " + token );
53+ assertToCQLString ("SELECT * FROM %s WHERE token(k) >= token(0)" ,
54+ "SELECT * FROM %s WHERE token(k) >= " + token );
55+ assertToCQLString ("SELECT * FROM %s WHERE token(k) >= token(0) AND token(k) <= token(0)" ,
56+ "SELECT * FROM %s WHERE token(k) >= " + token + " AND token(k) <= " + token );
57+
58+ // test with a secondary index (indexed queries are always mapped to range commands)
59+ createIndex ("CREATE INDEX ON %s(v)" );
60+ assertToCQLString ("SELECT * FROM %s WHERE v = 0" , "SELECT * FROM %s WHERE v = 0" );
61+ assertToCQLString ("SELECT * FROM %s WHERE v = 0 AND k = 0" , "SELECT * FROM %s WHERE v = 0 AND k = 0" );
62+ assertToCQLString ("SELECT * FROM %s WHERE v = 0 AND k = 0 AND c = 0" , "SELECT * FROM %s WHERE v = 0 AND k = 0 AND c = 0" );
63+ assertToCQLString ("SELECT * FROM %s WHERE v = 0 AND k = 0 AND c > 0" , "SELECT * FROM %s WHERE v = 0 AND k = 0 AND c > 0" );
64+ assertToCQLString ("SELECT * FROM %s WHERE v = 0 AND k = 0 AND c < 0" , "SELECT * FROM %s WHERE v = 0 AND k = 0 AND c < 0" );
65+ assertToCQLString ("SELECT * FROM %s WHERE v = 0 AND k = 0 AND c >= 0" , "SELECT * FROM %s WHERE v = 0 AND k = 0 AND c >= 0" );
66+ assertToCQLString ("SELECT * FROM %s WHERE v = 0 AND k = 0 AND c <= 0" , "SELECT * FROM %s WHERE v = 0 AND k = 0 AND c <= 0" );
67+ assertToCQLString ("SELECT * FROM %s WHERE v = 0 AND k = 0 AND c IN (0)" , "SELECT * FROM %s WHERE v = 0 AND k = 0 AND c = 0" );
68+ assertToCQLString ("SELECT * FROM %s WHERE v = 0 AND k = 0 AND c IN (0, 1)" , "SELECT * FROM %s WHERE v = 0 AND k = 0 AND c IN (0, 1)" );
69+ assertToCQLString ("SELECT * FROM %s WHERE v = 0 AND token(k) > token(0)" ,
70+ "SELECT * FROM %s WHERE v = 0 AND token(k) > " + token );
71+ assertToCQLString ("SELECT * FROM %s WHERE v = 0 AND token(k) >= token(0)" ,
72+ "SELECT * FROM %s WHERE v = 0 AND token(k) >= " + token );
73+ assertToCQLString ("SELECT * FROM %s WHERE v = 0 AND token(k) >= token(0) AND token(k) <= token(0)" ,
74+ "SELECT * FROM %s WHERE v = 0 AND token(k) >= " + token + " AND token(k) <= " + token );
75+
76+ // test with index and multi-column clustering
77+ createTable ("CREATE TABLE %s (k int, c1 int, c2 int,v int, PRIMARY KEY (k, c1, c2))" );
78+ createIndex ("CREATE INDEX ON %s(v)" );
79+ assertToCQLString ("SELECT * FROM %s WHERE v = 0 AND k = 0" , "SELECT * FROM %s WHERE v = 0 AND k = 0" );
80+ assertToCQLString ("SELECT * FROM %s WHERE v = 0 AND k = 0 AND c1 = 1" , "SELECT * FROM %s WHERE v = 0 AND k = 0 AND c1 = 1" );
81+ assertToCQLString ("SELECT * FROM %s WHERE v = 0 AND k = 0 AND c1 > 1" , "SELECT * FROM %s WHERE v = 0 AND k = 0 AND c1 > 1" );
82+ assertToCQLString ("SELECT * FROM %s WHERE v = 0 AND k = 0 AND c1 < 1" , "SELECT * FROM %s WHERE v = 0 AND k = 0 AND c1 < 1" );
83+ assertToCQLString ("SELECT * FROM %s WHERE v = 0 AND k = 0 AND c1 >= 1" , "SELECT * FROM %s WHERE v = 0 AND k = 0 AND c1 >= 1" );
84+ assertToCQLString ("SELECT * FROM %s WHERE v = 0 AND k = 0 AND c1 <= 1" , "SELECT * FROM %s WHERE v = 0 AND k = 0 AND c1 <= 1" );
85+ assertToCQLString ("SELECT * FROM %s WHERE v = 0 AND k = 0 AND c1 = 1 AND c2 = 2" , "SELECT * FROM %s WHERE v = 0 AND k = 0 AND (c1, c2) = (1, 2)" );
86+ assertToCQLString ("SELECT * FROM %s WHERE v = 0 AND k = 0 AND c1 = 1 AND c2 > 2" , "SELECT * FROM %s WHERE v = 0 AND k = 0 AND c1 = 1 AND c2 > 2" );
87+ assertToCQLString ("SELECT * FROM %s WHERE v = 0 AND k = 0 AND c1 = 1 AND c2 < 2" , "SELECT * FROM %s WHERE v = 0 AND k = 0 AND c1 = 1 AND c2 < 2" );
88+ assertToCQLString ("SELECT * FROM %s WHERE v = 0 AND k = 0 AND c1 = 1 AND c2 >= 2" , "SELECT * FROM %s WHERE v = 0 AND k = 0 AND c1 = 1 AND c2 >= 2" );
89+ assertToCQLString ("SELECT * FROM %s WHERE v = 0 AND k = 0 AND c1 = 1 AND c2 <= 2" , "SELECT * FROM %s WHERE v = 0 AND k = 0 AND c1 = 1 AND c2 <= 2" );
4490 }
4591
4692 @ Override
@@ -51,4 +97,3 @@ protected PartitionRangeReadCommand parseCommand(String query)
5197 return (PartitionRangeReadCommand ) command ;
5298 }
5399}
54-
0 commit comments