diff options
author | unknown <jimw@mysql.com> | 2005-06-01 09:48:25 -0700 |
---|---|---|
committer | unknown <jimw@mysql.com> | 2005-06-01 09:48:25 -0700 |
commit | f20c56a9e7cc12a65068392ee733fff2ff4b805a (patch) | |
tree | 0e2a4cd0776aae89279894b81f2357603834300d /sql/item_func.cc | |
parent | 853a55ad215db4f44bee4281de57054bf2f7da17 (diff) | |
download | mariadb-git-f20c56a9e7cc12a65068392ee733fff2ff4b805a.tar.gz |
Fix handling of NULL fields in FIELD(). (Bug #10944)
mysql-test/r/func_str.result:
Update results
mysql-test/t/func_str.test:
Add regression tests
sql/item_func.cc:
Handle NULL as first argument to FIELD()
Diffstat (limited to 'sql/item_func.cc')
-rw-r--r-- | sql/item_func.cc | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/sql/item_func.cc b/sql/item_func.cc index 3c50e750b41..1300dc6faac 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -1488,6 +1488,10 @@ void Item_func_locate::print(String *str) longlong Item_func_field::val_int() { DBUG_ASSERT(fixed == 1); + + if (args[0]->null_value) + return 0; + if (cmp_type == STRING_RESULT) { String *field; @@ -1505,8 +1509,8 @@ longlong Item_func_field::val_int() longlong val= args[0]->val_int(); for (uint i=1; i < arg_count ; i++) { - if (val == args[i]->val_int()) - return (longlong) (i); + if (!args[i]->null_value && val == args[i]->val_int()) + return (longlong) (i); } } else @@ -1514,8 +1518,8 @@ longlong Item_func_field::val_int() double val= args[0]->val(); for (uint i=1; i < arg_count ; i++) { - if (val == args[i]->val()) - return (longlong) (i); + if (!args[i]->null_value && val == args[i]->val()) + return (longlong) (i); } } return 0; |