-
Type:
Bug
-
Status: Resolved
-
Priority:
Normal
-
Resolution: Fixed
-
Component/s: Feature/SASI
-
Labels:None
-
Bug Category:Correctness - API / Semantic Implementation
-
Severity:Normal
-
Complexity:Normal
-
Discovered By:User Report
-
Platform:All
-
Impacts:None
-
Since Version:
-
Source Control Link:
-
Test and Documentation Plan:
In our scenario, we need to query with '>' conditions on string columns. So I created index with is_literal = false. like the following:
CREATE TABLE test (id int primary key, t text); CREATE CUSTOM INDEX ON test (t) USING 'org.apache.cassandra.index.sasi.SASIIndex' WITH OPTIONS = {'is_literal': 'false'};
I also inserted some records and query:
insert into test(id,t) values(1,'abc'); select * from test where t > 'ab';
At first ,it worked. But after flush, the query returned none record.
I have read the code of SASIIndex and found that it is because in the
Expression.isLowerSatisfiedBy
function,
term.compareTo
was called with parameter checkFully=false, which cause the string 'abc' was only compared with its first 2 characters( length of expression value).
I have wrote a UT for this case and fixed it.