Loading Docs/manual.texi +7 −2 Original line number Diff line number Diff line Loading @@ -46926,8 +46926,13 @@ Fixed core dump problem on OSF in @code{gethostbyname_r}. @item Fixed that underflowed decimal fields is not zero filled. @item @code{'+11111'} in overflow for @code{decimal(5,0) unsigned} columns, Just sign will be dropped. If we get an overflow when inserting @code{'+11111'} for @code{decimal(5,0) unsigned} columns, we will just drop the sign. @item Fixed bug with @code{ISNULL(expression_which_cannot_be_null)}. @item Fixed host lookup bug in the glibc library that we used with the 3.23.50 Linux-x86 binaries. @end itemize @node News-3.23.50, News-3.23.49, News-3.23.51, News-3.23.x mysql-test/r/func_isnull.result 0 → 100644 +1 −0 Original line number Diff line number Diff line id mydate mysql-test/t/func_isnull.test 0 → 100644 +10 −0 Original line number Diff line number Diff line # # test of ISNULL() # drop table if exists t1; create table t1 (id int auto_increment primary key not null, mydate date not null); insert into t1 values (0,"2002-05-01"),(0,"2002-05-01"),(0,"2002-05-01"); flush tables; select * from t1 where isnull(to_days(mydate)); drop table t1; sql/item_cmpfunc.cc +30 −19 Original line number Diff line number Diff line Loading @@ -25,9 +25,9 @@ #include <m_ctype.h> /* ** Test functions ** These returns 0LL if false and 1LL if true and null if some arg is null ** 'AND' and 'OR' never return null Test functions These returns 0LL if false and 1LL if true and null if some arg is null 'AND' and 'OR' never return null */ longlong Item_func_not::val_int() Loading Loading @@ -59,8 +59,10 @@ void Item_bool_func2::fix_length_and_dec() { max_length=1; /* As some compare functions are generated after sql_yacc, we have to check for out of memory conditons here */ /* As some compare functions are generated after sql_yacc, we have to check for out of memory conditons here */ if (!args[0] || !args[1]) return; // Make a special case of compare with fields to get nicer DATE comparisons Loading Loading @@ -336,8 +338,10 @@ void Item_func_between::fix_length_and_dec() { max_length=1; /* As some compare functions are generated after sql_yacc, we have to check for out of memory conditons here */ /* As some compare functions are generated after sql_yacc, we have to check for out of memory conditons here */ if (!args[0] || !args[1] || !args[2]) return; cmp_type=args[0]->result_type(); Loading Loading @@ -594,11 +598,10 @@ Item_func_nullif::val_str(String *str) } /* ** CASE expression CASE expression Return the matching ITEM or NULL if all compares (including else) failed */ /* Return the matching ITEM or NULL if all compares (including else) failed */ Item *Item_func_case::find_item(String *str) { String *first_expr_str,*tmp; Loading Loading @@ -786,7 +789,7 @@ void Item_func_case::print(String *str) } /* ** Coalesce - return first not NULL argument. Coalesce - return first not NULL argument. */ String *Item_func_coalesce::val_str(String *str) Loading Loading @@ -841,7 +844,7 @@ void Item_func_coalesce::fix_length_and_dec() } /**************************************************************************** ** classes and function for the IN operator Classes and function for the IN operator ****************************************************************************/ static int cmp_longlong(longlong *a,longlong *b) Loading Loading @@ -1170,9 +1173,11 @@ longlong Item_cond_and::val_int() { if (item->val_int() == 0) { /* TODO: In case of NULL, ANSI would require us to continue evaluation /* TODO: In case of NULL, ANSI would require us to continue evaluation until we get a FALSE value or run out of values; This would require a lot of unnecessary evaluation, which we skip for now */ require a lot of unnecessary evaluation, which we skip for now */ null_value=item->null_value; return 0; } Loading Loading @@ -1201,6 +1206,12 @@ longlong Item_cond_or::val_int() longlong Item_func_isnull::val_int() { /* Handle optimization if the argument can't be null This has to be here because of the test in update_used_tables(). */ if (!used_tables_cache) return 0; (void) args[0]->val(); return (args[0]->null_value) ? 1 : 0; } Loading Loading
Docs/manual.texi +7 −2 Original line number Diff line number Diff line Loading @@ -46926,8 +46926,13 @@ Fixed core dump problem on OSF in @code{gethostbyname_r}. @item Fixed that underflowed decimal fields is not zero filled. @item @code{'+11111'} in overflow for @code{decimal(5,0) unsigned} columns, Just sign will be dropped. If we get an overflow when inserting @code{'+11111'} for @code{decimal(5,0) unsigned} columns, we will just drop the sign. @item Fixed bug with @code{ISNULL(expression_which_cannot_be_null)}. @item Fixed host lookup bug in the glibc library that we used with the 3.23.50 Linux-x86 binaries. @end itemize @node News-3.23.50, News-3.23.49, News-3.23.51, News-3.23.x
mysql-test/r/func_isnull.result 0 → 100644 +1 −0 Original line number Diff line number Diff line id mydate
mysql-test/t/func_isnull.test 0 → 100644 +10 −0 Original line number Diff line number Diff line # # test of ISNULL() # drop table if exists t1; create table t1 (id int auto_increment primary key not null, mydate date not null); insert into t1 values (0,"2002-05-01"),(0,"2002-05-01"),(0,"2002-05-01"); flush tables; select * from t1 where isnull(to_days(mydate)); drop table t1;
sql/item_cmpfunc.cc +30 −19 Original line number Diff line number Diff line Loading @@ -25,9 +25,9 @@ #include <m_ctype.h> /* ** Test functions ** These returns 0LL if false and 1LL if true and null if some arg is null ** 'AND' and 'OR' never return null Test functions These returns 0LL if false and 1LL if true and null if some arg is null 'AND' and 'OR' never return null */ longlong Item_func_not::val_int() Loading Loading @@ -59,8 +59,10 @@ void Item_bool_func2::fix_length_and_dec() { max_length=1; /* As some compare functions are generated after sql_yacc, we have to check for out of memory conditons here */ /* As some compare functions are generated after sql_yacc, we have to check for out of memory conditons here */ if (!args[0] || !args[1]) return; // Make a special case of compare with fields to get nicer DATE comparisons Loading Loading @@ -336,8 +338,10 @@ void Item_func_between::fix_length_and_dec() { max_length=1; /* As some compare functions are generated after sql_yacc, we have to check for out of memory conditons here */ /* As some compare functions are generated after sql_yacc, we have to check for out of memory conditons here */ if (!args[0] || !args[1] || !args[2]) return; cmp_type=args[0]->result_type(); Loading Loading @@ -594,11 +598,10 @@ Item_func_nullif::val_str(String *str) } /* ** CASE expression CASE expression Return the matching ITEM or NULL if all compares (including else) failed */ /* Return the matching ITEM or NULL if all compares (including else) failed */ Item *Item_func_case::find_item(String *str) { String *first_expr_str,*tmp; Loading Loading @@ -786,7 +789,7 @@ void Item_func_case::print(String *str) } /* ** Coalesce - return first not NULL argument. Coalesce - return first not NULL argument. */ String *Item_func_coalesce::val_str(String *str) Loading Loading @@ -841,7 +844,7 @@ void Item_func_coalesce::fix_length_and_dec() } /**************************************************************************** ** classes and function for the IN operator Classes and function for the IN operator ****************************************************************************/ static int cmp_longlong(longlong *a,longlong *b) Loading Loading @@ -1170,9 +1173,11 @@ longlong Item_cond_and::val_int() { if (item->val_int() == 0) { /* TODO: In case of NULL, ANSI would require us to continue evaluation /* TODO: In case of NULL, ANSI would require us to continue evaluation until we get a FALSE value or run out of values; This would require a lot of unnecessary evaluation, which we skip for now */ require a lot of unnecessary evaluation, which we skip for now */ null_value=item->null_value; return 0; } Loading Loading @@ -1201,6 +1206,12 @@ longlong Item_cond_or::val_int() longlong Item_func_isnull::val_int() { /* Handle optimization if the argument can't be null This has to be here because of the test in update_used_tables(). */ if (!used_tables_cache) return 0; (void) args[0]->val(); return (args[0]->null_value) ? 1 : 0; } Loading