summaryrefslogtreecommitdiff
path: root/sql/item_func.cc
diff options
context:
space:
mode:
authorGeorgi Kodinov <Georgi.Kodinov@Oracle.com>2010-11-26 14:51:48 +0200
committerGeorgi Kodinov <Georgi.Kodinov@Oracle.com>2010-11-26 14:51:48 +0200
commitdb8bd7beb83e513870b16ea95381018a48a4079d (patch)
treec48ad0e6cae3c6805e0e56810c191edf4210919f /sql/item_func.cc
parent01e0be66ddb4e404ab7ae1e218996d57655635ed (diff)
parentb7e69aef10867289cfd09f3fa8ed41c296ca8647 (diff)
downloadmariadb-git-db8bd7beb83e513870b16ea95381018a48a4079d.tar.gz
merge
Diffstat (limited to 'sql/item_func.cc')
-rw-r--r--sql/item_func.cc26
1 files changed, 20 insertions, 6 deletions
diff --git a/sql/item_func.cc b/sql/item_func.cc
index 22af67fea3a..b542969cfb0 100644
--- a/sql/item_func.cc
+++ b/sql/item_func.cc
@@ -1363,9 +1363,13 @@ longlong Item_func_int_div::val_int()
signal_divide_by_null();
return 0;
}
- return (unsigned_flag ?
- (ulonglong) value / (ulonglong) val2 :
- value / val2);
+
+ if (unsigned_flag)
+ return ((ulonglong) value / (ulonglong) val2);
+ else if (value == LONGLONG_MIN && val2 == -1)
+ return LONGLONG_MIN;
+ else
+ return value / val2;
}
@@ -1399,9 +1403,9 @@ longlong Item_func_mod::int_op()
if (args[0]->unsigned_flag)
result= args[1]->unsigned_flag ?
((ulonglong) value) % ((ulonglong) val2) : ((ulonglong) value) % val2;
- else
- result= args[1]->unsigned_flag ?
- value % ((ulonglong) val2) : value % val2;
+ else result= args[1]->unsigned_flag ?
+ value % ((ulonglong) val2) :
+ (val2 == -1) ? 0 : value % val2;
return result;
}
@@ -5304,7 +5308,17 @@ void Item_func_match::init_search(bool no_order)
/* Check if init_search() has been called before */
if (ft_handler)
+ {
+ /*
+ We should reset ft_handler as it is cleaned up
+ on destruction of FT_SELECT object
+ (necessary in case of re-execution of subquery).
+ TODO: FT_SELECT should not clean up ft_handler.
+ */
+ if (join_key)
+ table->file->ft_handler= ft_handler;
DBUG_VOID_RETURN;
+ }
if (key == NO_SUCH_KEY)
{