mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
MDEV-28651 quote(NULL) returns incorrect result in view ('NU' instead of 'NULL')
Item_func_quote did not calculate its max_length correctly for nullable arguments. Fix: In case if the argument is nullable, reserve at least 4 characters so the string "NULL" fits.
This commit is contained in:
@ -5286,3 +5286,30 @@ ERROR 42000: Incorrect parameter count in the call to native function 'DECODE'
|
|||||||
#
|
#
|
||||||
# End of 10.4 tests
|
# End of 10.4 tests
|
||||||
#
|
#
|
||||||
|
#
|
||||||
|
# Start of 10.5 tests
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# MDEV-28651 quote(NULL) returns incorrect result in view ('NU' instead of 'NULL')
|
||||||
|
#
|
||||||
|
CREATE VIEW v1 AS SELECT quote(NULL);
|
||||||
|
SELECT * FROM v1;
|
||||||
|
quote(NULL)
|
||||||
|
NULL
|
||||||
|
DESCRIBE v1;
|
||||||
|
Field Type Null Key Default Extra
|
||||||
|
quote(NULL) varbinary(4) YES NULL
|
||||||
|
CREATE TABLE t1 AS SELECT * FROM v1;
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`quote(NULL)` varbinary(4) DEFAULT NULL
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||||
|
SELECT * FROM t1;
|
||||||
|
quote(NULL)
|
||||||
|
NULL
|
||||||
|
DROP TABLE t1;
|
||||||
|
DROP VIEW v1;
|
||||||
|
#
|
||||||
|
# End of 10.5 tests
|
||||||
|
#
|
||||||
|
@ -2329,3 +2329,25 @@ SELECT DECODE(NULL, NULL, NULL);
|
|||||||
--echo #
|
--echo #
|
||||||
--echo # End of 10.4 tests
|
--echo # End of 10.4 tests
|
||||||
--echo #
|
--echo #
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Start of 10.5 tests
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-28651 quote(NULL) returns incorrect result in view ('NU' instead of 'NULL')
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE VIEW v1 AS SELECT quote(NULL);
|
||||||
|
SELECT * FROM v1;
|
||||||
|
DESCRIBE v1;
|
||||||
|
CREATE TABLE t1 AS SELECT * FROM v1;
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
DROP VIEW v1;
|
||||||
|
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # End of 10.5 tests
|
||||||
|
--echo #
|
||||||
|
@ -1504,6 +1504,9 @@ public:
|
|||||||
collation.set(args[0]->collation);
|
collation.set(args[0]->collation);
|
||||||
ulonglong max_result_length= (ulonglong) args[0]->max_length * 2 +
|
ulonglong max_result_length= (ulonglong) args[0]->max_length * 2 +
|
||||||
2 * collation.collation->mbmaxlen;
|
2 * collation.collation->mbmaxlen;
|
||||||
|
// NULL argument is returned as a string "NULL" without quotes
|
||||||
|
if (args[0]->maybe_null)
|
||||||
|
set_if_bigger(max_result_length, 4 * collation.collation->mbmaxlen);
|
||||||
max_length= (uint32) MY_MIN(max_result_length, MAX_BLOB_WIDTH);
|
max_length= (uint32) MY_MIN(max_result_length, MAX_BLOB_WIDTH);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user