diff options
-rw-r--r-- | mysql-test/r/func_set.result | 3 | ||||
-rw-r--r-- | mysql-test/t/func_set.test | 1 | ||||
-rw-r--r-- | sql/item_cmpfunc.cc | 22 |
3 files changed, 16 insertions, 10 deletions
diff --git a/mysql-test/r/func_set.result b/mysql-test/r/func_set.result index 5305c16c5d9..dfd7750adaf 100644 --- a/mysql-test/r/func_set.result +++ b/mysql-test/r/func_set.result @@ -25,3 +25,6 @@ find_in_set("","a,b,c") find_in_set("","a,b,c,") find_in_set("",",a,b,c") select find_in_set("abc","abc"),find_in_set("ab","abc"),find_in_set("abcd","abc"); find_in_set("abc","abc") find_in_set("ab","abc") find_in_set("abcd","abc") 1 0 0 +select interval(null, 1, 10, 100); +interval(null, 1, 10, 100) +NULL diff --git a/mysql-test/t/func_set.test b/mysql-test/t/func_set.test index cb1aa543d43..81f561989d5 100644 --- a/mysql-test/t/func_set.test +++ b/mysql-test/t/func_set.test @@ -15,3 +15,4 @@ select export_set(9,"Y","N","-",5),export_set(9,"Y","N"),export_set(9,"Y","N","" select elt(2,1),field(NULL,"a","b","c"); select find_in_set("","a,b,c"),find_in_set("","a,b,c,"),find_in_set("",",a,b,c"); select find_in_set("abc","abc"),find_in_set("ab","abc"),find_in_set("abcd","abc"); +select interval(null, 1, 10, 100); diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc index 5d47fa302f3..731f9b61438 100644 --- a/sql/item_cmpfunc.cc +++ b/sql/item_cmpfunc.cc @@ -311,7 +311,7 @@ void Item_func_interval::split_sum_func(List<Item> &fields) } /* - return -1 if null value, + return NULL if null value, 0 if lower than lowest 1 - arg_count if between args[n] and args[n+1] arg_count+1 if higher than biggest argument @@ -319,26 +319,28 @@ void Item_func_interval::split_sum_func(List<Item> &fields) longlong Item_func_interval::val_int() { - double value=item->val(); + double value= item->val(); if (item->null_value) - return -1; // -1 if null /* purecov: inspected */ + { + null_value= 1; + return -1; + } if (intervals) { // Use binary search to find interval - uint start,end; - start=0; end=arg_count-1; + uint start= 0, end= arg_count - 1; while (start != end) { - uint mid=(start+end+1)/2; + uint mid= (start + end + 1) / 2; if (intervals[mid] <= value) - start=mid; + start= mid; else - end=mid-1; + end= mid - 1; } - return (value < intervals[start]) ? 0 : start+1; + return (value < intervals[start]) ? 0 : start + 1; } if (args[0]->val() > value) return 0; - for (uint i=1 ; i < arg_count ; i++) + for (uint i= 1; i < arg_count; i++) { if (args[i]->val() > value) return i; |