mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
MDEV-6661 PI() does not work well in UCS2/UTF16/UTF32 context
MDEV-6666 Malformed result for CONCAT(utf8_column, binary_string) Item_static_string_func::safe_charset_converter() and Item_hex_string::safe_charset_converter() did not handle character sets with mbminlen>1 properly, as well as did not handle conversion from binary to multi-byte well. Introducing Item::const_charset_converter(), to reuse it in a number of Item_*::safe_charset_converter().
This commit is contained in:
@ -5323,3 +5323,15 @@ DROP TABLE t1;
|
||||
#
|
||||
# End of 5.6 tests
|
||||
#
|
||||
#
|
||||
# Start of 10.0 tests
|
||||
#
|
||||
#
|
||||
# MDEV-6661 PI() does not work well in UCS2/UTF16/UTF32 context
|
||||
#
|
||||
SELECT CONCAT(CONVERT('pi=' USING ucs2),PI()) AS PI;
|
||||
PI
|
||||
pi=3.141593
|
||||
#
|
||||
# End of 10.0 tests
|
||||
#
|
||||
|
@ -2078,3 +2078,45 @@ DFFFFFDFFFFF9CFFFF9DFFFF9EFFFF
|
||||
#
|
||||
# End of 5.6 tests
|
||||
#
|
||||
#
|
||||
# Start of 10.0 tests
|
||||
#
|
||||
#
|
||||
# MDEV-6661 PI() does not work well in UCS2/UTF16/UTF32 context
|
||||
#
|
||||
SELECT CONCAT(CONVERT('pi=' USING utf16),PI()) AS PI;
|
||||
PI
|
||||
pi=3.141593
|
||||
#
|
||||
# MDEV-6666 Malformed result for CONCAT(utf8_column, binary_string)
|
||||
#
|
||||
SET NAMES utf8mb4;
|
||||
CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET utf16);
|
||||
INSERT INTO t1 VALUES ('a');
|
||||
SELECT CONCAT(a,0xD800) FROM t1;
|
||||
ERROR HY000: Invalid utf16 character string: 'D800'
|
||||
SELECT CONCAT(a,0xD800DC00) FROM t1;
|
||||
CONCAT(a,0xD800DC00)
|
||||
a𐀀
|
||||
SELECT CONCAT(a,0x00FF) FROM t1;
|
||||
CONCAT(a,0x00FF)
|
||||
aÿ
|
||||
DROP TABLE t1;
|
||||
SELECT CONCAT(_utf16'a' COLLATE utf16_unicode_ci, _binary 0xD800);
|
||||
ERROR HY000: Invalid utf16 character string: 'D800'
|
||||
PREPARE stmt FROM "SELECT CONCAT(_utf16'a' COLLATE utf16_unicode_ci, ?)";
|
||||
SET @arg00=_binary 0xD800;
|
||||
EXECUTE stmt USING @arg00;
|
||||
ERROR HY000: Invalid utf16 character string: 'D800'
|
||||
SET @arg00=_binary 0xD800DC00;
|
||||
EXECUTE stmt USING @arg00;
|
||||
CONCAT(_utf16'a' COLLATE utf16_unicode_ci, ?)
|
||||
a𐀀
|
||||
SET @arg00=_binary 0x00FF;
|
||||
EXECUTE stmt USING @arg00;
|
||||
CONCAT(_utf16'a' COLLATE utf16_unicode_ci, ?)
|
||||
aÿ
|
||||
DEALLOCATE PREPARE stmt;
|
||||
#
|
||||
# End of 10.0 tests
|
||||
#
|
||||
|
@ -2164,3 +2164,45 @@ DFFFFFDFFFFF9CFFFF9DFFFF9EFFFF
|
||||
#
|
||||
# End of 5.6 tests
|
||||
#
|
||||
#
|
||||
# Start of 10.0 tests
|
||||
#
|
||||
#
|
||||
# MDEV-6661 PI() does not work well in UCS2/UTF16/UTF32 context
|
||||
#
|
||||
SELECT CONCAT(CONVERT('pi=' USING utf32),PI()) AS PI;
|
||||
PI
|
||||
pi=3.141593
|
||||
#
|
||||
# MDEV-6666 Malformed result for CONCAT(utf8_column, binary_string)
|
||||
#
|
||||
SET NAMES utf8mb4;
|
||||
CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET utf32);
|
||||
INSERT INTO t1 VALUES ('a');
|
||||
SELECT CONCAT(a,0x20FFFF) FROM t1;
|
||||
ERROR HY000: Invalid utf32 character string: '0020FF'
|
||||
SELECT CONCAT(a,0x010000) FROM t1;
|
||||
CONCAT(a,0x010000)
|
||||
a𐀀
|
||||
SELECT CONCAT(a,0x00FF) FROM t1;
|
||||
CONCAT(a,0x00FF)
|
||||
aÿ
|
||||
DROP TABLE t1;
|
||||
SELECT CONCAT(_utf32'a' COLLATE utf32_unicode_ci, _binary 0x20FFFF);
|
||||
ERROR HY000: Invalid utf32 character string: '0020FF'
|
||||
PREPARE stmt FROM "SELECT CONCAT(_utf32'a' COLLATE utf32_unicode_ci, ?)";
|
||||
SET @arg00=_binary 0x20FFFF;
|
||||
EXECUTE stmt USING @arg00;
|
||||
ERROR HY000: Invalid utf32 character string: '0020FF'
|
||||
SET @arg00=_binary 0x010000;
|
||||
EXECUTE stmt USING @arg00;
|
||||
CONCAT(_utf32'a' COLLATE utf32_unicode_ci, ?)
|
||||
a𐀀
|
||||
SET @arg00=_binary 0x00FF;
|
||||
EXECUTE stmt USING @arg00;
|
||||
CONCAT(_utf32'a' COLLATE utf32_unicode_ci, ?)
|
||||
aÿ
|
||||
DEALLOCATE PREPARE stmt;
|
||||
#
|
||||
# End of 10.0 tests
|
||||
#
|
||||
|
@ -5933,3 +5933,27 @@ set max_sort_length=default;
|
||||
#
|
||||
# End of 5.6 tests
|
||||
#
|
||||
#
|
||||
# Start of 10.0 tests
|
||||
#
|
||||
#
|
||||
# MDEV-6666 Malformed result for CONCAT(utf8_column, binary_string)
|
||||
#
|
||||
CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET utf8);
|
||||
INSERT INTO t1 VALUES ('a');
|
||||
SELECT CONCAT(a,0xFF) FROM t1;
|
||||
ERROR HY000: Invalid utf8 character string: 'FF'
|
||||
SELECT CONCAT(a,0xC3BF) FROM t1;
|
||||
CONCAT(a,0xC3BF)
|
||||
aÿ
|
||||
DROP TABLE t1;
|
||||
SELECT CONCAT('a' COLLATE utf8_unicode_ci, _binary 0xFF);
|
||||
ERROR HY000: Invalid utf8 character string: 'FF'
|
||||
PREPARE stmt FROM "SELECT CONCAT('a' COLLATE utf8_unicode_ci, ?)";
|
||||
SET @arg00=_binary 0xFF;
|
||||
EXECUTE stmt USING @arg00;
|
||||
ERROR HY000: Invalid utf8 character string: 'FF'
|
||||
DEALLOCATE PREPARE stmt;
|
||||
#
|
||||
# End of 10.0 tests
|
||||
#
|
||||
|
@ -891,3 +891,17 @@ DROP TABLE t1;
|
||||
--echo #
|
||||
--echo # End of 5.6 tests
|
||||
--echo #
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Start of 10.0 tests
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-6661 PI() does not work well in UCS2/UTF16/UTF32 context
|
||||
--echo #
|
||||
SELECT CONCAT(CONVERT('pi=' USING ucs2),PI()) AS PI;
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.0 tests
|
||||
--echo #
|
||||
|
@ -816,3 +816,39 @@ set collation_connection=utf16_bin;
|
||||
--echo # End of 5.6 tests
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # Start of 10.0 tests
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-6661 PI() does not work well in UCS2/UTF16/UTF32 context
|
||||
--echo #
|
||||
SELECT CONCAT(CONVERT('pi=' USING utf16),PI()) AS PI;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-6666 Malformed result for CONCAT(utf8_column, binary_string)
|
||||
--echo #
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET utf16);
|
||||
INSERT INTO t1 VALUES ('a');
|
||||
--error ER_INVALID_CHARACTER_STRING
|
||||
SELECT CONCAT(a,0xD800) FROM t1;
|
||||
SELECT CONCAT(a,0xD800DC00) FROM t1;
|
||||
SELECT CONCAT(a,0x00FF) FROM t1;
|
||||
DROP TABLE t1;
|
||||
--error ER_INVALID_CHARACTER_STRING
|
||||
SELECT CONCAT(_utf16'a' COLLATE utf16_unicode_ci, _binary 0xD800);
|
||||
PREPARE stmt FROM "SELECT CONCAT(_utf16'a' COLLATE utf16_unicode_ci, ?)";
|
||||
SET @arg00=_binary 0xD800;
|
||||
--error ER_INVALID_CHARACTER_STRING
|
||||
EXECUTE stmt USING @arg00;
|
||||
SET @arg00=_binary 0xD800DC00;
|
||||
EXECUTE stmt USING @arg00;
|
||||
SET @arg00=_binary 0x00FF;
|
||||
EXECUTE stmt USING @arg00;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.0 tests
|
||||
--echo #
|
||||
|
@ -1,4 +1,5 @@
|
||||
-- source include/have_utf32.inc
|
||||
-- source include/have_utf8mb4.inc
|
||||
|
||||
SET TIME_ZONE = '+03:00';
|
||||
|
||||
@ -918,3 +919,40 @@ set collation_connection=utf32_bin;
|
||||
--echo #
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Start of 10.0 tests
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-6661 PI() does not work well in UCS2/UTF16/UTF32 context
|
||||
--echo #
|
||||
SELECT CONCAT(CONVERT('pi=' USING utf32),PI()) AS PI;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-6666 Malformed result for CONCAT(utf8_column, binary_string)
|
||||
--echo #
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET utf32);
|
||||
INSERT INTO t1 VALUES ('a');
|
||||
--error ER_INVALID_CHARACTER_STRING
|
||||
SELECT CONCAT(a,0x20FFFF) FROM t1;
|
||||
SELECT CONCAT(a,0x010000) FROM t1;
|
||||
SELECT CONCAT(a,0x00FF) FROM t1;
|
||||
DROP TABLE t1;
|
||||
--error ER_INVALID_CHARACTER_STRING
|
||||
SELECT CONCAT(_utf32'a' COLLATE utf32_unicode_ci, _binary 0x20FFFF);
|
||||
PREPARE stmt FROM "SELECT CONCAT(_utf32'a' COLLATE utf32_unicode_ci, ?)";
|
||||
SET @arg00=_binary 0x20FFFF;
|
||||
--error ER_INVALID_CHARACTER_STRING
|
||||
EXECUTE stmt USING @arg00;
|
||||
SET @arg00=_binary 0x010000;
|
||||
EXECUTE stmt USING @arg00;
|
||||
SET @arg00=_binary 0x00FF;
|
||||
EXECUTE stmt USING @arg00;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.0 tests
|
||||
--echo #
|
||||
|
||||
|
@ -1654,3 +1654,28 @@ set max_sort_length=default;
|
||||
--echo # End of 5.6 tests
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # Start of 10.0 tests
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-6666 Malformed result for CONCAT(utf8_column, binary_string)
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET utf8);
|
||||
INSERT INTO t1 VALUES ('a');
|
||||
--error ER_INVALID_CHARACTER_STRING
|
||||
SELECT CONCAT(a,0xFF) FROM t1;
|
||||
SELECT CONCAT(a,0xC3BF) FROM t1;
|
||||
DROP TABLE t1;
|
||||
--error ER_INVALID_CHARACTER_STRING
|
||||
SELECT CONCAT('a' COLLATE utf8_unicode_ci, _binary 0xFF);
|
||||
PREPARE stmt FROM "SELECT CONCAT('a' COLLATE utf8_unicode_ci, ?)";
|
||||
SET @arg00=_binary 0xFF;
|
||||
--error ER_INVALID_CHARACTER_STRING
|
||||
EXECUTE stmt USING @arg00;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.0 tests
|
||||
--echo #
|
||||
|
Reference in New Issue
Block a user