mirror of
https://github.com/MariaDB/server.git
synced 2026-05-15 19:37:16 +02:00
Merge 10.4 into 10.5
This commit is contained in:
commit
c41c79650a
277 changed files with 2048 additions and 1500 deletions
|
|
@ -3036,9 +3036,57 @@ SELECT 'chž'< 'i';
|
|||
SELECT 'a' COLLATE utf8_czech_test_bad_w2;
|
||||
ERROR HY000: Unknown collation: 'utf8_czech_test_bad_w2'
|
||||
#
|
||||
# End of 10.2 tests
|
||||
#
|
||||
#
|
||||
# Start of 10.3 tests
|
||||
#
|
||||
#
|
||||
# MDEV-30556 UPPER() returns an empty string for U+0251 in Unicode-5.2.0+ collations for utf8
|
||||
#
|
||||
SET NAMES utf8mb4 COLLATE utf8mb4_test_520_nopad_ci;
|
||||
CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
|
||||
SHOW CREATE TABLE case_folding;
|
||||
Table Create Table
|
||||
case_folding CREATE TABLE `case_folding` (
|
||||
`code` int(1) NOT NULL,
|
||||
`c` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_test_520_nopad_ci DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||
INSERT INTO case_folding (code) VALUES
|
||||
(0x23A),
|
||||
(0x23E),
|
||||
(0x23F),
|
||||
(0x240),
|
||||
(0x250),
|
||||
(0x251),
|
||||
(0x252),
|
||||
(0x26B),
|
||||
(0x271),
|
||||
(0x27D);
|
||||
UPDATE case_folding SET c=CHAR(code USING ucs2);
|
||||
SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
|
||||
HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
|
||||
23A E2B1A5 C8BA Ⱥ
|
||||
23E E2B1A6 C8BE Ⱦ
|
||||
23F C8BF E2B1BE ȿ
|
||||
240 C980 E2B1BF ɀ
|
||||
250 C990 E2B1AF ɐ
|
||||
251 C991 E2B1AD ɑ
|
||||
252 C992 E2B1B0 ɒ
|
||||
26B C9AB E2B1A2 ɫ
|
||||
271 C9B1 E2B1AE ɱ
|
||||
27D C9BD E2B1A4 ɽ
|
||||
DROP TABLE case_folding;
|
||||
#
|
||||
# End of 10.3 tests
|
||||
#
|
||||
#
|
||||
# MDEV-7947 my_charset_same: strcmp() takes 0.37% in OLTP RO
|
||||
#
|
||||
SHOW COLLATION LIKE 'latin1_test_replace';
|
||||
Collation Charset Id Default Compiled Sortlen
|
||||
SELECT 'foo' = 'foo ' COLLATE latin1_test_replace;
|
||||
ERROR HY000: Unknown collation: 'latin1_test_replace'
|
||||
#
|
||||
# End of 10.5 tests
|
||||
#
|
||||
|
|
|
|||
|
|
@ -610,6 +610,27 @@ SELECT 'chž'< 'i';
|
|||
--error ER_UNKNOWN_COLLATION
|
||||
SELECT 'a' COLLATE utf8_czech_test_bad_w2;
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.2 tests
|
||||
--echo #
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Start of 10.3 tests
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-30556 UPPER() returns an empty string for U+0251 in Unicode-5.2.0+ collations for utf8
|
||||
--echo #
|
||||
|
||||
SET NAMES utf8mb4 COLLATE utf8mb4_test_520_nopad_ci;
|
||||
--source include/ctype_casefolding.inc
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.3 tests
|
||||
--echo #
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-7947 my_charset_same: strcmp() takes 0.37% in OLTP RO
|
||||
|
|
@ -618,3 +639,7 @@ SELECT 'a' COLLATE utf8_czech_test_bad_w2;
|
|||
SHOW COLLATION LIKE 'latin1_test_replace';
|
||||
--error ER_UNKNOWN_COLLATION
|
||||
SELECT 'foo' = 'foo ' COLLATE latin1_test_replace;
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.5 tests
|
||||
--echo #
|
||||
|
|
|
|||
|
|
@ -8204,7 +8204,7 @@ INSERT INTO t1 VALUES (_utf32 0x2CEE);
|
|||
SELECT hex(c), hex(lower(c)), hex(upper(c)), hex(weight_string(c)), c
|
||||
FROM t1 ORDER BY c, BINARY c;
|
||||
hex(c) hex(lower(c)) hex(upper(c)) hex(weight_string(c)) c
|
||||
C8BA C8BA 1214 Ⱥ
|
||||
C8BA E2B1A5 C8BA 1214 Ⱥ
|
||||
E2B1A5 E2B1A5 C8BA 1214 ⱥ
|
||||
C680 C680 C983 122D ƀ
|
||||
C983 C680 C983 122D Ƀ
|
||||
|
|
@ -8229,7 +8229,7 @@ E2B1AA E2B1AA E2B1A9 1328 ⱪ
|
|||
C8BD C69A C8BD 133B Ƚ
|
||||
E2B1A0 E2B1A1 E2B1A0 133F Ⱡ
|
||||
E2B1A1 E2B1A1 E2B1A0 133F ⱡ
|
||||
C9AB C9AB 1340 ɫ
|
||||
C9AB C9AB E2B1A2 1340 ɫ
|
||||
E2B1A2 C9AB E2B1A2 1340 Ɫ
|
||||
E1B5BD E1B5BD E2B1A3 13B8 ᵽ
|
||||
E2B1A3 E1B5BD E2B1A3 13B8 Ᵽ
|
||||
|
|
@ -8237,11 +8237,11 @@ C98A C98B C98A 13D2 Ɋ
|
|||
C98B C98B C98A 13D2 ɋ
|
||||
C98C C98D C98C 13E4 Ɍ
|
||||
C98D C98D C98C 13E4 ɍ
|
||||
C9BD C9BD 13FC ɽ
|
||||
C9BD C9BD E2B1A4 13FC ɽ
|
||||
E2B1A4 C9BD E2B1A4 13FC Ɽ
|
||||
EA9CA8 EA9CA9 EA9CA8 143314AD Ꜩ
|
||||
EA9CA9 EA9CA9 EA9CA8 143314AD ꜩ
|
||||
C8BE C8BE 143C Ⱦ
|
||||
C8BE E2B1A6 C8BE 143C Ⱦ
|
||||
E2B1A6 E2B1A6 C8BE 143C ⱦ
|
||||
C984 CA89 C984 145B Ʉ
|
||||
CA89 CA89 C984 145B ʉ
|
||||
|
|
|
|||
|
|
@ -587,3 +587,177 @@ DROP TABLE t1;
|
|||
#
|
||||
# End of 10.2 tests
|
||||
#
|
||||
#
|
||||
# Start of 10.3 tests
|
||||
#
|
||||
#
|
||||
# MDEV-30556 UPPER() returns an empty string for U+0251 in Unicode-5.2.0+ collations for utf8
|
||||
#
|
||||
SET NAMES utf8mb3 COLLATE utf8mb3_unicode_ci /*Unicode-4.0 folding*/;
|
||||
CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
|
||||
SHOW CREATE TABLE case_folding;
|
||||
Table Create Table
|
||||
case_folding CREATE TABLE `case_folding` (
|
||||
`code` int(1) NOT NULL,
|
||||
`c` varchar(32) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||
INSERT INTO case_folding (code) VALUES
|
||||
(0x23A),
|
||||
(0x23E),
|
||||
(0x23F),
|
||||
(0x240),
|
||||
(0x250),
|
||||
(0x251),
|
||||
(0x252),
|
||||
(0x26B),
|
||||
(0x271),
|
||||
(0x27D);
|
||||
UPDATE case_folding SET c=CHAR(code USING ucs2);
|
||||
SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
|
||||
HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
|
||||
23A C8BA C8BA Ⱥ
|
||||
23E C8BE C8BE Ⱦ
|
||||
23F C8BF C8BF ȿ
|
||||
240 C980 C980 ɀ
|
||||
250 C990 C990 ɐ
|
||||
251 C991 C991 ɑ
|
||||
252 C992 C992 ɒ
|
||||
26B C9AB C9AB ɫ
|
||||
271 C9B1 C9B1 ɱ
|
||||
27D C9BD C9BD ɽ
|
||||
DROP TABLE case_folding;
|
||||
SET NAMES utf8mb3 COLLATE utf8mb3_unicode_520_ci;
|
||||
CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
|
||||
SHOW CREATE TABLE case_folding;
|
||||
Table Create Table
|
||||
case_folding CREATE TABLE `case_folding` (
|
||||
`code` int(1) NOT NULL,
|
||||
`c` varchar(32) CHARACTER SET utf8 COLLATE utf8_unicode_520_ci DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||
INSERT INTO case_folding (code) VALUES
|
||||
(0x23A),
|
||||
(0x23E),
|
||||
(0x23F),
|
||||
(0x240),
|
||||
(0x250),
|
||||
(0x251),
|
||||
(0x252),
|
||||
(0x26B),
|
||||
(0x271),
|
||||
(0x27D);
|
||||
UPDATE case_folding SET c=CHAR(code USING ucs2);
|
||||
SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
|
||||
HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
|
||||
23A E2B1A5 C8BA Ⱥ
|
||||
23E E2B1A6 C8BE Ⱦ
|
||||
23F C8BF E2B1BE ȿ
|
||||
240 C980 E2B1BF ɀ
|
||||
250 C990 E2B1AF ɐ
|
||||
251 C991 E2B1AD ɑ
|
||||
252 C992 E2B1B0 ɒ
|
||||
26B C9AB E2B1A2 ɫ
|
||||
271 C9B1 E2B1AE ɱ
|
||||
27D C9BD E2B1A4 ɽ
|
||||
DROP TABLE case_folding;
|
||||
SET NAMES utf8mb3 COLLATE utf8mb3_unicode_520_nopad_ci;
|
||||
CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
|
||||
SHOW CREATE TABLE case_folding;
|
||||
Table Create Table
|
||||
case_folding CREATE TABLE `case_folding` (
|
||||
`code` int(1) NOT NULL,
|
||||
`c` varchar(32) CHARACTER SET utf8 COLLATE utf8_unicode_520_nopad_ci DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||
INSERT INTO case_folding (code) VALUES
|
||||
(0x23A),
|
||||
(0x23E),
|
||||
(0x23F),
|
||||
(0x240),
|
||||
(0x250),
|
||||
(0x251),
|
||||
(0x252),
|
||||
(0x26B),
|
||||
(0x271),
|
||||
(0x27D);
|
||||
UPDATE case_folding SET c=CHAR(code USING ucs2);
|
||||
SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
|
||||
HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
|
||||
23A E2B1A5 C8BA Ⱥ
|
||||
23E E2B1A6 C8BE Ⱦ
|
||||
23F C8BF E2B1BE ȿ
|
||||
240 C980 E2B1BF ɀ
|
||||
250 C990 E2B1AF ɐ
|
||||
251 C991 E2B1AD ɑ
|
||||
252 C992 E2B1B0 ɒ
|
||||
26B C9AB E2B1A2 ɫ
|
||||
271 C9B1 E2B1AE ɱ
|
||||
27D C9BD E2B1A4 ɽ
|
||||
DROP TABLE case_folding;
|
||||
SET NAMES utf8mb3 COLLATE utf8mb3_myanmar_ci;
|
||||
CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
|
||||
SHOW CREATE TABLE case_folding;
|
||||
Table Create Table
|
||||
case_folding CREATE TABLE `case_folding` (
|
||||
`code` int(1) NOT NULL,
|
||||
`c` varchar(32) CHARACTER SET utf8 COLLATE utf8_myanmar_ci DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||
INSERT INTO case_folding (code) VALUES
|
||||
(0x23A),
|
||||
(0x23E),
|
||||
(0x23F),
|
||||
(0x240),
|
||||
(0x250),
|
||||
(0x251),
|
||||
(0x252),
|
||||
(0x26B),
|
||||
(0x271),
|
||||
(0x27D);
|
||||
UPDATE case_folding SET c=CHAR(code USING ucs2);
|
||||
SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
|
||||
HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
|
||||
23A E2B1A5 C8BA Ⱥ
|
||||
23E E2B1A6 C8BE Ⱦ
|
||||
23F C8BF E2B1BE ȿ
|
||||
240 C980 E2B1BF ɀ
|
||||
250 C990 E2B1AF ɐ
|
||||
251 C991 E2B1AD ɑ
|
||||
252 C992 E2B1B0 ɒ
|
||||
26B C9AB E2B1A2 ɫ
|
||||
271 C9B1 E2B1AE ɱ
|
||||
27D C9BD E2B1A4 ɽ
|
||||
DROP TABLE case_folding;
|
||||
SET NAMES utf8mb3 COLLATE utf8mb3_thai_520_w2;
|
||||
CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
|
||||
SHOW CREATE TABLE case_folding;
|
||||
Table Create Table
|
||||
case_folding CREATE TABLE `case_folding` (
|
||||
`code` int(1) NOT NULL,
|
||||
`c` varchar(32) CHARACTER SET utf8 COLLATE utf8_thai_520_w2 DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||
INSERT INTO case_folding (code) VALUES
|
||||
(0x23A),
|
||||
(0x23E),
|
||||
(0x23F),
|
||||
(0x240),
|
||||
(0x250),
|
||||
(0x251),
|
||||
(0x252),
|
||||
(0x26B),
|
||||
(0x271),
|
||||
(0x27D);
|
||||
UPDATE case_folding SET c=CHAR(code USING ucs2);
|
||||
SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
|
||||
HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
|
||||
23A E2B1A5 C8BA Ⱥ
|
||||
23E E2B1A6 C8BE Ⱦ
|
||||
23F C8BF E2B1BE ȿ
|
||||
240 C980 E2B1BF ɀ
|
||||
250 C990 E2B1AF ɐ
|
||||
251 C991 E2B1AD ɑ
|
||||
252 C992 E2B1B0 ɒ
|
||||
26B C9AB E2B1A2 ɫ
|
||||
271 C9B1 E2B1AE ɱ
|
||||
27D C9BD E2B1A4 ɽ
|
||||
DROP TABLE case_folding;
|
||||
#
|
||||
# End of 10.3 tests
|
||||
#
|
||||
|
|
|
|||
|
|
@ -21,3 +21,32 @@ SET NAMES utf8 COLLATE utf8_unicode_nopad_ci;
|
|||
--echo #
|
||||
--echo # End of 10.2 tests
|
||||
--echo #
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Start of 10.3 tests
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-30556 UPPER() returns an empty string for U+0251 in Unicode-5.2.0+ collations for utf8
|
||||
--echo #
|
||||
|
||||
SET NAMES utf8mb3 COLLATE utf8mb3_unicode_ci /*Unicode-4.0 folding*/;
|
||||
--source include/ctype_casefolding.inc
|
||||
|
||||
SET NAMES utf8mb3 COLLATE utf8mb3_unicode_520_ci;
|
||||
--source include/ctype_casefolding.inc
|
||||
|
||||
SET NAMES utf8mb3 COLLATE utf8mb3_unicode_520_nopad_ci;
|
||||
--source include/ctype_casefolding.inc
|
||||
|
||||
SET NAMES utf8mb3 COLLATE utf8mb3_myanmar_ci;
|
||||
--source include/ctype_casefolding.inc
|
||||
|
||||
SET NAMES utf8mb3 COLLATE utf8mb3_thai_520_w2;
|
||||
--source include/ctype_casefolding.inc
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.3 tests
|
||||
--echo #
|
||||
|
|
|
|||
|
|
@ -6605,3 +6605,177 @@ SET NAMES utf8mb4;
|
|||
#
|
||||
# End of 10.2 tests
|
||||
#
|
||||
#
|
||||
# Start of 10.3 tests
|
||||
#
|
||||
#
|
||||
# MDEV-30556 UPPER() returns an empty string for U+0251 in Unicode-5.2.0+ collations for utf8
|
||||
#
|
||||
SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci /*Unicode-4.0 folding*/;
|
||||
CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
|
||||
SHOW CREATE TABLE case_folding;
|
||||
Table Create Table
|
||||
case_folding CREATE TABLE `case_folding` (
|
||||
`code` int(1) NOT NULL,
|
||||
`c` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||
INSERT INTO case_folding (code) VALUES
|
||||
(0x23A),
|
||||
(0x23E),
|
||||
(0x23F),
|
||||
(0x240),
|
||||
(0x250),
|
||||
(0x251),
|
||||
(0x252),
|
||||
(0x26B),
|
||||
(0x271),
|
||||
(0x27D);
|
||||
UPDATE case_folding SET c=CHAR(code USING ucs2);
|
||||
SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
|
||||
HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
|
||||
23A C8BA C8BA Ⱥ
|
||||
23E C8BE C8BE Ⱦ
|
||||
23F C8BF C8BF ȿ
|
||||
240 C980 C980 ɀ
|
||||
250 C990 C990 ɐ
|
||||
251 C991 C991 ɑ
|
||||
252 C992 C992 ɒ
|
||||
26B C9AB C9AB ɫ
|
||||
271 C9B1 C9B1 ɱ
|
||||
27D C9BD C9BD ɽ
|
||||
DROP TABLE case_folding;
|
||||
SET NAMES utf8mb4 COLLATE utf8mb4_unicode_520_ci;
|
||||
CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
|
||||
SHOW CREATE TABLE case_folding;
|
||||
Table Create Table
|
||||
case_folding CREATE TABLE `case_folding` (
|
||||
`code` int(1) NOT NULL,
|
||||
`c` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||
INSERT INTO case_folding (code) VALUES
|
||||
(0x23A),
|
||||
(0x23E),
|
||||
(0x23F),
|
||||
(0x240),
|
||||
(0x250),
|
||||
(0x251),
|
||||
(0x252),
|
||||
(0x26B),
|
||||
(0x271),
|
||||
(0x27D);
|
||||
UPDATE case_folding SET c=CHAR(code USING ucs2);
|
||||
SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
|
||||
HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
|
||||
23A E2B1A5 C8BA Ⱥ
|
||||
23E E2B1A6 C8BE Ⱦ
|
||||
23F C8BF E2B1BE ȿ
|
||||
240 C980 E2B1BF ɀ
|
||||
250 C990 E2B1AF ɐ
|
||||
251 C991 E2B1AD ɑ
|
||||
252 C992 E2B1B0 ɒ
|
||||
26B C9AB E2B1A2 ɫ
|
||||
271 C9B1 E2B1AE ɱ
|
||||
27D C9BD E2B1A4 ɽ
|
||||
DROP TABLE case_folding;
|
||||
SET NAMES utf8mb4 COLLATE utf8mb4_unicode_520_nopad_ci;
|
||||
CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
|
||||
SHOW CREATE TABLE case_folding;
|
||||
Table Create Table
|
||||
case_folding CREATE TABLE `case_folding` (
|
||||
`code` int(1) NOT NULL,
|
||||
`c` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_nopad_ci DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||
INSERT INTO case_folding (code) VALUES
|
||||
(0x23A),
|
||||
(0x23E),
|
||||
(0x23F),
|
||||
(0x240),
|
||||
(0x250),
|
||||
(0x251),
|
||||
(0x252),
|
||||
(0x26B),
|
||||
(0x271),
|
||||
(0x27D);
|
||||
UPDATE case_folding SET c=CHAR(code USING ucs2);
|
||||
SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
|
||||
HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
|
||||
23A E2B1A5 C8BA Ⱥ
|
||||
23E E2B1A6 C8BE Ⱦ
|
||||
23F C8BF E2B1BE ȿ
|
||||
240 C980 E2B1BF ɀ
|
||||
250 C990 E2B1AF ɐ
|
||||
251 C991 E2B1AD ɑ
|
||||
252 C992 E2B1B0 ɒ
|
||||
26B C9AB E2B1A2 ɫ
|
||||
271 C9B1 E2B1AE ɱ
|
||||
27D C9BD E2B1A4 ɽ
|
||||
DROP TABLE case_folding;
|
||||
SET NAMES utf8mb4 COLLATE utf8mb4_myanmar_ci;
|
||||
CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
|
||||
SHOW CREATE TABLE case_folding;
|
||||
Table Create Table
|
||||
case_folding CREATE TABLE `case_folding` (
|
||||
`code` int(1) NOT NULL,
|
||||
`c` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_myanmar_ci DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||
INSERT INTO case_folding (code) VALUES
|
||||
(0x23A),
|
||||
(0x23E),
|
||||
(0x23F),
|
||||
(0x240),
|
||||
(0x250),
|
||||
(0x251),
|
||||
(0x252),
|
||||
(0x26B),
|
||||
(0x271),
|
||||
(0x27D);
|
||||
UPDATE case_folding SET c=CHAR(code USING ucs2);
|
||||
SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
|
||||
HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
|
||||
23A E2B1A5 C8BA Ⱥ
|
||||
23E E2B1A6 C8BE Ⱦ
|
||||
23F C8BF E2B1BE ȿ
|
||||
240 C980 E2B1BF ɀ
|
||||
250 C990 E2B1AF ɐ
|
||||
251 C991 E2B1AD ɑ
|
||||
252 C992 E2B1B0 ɒ
|
||||
26B C9AB E2B1A2 ɫ
|
||||
271 C9B1 E2B1AE ɱ
|
||||
27D C9BD E2B1A4 ɽ
|
||||
DROP TABLE case_folding;
|
||||
SET NAMES utf8mb4 COLLATE utf8mb4_thai_520_w2;
|
||||
CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
|
||||
SHOW CREATE TABLE case_folding;
|
||||
Table Create Table
|
||||
case_folding CREATE TABLE `case_folding` (
|
||||
`code` int(1) NOT NULL,
|
||||
`c` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_thai_520_w2 DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||
INSERT INTO case_folding (code) VALUES
|
||||
(0x23A),
|
||||
(0x23E),
|
||||
(0x23F),
|
||||
(0x240),
|
||||
(0x250),
|
||||
(0x251),
|
||||
(0x252),
|
||||
(0x26B),
|
||||
(0x271),
|
||||
(0x27D);
|
||||
UPDATE case_folding SET c=CHAR(code USING ucs2);
|
||||
SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
|
||||
HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
|
||||
23A E2B1A5 C8BA Ⱥ
|
||||
23E E2B1A6 C8BE Ⱦ
|
||||
23F C8BF E2B1BE ȿ
|
||||
240 C980 E2B1BF ɀ
|
||||
250 C990 E2B1AF ɐ
|
||||
251 C991 E2B1AD ɑ
|
||||
252 C992 E2B1B0 ɒ
|
||||
26B C9AB E2B1A2 ɫ
|
||||
271 C9B1 E2B1AE ɱ
|
||||
27D C9BD E2B1A4 ɽ
|
||||
DROP TABLE case_folding;
|
||||
#
|
||||
# End of 10.3 tests
|
||||
#
|
||||
|
|
|
|||
|
|
@ -108,3 +108,32 @@ SET NAMES utf8mb4;
|
|||
--echo #
|
||||
--echo # End of 10.2 tests
|
||||
--echo #
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Start of 10.3 tests
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-30556 UPPER() returns an empty string for U+0251 in Unicode-5.2.0+ collations for utf8
|
||||
--echo #
|
||||
|
||||
SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci /*Unicode-4.0 folding*/;
|
||||
--source include/ctype_casefolding.inc
|
||||
|
||||
SET NAMES utf8mb4 COLLATE utf8mb4_unicode_520_ci;
|
||||
--source include/ctype_casefolding.inc
|
||||
|
||||
SET NAMES utf8mb4 COLLATE utf8mb4_unicode_520_nopad_ci;
|
||||
--source include/ctype_casefolding.inc
|
||||
|
||||
SET NAMES utf8mb4 COLLATE utf8mb4_myanmar_ci;
|
||||
--source include/ctype_casefolding.inc
|
||||
|
||||
SET NAMES utf8mb4 COLLATE utf8mb4_thai_520_w2;
|
||||
--source include/ctype_casefolding.inc
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.3 tests
|
||||
--echo #
|
||||
|
|
|
|||
|
|
@ -525,3 +525,35 @@ DELETE v2 FROM v2;
|
|||
ERROR HY000: Can not delete from join view 'test.v2'
|
||||
DROP VIEW v2, v1;
|
||||
DROP TABLE t1, t2;
|
||||
End of 5.5 tests
|
||||
#
|
||||
# MDEV-30586: DELETE with WHERE containing nested subquery
|
||||
# with set function aggregated in outer subquery
|
||||
#
|
||||
create table t1 (a int);
|
||||
insert into t1 values (3), (7), (1);
|
||||
create table t2 (b int);
|
||||
insert into t2 values (2), (1), (4), (7);
|
||||
create table t3 (a int, b int);
|
||||
insert into t3 values (2,10), (7,30), (2,30), (1,10), (7,40);
|
||||
select * from t1
|
||||
where t1.a in (select t3.a from t3 group by t3.a
|
||||
having t3.a > any (select t2.b from t2
|
||||
where t2.b*10 < sum(t3.b)));
|
||||
a
|
||||
7
|
||||
delete from t1
|
||||
where t1.a in (select t3.a from t3 group by t3.a
|
||||
having t3.a > any (select t2.b from t2
|
||||
where t2.b*10 < sum(t3.b)));
|
||||
select * from t1
|
||||
where t1.a in (select t3.a from t3 group by t3.a
|
||||
having t3.a > any (select t2.b from t2
|
||||
where t2.b*10 < sum(t3.b)));
|
||||
a
|
||||
update t1 set t1.a=t1.a+10
|
||||
where t1.a in (select t3.a from t3 group by t3.a
|
||||
having t3.a > any (select t2.b from t2
|
||||
where t2.b*10 < sum(t3.b)));
|
||||
drop table t1,t2,t3;
|
||||
End of 10.4 tests
|
||||
|
|
|
|||
|
|
@ -582,3 +582,44 @@ DELETE v2 FROM v2;
|
|||
|
||||
DROP VIEW v2, v1;
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
--echo End of 5.5 tests
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-30586: DELETE with WHERE containing nested subquery
|
||||
--echo # with set function aggregated in outer subquery
|
||||
--echo #
|
||||
|
||||
create table t1 (a int);
|
||||
insert into t1 values (3), (7), (1);
|
||||
|
||||
create table t2 (b int);
|
||||
insert into t2 values (2), (1), (4), (7);
|
||||
|
||||
create table t3 (a int, b int);
|
||||
insert into t3 values (2,10), (7,30), (2,30), (1,10), (7,40);
|
||||
|
||||
let $c=
|
||||
t1.a in (select t3.a from t3 group by t3.a
|
||||
having t3.a > any (select t2.b from t2
|
||||
where t2.b*10 < sum(t3.b)));
|
||||
|
||||
eval
|
||||
select * from t1
|
||||
where $c;
|
||||
|
||||
eval
|
||||
delete from t1
|
||||
where $c;
|
||||
|
||||
eval
|
||||
select * from t1
|
||||
where $c;
|
||||
|
||||
eval
|
||||
update t1 set t1.a=t1.a+10
|
||||
where $c;
|
||||
|
||||
drop table t1,t2,t3;
|
||||
|
||||
--echo End of 10.4 tests
|
||||
|
|
|
|||
|
|
@ -1251,3 +1251,123 @@ EXPLAIN
|
|||
}
|
||||
}
|
||||
DROP TABLES t1, t2;
|
||||
# End of 10.3 tests
|
||||
#
|
||||
# MDEV-28538: multi-table UPDATE/DELETE with possible exists-to-in
|
||||
#
|
||||
create table t1 (c1 int, c2 int, c3 int, index idx(c2));
|
||||
insert into t1 values
|
||||
(1,1,1),(3,2,2),(1,3,3),
|
||||
(2,1,4),(2,2,5),(4,3,6),
|
||||
(2,4,7),(2,5,8);
|
||||
create table t2 (c1 int, c2 int, c3 int, index idx(c2));
|
||||
insert into t2 values
|
||||
(1,7,1),(1,8,2),(1,3,3),
|
||||
(2,1,4),(2,2,5),(2,3,6),
|
||||
(2,4,7),(2,5,8);
|
||||
create table t3 (c1 int, c2 int, c3 int, index idx(c2));
|
||||
insert into t3 values
|
||||
(1,1,1),(1,2,2),(1,3,3),
|
||||
(2,1,4),(2,2,5),(2,3,6),
|
||||
(2,4,7),(2,5,8);
|
||||
insert into t3 select c1+1, c2+2, c3 from t3;
|
||||
insert into t3 select c1, c2+2, c3 from t3;
|
||||
analyze table t1,t2,t3 persistent for all;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
test.t2 analyze status Engine-independent statistics collected
|
||||
test.t2 analyze status OK
|
||||
test.t3 analyze status Engine-independent statistics collected
|
||||
test.t3 analyze status OK
|
||||
explain select * from t1,t3
|
||||
where t1.c2 = t3.c2 and
|
||||
t1.c1 > 1 and
|
||||
exists (select 'X' from t2 where t2.c1 = t1.c1 and t2.c2 > 4);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL idx NULL NULL NULL 8 Using where
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
|
||||
1 PRIMARY t3 ref idx idx 5 test.t1.c2 3
|
||||
2 MATERIALIZED t2 range idx idx 5 NULL 3 Using index condition; Using where
|
||||
explain delete from t1 using t1,t3
|
||||
where t1.c2 = t3.c2 and
|
||||
t1.c1 > 1 and
|
||||
exists (select 'X' from t2 where t2.c1 = t1.c1 and t2.c2 > 4);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL idx NULL NULL NULL 8 Using where
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
|
||||
1 PRIMARY t3 ref idx idx 5 test.t1.c2 3 Using index
|
||||
2 MATERIALIZED t2 range idx idx 5 NULL 3 Using where
|
||||
explain update t1,t3 set t1.c1 = t1.c1+10
|
||||
where t1.c2 = t3.c2 and
|
||||
t1.c1 > 1 and
|
||||
exists (select 'X' from t2 where t2.c1 = t1.c1 and t2.c2 > 4);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL idx NULL NULL NULL 8 Using where
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
|
||||
1 PRIMARY t3 ref idx idx 5 test.t1.c2 3 Using index
|
||||
2 MATERIALIZED t2 range idx idx 5 NULL 3 Using where
|
||||
create table t as select * from t1;
|
||||
select * from t1,t3
|
||||
where t1.c2 = t3.c2 and
|
||||
t1.c1 > 1 and
|
||||
exists (select 'X' from t2 where t2.c1 = t1.c1 and t2.c2 > 4);
|
||||
c1 c2 c3 c1 c2 c3
|
||||
2 1 4 1 1 1
|
||||
2 1 4 2 1 4
|
||||
2 2 5 1 2 2
|
||||
2 2 5 2 2 5
|
||||
2 4 7 2 4 7
|
||||
2 4 7 2 4 2
|
||||
2 4 7 3 4 5
|
||||
2 4 7 1 4 2
|
||||
2 4 7 2 4 5
|
||||
2 5 8 2 5 8
|
||||
2 5 8 2 5 3
|
||||
2 5 8 3 5 6
|
||||
2 5 8 1 5 3
|
||||
2 5 8 2 5 6
|
||||
2 5 8 2 5 1
|
||||
2 5 8 3 5 4
|
||||
select * from t1;
|
||||
c1 c2 c3
|
||||
1 1 1
|
||||
3 2 2
|
||||
1 3 3
|
||||
2 1 4
|
||||
2 2 5
|
||||
4 3 6
|
||||
2 4 7
|
||||
2 5 8
|
||||
delete from t1 using t1,t3
|
||||
where t1.c2 = t3.c2 and
|
||||
t1.c1 > 1 and
|
||||
exists (select 'X' from t2 where t2.c1 = t1.c1 and t2.c2 > 4);
|
||||
select * from t1;
|
||||
c1 c2 c3
|
||||
1 1 1
|
||||
3 2 2
|
||||
1 3 3
|
||||
4 3 6
|
||||
truncate table t1;
|
||||
insert into t1 select * from t;
|
||||
analyze table t1 persistent for all;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status Table is already up to date
|
||||
update t1,t3 set t1.c1 = t1.c1+10
|
||||
where t1.c2 = t3.c2 and
|
||||
t1.c1 > 1 and
|
||||
exists (select 'X' from t2 where t2.c1 = t1.c1 and t2.c2 > 4);
|
||||
select * from t1;
|
||||
c1 c2 c3
|
||||
1 1 1
|
||||
3 2 2
|
||||
1 3 3
|
||||
12 1 4
|
||||
12 2 5
|
||||
4 3 6
|
||||
12 4 7
|
||||
12 5 8
|
||||
drop table t1,t2,t3,t;
|
||||
# End of 10.4 tests
|
||||
|
|
|
|||
|
|
@ -1130,3 +1130,73 @@ EXPLAIN FORMAT=JSON UPDATE t2 JOIN t1 USING(a) SET t2.part=2 WHERE t2.part=1 AND
|
|||
EXPLAIN FORMAT=JSON UPDATE t2 JOIN t1 USING(a) SET t2.part=3 WHERE t2.part=2 AND t1.part=2;
|
||||
|
||||
DROP TABLES t1, t2;
|
||||
|
||||
--echo # End of 10.3 tests
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-28538: multi-table UPDATE/DELETE with possible exists-to-in
|
||||
--echo #
|
||||
|
||||
create table t1 (c1 int, c2 int, c3 int, index idx(c2));
|
||||
insert into t1 values
|
||||
(1,1,1),(3,2,2),(1,3,3),
|
||||
(2,1,4),(2,2,5),(4,3,6),
|
||||
(2,4,7),(2,5,8);
|
||||
|
||||
create table t2 (c1 int, c2 int, c3 int, index idx(c2));
|
||||
insert into t2 values
|
||||
(1,7,1),(1,8,2),(1,3,3),
|
||||
(2,1,4),(2,2,5),(2,3,6),
|
||||
(2,4,7),(2,5,8);
|
||||
|
||||
create table t3 (c1 int, c2 int, c3 int, index idx(c2));
|
||||
insert into t3 values
|
||||
(1,1,1),(1,2,2),(1,3,3),
|
||||
(2,1,4),(2,2,5),(2,3,6),
|
||||
(2,4,7),(2,5,8);
|
||||
insert into t3 select c1+1, c2+2, c3 from t3;
|
||||
insert into t3 select c1, c2+2, c3 from t3;
|
||||
|
||||
analyze table t1,t2,t3 persistent for all;
|
||||
|
||||
let $c=
|
||||
t1.c2 = t3.c2 and
|
||||
t1.c1 > 1 and
|
||||
exists (select 'X' from t2 where t2.c1 = t1.c1 and t2.c2 > 4);
|
||||
|
||||
let $q1=
|
||||
select * from t1,t3
|
||||
where $c;
|
||||
|
||||
eval explain $q1;
|
||||
|
||||
let $q2=
|
||||
delete from t1 using t1,t3
|
||||
where $c;
|
||||
|
||||
eval explain $q2;
|
||||
|
||||
let $q3=
|
||||
update t1,t3 set t1.c1 = t1.c1+10
|
||||
where $c;
|
||||
|
||||
eval explain $q3;
|
||||
|
||||
create table t as select * from t1;
|
||||
|
||||
eval $q1;
|
||||
select * from t1;
|
||||
|
||||
eval $q2;
|
||||
select * from t1;
|
||||
|
||||
truncate table t1;
|
||||
insert into t1 select * from t;
|
||||
analyze table t1 persistent for all;
|
||||
|
||||
eval $q3;
|
||||
select * from t1;
|
||||
|
||||
drop table t1,t2,t3,t;
|
||||
|
||||
--echo # End of 10.4 tests
|
||||
|
|
|
|||
|
|
@ -76,7 +76,8 @@ rollback;
|
|||
explain update t1 set c1=0 where exists (select 'X' from t1 a where a.c2 = t1.c2) and c2 > 3;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 8 Using where
|
||||
2 DEPENDENT SUBQUERY a ALL NULL NULL NULL NULL 8 Using where
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
|
||||
2 MATERIALIZED a ALL NULL NULL NULL NULL 8
|
||||
start transaction;
|
||||
update t1 set c1=c1+10 where exists (select 'X' from t1 a where a.c2 = t1.c2) and c2 >= 3;
|
||||
affected rows: 4
|
||||
|
|
@ -317,7 +318,8 @@ rollback;
|
|||
explain update t1 set c1=0 where exists (select 'X' from t1 a where a.c2 = t1.c2) and c2 > 3;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 range t1_c2 t1_c2 5 NULL 2 Using where
|
||||
2 DEPENDENT SUBQUERY a ref t1_c2 t1_c2 5 test.t1.c2 4 Using index
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
|
||||
2 MATERIALIZED a range t1_c2 t1_c2 5 NULL 2 Using where; Using index
|
||||
start transaction;
|
||||
update t1 set c1=c1+10 where exists (select 'X' from t1 a where a.c2 = t1.c2) and c2 >= 3;
|
||||
affected rows: 4
|
||||
|
|
@ -558,7 +560,8 @@ rollback;
|
|||
explain update t1 set c1=0 where exists (select 'X' from t1 a where a.c2 = t1.c2) and c2 > 3;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 range t1_c2 t1_c2 5 NULL 2 Using where
|
||||
2 DEPENDENT SUBQUERY a ref t1_c2 t1_c2 5 test.t1.c2 1 Using index
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
|
||||
2 MATERIALIZED a range t1_c2 t1_c2 5 NULL 2 Using where; Using index
|
||||
start transaction;
|
||||
update t1 set c1=c1+10 where exists (select 'X' from t1 a where a.c2 = t1.c2) and c2 >= 3;
|
||||
affected rows: 4
|
||||
|
|
@ -800,7 +803,8 @@ rollback;
|
|||
explain update t1 set c1=0 where exists (select 'X' from t1 a where a.c2 = t1.c2) and c2 > 3;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 range t1_c2 t1_c2 5 NULL 2 Using where
|
||||
2 DEPENDENT SUBQUERY a ref t1_c2 t1_c2 5 test.t1.c2 1 Using index
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
|
||||
2 MATERIALIZED a range t1_c2 t1_c2 5 NULL 2 Using where; Using index
|
||||
start transaction;
|
||||
update t1 set c1=c1+10 where exists (select 'X' from t1 a where a.c2 = t1.c2) and c2 >= 3;
|
||||
affected rows: 4
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue