Uploaded image for project: 'Cassandra'
  1. Cassandra
  2. CASSANDRA-15169

SASI does not compare strings correctly

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Normal
    • Resolution: Fixed
    • Fix Version/s: 3.11.5, 4.0-alpha
    • Component/s: Feature/SASI
    • Labels:
      None

      Description

      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.

        Attachments

        1. CASSANDRA-15169-v2.patch
          5 kB
          mazhenlin
        2. CASSANDRA-15169-v1.patch
          2 kB
          mazhenlin

          Activity

            People

            • Assignee:
              mazhenlin mazhenlin
              Reporter:
              mazhenlin mazhenlin
              Authors:
              mazhenlin
              Reviewers:
              Michael Semb Wever
            • Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: