Uploaded image for project: 'Phoenix'
  1. Phoenix
  2. PHOENIX-2559

Keep filter for OR when only some expressions are extracted to stop/stop key

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 3.3.1, 4.3.1
    • Fix Version/s: 4.7.0
    • Labels:
    • Environment:

      centOS

    • Flags:
      Important

      Description

      query results is incorrect when pk involved using '=' .

      for example,
      crate a table use sql:
      create table bugTable(ID varchar primary key,company varchar);
      upsert values use sql:
      upsert into bugTable values('i1','c1');
      upsert into bugTable values('i2','c2');
      upsert into bugTable values('i3','c3');

      the table is now like below,
      ----------------------+

      ID COMPANY

      ----------------------+

      i1 c1
      i2 c2
      i3 c3

      ----------------------+

      then use sql to query result from bugTable,
      select * from bugTable where ID = 'i1' or (ID = 'i2' and company = 'c3');

      the result expected:
      ----------------------+

      ID COMPANY

      ----------------------+

      i1 c1

      ----------------------+

      but, phoenix return the wrong result like below,
      ----------------------+

      ID COMPANY

      ----------------------+

      i1 c1
      i2 c2

      ----------------------+
      the condition company = 'c3' is not used at all !
      and then you can find when sql query combine primary key '=' somthing with any condition,then the condition is not used at all either, it means when the sql like this,
      select xxx from xxx where pk = 'xxx' or (pk = 'xx' and any other condition);
      the any other condition does not used at all.

      I test the sql below all versions in phoenix before(including) version 4.3.1 & 3.3.1, it turns out that all the version sql query result is wrong.

      I read the source code, and thought maybe the problem because when compile the sql query, the pushKeyToExpression method lost the condition, and method evaluate in AndOrExpression is not work.

        Attachments

        1. PHOENIX-2559.patch
          11 kB
          James R. Taylor
        2. PHOENIX-2559_v2.patch
          14 kB
          James R. Taylor

          Activity

            People

            • Assignee:
              jamestaylor James R. Taylor
              Reporter:
              fangrong.chen ChenFangRong
            • Votes:
              0 Vote for this issue
              Watchers:
              6 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Time Tracking

                Estimated:
                Original Estimate - 168h
                168h
                Remaining:
                Remaining Estimate - 168h
                168h
                Logged:
                Time Spent - Not Specified
                Not Specified