Uploaded image for project: 'MariaDB ColumnStore'
  1. MariaDB ColumnStore
  2. MCOL-3949

IF() is incorrect when using hex constant

Details

    • Bug
    • Status: Closed (View Workflow)
    • Major
    • Resolution: Fixed
    • 1.5.3
    • 1.5.1
    • PrimProc
    • None
    • 2020-7

    Description

      Consider the following:

      select  IF(r_regionkey >= 0x40000000, r_regionkey+10, r_regionkey)   page from region cc order by 1 ;
      

      This returns r_regionkey+10, even though all r_regionkey are < 5.

      Replacing 0x40000000 with it's base 10 equivalent (1073741824) does not exhibit the bug.

      Debugging shows that the constant column is malformed when it reaches the IF function.

      This is a regression in 1.5. columnstore 1.4.4 returns the correct response, and debugging shows the constant column is correct.

      Attachments

        Activity

          This regression is caught by working_tpch1/misc/CCBillEU.sql which contains the query

          select  IF(  ( IF(r_regionkey >= 0x40000000, r_regionkey+10, r_regionkey) > 0 ) , 1, 0) page from region cc order by 1 ;
          

          David.Hall David Hall (Inactive) added a comment - This regression is caught by working_tpch1/misc/CCBillEU.sql which contains the query select IF( ( IF(r_regionkey >= 0x40000000 , r_regionkey+ 10 , r_regionkey) > 0 ) , 1 , 0 ) page from region cc order by 1 ;

          QA:
          Before the patch:
          MariaDB [tpch1]> select IF(r_regionkey >= 0x40000000, r_regionkey+10, r_regionkey) page from region cc order by 1 ;
          ------

          page

          ------

          10
          11
          12
          13
          14

          ------

          After the patch:
          MariaDB [tpch1]> select IF(r_regionkey >= 0x40000000, r_regionkey+10, r_regionkey) page from region cc order by 1 ;
          ------

          page

          ------

          0
          1
          2
          3
          4

          ------

          David.Hall David Hall (Inactive) added a comment - QA: Before the patch: MariaDB [tpch1] > select IF(r_regionkey >= 0x40000000, r_regionkey+10, r_regionkey) page from region cc order by 1 ; ------ page ------ 10 11 12 13 14 ------ After the patch: MariaDB [tpch1] > select IF(r_regionkey >= 0x40000000, r_regionkey+10, r_regionkey) page from region cc order by 1 ; ------ page ------ 0 1 2 3 4 ------

          Server has changed the way type_handler works so our use of it failed, causing the wrong execution path in gp_walk() with the case Item::CONST_ITEM, Item::STRING_RESULT. The same change was needed in buildReturnedColumn().

          David.Hall David Hall (Inactive) added a comment - Server has changed the way type_handler works so our use of it failed, causing the wrong execution path in gp_walk() with the case Item::CONST_ITEM, Item::STRING_RESULT. The same change was needed in buildReturnedColumn().

          People

            drrtuy Roman
            David.Hall David Hall (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Git Integration

                Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.