mirror of
https://github.com/MariaDB/server.git
synced 2026-05-15 19:37:16 +02:00
Fixed bug #27932: the function LOCATE returned NULL if any
of its arguments was evaluated to NULL, while the predicate LOCATE(str,NULL) IS NULL erroneously was evaluated to FALSE. This happened because the Item_func_locate::fix_length_and_dec method by mistake set the value of the maybe_null flag for the function item to 0. In consequence of this the function was considered as the one that could not ever return NULL. mysql-test/r/func_str.result: Added a test case for bug #27932. mysql-test/t/func_str.test: Added a test case for bug #27932.
This commit is contained in:
parent
bcd6183fe7
commit
36f8bfb22e
3 changed files with 109 additions and 1 deletions
|
|
@ -1076,4 +1076,37 @@ SELECT * FROM (SELECT * FROM v1) x;
|
|||
DROP TABLE t1, t2;
|
||||
DROP VIEW v1;
|
||||
|
||||
#
|
||||
# Bug #27932: LOCATE with argument evaluated to NULL
|
||||
#
|
||||
|
||||
SELECT LOCATE('foo', NULL) FROM DUAL;
|
||||
SELECT LOCATE(NULL, 'o') FROM DUAL;
|
||||
SELECT LOCATE(NULL, NULL) FROM DUAL;
|
||||
SELECT LOCATE('foo', NULL) IS NULL FROM DUAL;
|
||||
SELECT LOCATE(NULL, 'o') IS NULL FROM DUAL;
|
||||
SELECT LOCATE(NULL, NULL) IS NULL FROM DUAL;
|
||||
SELECT ISNULL(LOCATE('foo', NULL)) FROM DUAL;
|
||||
SELECT ISNULL(LOCATE(NULL, 'o')) FROM DUAL;
|
||||
SELECT ISNULL(LOCATE(NULL, NULL)) FROM DUAL;
|
||||
SELECT LOCATE('foo', NULL) <=> NULL FROM DUAL;
|
||||
SELECT LOCATE(NULL, 'o') <=> NULL FROM DUAL;
|
||||
SELECT LOCATE(NULL, NULL) <=> NULL FROM DUAL;
|
||||
|
||||
CREATE TABLE t1 (id int NOT NULL PRIMARY KEY, a varchar(10), p varchar(10));
|
||||
|
||||
INSERT INTO t1 VALUES (1, 'foo', 'o');
|
||||
INSERT INTO t1 VALUES (2, 'foo', NULL);
|
||||
INSERT INTO t1 VALUES (3, NULL, 'o');
|
||||
INSERT INTO t1 VALUES (4, NULL, NULL);
|
||||
|
||||
SELECT id, LOCATE(a,p) FROM t1;
|
||||
SELECT id, LOCATE(a,p) IS NULL FROM t1;
|
||||
SELECT id, ISNULL(LOCATE(a,p)) FROM t1;
|
||||
SELECT id, LOCATE(a,p) <=> NULL FROM t1;
|
||||
SELECT id FROM t1 WHERE LOCATE(a,p) IS NULL;
|
||||
SELECT id FROM t1 WHERE LOCATE(a,p) <=> NULL;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue