diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2018-11-19 19:58:27 +0200 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2018-11-19 20:22:33 +0200 |
commit | dde2ca4aa108b611b5fdfc970146b28461ef08bf (patch) | |
tree | 08f90bb9d54413af23230ccf99f18391596afa34 /sql/item_cmpfunc.cc | |
parent | b5ac863f1494920b5e7035c9dfa0ebfdaa50a15d (diff) | |
parent | fd58bb71e22196c3c5e8d20b92bce6f343f1dea1 (diff) | |
download | mariadb-git-dde2ca4aa108b611b5fdfc970146b28461ef08bf.tar.gz |
Merge 10.3 into 10.4
Diffstat (limited to 'sql/item_cmpfunc.cc')
-rw-r--r-- | sql/item_cmpfunc.cc | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc index f5c49214076..9488391f602 100644 --- a/sql/item_cmpfunc.cc +++ b/sql/item_cmpfunc.cc @@ -2044,7 +2044,7 @@ bool Item_func_between::fix_length_and_dec() if (!args[0] || !args[1] || !args[2]) return TRUE; if (m_comparator.aggregate_for_comparison(Item_func_between::func_name(), - args, 3, true)) + args, 3, false)) { DBUG_ASSERT(current_thd->is_error()); return TRUE; @@ -2152,12 +2152,20 @@ longlong Item_func_between::val_int_cmp_string() longlong Item_func_between::val_int_cmp_int() { - longlong value= args[0]->val_int(), a, b; + Longlong_hybrid value= args[0]->to_longlong_hybrid(); if ((null_value= args[0]->null_value)) return 0; /* purecov: inspected */ - a= args[1]->val_int(); - b= args[2]->val_int(); - return val_int_cmp_int_finalize(value, a, b); + Longlong_hybrid a= args[1]->to_longlong_hybrid(); + Longlong_hybrid b= args[2]->to_longlong_hybrid(); + if (!args[1]->null_value && !args[2]->null_value) + return (longlong) ((value.cmp(a) >= 0 && value.cmp(b) <= 0) != negated); + if (args[1]->null_value && args[2]->null_value) + null_value= true; + else if (args[1]->null_value) + null_value= value.cmp(b) <= 0; // not null if false range. + else + null_value= value.cmp(a) >= 0; + return (longlong) (!null_value && negated); } |