mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
Merge remote-tracking branch 'origin/10.4' into 10.5
This commit is contained in:
@@ -3815,9 +3815,21 @@ void do_move_file(struct st_command *command)
|
|||||||
sizeof(move_file_args)/sizeof(struct command_arg),
|
sizeof(move_file_args)/sizeof(struct command_arg),
|
||||||
' ');
|
' ');
|
||||||
|
|
||||||
if (bad_path(ds_to_file.str))
|
size_t from_plen = strlen(ds_from_file.str);
|
||||||
DBUG_VOID_RETURN;
|
size_t to_plen = strlen(ds_to_file.str);
|
||||||
|
const char *vardir= getenv("MYSQLTEST_VARDIR");
|
||||||
|
const char *tmpdir= getenv("MYSQL_TMP_DIR");
|
||||||
|
|
||||||
|
if (!((is_sub_path(ds_from_file.str, from_plen, vardir) &&
|
||||||
|
is_sub_path(ds_to_file.str, to_plen, vardir)) ||
|
||||||
|
(is_sub_path(ds_from_file.str, from_plen, tmpdir) &&
|
||||||
|
is_sub_path(ds_to_file.str, to_plen, tmpdir)))) {
|
||||||
|
report_or_die("Paths '%s' and '%s' are not both under MYSQLTEST_VARDIR '%s'"
|
||||||
|
"or both under MYSQL_TMP_DIR '%s'",
|
||||||
|
ds_from_file, ds_to_file, vardir, tmpdir);
|
||||||
|
DBUG_VOID_RETURN;
|
||||||
|
}
|
||||||
|
|
||||||
DBUG_PRINT("info", ("Move %s to %s", ds_from_file.str, ds_to_file.str));
|
DBUG_PRINT("info", ("Move %s to %s", ds_from_file.str, ds_to_file.str));
|
||||||
error= (my_rename(ds_from_file.str, ds_to_file.str,
|
error= (my_rename(ds_from_file.str, ds_to_file.str,
|
||||||
MYF(disable_warnings ? 0 : MY_WME)) != 0);
|
MYF(disable_warnings ? 0 : MY_WME)) != 0);
|
||||||
|
@@ -267,6 +267,28 @@ typedef enum enum_repertoire_t
|
|||||||
#define MY_STRXFRM_REVERSE_LEVEL6 0x00200000 /* if reverse order for level6 */
|
#define MY_STRXFRM_REVERSE_LEVEL6 0x00200000 /* if reverse order for level6 */
|
||||||
#define MY_STRXFRM_REVERSE_SHIFT 16
|
#define MY_STRXFRM_REVERSE_SHIFT 16
|
||||||
|
|
||||||
|
/* Flags to strnncollsp_nchars */
|
||||||
|
/*
|
||||||
|
MY_STRNNCOLLSP_NCHARS_EMULATE_TRIMMED_TRAILING_SPACES -
|
||||||
|
defines if inside strnncollsp_nchars()
|
||||||
|
short strings should be virtually extended to "nchars"
|
||||||
|
characters by emulating trimmed trailing spaces.
|
||||||
|
|
||||||
|
This flag is needed when comparing packed strings of the CHAR
|
||||||
|
data type, when trailing spaces are trimmed on storage (like in InnoDB),
|
||||||
|
however the actual values (after unpacking) will have those trailing
|
||||||
|
spaces.
|
||||||
|
|
||||||
|
If this flag is passed, strnncollsp_nchars() performs both
|
||||||
|
truncating longer strings and extending shorter strings
|
||||||
|
to exactly "nchars".
|
||||||
|
|
||||||
|
If this flag is not passed, strnncollsp_nchars() only truncates longer
|
||||||
|
strings to "nchars", but does not extend shorter strings to "nchars".
|
||||||
|
*/
|
||||||
|
#define MY_STRNNCOLLSP_NCHARS_EMULATE_TRIMMED_TRAILING_SPACES 1
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Collation IDs for MariaDB that should not conflict with MySQL.
|
Collation IDs for MariaDB that should not conflict with MySQL.
|
||||||
We reserve 256..511, because MySQL will most likely use this range
|
We reserve 256..511, because MySQL will most likely use this range
|
||||||
@@ -402,7 +424,8 @@ struct my_collation_handler_st
|
|||||||
int (*strnncollsp_nchars)(CHARSET_INFO *,
|
int (*strnncollsp_nchars)(CHARSET_INFO *,
|
||||||
const uchar *str1, size_t len1,
|
const uchar *str1, size_t len1,
|
||||||
const uchar *str2, size_t len2,
|
const uchar *str2, size_t len2,
|
||||||
size_t nchars);
|
size_t nchars,
|
||||||
|
uint flags);
|
||||||
size_t (*strnxfrm)(CHARSET_INFO *,
|
size_t (*strnxfrm)(CHARSET_INFO *,
|
||||||
uchar *dst, size_t dstlen, uint nweights,
|
uchar *dst, size_t dstlen, uint nweights,
|
||||||
const uchar *src, size_t srclen, uint flags);
|
const uchar *src, size_t srclen, uint flags);
|
||||||
|
85
mysql-test/include/ctype_nopad_prefix_unique.inc
Normal file
85
mysql-test/include/ctype_nopad_prefix_unique.inc
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
--echo #
|
||||||
|
--echo # MDEV-30034 UNIQUE USING HASH accepts duplicate entries for tricky collations
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
# TEXT
|
||||||
|
|
||||||
|
if (`SELECT UPPER(@@storage_engine) != 'MEMORY'`)
|
||||||
|
{
|
||||||
|
EXECUTE IMMEDIATE REPLACE(
|
||||||
|
'CREATE TABLE t1 ( '
|
||||||
|
' a TEXT COLLATE <COLLATION>,'
|
||||||
|
'UNIQUE(a(3)))',
|
||||||
|
'<COLLATION>', @@collation_connection);
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
INSERT INTO t1 VALUES ('ss ');
|
||||||
|
--error ER_DUP_ENTRY
|
||||||
|
INSERT INTO t1 VALUES (_utf8mb3 0xC39F20)/*SZ+SPACE*/;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
|
||||||
|
EXECUTE IMMEDIATE REPLACE(
|
||||||
|
'CREATE TABLE t1 ( '
|
||||||
|
' a TEXT COLLATE <COLLATION>,'
|
||||||
|
'UNIQUE(a(3)) USING HASH)',
|
||||||
|
'<COLLATION>', @@collation_connection);
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
INSERT INTO t1 VALUES ('ss ');
|
||||||
|
--error ER_DUP_ENTRY
|
||||||
|
INSERT INTO t1 VALUES (_utf8mb3 0xC39F20)/*SZ+SPACE*/;
|
||||||
|
DROP TABLE t1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# VARCHAR
|
||||||
|
|
||||||
|
EXECUTE IMMEDIATE REPLACE(
|
||||||
|
'CREATE TABLE t1 ( '
|
||||||
|
' a VARCHAR(2000) COLLATE <COLLATION>,'
|
||||||
|
'UNIQUE(a(3)))',
|
||||||
|
'<COLLATION>', @@collation_connection);
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
INSERT INTO t1 VALUES ('ss ');
|
||||||
|
--error ER_DUP_ENTRY
|
||||||
|
INSERT INTO t1 VALUES (_utf8mb3 0xC39F20)/*SZ+SPACE*/;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
|
||||||
|
EXECUTE IMMEDIATE REPLACE(
|
||||||
|
'CREATE TABLE t1 ( '
|
||||||
|
' a VARCHAR(2000) COLLATE <COLLATION>,'
|
||||||
|
'UNIQUE(a(3)) USING HASH)',
|
||||||
|
'<COLLATION>', @@collation_connection);
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
INSERT INTO t1 VALUES ('ss ');
|
||||||
|
--error ER_DUP_ENTRY
|
||||||
|
INSERT INTO t1 VALUES (_utf8mb3 0xC39F20)/*SZ+SPACE*/;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
# CHAR
|
||||||
|
|
||||||
|
# MyISAM is buggy on CHAR+BTREE+UNIQUE+PREFIX (see MDEV-30048), disable for now
|
||||||
|
# Other engines work fine
|
||||||
|
|
||||||
|
if (`SELECT UPPER(@@storage_engine) != 'MYISAM'`)
|
||||||
|
{
|
||||||
|
EXECUTE IMMEDIATE REPLACE(
|
||||||
|
'CREATE TABLE t1 ( '
|
||||||
|
' a CHAR(20) COLLATE <COLLATION>,'
|
||||||
|
'UNIQUE(a(3)))',
|
||||||
|
'<COLLATION>', @@collation_connection);
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
INSERT INTO t1 VALUES ('ss ');
|
||||||
|
INSERT INTO t1 VALUES (_utf8mb3 0xC39F20)/*SZ+SPACE*/;
|
||||||
|
DROP TABLE t1;
|
||||||
|
}
|
||||||
|
|
||||||
|
EXECUTE IMMEDIATE REPLACE(
|
||||||
|
'CREATE TABLE t1 ( '
|
||||||
|
' a CHAR(20) COLLATE <COLLATION>,'
|
||||||
|
'UNIQUE(a(3)) USING HASH)',
|
||||||
|
'<COLLATION>', @@collation_connection);
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
INSERT INTO t1 VALUES ('ss ');
|
||||||
|
INSERT INTO t1 VALUES (_utf8mb3 0xC39F20)/*SZ+SPACE*/;
|
||||||
|
DROP TABLE t1;
|
@@ -761,3 +761,151 @@ DROP TABLE case_folding;
|
|||||||
#
|
#
|
||||||
# End of 10.3 tests
|
# End of 10.3 tests
|
||||||
#
|
#
|
||||||
|
#
|
||||||
|
# Start of 10.4 tests
|
||||||
|
#
|
||||||
|
SET DEFAULT_STORAGE_ENGINE=MyISAM;
|
||||||
|
SET NAMES utf8mb3 COLLATE utf8mb3_unicode_nopad_ci;
|
||||||
|
#
|
||||||
|
# MDEV-30034 UNIQUE USING HASH accepts duplicate entries for tricky collations
|
||||||
|
#
|
||||||
|
EXECUTE IMMEDIATE REPLACE(
|
||||||
|
'CREATE TABLE t1 ( '
|
||||||
|
' a TEXT COLLATE <COLLATION>,'
|
||||||
|
'UNIQUE(a(3)))',
|
||||||
|
'<COLLATION>', @@collation_connection);
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`a` text CHARACTER SET utf8 COLLATE utf8_unicode_nopad_ci DEFAULT NULL,
|
||||||
|
UNIQUE KEY `a` (`a`(3))
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||||
|
INSERT INTO t1 VALUES ('ss ');
|
||||||
|
INSERT INTO t1 VALUES (_utf8mb3 0xC39F20)/*SZ+SPACE*/;
|
||||||
|
ERROR 23000: Duplicate entry 'ß ' for key 'a'
|
||||||
|
DROP TABLE t1;
|
||||||
|
EXECUTE IMMEDIATE REPLACE(
|
||||||
|
'CREATE TABLE t1 ( '
|
||||||
|
' a TEXT COLLATE <COLLATION>,'
|
||||||
|
'UNIQUE(a(3)) USING HASH)',
|
||||||
|
'<COLLATION>', @@collation_connection);
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`a` text CHARACTER SET utf8 COLLATE utf8_unicode_nopad_ci DEFAULT NULL,
|
||||||
|
UNIQUE KEY `a` (`a`(3)) USING HASH
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||||
|
INSERT INTO t1 VALUES ('ss ');
|
||||||
|
INSERT INTO t1 VALUES (_utf8mb3 0xC39F20)/*SZ+SPACE*/;
|
||||||
|
ERROR 23000: Duplicate entry 'ß ' for key 'a'
|
||||||
|
DROP TABLE t1;
|
||||||
|
EXECUTE IMMEDIATE REPLACE(
|
||||||
|
'CREATE TABLE t1 ( '
|
||||||
|
' a VARCHAR(2000) COLLATE <COLLATION>,'
|
||||||
|
'UNIQUE(a(3)))',
|
||||||
|
'<COLLATION>', @@collation_connection);
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`a` varchar(2000) CHARACTER SET utf8 COLLATE utf8_unicode_nopad_ci DEFAULT NULL,
|
||||||
|
UNIQUE KEY `a` (`a`(3))
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||||
|
INSERT INTO t1 VALUES ('ss ');
|
||||||
|
INSERT INTO t1 VALUES (_utf8mb3 0xC39F20)/*SZ+SPACE*/;
|
||||||
|
ERROR 23000: Duplicate entry 'ß ' for key 'a'
|
||||||
|
DROP TABLE t1;
|
||||||
|
EXECUTE IMMEDIATE REPLACE(
|
||||||
|
'CREATE TABLE t1 ( '
|
||||||
|
' a VARCHAR(2000) COLLATE <COLLATION>,'
|
||||||
|
'UNIQUE(a(3)) USING HASH)',
|
||||||
|
'<COLLATION>', @@collation_connection);
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`a` varchar(2000) CHARACTER SET utf8 COLLATE utf8_unicode_nopad_ci DEFAULT NULL,
|
||||||
|
UNIQUE KEY `a` (`a`(3)) USING HASH
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||||
|
INSERT INTO t1 VALUES ('ss ');
|
||||||
|
INSERT INTO t1 VALUES (_utf8mb3 0xC39F20)/*SZ+SPACE*/;
|
||||||
|
ERROR 23000: Duplicate entry 'ß ' for key 'a'
|
||||||
|
DROP TABLE t1;
|
||||||
|
EXECUTE IMMEDIATE REPLACE(
|
||||||
|
'CREATE TABLE t1 ( '
|
||||||
|
' a CHAR(20) COLLATE <COLLATION>,'
|
||||||
|
'UNIQUE(a(3)) USING HASH)',
|
||||||
|
'<COLLATION>', @@collation_connection);
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`a` char(20) CHARACTER SET utf8 COLLATE utf8_unicode_nopad_ci DEFAULT NULL,
|
||||||
|
UNIQUE KEY `a` (`a`(3)) USING HASH
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||||
|
INSERT INTO t1 VALUES ('ss ');
|
||||||
|
INSERT INTO t1 VALUES (_utf8mb3 0xC39F20)/*SZ+SPACE*/;
|
||||||
|
DROP TABLE t1;
|
||||||
|
SET DEFAULT_STORAGE_ENGINE=HEAP;
|
||||||
|
#
|
||||||
|
# MDEV-30034 UNIQUE USING HASH accepts duplicate entries for tricky collations
|
||||||
|
#
|
||||||
|
EXECUTE IMMEDIATE REPLACE(
|
||||||
|
'CREATE TABLE t1 ( '
|
||||||
|
' a VARCHAR(2000) COLLATE <COLLATION>,'
|
||||||
|
'UNIQUE(a(3)))',
|
||||||
|
'<COLLATION>', @@collation_connection);
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`a` varchar(2000) CHARACTER SET utf8 COLLATE utf8_unicode_nopad_ci DEFAULT NULL,
|
||||||
|
UNIQUE KEY `a` (`a`(3))
|
||||||
|
) ENGINE=MEMORY DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||||
|
INSERT INTO t1 VALUES ('ss ');
|
||||||
|
INSERT INTO t1 VALUES (_utf8mb3 0xC39F20)/*SZ+SPACE*/;
|
||||||
|
ERROR 23000: Duplicate entry 'ß ' for key 'a'
|
||||||
|
DROP TABLE t1;
|
||||||
|
EXECUTE IMMEDIATE REPLACE(
|
||||||
|
'CREATE TABLE t1 ( '
|
||||||
|
' a VARCHAR(2000) COLLATE <COLLATION>,'
|
||||||
|
'UNIQUE(a(3)) USING HASH)',
|
||||||
|
'<COLLATION>', @@collation_connection);
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`a` varchar(2000) CHARACTER SET utf8 COLLATE utf8_unicode_nopad_ci DEFAULT NULL,
|
||||||
|
UNIQUE KEY `a` (`a`(3)) USING HASH
|
||||||
|
) ENGINE=MEMORY DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||||
|
INSERT INTO t1 VALUES ('ss ');
|
||||||
|
INSERT INTO t1 VALUES (_utf8mb3 0xC39F20)/*SZ+SPACE*/;
|
||||||
|
ERROR 23000: Duplicate entry 'ß ' for key 'a'
|
||||||
|
DROP TABLE t1;
|
||||||
|
EXECUTE IMMEDIATE REPLACE(
|
||||||
|
'CREATE TABLE t1 ( '
|
||||||
|
' a CHAR(20) COLLATE <COLLATION>,'
|
||||||
|
'UNIQUE(a(3)))',
|
||||||
|
'<COLLATION>', @@collation_connection);
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`a` char(20) CHARACTER SET utf8 COLLATE utf8_unicode_nopad_ci DEFAULT NULL,
|
||||||
|
UNIQUE KEY `a` (`a`(3))
|
||||||
|
) ENGINE=MEMORY DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||||
|
INSERT INTO t1 VALUES ('ss ');
|
||||||
|
INSERT INTO t1 VALUES (_utf8mb3 0xC39F20)/*SZ+SPACE*/;
|
||||||
|
DROP TABLE t1;
|
||||||
|
EXECUTE IMMEDIATE REPLACE(
|
||||||
|
'CREATE TABLE t1 ( '
|
||||||
|
' a CHAR(20) COLLATE <COLLATION>,'
|
||||||
|
'UNIQUE(a(3)) USING HASH)',
|
||||||
|
'<COLLATION>', @@collation_connection);
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`a` char(20) CHARACTER SET utf8 COLLATE utf8_unicode_nopad_ci DEFAULT NULL,
|
||||||
|
UNIQUE KEY `a` (`a`(3)) USING HASH
|
||||||
|
) ENGINE=MEMORY DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||||
|
INSERT INTO t1 VALUES ('ss ');
|
||||||
|
INSERT INTO t1 VALUES (_utf8mb3 0xC39F20)/*SZ+SPACE*/;
|
||||||
|
DROP TABLE t1;
|
||||||
|
SET DEFAULT_STORAGE_ENGINE=DEFAULT;
|
||||||
|
#
|
||||||
|
# End of 10.4 tests
|
||||||
|
#
|
||||||
|
@@ -50,3 +50,21 @@ SET NAMES utf8mb3 COLLATE utf8mb3_thai_520_w2;
|
|||||||
--echo #
|
--echo #
|
||||||
--echo # End of 10.3 tests
|
--echo # End of 10.3 tests
|
||||||
--echo #
|
--echo #
|
||||||
|
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Start of 10.4 tests
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
SET DEFAULT_STORAGE_ENGINE=MyISAM;
|
||||||
|
SET NAMES utf8mb3 COLLATE utf8mb3_unicode_nopad_ci;
|
||||||
|
--source include/ctype_nopad_prefix_unique.inc
|
||||||
|
|
||||||
|
SET DEFAULT_STORAGE_ENGINE=HEAP;
|
||||||
|
--source include/ctype_nopad_prefix_unique.inc
|
||||||
|
|
||||||
|
SET DEFAULT_STORAGE_ENGINE=DEFAULT;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # End of 10.4 tests
|
||||||
|
--echo #
|
||||||
|
@@ -63,16 +63,24 @@ a b c
|
|||||||
# Done restarting server
|
# Done restarting server
|
||||||
# List before t1 DISCARD
|
# List before t1 DISCARD
|
||||||
db.opt
|
db.opt
|
||||||
|
t1.cfg.sav
|
||||||
t1.frm
|
t1.frm
|
||||||
t1.ibd
|
t1.ibd
|
||||||
|
t1.ibd.sav
|
||||||
|
t2.cfg.sav
|
||||||
t2.frm
|
t2.frm
|
||||||
t2.ibd
|
t2.ibd
|
||||||
|
t2.ibd.sav
|
||||||
ALTER TABLE t1 DISCARD TABLESPACE;
|
ALTER TABLE t1 DISCARD TABLESPACE;
|
||||||
# List after t1 DISCARD
|
# List after t1 DISCARD
|
||||||
db.opt
|
db.opt
|
||||||
|
t1.cfg.sav
|
||||||
t1.frm
|
t1.frm
|
||||||
|
t1.ibd.sav
|
||||||
|
t2.cfg.sav
|
||||||
t2.frm
|
t2.frm
|
||||||
t2.ibd
|
t2.ibd
|
||||||
|
t2.ibd.sav
|
||||||
ALTER TABLE t1 IMPORT TABLESPACE;
|
ALTER TABLE t1 IMPORT TABLESPACE;
|
||||||
ALTER TABLE t1 ENGINE InnoDB;
|
ALTER TABLE t1 ENGINE InnoDB;
|
||||||
SELECT COUNT(*) FROM t1;
|
SELECT COUNT(*) FROM t1;
|
||||||
@@ -90,10 +98,14 @@ a b c
|
|||||||
638 Cavalry ..asdasdfaeraf
|
638 Cavalry ..asdasdfaeraf
|
||||||
db.opt
|
db.opt
|
||||||
t1.cfg
|
t1.cfg
|
||||||
|
t1.cfg.sav
|
||||||
t1.frm
|
t1.frm
|
||||||
t1.ibd
|
t1.ibd
|
||||||
|
t1.ibd.sav
|
||||||
|
t2.cfg.sav
|
||||||
t2.frm
|
t2.frm
|
||||||
t2.ibd
|
t2.ibd
|
||||||
|
t2.ibd.sav
|
||||||
SELECT COUNT(*) FROM t1;
|
SELECT COUNT(*) FROM t1;
|
||||||
COUNT(*)
|
COUNT(*)
|
||||||
640
|
640
|
||||||
@@ -112,7 +124,9 @@ ALTER TABLE t2 ROW_FORMAT=DYNAMIC;
|
|||||||
ALTER TABLE t2 DISCARD TABLESPACE;
|
ALTER TABLE t2 DISCARD TABLESPACE;
|
||||||
# List after t2 DISCARD
|
# List after t2 DISCARD
|
||||||
db.opt
|
db.opt
|
||||||
|
t2.cfg.sav
|
||||||
t2.frm
|
t2.frm
|
||||||
|
t2.ibd.sav
|
||||||
ALTER TABLE t2 IMPORT TABLESPACE;
|
ALTER TABLE t2 IMPORT TABLESPACE;
|
||||||
ERROR HY000: Schema mismatch (Table flags don't match, server table has 0x21 and the meta-data file has 0x1; .cfg file uses ROW_FORMAT=COMPACT)
|
ERROR HY000: Schema mismatch (Table flags don't match, server table has 0x21 and the meta-data file has 0x1; .cfg file uses ROW_FORMAT=COMPACT)
|
||||||
ALTER TABLE t2 IMPORT TABLESPACE;
|
ALTER TABLE t2 IMPORT TABLESPACE;
|
||||||
|
@@ -283,3 +283,101 @@ DROP TABLE t1;
|
|||||||
#
|
#
|
||||||
# End of 10.2 tests
|
# End of 10.2 tests
|
||||||
#
|
#
|
||||||
|
#
|
||||||
|
# Start of 10.4 tests
|
||||||
|
#
|
||||||
|
SET NAMES utf8mb3 COLLATE utf8mb3_unicode_nopad_ci;
|
||||||
|
#
|
||||||
|
# MDEV-30034 UNIQUE USING HASH accepts duplicate entries for tricky collations
|
||||||
|
#
|
||||||
|
EXECUTE IMMEDIATE REPLACE(
|
||||||
|
'CREATE TABLE t1 ( '
|
||||||
|
' a TEXT COLLATE <COLLATION>,'
|
||||||
|
'UNIQUE(a(3)))',
|
||||||
|
'<COLLATION>', @@collation_connection);
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`a` text CHARACTER SET utf8 COLLATE utf8_unicode_nopad_ci DEFAULT NULL,
|
||||||
|
UNIQUE KEY `a` (`a`(3))
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||||
|
INSERT INTO t1 VALUES ('ss ');
|
||||||
|
INSERT INTO t1 VALUES (_utf8mb3 0xC39F20)/*SZ+SPACE*/;
|
||||||
|
ERROR 23000: Duplicate entry 'ß ' for key 'a'
|
||||||
|
DROP TABLE t1;
|
||||||
|
EXECUTE IMMEDIATE REPLACE(
|
||||||
|
'CREATE TABLE t1 ( '
|
||||||
|
' a TEXT COLLATE <COLLATION>,'
|
||||||
|
'UNIQUE(a(3)) USING HASH)',
|
||||||
|
'<COLLATION>', @@collation_connection);
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`a` text CHARACTER SET utf8 COLLATE utf8_unicode_nopad_ci DEFAULT NULL,
|
||||||
|
UNIQUE KEY `a` (`a`(3)) USING HASH
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||||
|
INSERT INTO t1 VALUES ('ss ');
|
||||||
|
INSERT INTO t1 VALUES (_utf8mb3 0xC39F20)/*SZ+SPACE*/;
|
||||||
|
ERROR 23000: Duplicate entry 'ß ' for key 'a'
|
||||||
|
DROP TABLE t1;
|
||||||
|
EXECUTE IMMEDIATE REPLACE(
|
||||||
|
'CREATE TABLE t1 ( '
|
||||||
|
' a VARCHAR(2000) COLLATE <COLLATION>,'
|
||||||
|
'UNIQUE(a(3)))',
|
||||||
|
'<COLLATION>', @@collation_connection);
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`a` varchar(2000) CHARACTER SET utf8 COLLATE utf8_unicode_nopad_ci DEFAULT NULL,
|
||||||
|
UNIQUE KEY `a` (`a`(3))
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||||
|
INSERT INTO t1 VALUES ('ss ');
|
||||||
|
INSERT INTO t1 VALUES (_utf8mb3 0xC39F20)/*SZ+SPACE*/;
|
||||||
|
ERROR 23000: Duplicate entry 'ß ' for key 'a'
|
||||||
|
DROP TABLE t1;
|
||||||
|
EXECUTE IMMEDIATE REPLACE(
|
||||||
|
'CREATE TABLE t1 ( '
|
||||||
|
' a VARCHAR(2000) COLLATE <COLLATION>,'
|
||||||
|
'UNIQUE(a(3)) USING HASH)',
|
||||||
|
'<COLLATION>', @@collation_connection);
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`a` varchar(2000) CHARACTER SET utf8 COLLATE utf8_unicode_nopad_ci DEFAULT NULL,
|
||||||
|
UNIQUE KEY `a` (`a`(3)) USING HASH
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||||
|
INSERT INTO t1 VALUES ('ss ');
|
||||||
|
INSERT INTO t1 VALUES (_utf8mb3 0xC39F20)/*SZ+SPACE*/;
|
||||||
|
ERROR 23000: Duplicate entry 'ß ' for key 'a'
|
||||||
|
DROP TABLE t1;
|
||||||
|
EXECUTE IMMEDIATE REPLACE(
|
||||||
|
'CREATE TABLE t1 ( '
|
||||||
|
' a CHAR(20) COLLATE <COLLATION>,'
|
||||||
|
'UNIQUE(a(3)))',
|
||||||
|
'<COLLATION>', @@collation_connection);
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`a` char(20) CHARACTER SET utf8 COLLATE utf8_unicode_nopad_ci DEFAULT NULL,
|
||||||
|
UNIQUE KEY `a` (`a`(3))
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||||
|
INSERT INTO t1 VALUES ('ss ');
|
||||||
|
INSERT INTO t1 VALUES (_utf8mb3 0xC39F20)/*SZ+SPACE*/;
|
||||||
|
DROP TABLE t1;
|
||||||
|
EXECUTE IMMEDIATE REPLACE(
|
||||||
|
'CREATE TABLE t1 ( '
|
||||||
|
' a CHAR(20) COLLATE <COLLATION>,'
|
||||||
|
'UNIQUE(a(3)) USING HASH)',
|
||||||
|
'<COLLATION>', @@collation_connection);
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`a` char(20) CHARACTER SET utf8 COLLATE utf8_unicode_nopad_ci DEFAULT NULL,
|
||||||
|
UNIQUE KEY `a` (`a`(3)) USING HASH
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||||
|
INSERT INTO t1 VALUES ('ss ');
|
||||||
|
INSERT INTO t1 VALUES (_utf8mb3 0xC39F20)/*SZ+SPACE*/;
|
||||||
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# End 10.4 tests
|
||||||
|
#
|
||||||
|
@@ -36,8 +36,8 @@ ALTER TABLE t NOWAIT ADD INDEX (c);
|
|||||||
|
|
||||||
FLUSH TABLE t FOR EXPORT;
|
FLUSH TABLE t FOR EXPORT;
|
||||||
--let $create= query_get_value(SHOW CREATE TABLE t, Create Table, 1)
|
--let $create= query_get_value(SHOW CREATE TABLE t, Create Table, 1)
|
||||||
--copy_file $datadir/test/t.cfg $MYSQL_TMP_DIR/t.cfg
|
--copy_file $datadir/test/t.cfg $datadir/test/t.cfg.sav
|
||||||
--copy_file $datadir/test/t.ibd $MYSQL_TMP_DIR/t.ibd
|
--copy_file $datadir/test/t.ibd $datadir/test/t.ibd.sav
|
||||||
UNLOCK TABLES;
|
UNLOCK TABLES;
|
||||||
|
|
||||||
DROP TABLE t;
|
DROP TABLE t;
|
||||||
@@ -46,8 +46,8 @@ eval $create;
|
|||||||
--enable_query_log
|
--enable_query_log
|
||||||
|
|
||||||
ALTER TABLE t DISCARD TABLESPACE;
|
ALTER TABLE t DISCARD TABLESPACE;
|
||||||
--move_file $MYSQL_TMP_DIR/t.cfg $datadir/test/t.cfg
|
--move_file $datadir/test/t.cfg.sav $datadir/test/t.cfg
|
||||||
--move_file $MYSQL_TMP_DIR/t.ibd $datadir/test/t.ibd
|
--move_file $datadir/test/t.ibd.sav $datadir/test/t.ibd
|
||||||
ALTER TABLE t IMPORT TABLESPACE;
|
ALTER TABLE t IMPORT TABLESPACE;
|
||||||
|
|
||||||
# Cleanup
|
# Cleanup
|
||||||
|
@@ -9,7 +9,6 @@ call mtr.add_suppression("InnoDB: Unable to import tablespace .* because it alre
|
|||||||
call mtr.add_suppression("Index for table 't2' is corrupt; try to repair it");
|
call mtr.add_suppression("Index for table 't2' is corrupt; try to repair it");
|
||||||
FLUSH TABLES;
|
FLUSH TABLES;
|
||||||
|
|
||||||
let $MYSQLD_TMPDIR = `SELECT @@tmpdir`;
|
|
||||||
let $MYSQLD_DATADIR = `SELECT @@datadir`;
|
let $MYSQLD_DATADIR = `SELECT @@datadir`;
|
||||||
let $checksum_algorithm = `SELECT @@innodb_checksum_algorithm`;
|
let $checksum_algorithm = `SELECT @@innodb_checksum_algorithm`;
|
||||||
|
|
||||||
@@ -39,10 +38,10 @@ CREATE TABLE t2(a INT PRIMARY KEY) ENGINE=InnoDB ROW_FORMAT=COMPACT;
|
|||||||
FLUSH TABLE t1, t2 FOR EXPORT;
|
FLUSH TABLE t1, t2 FOR EXPORT;
|
||||||
--echo # List before copying files
|
--echo # List before copying files
|
||||||
--list_files $MYSQLD_DATADIR/test
|
--list_files $MYSQLD_DATADIR/test
|
||||||
--copy_file $MYSQLD_DATADIR/test/t1.cfg $MYSQLD_TMPDIR/t1.cfg
|
--copy_file $MYSQLD_DATADIR/test/t1.cfg $MYSQLD_DATADIR/test/t1.cfg.sav
|
||||||
--copy_file $MYSQLD_DATADIR/test/t1.ibd $MYSQLD_TMPDIR/t1.ibd
|
--copy_file $MYSQLD_DATADIR/test/t1.ibd $MYSQLD_DATADIR/test/t1.ibd.sav
|
||||||
--move_file $MYSQLD_DATADIR/test/t2.cfg $MYSQLD_TMPDIR/t2.cfg
|
--move_file $MYSQLD_DATADIR/test/t2.cfg $MYSQLD_DATADIR/test/t2.cfg.sav
|
||||||
--copy_file $MYSQLD_DATADIR/test/t2.ibd $MYSQLD_TMPDIR/t2.ibd
|
--copy_file $MYSQLD_DATADIR/test/t2.ibd $MYSQLD_DATADIR/test/t2.ibd.sav
|
||||||
UNLOCK TABLES;
|
UNLOCK TABLES;
|
||||||
INSERT INTO t1 (b, c) SELECT b,c FROM t1 ORDER BY a;
|
INSERT INTO t1 (b, c) SELECT b,c FROM t1 ORDER BY a;
|
||||||
SELECT COUNT(*) FROM t1;
|
SELECT COUNT(*) FROM t1;
|
||||||
@@ -56,8 +55,8 @@ SELECT * FROM t1 ORDER BY a DESC LIMIT 3;
|
|||||||
ALTER TABLE t1 DISCARD TABLESPACE;
|
ALTER TABLE t1 DISCARD TABLESPACE;
|
||||||
--echo # List after t1 DISCARD
|
--echo # List after t1 DISCARD
|
||||||
--list_files $MYSQLD_DATADIR/test
|
--list_files $MYSQLD_DATADIR/test
|
||||||
--copy_file $MYSQLD_TMPDIR/t1.cfg $MYSQLD_DATADIR/test/t1.cfg
|
--copy_file $MYSQLD_DATADIR/test/t1.cfg.sav $MYSQLD_DATADIR/test/t1.cfg
|
||||||
--copy_file $MYSQLD_TMPDIR/t1.ibd $MYSQLD_DATADIR/test/t1.ibd
|
--copy_file $MYSQLD_DATADIR/test/t1.ibd.sav $MYSQLD_DATADIR/test/t1.ibd
|
||||||
ALTER TABLE t1 IMPORT TABLESPACE;
|
ALTER TABLE t1 IMPORT TABLESPACE;
|
||||||
ALTER TABLE t1 ENGINE InnoDB;
|
ALTER TABLE t1 ENGINE InnoDB;
|
||||||
SELECT COUNT(*) FROM t1;
|
SELECT COUNT(*) FROM t1;
|
||||||
@@ -68,15 +67,15 @@ SELECT COUNT(*) FROM t1;
|
|||||||
SELECT * FROM t1 ORDER BY b,a DESC LIMIT 3;
|
SELECT * FROM t1 ORDER BY b,a DESC LIMIT 3;
|
||||||
SELECT * FROM t1 ORDER BY a DESC LIMIT 3;
|
SELECT * FROM t1 ORDER BY a DESC LIMIT 3;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
--remove_file $MYSQLD_TMPDIR/t1.cfg
|
--remove_file $MYSQLD_DATADIR/test/t1.cfg.sav
|
||||||
--remove_file $MYSQLD_TMPDIR/t1.ibd
|
--remove_file $MYSQLD_DATADIR/test/t1.ibd.sav
|
||||||
|
|
||||||
ALTER TABLE t2 ROW_FORMAT=DYNAMIC;
|
ALTER TABLE t2 ROW_FORMAT=DYNAMIC;
|
||||||
ALTER TABLE t2 DISCARD TABLESPACE;
|
ALTER TABLE t2 DISCARD TABLESPACE;
|
||||||
--echo # List after t2 DISCARD
|
--echo # List after t2 DISCARD
|
||||||
--list_files $MYSQLD_DATADIR/test
|
--list_files $MYSQLD_DATADIR/test
|
||||||
--move_file $MYSQLD_TMPDIR/t2.ibd $MYSQLD_DATADIR/test/t2.ibd
|
--move_file $MYSQLD_DATADIR/test/t2.ibd.sav $MYSQLD_DATADIR/test/t2.ibd
|
||||||
--move_file $MYSQLD_TMPDIR/t2.cfg $MYSQLD_DATADIR/test/t2.cfg
|
--move_file $MYSQLD_DATADIR/test/t2.cfg.sav $MYSQLD_DATADIR/test/t2.cfg
|
||||||
--error ER_TABLE_SCHEMA_MISMATCH
|
--error ER_TABLE_SCHEMA_MISMATCH
|
||||||
ALTER TABLE t2 IMPORT TABLESPACE;
|
ALTER TABLE t2 IMPORT TABLESPACE;
|
||||||
--remove_file $MYSQLD_DATADIR/test/t2.cfg
|
--remove_file $MYSQLD_DATADIR/test/t2.cfg
|
||||||
|
@@ -23,3 +23,15 @@ let $coll_pad='utf8_bin';
|
|||||||
--echo #
|
--echo #
|
||||||
--echo # End of 10.2 tests
|
--echo # End of 10.2 tests
|
||||||
--echo #
|
--echo #
|
||||||
|
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Start of 10.4 tests
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
SET NAMES utf8mb3 COLLATE utf8mb3_unicode_nopad_ci;
|
||||||
|
--source include/ctype_nopad_prefix_unique.inc
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # End 10.4 tests
|
||||||
|
--echo #
|
||||||
|
@@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
let datadir= `select @@datadir`;
|
let datadir= `select @@datadir`;
|
||||||
let page_size= `select @@innodb_page_size`;
|
let page_size= `select @@innodb_page_size`;
|
||||||
|
let tmp_in_vardir=$MYSQLTEST_VARDIR/tmp;
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # MDEV-15333 MariaDB (still) slow start
|
--echo # MDEV-15333 MariaDB (still) slow start
|
||||||
@@ -28,19 +29,19 @@ call mtr.add_suppression("\\[Warning\\] InnoDB: Ignoring tablespace for `test`\\
|
|||||||
CREATE TABLE tr(a INT)ENGINE=InnoDB ROW_FORMAT=REDUNDANT;
|
CREATE TABLE tr(a INT)ENGINE=InnoDB ROW_FORMAT=REDUNDANT;
|
||||||
CREATE TABLE tc(a INT)ENGINE=InnoDB ROW_FORMAT=COMPACT
|
CREATE TABLE tc(a INT)ENGINE=InnoDB ROW_FORMAT=COMPACT
|
||||||
PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=9;
|
PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=9;
|
||||||
--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
|
--replace_result $tmp_in_vardir MYSQL_TMP_DIR
|
||||||
eval CREATE TABLE td(a INT)ENGINE=InnoDB ROW_FORMAT=DYNAMIC
|
eval CREATE TABLE td(a INT)ENGINE=InnoDB ROW_FORMAT=DYNAMIC
|
||||||
STATS_PERSISTENT=0 DATA DIRECTORY='$MYSQL_TMP_DIR';
|
STATS_PERSISTENT=0 DATA DIRECTORY='$tmp_in_vardir';
|
||||||
|
|
||||||
--source include/shutdown_mysqld.inc
|
--source include/shutdown_mysqld.inc
|
||||||
|
|
||||||
--move_file $datadir/test/tr.ibd $datadir/test/tr0.ibd
|
--move_file $datadir/test/tr.ibd $datadir/test/tr0.ibd
|
||||||
--move_file $datadir/test/tc.ibd $datadir/test/tc0.ibd
|
--move_file $datadir/test/tc.ibd $datadir/test/tc0.ibd
|
||||||
--move_file $MYSQL_TMP_DIR/test/td.ibd $datadir/test/td0.ibd
|
--move_file $tmp_in_vardir/test/td.ibd $datadir/test/td0.ibd
|
||||||
# TODO: test that MariaDB does not even attempt to open the files
|
# TODO: test that MariaDB does not even attempt to open the files
|
||||||
#--mkdir $datadir/test/tr.ibd
|
#--mkdir $datadir/test/tr.ibd
|
||||||
#--mkdir $datadir/test/tc.ibd
|
#--mkdir $datadir/test/tc.ibd
|
||||||
#--mkdir $MYSQL_TMP_DIR/test/td.ibd
|
#--mkdir $tmp_in_vardir/test/td.ibd
|
||||||
|
|
||||||
perl;
|
perl;
|
||||||
die unless open OUT, ">", "$ENV{datadir}/test/tr.ibd";
|
die unless open OUT, ">", "$ENV{datadir}/test/tr.ibd";
|
||||||
@@ -49,7 +50,7 @@ close OUT or die;
|
|||||||
die unless open OUT, ">", "$ENV{datadir}/test/tc.ibd";
|
die unless open OUT, ">", "$ENV{datadir}/test/tc.ibd";
|
||||||
print OUT "bar " x $ENV{page_size};
|
print OUT "bar " x $ENV{page_size};
|
||||||
close OUT or die;
|
close OUT or die;
|
||||||
die unless open OUT, ">", "$ENV{MYSQL_TMP_DIR}/test/td.ibd";
|
die unless open OUT, ">", "$ENV{tmp_in_vardir}/test/td.ibd";
|
||||||
print OUT "Xyz " x $ENV{page_size};
|
print OUT "Xyz " x $ENV{page_size};
|
||||||
close OUT or die;
|
close OUT or die;
|
||||||
EOF
|
EOF
|
||||||
@@ -67,14 +68,14 @@ AND support IN ('YES', 'DEFAULT', 'ENABLED');
|
|||||||
# TODO: test that MariaDB does not even attempt to open the files
|
# TODO: test that MariaDB does not even attempt to open the files
|
||||||
#--rmdir $datadir/test/tr.ibd
|
#--rmdir $datadir/test/tr.ibd
|
||||||
#--rmdir $datadir/test/tc.ibd
|
#--rmdir $datadir/test/tc.ibd
|
||||||
#--rmdir $MYSQL_TMP_DIR/test/td.ibd
|
#--rmdir $tmp_in_vardir/test/td.ibd
|
||||||
--remove_file $datadir/test/tr.ibd
|
--remove_file $datadir/test/tr.ibd
|
||||||
--remove_file $datadir/test/tc.ibd
|
--remove_file $datadir/test/tc.ibd
|
||||||
--remove_file $MYSQL_TMP_DIR/test/td.ibd
|
--remove_file $tmp_in_vardir/test/td.ibd
|
||||||
|
|
||||||
--move_file $datadir/test/tr0.ibd $datadir/test/tr.ibd
|
--move_file $datadir/test/tr0.ibd $datadir/test/tr.ibd
|
||||||
--move_file $datadir/test/tc0.ibd $datadir/test/tc.ibd
|
--move_file $datadir/test/tc0.ibd $datadir/test/tc.ibd
|
||||||
--move_file $datadir/test/td0.ibd $MYSQL_TMP_DIR/test/td.ibd
|
--move_file $datadir/test/td0.ibd $tmp_in_vardir/test/td.ibd
|
||||||
|
|
||||||
--source include/start_mysqld.inc
|
--source include/start_mysqld.inc
|
||||||
SELECT * FROM tr;
|
SELECT * FROM tr;
|
||||||
@@ -144,13 +145,13 @@ if ($MTR_COMBINATION_64K)
|
|||||||
}
|
}
|
||||||
|
|
||||||
--error 1
|
--error 1
|
||||||
exec $MYSQLD --no-defaults --skip-networking --innodb_data_file_path=ibdata1:$ibdata_size --innodb-page-size=$page_size --datadir=$MYSQLD_DATADIR --log-error=$MYSQL_TMP_DIR/attempted_start.err;
|
exec $MYSQLD --no-defaults --skip-networking --innodb_data_file_path=ibdata1:$ibdata_size --innodb-page-size=$page_size --datadir=$MYSQLD_DATADIR --log-error=$tmp_in_vardir/attempted_start.err;
|
||||||
|
|
||||||
let SEARCH_FILE= $MYSQL_TMP_DIR/attempted_start.err;
|
let SEARCH_FILE= $tmp_in_vardir/attempted_start.err;
|
||||||
let SEARCH_PATTERN= InnoDB: MySQL-8\.0 tablespace in \./ibdata1;
|
let SEARCH_PATTERN= InnoDB: MySQL-8\.0 tablespace in \./ibdata1;
|
||||||
source include/search_pattern_in_file.inc;
|
source include/search_pattern_in_file.inc;
|
||||||
|
|
||||||
--remove_file $MYSQL_TMP_DIR/attempted_start.err
|
--remove_file $tmp_in_vardir/attempted_start.err
|
||||||
--remove_file $MYSQLD_DATADIR/ibdata1
|
--remove_file $MYSQLD_DATADIR/ibdata1
|
||||||
--move_file $MYSQLD_DATADIR/ibdata1.bak $MYSQLD_DATADIR/ibdata1
|
--move_file $MYSQLD_DATADIR/ibdata1.bak $MYSQLD_DATADIR/ibdata1
|
||||||
|
|
||||||
|
29
mysql-test/suite/maria/aria_log_dir_path.result
Normal file
29
mysql-test/suite/maria/aria_log_dir_path.result
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
#
|
||||||
|
# MDEV-30971 Add a new system variable aria_data_home_dir
|
||||||
|
#
|
||||||
|
# restart: --loose-aria-log-file-size=8388608 --loose-aria-log-dir-path=MYSQLTEST_VARDIR/tmp/aria_log_dir_path_1
|
||||||
|
SET @@global.aria_log_purge_type=external;
|
||||||
|
SHOW VARIABLES LIKE 'aria_log_file_size';
|
||||||
|
Variable_name Value
|
||||||
|
aria_log_file_size 8388608
|
||||||
|
SELECT @@aria_log_dir_path;
|
||||||
|
@@aria_log_dir_path
|
||||||
|
MYSQLTEST_VARDIR/tmp/aria_log_dir_path_1
|
||||||
|
SET @@global.aria_checkpoint_interval=DEFAULT /*Force checkpoint*/;
|
||||||
|
SHOW ENGINE aria logs;
|
||||||
|
Type Name Status
|
||||||
|
Aria aria_log.00000001 in use
|
||||||
|
CREATE TABLE t1 (id INT, txt LONGTEXT) ENGINE=Aria;
|
||||||
|
BEGIN NOT ATOMIC
|
||||||
|
FOR id IN 0..9 DO
|
||||||
|
INSERT INTO test.t1 (id, txt) VALUES (id, REPEAT(id,1024*1024));
|
||||||
|
END FOR;
|
||||||
|
END;
|
||||||
|
$$
|
||||||
|
SET @@global.aria_checkpoint_interval=DEFAULT /*Force checkpoint*/;
|
||||||
|
SHOW ENGINE aria logs;
|
||||||
|
Type Name Status
|
||||||
|
Aria aria_log.00000001 free
|
||||||
|
Aria aria_log.00000002 in use
|
||||||
|
DROP TABLE t1;
|
||||||
|
# restart
|
65
mysql-test/suite/maria/aria_log_dir_path.test
Normal file
65
mysql-test/suite/maria/aria_log_dir_path.test
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
--source include/have_maria.inc
|
||||||
|
--let $datadir= `SELECT @@datadir`
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-30971 Add a new system variable aria_data_home_dir
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
--let $ARIA_LOGDIR=$MYSQLTEST_VARDIR/tmp/aria_log_dir_path_1
|
||||||
|
--mkdir $ARIA_LOGDIR
|
||||||
|
--let $restart_parameters=--loose-aria-log-file-size=8388608 --loose-aria-log-dir-path=$ARIA_LOGDIR
|
||||||
|
--source include/restart_mysqld.inc
|
||||||
|
|
||||||
|
#
|
||||||
|
# Test that:
|
||||||
|
# - aria_log_dir_path is set to a non-default directory.
|
||||||
|
# - New Aria log files are created in the non-default directory.
|
||||||
|
# - The contents of the log directory (according to "file_exists" commands)
|
||||||
|
# is in sync with the "SHOW ENGINE aria logs" ouput.
|
||||||
|
#
|
||||||
|
|
||||||
|
# Prevent automatic purge
|
||||||
|
SET @@global.aria_log_purge_type=external;
|
||||||
|
|
||||||
|
SHOW VARIABLES LIKE 'aria_log_file_size';
|
||||||
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||||
|
SELECT @@aria_log_dir_path;
|
||||||
|
|
||||||
|
|
||||||
|
SET @@global.aria_checkpoint_interval=DEFAULT /*Force checkpoint*/;
|
||||||
|
--file_exists $ARIA_LOGDIR/aria_log_control
|
||||||
|
--file_exists $ARIA_LOGDIR/aria_log.00000001
|
||||||
|
--error 1
|
||||||
|
--file_exists $ARIA_LOGDIR/aria_log.00000002
|
||||||
|
--replace_regex /Size +[0-9]+ ; .+aria_log/aria_log/
|
||||||
|
SHOW ENGINE aria logs;
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE t1 (id INT, txt LONGTEXT) ENGINE=Aria;
|
||||||
|
DELIMITER $$;
|
||||||
|
BEGIN NOT ATOMIC
|
||||||
|
FOR id IN 0..9 DO
|
||||||
|
INSERT INTO test.t1 (id, txt) VALUES (id, REPEAT(id,1024*1024));
|
||||||
|
END FOR;
|
||||||
|
END;
|
||||||
|
$$
|
||||||
|
DELIMITER ;$$
|
||||||
|
|
||||||
|
|
||||||
|
SET @@global.aria_checkpoint_interval=DEFAULT /*Force checkpoint*/;
|
||||||
|
--file_exists $ARIA_LOGDIR/aria_log_control
|
||||||
|
--file_exists $ARIA_LOGDIR/aria_log.00000001
|
||||||
|
--file_exists $ARIA_LOGDIR/aria_log.00000002
|
||||||
|
--error 1
|
||||||
|
--file_exists $ARIA_LOGDIR/aria_log.00000003
|
||||||
|
--replace_regex /Size +[0-9]+ ; .+aria_log/aria_log/
|
||||||
|
SHOW ENGINE aria logs;
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--let $restart_parameters=
|
||||||
|
--source include/restart_mysqld.inc
|
||||||
|
--remove_file $ARIA_LOGDIR/aria_log_control
|
||||||
|
--remove_file $ARIA_LOGDIR/aria_log.00000001
|
||||||
|
--remove_file $ARIA_LOGDIR/aria_log.00000002
|
||||||
|
--rmdir $ARIA_LOGDIR
|
@@ -311,6 +311,7 @@ aria_encrypt_tables #
|
|||||||
aria_force_start_after_recovery_failures #
|
aria_force_start_after_recovery_failures #
|
||||||
aria_group_commit #
|
aria_group_commit #
|
||||||
aria_group_commit_interval #
|
aria_group_commit_interval #
|
||||||
|
aria_log_dir_path #
|
||||||
aria_log_file_size #
|
aria_log_file_size #
|
||||||
aria_log_purge_type #
|
aria_log_purge_type #
|
||||||
aria_max_sort_file_size #
|
aria_max_sort_file_size #
|
||||||
|
36
mysql-test/suite/sys_vars/r/aria_log_dir_path_basic.result
Normal file
36
mysql-test/suite/sys_vars/r/aria_log_dir_path_basic.result
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
SELECT COUNT(@@GLOBAL.aria_log_dir_path);
|
||||||
|
COUNT(@@GLOBAL.aria_log_dir_path)
|
||||||
|
1
|
||||||
|
SET @@GLOBAL.aria_log_dir_path=1;
|
||||||
|
ERROR HY000: Variable 'aria_log_dir_path' is a read only variable
|
||||||
|
SELECT COUNT(@@GLOBAL.aria_log_dir_path);
|
||||||
|
COUNT(@@GLOBAL.aria_log_dir_path)
|
||||||
|
1
|
||||||
|
SELECT @@GLOBAL.aria_log_dir_path = VARIABLE_VALUE
|
||||||
|
FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES
|
||||||
|
WHERE VARIABLE_NAME='aria_log_dir_path';
|
||||||
|
@@GLOBAL.aria_log_dir_path = VARIABLE_VALUE
|
||||||
|
1
|
||||||
|
SELECT COUNT(@@GLOBAL.aria_log_dir_path);
|
||||||
|
COUNT(@@GLOBAL.aria_log_dir_path)
|
||||||
|
1
|
||||||
|
SELECT COUNT(VARIABLE_VALUE)
|
||||||
|
FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES
|
||||||
|
WHERE VARIABLE_NAME='aria_log_dir_path';
|
||||||
|
COUNT(VARIABLE_VALUE)
|
||||||
|
1
|
||||||
|
SELECT @@aria_log_dir_path = @@GLOBAL.aria_log_dir_path;
|
||||||
|
@@aria_log_dir_path = @@GLOBAL.aria_log_dir_path
|
||||||
|
1
|
||||||
|
SELECT COUNT(@@aria_log_dir_path);
|
||||||
|
COUNT(@@aria_log_dir_path)
|
||||||
|
1
|
||||||
|
SELECT COUNT(@@local.aria_log_dir_path);
|
||||||
|
ERROR HY000: Variable 'aria_log_dir_path' is a GLOBAL variable
|
||||||
|
SELECT COUNT(@@SESSION.aria_log_dir_path);
|
||||||
|
ERROR HY000: Variable 'aria_log_dir_path' is a GLOBAL variable
|
||||||
|
SELECT COUNT(@@GLOBAL.aria_log_dir_path);
|
||||||
|
COUNT(@@GLOBAL.aria_log_dir_path)
|
||||||
|
1
|
||||||
|
SELECT aria_log_dir_path = @@SESSION.aria_log_dir_path;
|
||||||
|
ERROR 42S22: Unknown column 'aria_log_dir_path' in 'field list'
|
@@ -85,6 +85,18 @@ NUMERIC_BLOCK_SIZE 1
|
|||||||
ENUM_VALUE_LIST NULL
|
ENUM_VALUE_LIST NULL
|
||||||
READ_ONLY NO
|
READ_ONLY NO
|
||||||
COMMAND_LINE_ARGUMENT REQUIRED
|
COMMAND_LINE_ARGUMENT REQUIRED
|
||||||
|
VARIABLE_NAME ARIA_LOG_DIR_PATH
|
||||||
|
SESSION_VALUE NULL
|
||||||
|
DEFAULT_VALUE DATADIR
|
||||||
|
VARIABLE_SCOPE GLOBAL
|
||||||
|
VARIABLE_TYPE VARCHAR
|
||||||
|
VARIABLE_COMMENT Path to the directory where to store transactional log
|
||||||
|
NUMERIC_MIN_VALUE NULL
|
||||||
|
NUMERIC_MAX_VALUE NULL
|
||||||
|
NUMERIC_BLOCK_SIZE NULL
|
||||||
|
ENUM_VALUE_LIST NULL
|
||||||
|
READ_ONLY YES
|
||||||
|
COMMAND_LINE_ARGUMENT REQUIRED
|
||||||
VARIABLE_NAME ARIA_LOG_FILE_SIZE
|
VARIABLE_NAME ARIA_LOG_FILE_SIZE
|
||||||
SESSION_VALUE NULL
|
SESSION_VALUE NULL
|
||||||
DEFAULT_VALUE 1073741824
|
DEFAULT_VALUE 1073741824
|
||||||
|
@@ -102,6 +102,16 @@ NUMERIC_BLOCK_SIZE 1
|
|||||||
ENUM_VALUE_LIST NULL
|
ENUM_VALUE_LIST NULL
|
||||||
READ_ONLY NO
|
READ_ONLY NO
|
||||||
COMMAND_LINE_ARGUMENT REQUIRED
|
COMMAND_LINE_ARGUMENT REQUIRED
|
||||||
|
VARIABLE_NAME ARIA_LOG_DIR_PATH
|
||||||
|
VARIABLE_SCOPE GLOBAL
|
||||||
|
VARIABLE_TYPE VARCHAR
|
||||||
|
VARIABLE_COMMENT Path to the directory where to store transactional log
|
||||||
|
NUMERIC_MIN_VALUE NULL
|
||||||
|
NUMERIC_MAX_VALUE NULL
|
||||||
|
NUMERIC_BLOCK_SIZE NULL
|
||||||
|
ENUM_VALUE_LIST NULL
|
||||||
|
READ_ONLY YES
|
||||||
|
COMMAND_LINE_ARGUMENT REQUIRED
|
||||||
VARIABLE_NAME ARIA_LOG_FILE_SIZE
|
VARIABLE_NAME ARIA_LOG_FILE_SIZE
|
||||||
VARIABLE_SCOPE GLOBAL
|
VARIABLE_SCOPE GLOBAL
|
||||||
VARIABLE_TYPE BIGINT UNSIGNED
|
VARIABLE_TYPE BIGINT UNSIGNED
|
||||||
|
@@ -102,6 +102,16 @@ NUMERIC_BLOCK_SIZE 1
|
|||||||
ENUM_VALUE_LIST NULL
|
ENUM_VALUE_LIST NULL
|
||||||
READ_ONLY NO
|
READ_ONLY NO
|
||||||
COMMAND_LINE_ARGUMENT REQUIRED
|
COMMAND_LINE_ARGUMENT REQUIRED
|
||||||
|
VARIABLE_NAME ARIA_LOG_DIR_PATH
|
||||||
|
VARIABLE_SCOPE GLOBAL
|
||||||
|
VARIABLE_TYPE VARCHAR
|
||||||
|
VARIABLE_COMMENT Path to the directory where to store transactional log
|
||||||
|
NUMERIC_MIN_VALUE NULL
|
||||||
|
NUMERIC_MAX_VALUE NULL
|
||||||
|
NUMERIC_BLOCK_SIZE NULL
|
||||||
|
ENUM_VALUE_LIST NULL
|
||||||
|
READ_ONLY YES
|
||||||
|
COMMAND_LINE_ARGUMENT REQUIRED
|
||||||
VARIABLE_NAME ARIA_LOG_FILE_SIZE
|
VARIABLE_NAME ARIA_LOG_FILE_SIZE
|
||||||
VARIABLE_SCOPE GLOBAL
|
VARIABLE_SCOPE GLOBAL
|
||||||
VARIABLE_TYPE BIGINT UNSIGNED
|
VARIABLE_TYPE BIGINT UNSIGNED
|
||||||
|
35
mysql-test/suite/sys_vars/t/aria_log_dir_path_basic.test
Normal file
35
mysql-test/suite/sys_vars/t/aria_log_dir_path_basic.test
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
--source include/have_maria.inc
|
||||||
|
|
||||||
|
SELECT COUNT(@@GLOBAL.aria_log_dir_path);
|
||||||
|
--error ER_INCORRECT_GLOBAL_LOCAL_VAR
|
||||||
|
SET @@GLOBAL.aria_log_dir_path=1;
|
||||||
|
|
||||||
|
SELECT COUNT(@@GLOBAL.aria_log_dir_path);
|
||||||
|
|
||||||
|
|
||||||
|
SELECT @@GLOBAL.aria_log_dir_path = VARIABLE_VALUE
|
||||||
|
FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES
|
||||||
|
WHERE VARIABLE_NAME='aria_log_dir_path';
|
||||||
|
|
||||||
|
SELECT COUNT(@@GLOBAL.aria_log_dir_path);
|
||||||
|
|
||||||
|
SELECT COUNT(VARIABLE_VALUE)
|
||||||
|
FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES
|
||||||
|
WHERE VARIABLE_NAME='aria_log_dir_path';
|
||||||
|
|
||||||
|
|
||||||
|
SELECT @@aria_log_dir_path = @@GLOBAL.aria_log_dir_path;
|
||||||
|
|
||||||
|
|
||||||
|
SELECT COUNT(@@aria_log_dir_path);
|
||||||
|
|
||||||
|
--Error ER_INCORRECT_GLOBAL_LOCAL_VAR
|
||||||
|
SELECT COUNT(@@local.aria_log_dir_path);
|
||||||
|
|
||||||
|
--Error ER_INCORRECT_GLOBAL_LOCAL_VAR
|
||||||
|
SELECT COUNT(@@SESSION.aria_log_dir_path);
|
||||||
|
|
||||||
|
SELECT COUNT(@@GLOBAL.aria_log_dir_path);
|
||||||
|
|
||||||
|
--Error ER_BAD_FIELD_ERROR
|
||||||
|
SELECT aria_log_dir_path = @@SESSION.aria_log_dir_path;
|
@@ -2,7 +2,11 @@
|
|||||||
--source include/have_aria_used_for_temp_tables.inc
|
--source include/have_aria_used_for_temp_tables.inc
|
||||||
--source include/word_size.inc
|
--source include/word_size.inc
|
||||||
|
|
||||||
|
let datadir=`select @@datadir`;
|
||||||
|
|
||||||
--vertical_results
|
--vertical_results
|
||||||
|
|
||||||
|
--replace_result $datadir DATADIR
|
||||||
select VARIABLE_NAME, SESSION_VALUE, DEFAULT_VALUE, VARIABLE_SCOPE, VARIABLE_TYPE, VARIABLE_COMMENT, NUMERIC_MIN_VALUE, NUMERIC_MAX_VALUE, NUMERIC_BLOCK_SIZE, ENUM_VALUE_LIST, READ_ONLY, COMMAND_LINE_ARGUMENT from information_schema.system_variables
|
select VARIABLE_NAME, SESSION_VALUE, DEFAULT_VALUE, VARIABLE_SCOPE, VARIABLE_TYPE, VARIABLE_COMMENT, NUMERIC_MIN_VALUE, NUMERIC_MAX_VALUE, NUMERIC_BLOCK_SIZE, ENUM_VALUE_LIST, READ_ONLY, COMMAND_LINE_ARGUMENT from information_schema.system_variables
|
||||||
where variable_name like 'aria%'
|
where variable_name like 'aria%'
|
||||||
order by variable_name;
|
order by variable_name;
|
||||||
|
22
sql/field.cc
22
sql/field.cc
@@ -7558,7 +7558,8 @@ int Field_string::cmp(const uchar *a_ptr, const uchar *b_ptr) const
|
|||||||
return field_charset()->coll->strnncollsp_nchars(field_charset(),
|
return field_charset()->coll->strnncollsp_nchars(field_charset(),
|
||||||
a_ptr, field_length,
|
a_ptr, field_length,
|
||||||
b_ptr, field_length,
|
b_ptr, field_length,
|
||||||
Field_string::char_length());
|
Field_string::char_length(),
|
||||||
|
MY_STRNNCOLLSP_NCHARS_EMULATE_TRIMMED_TRAILING_SPACES);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -7925,10 +7926,11 @@ int Field_varstring::cmp(const uchar *a_ptr, const uchar *b_ptr) const
|
|||||||
|
|
||||||
|
|
||||||
int Field_varstring::cmp_prefix(const uchar *a_ptr, const uchar *b_ptr,
|
int Field_varstring::cmp_prefix(const uchar *a_ptr, const uchar *b_ptr,
|
||||||
size_t prefix_len) const
|
size_t prefix_char_len) const
|
||||||
{
|
{
|
||||||
/* avoid expensive well_formed_char_length if possible */
|
/* avoid more expensive strnncollsp_nchars() if possible */
|
||||||
if (prefix_len == table->field[field_index]->field_length)
|
if (prefix_char_len * field_charset()->mbmaxlen ==
|
||||||
|
table->field[field_index]->field_length)
|
||||||
return Field_varstring::cmp(a_ptr, b_ptr);
|
return Field_varstring::cmp(a_ptr, b_ptr);
|
||||||
|
|
||||||
size_t a_length, b_length;
|
size_t a_length, b_length;
|
||||||
@@ -7948,8 +7950,8 @@ int Field_varstring::cmp_prefix(const uchar *a_ptr, const uchar *b_ptr,
|
|||||||
a_length,
|
a_length,
|
||||||
b_ptr + length_bytes,
|
b_ptr + length_bytes,
|
||||||
b_length,
|
b_length,
|
||||||
prefix_len /
|
prefix_char_len,
|
||||||
field_charset()->mbmaxlen);
|
0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -8736,7 +8738,7 @@ int Field_blob::cmp(const uchar *a_ptr, const uchar *b_ptr) const
|
|||||||
|
|
||||||
|
|
||||||
int Field_blob::cmp_prefix(const uchar *a_ptr, const uchar *b_ptr,
|
int Field_blob::cmp_prefix(const uchar *a_ptr, const uchar *b_ptr,
|
||||||
size_t prefix_len) const
|
size_t prefix_char_len) const
|
||||||
{
|
{
|
||||||
uchar *blob1,*blob2;
|
uchar *blob1,*blob2;
|
||||||
memcpy(&blob1, a_ptr+packlength, sizeof(char*));
|
memcpy(&blob1, a_ptr+packlength, sizeof(char*));
|
||||||
@@ -8745,8 +8747,8 @@ int Field_blob::cmp_prefix(const uchar *a_ptr, const uchar *b_ptr,
|
|||||||
return field_charset()->coll->strnncollsp_nchars(field_charset(),
|
return field_charset()->coll->strnncollsp_nchars(field_charset(),
|
||||||
blob1, a_len,
|
blob1, a_len,
|
||||||
blob2, b_len,
|
blob2, b_len,
|
||||||
prefix_len /
|
prefix_char_len,
|
||||||
field_charset()->mbmaxlen);
|
0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -9942,7 +9944,7 @@ my_decimal *Field_bit::val_decimal(my_decimal *deciaml_value)
|
|||||||
(not the table->record[0] necessarily)
|
(not the table->record[0] necessarily)
|
||||||
*/
|
*/
|
||||||
int Field_bit::cmp_prefix(const uchar *a, const uchar *b,
|
int Field_bit::cmp_prefix(const uchar *a, const uchar *b,
|
||||||
size_t prefix_len) const
|
size_t prefix_char_len) const
|
||||||
{
|
{
|
||||||
my_ptrdiff_t a_diff= a - ptr;
|
my_ptrdiff_t a_diff= a - ptr;
|
||||||
my_ptrdiff_t b_diff= b - ptr;
|
my_ptrdiff_t b_diff= b - ptr;
|
||||||
|
@@ -1294,7 +1294,7 @@ public:
|
|||||||
Currently it's only used in partitioning.
|
Currently it's only used in partitioning.
|
||||||
*/
|
*/
|
||||||
virtual int cmp_prefix(const uchar *a, const uchar *b,
|
virtual int cmp_prefix(const uchar *a, const uchar *b,
|
||||||
size_t prefix_len) const
|
size_t prefix_char_len) const
|
||||||
{ return cmp(a, b); }
|
{ return cmp(a, b); }
|
||||||
virtual int cmp(const uchar *,const uchar *) const=0;
|
virtual int cmp(const uchar *,const uchar *) const=0;
|
||||||
virtual int cmp_binary(const uchar *a,const uchar *b, uint32 max_length=~0U) const
|
virtual int cmp_binary(const uchar *a,const uchar *b, uint32 max_length=~0U) const
|
||||||
@@ -4176,7 +4176,7 @@ public:
|
|||||||
my_decimal *val_decimal(my_decimal *) override;
|
my_decimal *val_decimal(my_decimal *) override;
|
||||||
bool send(Protocol *protocol) override;
|
bool send(Protocol *protocol) override;
|
||||||
int cmp(const uchar *a,const uchar *b) const override;
|
int cmp(const uchar *a,const uchar *b) const override;
|
||||||
int cmp_prefix(const uchar *a, const uchar *b, size_t prefix_len) const
|
int cmp_prefix(const uchar *a, const uchar *b, size_t prefix_char_len) const
|
||||||
override;
|
override;
|
||||||
void sort_string(uchar *buff,uint length) override;
|
void sort_string(uchar *buff,uint length) override;
|
||||||
uint get_key_image(uchar *buff, uint length,
|
uint get_key_image(uchar *buff, uint length,
|
||||||
@@ -4469,7 +4469,7 @@ public:
|
|||||||
String *val_str(String *, String *) override;
|
String *val_str(String *, String *) override;
|
||||||
my_decimal *val_decimal(my_decimal *) override;
|
my_decimal *val_decimal(my_decimal *) override;
|
||||||
int cmp(const uchar *a, const uchar *b) const override;
|
int cmp(const uchar *a, const uchar *b) const override;
|
||||||
int cmp_prefix(const uchar *a, const uchar *b, size_t prefix_len) const
|
int cmp_prefix(const uchar *a, const uchar *b, size_t prefix_char_len) const
|
||||||
override;
|
override;
|
||||||
int cmp(const uchar *a, uint32 a_length, const uchar *b, uint32 b_length)
|
int cmp(const uchar *a, uint32 a_length, const uchar *b, uint32 b_length)
|
||||||
const;
|
const;
|
||||||
@@ -4954,7 +4954,7 @@ public:
|
|||||||
int cmp_binary_offset(uint row_offset) override
|
int cmp_binary_offset(uint row_offset) override
|
||||||
{ return cmp_offset(row_offset); }
|
{ return cmp_offset(row_offset); }
|
||||||
int cmp_prefix(const uchar *a, const uchar *b,
|
int cmp_prefix(const uchar *a, const uchar *b,
|
||||||
size_t max_length) const override;
|
size_t prefix_char_length) const override;
|
||||||
int key_cmp(const uchar *a, const uchar *b) const override
|
int key_cmp(const uchar *a, const uchar *b) const override
|
||||||
{ return cmp_binary((uchar *) a, (uchar *) b); }
|
{ return cmp_binary((uchar *) a, (uchar *) b); }
|
||||||
int key_cmp(const uchar *str, uint length) const override;
|
int key_cmp(const uchar *str, uint length) const override;
|
||||||
|
@@ -611,7 +611,8 @@ int key_rec_cmp(void *key_p, uchar *first_rec, uchar *second_rec)
|
|||||||
that take the max length into account.
|
that take the max length into account.
|
||||||
*/
|
*/
|
||||||
if ((result= field->cmp_prefix(field->ptr+first_diff, field->ptr+sec_diff,
|
if ((result= field->cmp_prefix(field->ptr+first_diff, field->ptr+sec_diff,
|
||||||
key_part->length)))
|
key_part->length /
|
||||||
|
field->charset()->mbmaxlen)))
|
||||||
DBUG_RETURN(result);
|
DBUG_RETURN(result);
|
||||||
next_loop:
|
next_loop:
|
||||||
key_part++;
|
key_part++;
|
||||||
|
@@ -9013,7 +9013,7 @@ bool TABLE::check_period_overlaps(const KEY &key,
|
|||||||
return false;
|
return false;
|
||||||
uint kp_len= key.key_part[part_nr].length;
|
uint kp_len= key.key_part[part_nr].length;
|
||||||
if (f->cmp_prefix(f->ptr_in_record(lhs), f->ptr_in_record(rhs),
|
if (f->cmp_prefix(f->ptr_in_record(lhs), f->ptr_in_record(rhs),
|
||||||
kp_len) != 0)
|
kp_len / f->charset()->mbmaxlen) != 0)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -291,7 +291,8 @@ static int cmp_data(ulint mtype, ulint prtype, const byte *data1, ulint len1,
|
|||||||
if (CHARSET_INFO *cs= get_charset(dtype_get_charset_coll(prtype),
|
if (CHARSET_INFO *cs= get_charset(dtype_get_charset_coll(prtype),
|
||||||
MYF(MY_WME)))
|
MYF(MY_WME)))
|
||||||
return cs->coll->strnncollsp_nchars(cs, data1, len1, data2, len2,
|
return cs->coll->strnncollsp_nchars(cs, data1, len1, data2, len2,
|
||||||
std::max(len1, len2));
|
std::max(len1, len2),
|
||||||
|
MY_STRNNCOLLSP_NCHARS_EMULATE_TRIMMED_TRAILING_SPACES);
|
||||||
goto no_collation;
|
goto no_collation;
|
||||||
case DATA_VARCHAR:
|
case DATA_VARCHAR:
|
||||||
case DATA_CHAR:
|
case DATA_CHAR:
|
||||||
|
@@ -187,7 +187,7 @@ static MYSQL_SYSVAR_BOOL(page_checksum, maria_page_checksums, 0,
|
|||||||
|
|
||||||
/* It is only command line argument */
|
/* It is only command line argument */
|
||||||
static MYSQL_SYSVAR_CONST_STR(log_dir_path, maria_data_root,
|
static MYSQL_SYSVAR_CONST_STR(log_dir_path, maria_data_root,
|
||||||
PLUGIN_VAR_NOSYSVAR | PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
|
PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
|
||||||
"Path to the directory where to store transactional log",
|
"Path to the directory where to store transactional log",
|
||||||
NULL, NULL, mysql_real_data_home);
|
NULL, NULL, mysql_real_data_home);
|
||||||
|
|
||||||
|
@@ -10283,6 +10283,8 @@ void *spider_table_bg_sts_action(
|
|||||||
thd->mysys_var->current_cond = &thread->cond;
|
thd->mysys_var->current_cond = &thread->cond;
|
||||||
thd->mysys_var->current_mutex = &thread->mutex;
|
thd->mysys_var->current_mutex = &thread->mutex;
|
||||||
}
|
}
|
||||||
|
bool spd_wsrep_on = thd->variables.wsrep_on;
|
||||||
|
thd->variables.wsrep_on = false;
|
||||||
while (spider_init_queries[i].length && !thd->killed && !thread->killed &&
|
while (spider_init_queries[i].length && !thd->killed && !thread->killed &&
|
||||||
thread->init_command)
|
thread->init_command)
|
||||||
{
|
{
|
||||||
@@ -10296,6 +10298,7 @@ void *spider_table_bg_sts_action(
|
|||||||
}
|
}
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
|
thd->variables.wsrep_on = spd_wsrep_on;
|
||||||
thd->mysys_var->current_cond = &thread->cond;
|
thd->mysys_var->current_cond = &thread->cond;
|
||||||
thd->mysys_var->current_mutex = &thread->mutex;
|
thd->mysys_var->current_mutex = &thread->mutex;
|
||||||
thd->client_capabilities -= CLIENT_MULTI_RESULTS;
|
thd->client_capabilities -= CLIENT_MULTI_RESULTS;
|
||||||
|
@@ -130,7 +130,8 @@ static int my_strnncollsp_binary(CHARSET_INFO * cs __attribute__((unused)),
|
|||||||
static int my_strnncollsp_nchars_binary(CHARSET_INFO * cs __attribute__((unused)),
|
static int my_strnncollsp_nchars_binary(CHARSET_INFO * cs __attribute__((unused)),
|
||||||
const uchar *s, size_t slen,
|
const uchar *s, size_t slen,
|
||||||
const uchar *t, size_t tlen,
|
const uchar *t, size_t tlen,
|
||||||
size_t nchars)
|
size_t nchars,
|
||||||
|
uint flags)
|
||||||
{
|
{
|
||||||
set_if_smaller(slen, nchars);
|
set_if_smaller(slen, nchars);
|
||||||
set_if_smaller(tlen, nchars);
|
set_if_smaller(tlen, nchars);
|
||||||
@@ -215,7 +216,8 @@ static int my_strnncollsp_8bit_bin(CHARSET_INFO * cs __attribute__((unused)),
|
|||||||
static int my_strnncollsp_nchars_8bit_bin(CHARSET_INFO * cs,
|
static int my_strnncollsp_nchars_8bit_bin(CHARSET_INFO * cs,
|
||||||
const uchar *a, size_t a_length,
|
const uchar *a, size_t a_length,
|
||||||
const uchar *b, size_t b_length,
|
const uchar *b, size_t b_length,
|
||||||
size_t nchars)
|
size_t nchars,
|
||||||
|
uint flags)
|
||||||
{
|
{
|
||||||
set_if_smaller(a_length, nchars);
|
set_if_smaller(a_length, nchars);
|
||||||
set_if_smaller(b_length, nchars);
|
set_if_smaller(b_length, nchars);
|
||||||
|
@@ -212,7 +212,8 @@ static int
|
|||||||
my_strnncollsp_nchars_simple(CHARSET_INFO * cs,
|
my_strnncollsp_nchars_simple(CHARSET_INFO * cs,
|
||||||
const uchar *a, size_t a_length,
|
const uchar *a, size_t a_length,
|
||||||
const uchar *b, size_t b_length,
|
const uchar *b, size_t b_length,
|
||||||
size_t nchars)
|
size_t nchars,
|
||||||
|
uint flags)
|
||||||
{
|
{
|
||||||
set_if_smaller(a_length, nchars);
|
set_if_smaller(a_length, nchars);
|
||||||
set_if_smaller(b_length, nchars);
|
set_if_smaller(b_length, nchars);
|
||||||
|
@@ -591,7 +591,8 @@ static int
|
|||||||
my_strnncollsp_nchars_tis620(CHARSET_INFO * cs,
|
my_strnncollsp_nchars_tis620(CHARSET_INFO * cs,
|
||||||
const uchar *a, size_t a_length,
|
const uchar *a, size_t a_length,
|
||||||
const uchar *b, size_t b_length,
|
const uchar *b, size_t b_length,
|
||||||
size_t nchars)
|
size_t nchars,
|
||||||
|
uint flags)
|
||||||
{
|
{
|
||||||
set_if_smaller(a_length, nchars);
|
set_if_smaller(a_length, nchars);
|
||||||
set_if_smaller(b_length, nchars);
|
set_if_smaller(b_length, nchars);
|
||||||
|
@@ -317,6 +317,7 @@ MY_FUNCTION_NAME(strnncollsp_nopad_multilevel)(CHARSET_INFO *cs,
|
|||||||
static inline weight_and_nchars_t
|
static inline weight_and_nchars_t
|
||||||
MY_FUNCTION_NAME(scanner_next_pad_trim)(my_uca_scanner *scanner,
|
MY_FUNCTION_NAME(scanner_next_pad_trim)(my_uca_scanner *scanner,
|
||||||
size_t nchars,
|
size_t nchars,
|
||||||
|
uint flags,
|
||||||
uint *generated)
|
uint *generated)
|
||||||
{
|
{
|
||||||
weight_and_nchars_t res;
|
weight_and_nchars_t res;
|
||||||
@@ -330,7 +331,10 @@ MY_FUNCTION_NAME(scanner_next_pad_trim)(my_uca_scanner *scanner,
|
|||||||
We reached the end of the string, but the caller wants more weights.
|
We reached the end of the string, but the caller wants more weights.
|
||||||
Perform space padding.
|
Perform space padding.
|
||||||
*/
|
*/
|
||||||
res.weight= my_space_weight(scanner->level);
|
res.weight=
|
||||||
|
flags & MY_STRNNCOLLSP_NCHARS_EMULATE_TRIMMED_TRAILING_SPACES ?
|
||||||
|
my_space_weight(scanner->level) : 0;
|
||||||
|
|
||||||
res.nchars= 1;
|
res.nchars= 1;
|
||||||
(*generated)++;
|
(*generated)++;
|
||||||
}
|
}
|
||||||
@@ -367,7 +371,8 @@ MY_FUNCTION_NAME(strnncollsp_nchars_onelevel)(CHARSET_INFO *cs,
|
|||||||
const MY_UCA_WEIGHT_LEVEL *level,
|
const MY_UCA_WEIGHT_LEVEL *level,
|
||||||
const uchar *s, size_t slen,
|
const uchar *s, size_t slen,
|
||||||
const uchar *t, size_t tlen,
|
const uchar *t, size_t tlen,
|
||||||
size_t nchars)
|
size_t nchars,
|
||||||
|
uint flags)
|
||||||
{
|
{
|
||||||
my_uca_scanner sscanner;
|
my_uca_scanner sscanner;
|
||||||
my_uca_scanner tscanner;
|
my_uca_scanner tscanner;
|
||||||
@@ -385,15 +390,17 @@ MY_FUNCTION_NAME(strnncollsp_nchars_onelevel)(CHARSET_INFO *cs,
|
|||||||
int diff;
|
int diff;
|
||||||
|
|
||||||
s_res= MY_FUNCTION_NAME(scanner_next_pad_trim)(&sscanner, s_nchars_left,
|
s_res= MY_FUNCTION_NAME(scanner_next_pad_trim)(&sscanner, s_nchars_left,
|
||||||
&generated);
|
flags, &generated);
|
||||||
t_res= MY_FUNCTION_NAME(scanner_next_pad_trim)(&tscanner, t_nchars_left,
|
t_res= MY_FUNCTION_NAME(scanner_next_pad_trim)(&tscanner, t_nchars_left,
|
||||||
&generated);
|
flags, &generated);
|
||||||
|
|
||||||
if ((diff= (s_res.weight - t_res.weight)))
|
if ((diff= (s_res.weight - t_res.weight)))
|
||||||
return diff;
|
return diff;
|
||||||
|
|
||||||
if (generated == 2)
|
if (generated == 2)
|
||||||
{
|
{
|
||||||
if (cs->state & MY_CS_NOPAD)
|
if ((cs->state & MY_CS_NOPAD) &&
|
||||||
|
(flags & MY_STRNNCOLLSP_NCHARS_EMULATE_TRIMMED_TRAILING_SPACES))
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
Both values are auto-generated. There's no real data any more.
|
Both values are auto-generated. There's no real data any more.
|
||||||
@@ -445,11 +452,12 @@ static int
|
|||||||
MY_FUNCTION_NAME(strnncollsp_nchars)(CHARSET_INFO *cs,
|
MY_FUNCTION_NAME(strnncollsp_nchars)(CHARSET_INFO *cs,
|
||||||
const uchar *s, size_t slen,
|
const uchar *s, size_t slen,
|
||||||
const uchar *t, size_t tlen,
|
const uchar *t, size_t tlen,
|
||||||
size_t nchars)
|
size_t nchars,
|
||||||
|
uint flags)
|
||||||
{
|
{
|
||||||
return MY_FUNCTION_NAME(strnncollsp_nchars_onelevel)(cs, &cs->uca->level[0],
|
return MY_FUNCTION_NAME(strnncollsp_nchars_onelevel)(cs, &cs->uca->level[0],
|
||||||
s, slen, t, tlen,
|
s, slen, t, tlen,
|
||||||
nchars);
|
nchars, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -460,7 +468,8 @@ static int
|
|||||||
MY_FUNCTION_NAME(strnncollsp_nchars_multilevel)(CHARSET_INFO *cs,
|
MY_FUNCTION_NAME(strnncollsp_nchars_multilevel)(CHARSET_INFO *cs,
|
||||||
const uchar *s, size_t slen,
|
const uchar *s, size_t slen,
|
||||||
const uchar *t, size_t tlen,
|
const uchar *t, size_t tlen,
|
||||||
size_t nchars)
|
size_t nchars,
|
||||||
|
uint flags)
|
||||||
{
|
{
|
||||||
uint num_level= cs->levels_for_order;
|
uint num_level= cs->levels_for_order;
|
||||||
uint i;
|
uint i;
|
||||||
@@ -470,7 +479,7 @@ MY_FUNCTION_NAME(strnncollsp_nchars_multilevel)(CHARSET_INFO *cs,
|
|||||||
&cs->uca->level[i],
|
&cs->uca->level[i],
|
||||||
s, slen,
|
s, slen,
|
||||||
t, tlen,
|
t, tlen,
|
||||||
nchars);
|
nchars, flags);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@@ -1356,7 +1356,8 @@ outp:
|
|||||||
int my_strnncollsp_nchars_generic(CHARSET_INFO *cs,
|
int my_strnncollsp_nchars_generic(CHARSET_INFO *cs,
|
||||||
const uchar *str1, size_t len1,
|
const uchar *str1, size_t len1,
|
||||||
const uchar *str2, size_t len2,
|
const uchar *str2, size_t len2,
|
||||||
size_t nchars)
|
size_t nchars,
|
||||||
|
uint flags)
|
||||||
{
|
{
|
||||||
int error;
|
int error;
|
||||||
len1= my_well_formed_length(cs, (const char *) str1,
|
len1= my_well_formed_length(cs, (const char *) str1,
|
||||||
@@ -1373,7 +1374,8 @@ int my_strnncollsp_nchars_generic(CHARSET_INFO *cs,
|
|||||||
int my_strnncollsp_nchars_generic_8bit(CHARSET_INFO *cs,
|
int my_strnncollsp_nchars_generic_8bit(CHARSET_INFO *cs,
|
||||||
const uchar *str1, size_t len1,
|
const uchar *str1, size_t len1,
|
||||||
const uchar *str2, size_t len2,
|
const uchar *str2, size_t len2,
|
||||||
size_t nchars)
|
size_t nchars,
|
||||||
|
uint flags)
|
||||||
{
|
{
|
||||||
set_if_smaller(len1, nchars);
|
set_if_smaller(len1, nchars);
|
||||||
set_if_smaller(len2, nchars);
|
set_if_smaller(len2, nchars);
|
||||||
|
@@ -305,7 +305,8 @@ static int
|
|||||||
MY_FUNCTION_NAME(strnncollsp_nchars)(CHARSET_INFO *cs __attribute__((unused)),
|
MY_FUNCTION_NAME(strnncollsp_nchars)(CHARSET_INFO *cs __attribute__((unused)),
|
||||||
const uchar *a, size_t a_length,
|
const uchar *a, size_t a_length,
|
||||||
const uchar *b, size_t b_length,
|
const uchar *b, size_t b_length,
|
||||||
size_t nchars)
|
size_t nchars,
|
||||||
|
uint flags)
|
||||||
{
|
{
|
||||||
const uchar *a_end= a + a_length;
|
const uchar *a_end= a + a_length;
|
||||||
const uchar *b_end= b + b_length;
|
const uchar *b_end= b + b_length;
|
||||||
|
@@ -108,12 +108,14 @@ static inline const uchar *skip_trailing_space(const uchar *ptr,size_t len)
|
|||||||
int my_strnncollsp_nchars_generic(CHARSET_INFO *cs,
|
int my_strnncollsp_nchars_generic(CHARSET_INFO *cs,
|
||||||
const uchar *str1, size_t len1,
|
const uchar *str1, size_t len1,
|
||||||
const uchar *str2, size_t len2,
|
const uchar *str2, size_t len2,
|
||||||
size_t nchars);
|
size_t nchars,
|
||||||
|
uint flags);
|
||||||
|
|
||||||
int my_strnncollsp_nchars_generic_8bit(CHARSET_INFO *cs,
|
int my_strnncollsp_nchars_generic_8bit(CHARSET_INFO *cs,
|
||||||
const uchar *str1, size_t len1,
|
const uchar *str1, size_t len1,
|
||||||
const uchar *str2, size_t len2,
|
const uchar *str2, size_t len2,
|
||||||
size_t nchars);
|
size_t nchars,
|
||||||
|
uint flags);
|
||||||
|
|
||||||
uint my_8bit_charset_flags_from_data(CHARSET_INFO *cs);
|
uint my_8bit_charset_flags_from_data(CHARSET_INFO *cs);
|
||||||
uint my_8bit_collation_flags_from_data(CHARSET_INFO *cs);
|
uint my_8bit_collation_flags_from_data(CHARSET_INFO *cs);
|
||||||
|
@@ -788,9 +788,14 @@ typedef struct
|
|||||||
LEX_CSTRING a;
|
LEX_CSTRING a;
|
||||||
LEX_CSTRING b;
|
LEX_CSTRING b;
|
||||||
size_t nchars;
|
size_t nchars;
|
||||||
|
uint flags;
|
||||||
int res;
|
int res;
|
||||||
} STRNNCOLLSP_CHAR_PARAM;
|
} STRNNCOLLSP_CHAR_PARAM;
|
||||||
|
|
||||||
|
#undef TCHAR
|
||||||
|
#define TCHAR MY_STRNNCOLLSP_NCHARS_EMULATE_TRIMMED_TRAILING_SPACES
|
||||||
|
|
||||||
|
#define TVCHAR 0
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Some lines in the below test data are marked as follows:
|
Some lines in the below test data are marked as follows:
|
||||||
@@ -812,266 +817,273 @@ typedef struct
|
|||||||
*/
|
*/
|
||||||
static STRNNCOLLSP_CHAR_PARAM strnncollsp_char_mbminlen1_xpad_common[]=
|
static STRNNCOLLSP_CHAR_PARAM strnncollsp_char_mbminlen1_xpad_common[]=
|
||||||
{
|
{
|
||||||
{{CSTR("a")}, {CSTR("a")}, 0, 0},
|
{{CSTR("a")}, {CSTR("a")}, 0, TCHAR, 0},
|
||||||
{{CSTR("a")}, {CSTR("a")}, 1, 0},
|
{{CSTR("a")}, {CSTR("a")}, 1, TCHAR, 0},
|
||||||
{{CSTR("a")}, {CSTR("a")}, 2, 0},
|
{{CSTR("a")}, {CSTR("a")}, 2, TCHAR, 0},
|
||||||
{{CSTR("a")}, {CSTR("a")}, 3, 0},
|
{{CSTR("a")}, {CSTR("a")}, 3, TCHAR, 0},
|
||||||
{{CSTR("a")}, {CSTR("a")}, 100, 0},
|
{{CSTR("a")}, {CSTR("a")}, 100, TCHAR, 0},
|
||||||
|
|
||||||
{{CSTR("a")}, {CSTR("ab")}, 0, 0},
|
{{CSTR("a")}, {CSTR("ab")}, 0, TCHAR, 0},
|
||||||
{{CSTR("a")}, {CSTR("ab")}, 1, 0},
|
{{CSTR("a")}, {CSTR("ab")}, 1, TCHAR, 0},
|
||||||
{{CSTR("a")}, {CSTR("ab")}, 2, -1},
|
{{CSTR("a")}, {CSTR("ab")}, 2, TCHAR, -1},
|
||||||
{{CSTR("a")}, {CSTR("ab")}, 3, -1},
|
{{CSTR("a")}, {CSTR("ab")}, 3, TCHAR, -1},
|
||||||
{{CSTR("a")}, {CSTR("ab")}, 100, -1},
|
{{CSTR("a")}, {CSTR("ab")}, 100, TCHAR, -1},
|
||||||
|
|
||||||
{{CSTR("a")}, {CSTR("a ")}, 0, 0},
|
{{CSTR("a")}, {CSTR("a ")}, 0, TCHAR, 0},
|
||||||
{{CSTR("a")}, {CSTR("a ")}, 1, 0},
|
{{CSTR("a")}, {CSTR("a ")}, 1, TCHAR, 0},
|
||||||
{{CSTR("a")}, {CSTR("a ")}, 2, 0},
|
{{CSTR("a")}, {CSTR("a ")}, 2, TCHAR, 0},
|
||||||
{{CSTR("a")}, {CSTR("a ")}, 3, 0},
|
{{CSTR("a")}, {CSTR("a ")}, 3, TCHAR, 0},
|
||||||
{{CSTR("a")}, {CSTR("a ")}, 100, 0},
|
{{CSTR("a")}, {CSTR("a ")}, 100, TCHAR, 0},
|
||||||
|
|
||||||
{{CSTR("a")}, {CSTR("a ")}, 0, 0},
|
{{CSTR("a")}, {CSTR("a ")}, 0, TCHAR, 0},
|
||||||
{{CSTR("a")}, {CSTR("a ")}, 1, 0},
|
{{CSTR("a")}, {CSTR("a ")}, 1, TCHAR, 0},
|
||||||
{{CSTR("a")}, {CSTR("a ")}, 2, 0},
|
{{CSTR("a")}, {CSTR("a ")}, 2, TCHAR, 0},
|
||||||
{{CSTR("a")}, {CSTR("a ")}, 3, 0},
|
{{CSTR("a")}, {CSTR("a ")}, 3, TCHAR, 0},
|
||||||
{{CSTR("a")}, {CSTR("a ")}, 100, 0},
|
{{CSTR("a")}, {CSTR("a ")}, 100, TCHAR, 0},
|
||||||
|
|
||||||
{{CSTR("ss")}, {CSTR("ss")}, 0, 0},
|
{{CSTR("ss")}, {CSTR("ss")}, 0, TCHAR, 0},
|
||||||
{{CSTR("ss")}, {CSTR("ss")}, 1, 0},
|
{{CSTR("ss")}, {CSTR("ss")}, 1, TCHAR, 0},
|
||||||
{{CSTR("ss")}, {CSTR("ss")}, 2, 0},
|
{{CSTR("ss")}, {CSTR("ss")}, 2, TCHAR, 0},
|
||||||
{{CSTR("ss")}, {CSTR("ss")}, 3, 0},
|
{{CSTR("ss")}, {CSTR("ss")}, 3, TCHAR, 0},
|
||||||
{{CSTR("ss")}, {CSTR("ss")}, 100, 0},
|
{{CSTR("ss")}, {CSTR("ss")}, 100, TCHAR, 0},
|
||||||
|
|
||||||
{{NULL, 0}, {NULL, 0}, 0, 0}
|
{{NULL, 0}, {NULL, 0}, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/* Tests for utf8, for both PAD SPACE and NOPAD collations */
|
/* Tests for utf8, for both PAD SPACE and NOPAD collations */
|
||||||
static STRNNCOLLSP_CHAR_PARAM strnncollsp_char_utf8mbx_xpad_common[]=
|
static STRNNCOLLSP_CHAR_PARAM strnncollsp_char_utf8mbx_xpad_common[]=
|
||||||
{
|
{
|
||||||
{{CSTR(UTF8_sz)}, {CSTR(UTF8_sz)}, 0, 0},
|
{{CSTR(UTF8_sz)}, {CSTR(UTF8_sz)}, 0, TCHAR, 0},
|
||||||
{{CSTR(UTF8_sz)}, {CSTR(UTF8_sz)}, 1, 0},
|
{{CSTR(UTF8_sz)}, {CSTR(UTF8_sz)}, 1, TCHAR, 0},
|
||||||
{{CSTR(UTF8_sz)}, {CSTR(UTF8_sz)}, 2, 0},
|
{{CSTR(UTF8_sz)}, {CSTR(UTF8_sz)}, 2, TCHAR, 0},
|
||||||
{{CSTR(UTF8_sz)}, {CSTR(UTF8_sz)}, 3, 0},
|
{{CSTR(UTF8_sz)}, {CSTR(UTF8_sz)}, 3, TCHAR, 0},
|
||||||
{{CSTR(UTF8_sz)}, {CSTR(UTF8_sz)}, 100, 0},
|
{{CSTR(UTF8_sz)}, {CSTR(UTF8_sz)}, 100, TCHAR, 0},
|
||||||
|
|
||||||
{{NULL, 0}, {NULL, 0}, 0, 0}
|
{{NULL, 0}, {NULL, 0}, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/* Tests for latin1, for both PAD and NOPAD collations */
|
/* Tests for latin1, for both PAD and NOPAD collations */
|
||||||
static STRNNCOLLSP_CHAR_PARAM strnncollsp_char_latin1_xpad_common[]=
|
static STRNNCOLLSP_CHAR_PARAM strnncollsp_char_latin1_xpad_common[]=
|
||||||
{
|
{
|
||||||
{{CSTR(LATIN1_sz)}, {CSTR(LATIN1_sz)}, 0, 0},
|
{{CSTR(LATIN1_sz)}, {CSTR(LATIN1_sz)}, 0, TCHAR, 0},
|
||||||
{{CSTR(LATIN1_sz)}, {CSTR(LATIN1_sz)}, 1, 0},
|
{{CSTR(LATIN1_sz)}, {CSTR(LATIN1_sz)}, 1, TCHAR, 0},
|
||||||
{{CSTR(LATIN1_sz)}, {CSTR(LATIN1_sz)}, 2, 0},
|
{{CSTR(LATIN1_sz)}, {CSTR(LATIN1_sz)}, 2, TCHAR, 0},
|
||||||
{{CSTR(LATIN1_sz)}, {CSTR(LATIN1_sz)}, 3, 0},
|
{{CSTR(LATIN1_sz)}, {CSTR(LATIN1_sz)}, 3, TCHAR, 0},
|
||||||
{{CSTR(LATIN1_sz)}, {CSTR(LATIN1_sz)}, 100, 0},
|
{{CSTR(LATIN1_sz)}, {CSTR(LATIN1_sz)}, 100, TCHAR, 0},
|
||||||
|
|
||||||
{{NULL, 0}, {NULL, 0}, 0, 0}
|
{{NULL, 0}, {NULL, 0}, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/* Tests for utf8 collations that sort "A WITH DIAERESIS" equal to "A" */
|
/* Tests for utf8 collations that sort "A WITH DIAERESIS" equal to "A" */
|
||||||
static STRNNCOLLSP_CHAR_PARAM strnncollsp_char_utf8mbx_xpad_a_eq_auml[]=
|
static STRNNCOLLSP_CHAR_PARAM strnncollsp_char_utf8mbx_xpad_a_eq_auml[]=
|
||||||
{
|
{
|
||||||
{{CSTR(UTF8_auml "h")}, {CSTR("ah")}, 0, 0},
|
{{CSTR(UTF8_auml "h")}, {CSTR("ah")}, 0, TCHAR, 0},
|
||||||
{{CSTR(UTF8_auml "h")}, {CSTR("ah")}, 1, 0},
|
{{CSTR(UTF8_auml "h")}, {CSTR("ah")}, 1, TCHAR, 0},
|
||||||
{{CSTR(UTF8_auml "h")}, {CSTR("ah")}, 2, 0},
|
{{CSTR(UTF8_auml "h")}, {CSTR("ah")}, 2, TCHAR, 0},
|
||||||
{{CSTR(UTF8_auml "h")}, {CSTR("ah")}, 3, 0},
|
{{CSTR(UTF8_auml "h")}, {CSTR("ah")}, 3, TCHAR, 0},
|
||||||
{{CSTR(UTF8_auml "h")}, {CSTR("ah")}, 100, 0},
|
{{CSTR(UTF8_auml "h")}, {CSTR("ah")}, 100, TCHAR, 0},
|
||||||
|
|
||||||
{{CSTR(UTF8_auml "h")}, {CSTR("ah ")}, 0, 0},
|
{{CSTR(UTF8_auml "h")}, {CSTR("ah ")}, 0, TCHAR, 0},
|
||||||
{{CSTR(UTF8_auml "h")}, {CSTR("ah ")}, 1, 0},
|
{{CSTR(UTF8_auml "h")}, {CSTR("ah ")}, 1, TCHAR, 0},
|
||||||
{{CSTR(UTF8_auml "h")}, {CSTR("ah ")}, 2, 0},
|
{{CSTR(UTF8_auml "h")}, {CSTR("ah ")}, 2, TCHAR, 0},
|
||||||
{{CSTR(UTF8_auml "h")}, {CSTR("ah ")}, 3, 0},
|
{{CSTR(UTF8_auml "h")}, {CSTR("ah ")}, 3, TCHAR, 0},
|
||||||
{{CSTR(UTF8_auml "h")}, {CSTR("ah ")}, 100, 0},
|
{{CSTR(UTF8_auml "h")}, {CSTR("ah ")}, 100, TCHAR, 0},
|
||||||
|
|
||||||
{{NULL, 0}, {NULL, 0}, 0, 0}
|
{{NULL, 0}, {NULL, 0}, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static STRNNCOLLSP_CHAR_PARAM strnncollsp_char_utf8mb3_unicode_ci[]=
|
static STRNNCOLLSP_CHAR_PARAM strnncollsp_char_utf8mb3_unicode_ci[]=
|
||||||
{
|
{
|
||||||
{{CSTR("ss")}, {CSTR("s" "\x00" "s")}, 0, 0},
|
{{CSTR("ss")}, {CSTR("s" "\x00" "s")}, 0, TCHAR, 0},
|
||||||
{{CSTR("ss")}, {CSTR("s" "\x00" "s")}, 1, 0},
|
{{CSTR("ss")}, {CSTR("s" "\x00" "s")}, 1, TCHAR, 0},
|
||||||
{{CSTR("ss")}, {CSTR("s" "\x00" "s")}/*IF*/, 2, 1},
|
{{CSTR("ss")}, {CSTR("s" "\x00" "s")}/*IF*/, 2, TCHAR, 1},
|
||||||
{{CSTR("ss")}, {CSTR("s" "\x00" "s")}, 3, 0},
|
{{CSTR("ss")}, {CSTR("s" "\x00" "s")}, 3, TCHAR, 0},
|
||||||
{{CSTR("ss")}, {CSTR("s" "\x00" "s")}, 4, 0},
|
{{CSTR("ss")}, {CSTR("s" "\x00" "s")}, 4, TCHAR, 0},
|
||||||
{{CSTR("ss")}, {CSTR("s" "\x00" "s")}, 100, 0},
|
{{CSTR("ss")}, {CSTR("s" "\x00" "s")}, 100, TCHAR, 0},
|
||||||
|
|
||||||
{{CSTR("ss")}, {CSTR(UTF8_sz)}, 0, 0},
|
{{CSTR("ss")}, {CSTR(UTF8_sz)}, 0, TCHAR, 0},
|
||||||
{{CSTR("ss")}, {CSTR(UTF8_sz)}, 1, -1},
|
{{CSTR("ss")}, {CSTR(UTF8_sz)}, 1, TCHAR, -1},
|
||||||
{{CSTR("ss")}, {CSTR(UTF8_sz)}, 2, 0},
|
{{CSTR("ss")}, {CSTR(UTF8_sz)}, 2, TCHAR, 0},
|
||||||
{{CSTR("ss")}, {CSTR(UTF8_sz)}, 3, 0},
|
{{CSTR("ss")}, {CSTR(UTF8_sz)}, 3, TCHAR, 0},
|
||||||
{{CSTR("ss")}, {CSTR(UTF8_sz)}, 4, 0},
|
{{CSTR("ss")}, {CSTR(UTF8_sz)}, 4, TCHAR, 0},
|
||||||
{{CSTR("ss")}, {CSTR(UTF8_sz)}, 100, 0},
|
{{CSTR("ss")}, {CSTR(UTF8_sz)}, 100, TCHAR, 0},
|
||||||
|
|
||||||
{{NULL, 0}, {NULL, 0}, 0, 0}
|
{{NULL, 0}, {NULL, 0}, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static STRNNCOLLSP_CHAR_PARAM strnncollsp_char_utf8mb3_unicode_nopad_ci[]=
|
static STRNNCOLLSP_CHAR_PARAM strnncollsp_char_utf8mb3_unicode_nopad_ci[]=
|
||||||
{
|
{
|
||||||
{{CSTR("ss")}, {CSTR("s" "\x00" "s")}, 0, 0},
|
{{CSTR("ss")}, {CSTR("s" "\x00" "s")}, 0, TCHAR, 0},
|
||||||
{{CSTR("ss")}, {CSTR("s" "\x00" "s")}, 1, 0},
|
{{CSTR("ss")}, {CSTR("s" "\x00" "s")}, 1, TCHAR, 0},
|
||||||
{{CSTR("ss")}, {CSTR("s" "\x00" "s")}/*IF*/, 2, 1},
|
{{CSTR("ss")}, {CSTR("s" "\x00" "s")}/*IF*/, 2, TCHAR, 1},
|
||||||
{{CSTR("ss")}, {CSTR("s" "\x00" "s")}, 3, 1},
|
{{CSTR("ss")}, {CSTR("s" "\x00" "s")}, 3, TCHAR, 1},
|
||||||
{{CSTR("ss")}, {CSTR("s" "\x00" "s")}, 4, 1},
|
{{CSTR("ss")}, {CSTR("s" "\x00" "s")}, 4, TCHAR, 1},
|
||||||
{{CSTR("ss")}, {CSTR("s" "\x00" "s")}, 100, 1},
|
{{CSTR("ss")}, {CSTR("s" "\x00" "s")}, 100, TCHAR, 1},
|
||||||
|
|
||||||
{{CSTR("ss")}, {CSTR(UTF8_sz)}, 0, 0},
|
{{CSTR("ss")}, {CSTR(UTF8_sz)}, 0, TCHAR, 0},
|
||||||
{{CSTR("ss")}, {CSTR(UTF8_sz)}, 1, -1},
|
{{CSTR("ss")}, {CSTR(UTF8_sz)}, 1, TCHAR, -1},
|
||||||
{{CSTR("ss")}, {CSTR(UTF8_sz)}, 2, -1},
|
{{CSTR("ss")}, {CSTR(UTF8_sz)}, 2, TCHAR, -1},
|
||||||
{{CSTR("ss")}, {CSTR(UTF8_sz)}, 3, -1},
|
{{CSTR("ss")}, {CSTR(UTF8_sz)}, 3, TCHAR, -1},
|
||||||
{{CSTR("ss")}, {CSTR(UTF8_sz)}, 4, -1},
|
{{CSTR("ss")}, {CSTR(UTF8_sz)}, 4, TCHAR, -1},
|
||||||
{{CSTR("ss")}, {CSTR(UTF8_sz)}, 100, -1},
|
{{CSTR("ss")}, {CSTR(UTF8_sz)}, 100, TCHAR, -1},
|
||||||
|
|
||||||
{{NULL, 0}, {NULL, 0}, 0, 0}
|
{{CSTR("ss")}, {CSTR(UTF8_sz)}, 0, TVCHAR, 0},
|
||||||
|
{{CSTR("ss")}, {CSTR(UTF8_sz)}, 1, TVCHAR, -1},
|
||||||
|
{{CSTR("ss")}, {CSTR(UTF8_sz)}, 2, TVCHAR, 0},
|
||||||
|
{{CSTR("ss")}, {CSTR(UTF8_sz)}, 3, TVCHAR, 0},
|
||||||
|
{{CSTR("ss")}, {CSTR(UTF8_sz)}, 4, TVCHAR, 0},
|
||||||
|
{{CSTR("ss")}, {CSTR(UTF8_sz)}, 100, TVCHAR, 0},
|
||||||
|
|
||||||
|
{{NULL, 0}, {NULL, 0}, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static STRNNCOLLSP_CHAR_PARAM strnncollsp_char_utf8mb3_danish_ci[]=
|
static STRNNCOLLSP_CHAR_PARAM strnncollsp_char_utf8mb3_danish_ci[]=
|
||||||
{
|
{
|
||||||
{{CSTR("aa")}, {CSTR("")}, 0, 0},
|
{{CSTR("aa")}, {CSTR("")}, 0, TCHAR, 0},
|
||||||
{{CSTR("aa")}/*CF*/, {CSTR("")}, 1, 1},
|
{{CSTR("aa")}/*CF*/, {CSTR("")}, 1, TCHAR, 1},
|
||||||
{{CSTR("aa")}, {CSTR("")}, 2, 1},
|
{{CSTR("aa")}, {CSTR("")}, 2, TCHAR, 1},
|
||||||
{{CSTR("aa")}, {CSTR("")}, 3, 1},
|
{{CSTR("aa")}, {CSTR("")}, 3, TCHAR, 1},
|
||||||
{{CSTR("aa")}, {CSTR("")}, 100, 1},
|
{{CSTR("aa")}, {CSTR("")}, 100, TCHAR, 1},
|
||||||
|
|
||||||
{{CSTR("aa")}, {CSTR("a")}, 0, 0},
|
{{CSTR("aa")}, {CSTR("a")}, 0, TCHAR, 0},
|
||||||
{{CSTR("aa")}/*CF*/, {CSTR("a")}, 1, 0},
|
{{CSTR("aa")}/*CF*/, {CSTR("a")}, 1, TCHAR, 0},
|
||||||
{{CSTR("aa")}, {CSTR("a")}, 2, 1},
|
{{CSTR("aa")}, {CSTR("a")}, 2, TCHAR, 1},
|
||||||
{{CSTR("aa")}, {CSTR("a")}, 3, 1},
|
{{CSTR("aa")}, {CSTR("a")}, 3, TCHAR, 1},
|
||||||
{{CSTR("aa")}, {CSTR("a")}, 100, 1},
|
{{CSTR("aa")}, {CSTR("a")}, 100, TCHAR, 1},
|
||||||
|
|
||||||
{{CSTR("aa")}, {CSTR("aa")}, 0, 0},
|
{{CSTR("aa")}, {CSTR("aa")}, 0, TCHAR, 0},
|
||||||
{{CSTR("aa")}/*CF*/, {CSTR("aa")}/*CF*/, 1, 0},
|
{{CSTR("aa")}/*CF*/, {CSTR("aa")}/*CF*/, 1, TCHAR, 0},
|
||||||
{{CSTR("aa")}, {CSTR("aa")}, 2, 0},
|
{{CSTR("aa")}, {CSTR("aa")}, 2, TCHAR, 0},
|
||||||
{{CSTR("aa")}, {CSTR("aa")}, 3, 0},
|
{{CSTR("aa")}, {CSTR("aa")}, 3, TCHAR, 0},
|
||||||
{{CSTR("aa")}, {CSTR("aa")}, 100, 0},
|
{{CSTR("aa")}, {CSTR("aa")}, 100, TCHAR, 0},
|
||||||
|
|
||||||
{{CSTR("aa")}, {CSTR("\x00" "a")}, 0, 0},
|
{{CSTR("aa")}, {CSTR("\x00" "a")}, 0, TCHAR, 0},
|
||||||
{{CSTR("aa")}/*CF*/, {CSTR("\x00" "a")}/*IF*/, 1, 1},
|
{{CSTR("aa")}/*CF*/, {CSTR("\x00" "a")}/*IF*/, 1, TCHAR, 1},
|
||||||
{{CSTR("aa")}, {CSTR("\x00" "a")}, 2, 1},
|
{{CSTR("aa")}, {CSTR("\x00" "a")}, 2, TCHAR, 1},
|
||||||
{{CSTR("aa")}, {CSTR("\x00" "a")}, 3, 1},
|
{{CSTR("aa")}, {CSTR("\x00" "a")}, 3, TCHAR, 1},
|
||||||
{{CSTR("aa")}, {CSTR("\x00" "a")}, 100, 1},
|
{{CSTR("aa")}, {CSTR("\x00" "a")}, 100, TCHAR, 1},
|
||||||
|
|
||||||
{{CSTR("aa")}, {CSTR("\x00" "aa")}, 0, 0},
|
{{CSTR("aa")}, {CSTR("\x00" "aa")}, 0, TCHAR, 0},
|
||||||
{{CSTR("aa")}/*CF*/, {CSTR("\x00" "aa")}/*IF*/, 1, 1},
|
{{CSTR("aa")}/*CF*/, {CSTR("\x00" "aa")}/*IF*/, 1, TCHAR, 1},
|
||||||
{{CSTR("aa")}, {CSTR("\x00" "aa")}/*IF*/, 2, 1},
|
{{CSTR("aa")}, {CSTR("\x00" "aa")}/*IF*/, 2, TCHAR, 1},
|
||||||
{{CSTR("aa")}, {CSTR("\x00" "aa")}, 3, 0},
|
{{CSTR("aa")}, {CSTR("\x00" "aa")}, 3, TCHAR, 0},
|
||||||
{{CSTR("aa")}, {CSTR("\x00" "aa")}, 100, 0},
|
{{CSTR("aa")}, {CSTR("\x00" "aa")}, 100, TCHAR, 0},
|
||||||
|
|
||||||
{{CSTR("aa")}, {CSTR("a" "\x00" "a")}, 0, 0},
|
{{CSTR("aa")}, {CSTR("a" "\x00" "a")}, 0, TCHAR, 0},
|
||||||
{{CSTR("aa")}/*CF*/, {CSTR("a" "\x00" "a")}, 1, 0},
|
{{CSTR("aa")}/*CF*/, {CSTR("a" "\x00" "a")}, 1, TCHAR, 0},
|
||||||
{{CSTR("aa")}, {CSTR("a" "\x00" "a")}/*IF*/, 2, 1},
|
{{CSTR("aa")}, {CSTR("a" "\x00" "a")}/*IF*/, 2, TCHAR, 1},
|
||||||
{{CSTR("aa")}, {CSTR("a" "\x00" "a")}, 3, 1},
|
{{CSTR("aa")}, {CSTR("a" "\x00" "a")}, 3, TCHAR, 1},
|
||||||
{{CSTR("aa")}, {CSTR("a" "\x00" "a")}, 100, 1},
|
{{CSTR("aa")}, {CSTR("a" "\x00" "a")}, 100, TCHAR, 1},
|
||||||
|
|
||||||
{{CSTR("aa")}, {CSTR(UTF8_ARING)}, 0, 0},
|
{{CSTR("aa")}, {CSTR(UTF8_ARING)}, 0, TCHAR, 0},
|
||||||
{{CSTR("aa")}/*CF*/, {CSTR(UTF8_ARING)}, 1, -1},
|
{{CSTR("aa")}/*CF*/, {CSTR(UTF8_ARING)}, 1, TCHAR, -1},
|
||||||
{{CSTR("aa")}, {CSTR(UTF8_ARING)}, 2, 0},
|
{{CSTR("aa")}, {CSTR(UTF8_ARING)}, 2, TCHAR, 0},
|
||||||
{{CSTR("aa")}, {CSTR(UTF8_ARING)}, 3, 0},
|
{{CSTR("aa")}, {CSTR(UTF8_ARING)}, 3, TCHAR, 0},
|
||||||
{{CSTR("aa")}, {CSTR(UTF8_ARING)}, 100, 0},
|
{{CSTR("aa")}, {CSTR(UTF8_ARING)}, 100, TCHAR, 0},
|
||||||
|
|
||||||
{{NULL, 0}, {NULL, 0}, 0, 0}
|
{{NULL, 0}, {NULL, 0}, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static STRNNCOLLSP_CHAR_PARAM strnncollsp_char_latin1_german2_ci[]=
|
static STRNNCOLLSP_CHAR_PARAM strnncollsp_char_latin1_german2_ci[]=
|
||||||
{
|
{
|
||||||
{{CSTR("ss")}, {CSTR(LATIN1_sz)}, 0, 0},
|
{{CSTR("ss")}, {CSTR(LATIN1_sz)}, 0, TCHAR, 0},
|
||||||
{{CSTR("ss")}, {CSTR(LATIN1_sz)}, 1, -1},
|
{{CSTR("ss")}, {CSTR(LATIN1_sz)}, 1, TCHAR, -1},
|
||||||
{{CSTR("ss")}, {CSTR(LATIN1_sz)}, 2, 0},
|
{{CSTR("ss")}, {CSTR(LATIN1_sz)}, 2, TCHAR, 0},
|
||||||
{{CSTR("ss")}, {CSTR(LATIN1_sz)}, 3, 0},
|
{{CSTR("ss")}, {CSTR(LATIN1_sz)}, 3, TCHAR, 0},
|
||||||
{{CSTR("ss")}, {CSTR(LATIN1_sz)}, 100, 0},
|
{{CSTR("ss")}, {CSTR(LATIN1_sz)}, 100, TCHAR, 0},
|
||||||
|
|
||||||
{{CSTR("ae")}, {CSTR(LATIN1_auml)}, 0, 0},
|
{{CSTR("ae")}, {CSTR(LATIN1_auml)}, 0, TCHAR, 0},
|
||||||
{{CSTR("ae")}, {CSTR(LATIN1_auml)}, 1, -1},
|
{{CSTR("ae")}, {CSTR(LATIN1_auml)}, 1, TCHAR, -1},
|
||||||
{{CSTR("ae")}, {CSTR(LATIN1_auml)}, 2, 0},
|
{{CSTR("ae")}, {CSTR(LATIN1_auml)}, 2, TCHAR, 0},
|
||||||
{{CSTR("ae")}, {CSTR(LATIN1_auml)}, 3, 0},
|
{{CSTR("ae")}, {CSTR(LATIN1_auml)}, 3, TCHAR, 0},
|
||||||
{{CSTR("ae")}, {CSTR(LATIN1_auml)}, 100, 0},
|
{{CSTR("ae")}, {CSTR(LATIN1_auml)}, 100, TCHAR, 0},
|
||||||
|
|
||||||
{{CSTR("ae")}, {CSTR(LATIN1_auml " ")}, 0, 0},
|
{{CSTR("ae")}, {CSTR(LATIN1_auml " ")}, 0, TCHAR, 0},
|
||||||
{{CSTR("ae")}, {CSTR(LATIN1_auml " ")}, 1, -1},
|
{{CSTR("ae")}, {CSTR(LATIN1_auml " ")}, 1, TCHAR, -1},
|
||||||
{{CSTR("ae")}, {CSTR(LATIN1_auml " ")}, 2, 0},
|
{{CSTR("ae")}, {CSTR(LATIN1_auml " ")}, 2, TCHAR, 0},
|
||||||
{{CSTR("ae")}, {CSTR(LATIN1_auml " ")}, 3, 0},
|
{{CSTR("ae")}, {CSTR(LATIN1_auml " ")}, 3, TCHAR, 0},
|
||||||
{{CSTR("ae")}, {CSTR(LATIN1_auml " ")}, 100, 0},
|
{{CSTR("ae")}, {CSTR(LATIN1_auml " ")}, 100, TCHAR, 0},
|
||||||
|
|
||||||
{{NULL, 0}, {NULL, 0}, 0, 0}
|
{{NULL, 0}, {NULL, 0}, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static STRNNCOLLSP_CHAR_PARAM strnncollsp_char_utf8mbx_german2_ci[]=
|
static STRNNCOLLSP_CHAR_PARAM strnncollsp_char_utf8mbx_german2_ci[]=
|
||||||
{
|
{
|
||||||
{{CSTR("ss")}, {CSTR(UTF8_sz)}, 0, 0},
|
{{CSTR("ss")}, {CSTR(UTF8_sz)}, 0, TCHAR, 0},
|
||||||
{{CSTR("ss")}, {CSTR(UTF8_sz)}, 1, -1},
|
{{CSTR("ss")}, {CSTR(UTF8_sz)}, 1, TCHAR, -1},
|
||||||
{{CSTR("ss")}, {CSTR(UTF8_sz)}, 2, 0},
|
{{CSTR("ss")}, {CSTR(UTF8_sz)}, 2, TCHAR, 0},
|
||||||
{{CSTR("ss")}, {CSTR(UTF8_sz)}, 3, 0},
|
{{CSTR("ss")}, {CSTR(UTF8_sz)}, 3, TCHAR, 0},
|
||||||
{{CSTR("ss")}, {CSTR(UTF8_sz)}, 100, 0},
|
{{CSTR("ss")}, {CSTR(UTF8_sz)}, 100, TCHAR, 0},
|
||||||
|
|
||||||
{{CSTR("ae")}, {CSTR(UTF8_auml)}, 0, 0},
|
{{CSTR("ae")}, {CSTR(UTF8_auml)}, 0, TCHAR, 0},
|
||||||
{{CSTR("ae")}, {CSTR(UTF8_auml)}, 1, -1},
|
{{CSTR("ae")}, {CSTR(UTF8_auml)}, 1, TCHAR, -1},
|
||||||
{{CSTR("ae")}, {CSTR(UTF8_auml)}, 2, 0},
|
{{CSTR("ae")}, {CSTR(UTF8_auml)}, 2, TCHAR, 0},
|
||||||
{{CSTR("ae")}, {CSTR(UTF8_auml)}, 3, 0},
|
{{CSTR("ae")}, {CSTR(UTF8_auml)}, 3, TCHAR, 0},
|
||||||
{{CSTR("ae")}, {CSTR(UTF8_auml)}, 100, 0},
|
{{CSTR("ae")}, {CSTR(UTF8_auml)}, 100, TCHAR, 0},
|
||||||
|
|
||||||
{{CSTR("ae")}, {CSTR(UTF8_auml " ")}, 0, 0},
|
{{CSTR("ae")}, {CSTR(UTF8_auml " ")}, 0, TCHAR, 0},
|
||||||
{{CSTR("ae")}, {CSTR(UTF8_auml " ")}, 1, -1},
|
{{CSTR("ae")}, {CSTR(UTF8_auml " ")}, 1, TCHAR, -1},
|
||||||
{{CSTR("ae")}, {CSTR(UTF8_auml " ")}, 2, 0},
|
{{CSTR("ae")}, {CSTR(UTF8_auml " ")}, 2, TCHAR, 0},
|
||||||
{{CSTR("ae")}, {CSTR(UTF8_auml " ")}, 3, 0},
|
{{CSTR("ae")}, {CSTR(UTF8_auml " ")}, 3, TCHAR, 0},
|
||||||
{{CSTR("ae")}, {CSTR(UTF8_auml " ")}, 100, 0},
|
{{CSTR("ae")}, {CSTR(UTF8_auml " ")}, 100, TCHAR, 0},
|
||||||
|
|
||||||
{{NULL, 0}, {NULL, 0}, 0, 0}
|
{{NULL, 0}, {NULL, 0}, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static STRNNCOLLSP_CHAR_PARAM strnncollsp_char_mbminlen1_xpad_czech[]=
|
static STRNNCOLLSP_CHAR_PARAM strnncollsp_char_mbminlen1_xpad_czech[]=
|
||||||
{
|
{
|
||||||
{{CSTR("c")}, {CSTR("ch")}, 0, 0},
|
{{CSTR("c")}, {CSTR("ch")}, 0, TCHAR, 0},
|
||||||
{{CSTR("c")}, {CSTR("ch")}, 1, 0},
|
{{CSTR("c")}, {CSTR("ch")}, 1, TCHAR, 0},
|
||||||
{{CSTR("c")}, {CSTR("ch")}, 2, -1},
|
{{CSTR("c")}, {CSTR("ch")}, 2, TCHAR, -1},
|
||||||
|
|
||||||
{{CSTR("h")}, {CSTR("ch")}, 0, 0},
|
{{CSTR("h")}, {CSTR("ch")}, 0, TCHAR, 0},
|
||||||
{{CSTR("h")}, {CSTR("ch")}, 1, 1},
|
{{CSTR("h")}, {CSTR("ch")}, 1, TCHAR, 1},
|
||||||
{{CSTR("h")}, {CSTR("ch")}, 2, -1},
|
{{CSTR("h")}, {CSTR("ch")}, 2, TCHAR, -1},
|
||||||
|
|
||||||
{{CSTR("i")}, {CSTR("ch")}, 0, 0},
|
{{CSTR("i")}, {CSTR("ch")}, 0, TCHAR, 0},
|
||||||
{{CSTR("i")}, {CSTR("ch")}, 1, 1},
|
{{CSTR("i")}, {CSTR("ch")}, 1, TCHAR, 1},
|
||||||
{{CSTR("i")}, {CSTR("ch")}, 2, 1},
|
{{CSTR("i")}, {CSTR("ch")}, 2, TCHAR, 1},
|
||||||
|
|
||||||
{{NULL, 0}, {NULL, 0}, 0, 0}
|
{{NULL, 0}, {NULL, 0}, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static STRNNCOLLSP_CHAR_PARAM strnncollsp_char_mbminlen2_xpad_common[]=
|
static STRNNCOLLSP_CHAR_PARAM strnncollsp_char_mbminlen2_xpad_common[]=
|
||||||
{
|
{
|
||||||
{{CSTR(UCS2_a)}, {CSTR(UCS2_a)}, 0, 0},
|
{{CSTR(UCS2_a)}, {CSTR(UCS2_a)}, 0, TCHAR, 0},
|
||||||
{{CSTR(UCS2_a)}, {CSTR(UCS2_a)}, 1, 0},
|
{{CSTR(UCS2_a)}, {CSTR(UCS2_a)}, 1, TCHAR, 0},
|
||||||
{{CSTR(UCS2_a)}, {CSTR(UCS2_a)}, 2, 0},
|
{{CSTR(UCS2_a)}, {CSTR(UCS2_a)}, 2, TCHAR, 0},
|
||||||
{{CSTR(UCS2_a)}, {CSTR(UCS2_a)}, 3, 0},
|
{{CSTR(UCS2_a)}, {CSTR(UCS2_a)}, 3, TCHAR, 0},
|
||||||
{{CSTR(UCS2_a)}, {CSTR(UCS2_a)}, 100, 0},
|
{{CSTR(UCS2_a)}, {CSTR(UCS2_a)}, 100, TCHAR, 0},
|
||||||
|
|
||||||
{{CSTR(UCS2_a)}, {CSTR(UCS2_a UCS2_sp)}, 0, 0},
|
{{CSTR(UCS2_a)}, {CSTR(UCS2_a UCS2_sp)}, 0, TCHAR, 0},
|
||||||
{{CSTR(UCS2_a)}, {CSTR(UCS2_a UCS2_sp)}, 1, 0},
|
{{CSTR(UCS2_a)}, {CSTR(UCS2_a UCS2_sp)}, 1, TCHAR, 0},
|
||||||
{{CSTR(UCS2_a)}, {CSTR(UCS2_a UCS2_sp)}, 2, 0},
|
{{CSTR(UCS2_a)}, {CSTR(UCS2_a UCS2_sp)}, 2, TCHAR, 0},
|
||||||
{{CSTR(UCS2_a)}, {CSTR(UCS2_a UCS2_sp)}, 3, 0},
|
{{CSTR(UCS2_a)}, {CSTR(UCS2_a UCS2_sp)}, 3, TCHAR, 0},
|
||||||
{{CSTR(UCS2_a)}, {CSTR(UCS2_a UCS2_sp)}, 100, 0},
|
{{CSTR(UCS2_a)}, {CSTR(UCS2_a UCS2_sp)}, 100, TCHAR, 0},
|
||||||
|
|
||||||
{{CSTR(UCS2_a)}, {CSTR(UCS2_a UCS2_sp UCS2_sp)}, 0, 0},
|
{{CSTR(UCS2_a)}, {CSTR(UCS2_a UCS2_sp UCS2_sp)}, 0, TCHAR, 0},
|
||||||
{{CSTR(UCS2_a)}, {CSTR(UCS2_a UCS2_sp UCS2_sp)}, 1, 0},
|
{{CSTR(UCS2_a)}, {CSTR(UCS2_a UCS2_sp UCS2_sp)}, 1, TCHAR, 0},
|
||||||
{{CSTR(UCS2_a)}, {CSTR(UCS2_a UCS2_sp UCS2_sp)}, 2, 0},
|
{{CSTR(UCS2_a)}, {CSTR(UCS2_a UCS2_sp UCS2_sp)}, 2, TCHAR, 0},
|
||||||
{{CSTR(UCS2_a)}, {CSTR(UCS2_a UCS2_sp UCS2_sp)}, 3, 0},
|
{{CSTR(UCS2_a)}, {CSTR(UCS2_a UCS2_sp UCS2_sp)}, 3, TCHAR, 0},
|
||||||
{{CSTR(UCS2_a)}, {CSTR(UCS2_a UCS2_sp UCS2_sp)}, 100, 0},
|
{{CSTR(UCS2_a)}, {CSTR(UCS2_a UCS2_sp UCS2_sp)}, 100, TCHAR, 0},
|
||||||
|
|
||||||
{{CSTR(UCS2_a)}, {CSTR(UCS2_a UCS2_b)}, 0, 0},
|
{{CSTR(UCS2_a)}, {CSTR(UCS2_a UCS2_b)}, 0, TCHAR, 0},
|
||||||
{{CSTR(UCS2_a)}, {CSTR(UCS2_a UCS2_b)}, 1, 0},
|
{{CSTR(UCS2_a)}, {CSTR(UCS2_a UCS2_b)}, 1, TCHAR, 0},
|
||||||
{{CSTR(UCS2_a)}, {CSTR(UCS2_a UCS2_b)}, 2, -1},
|
{{CSTR(UCS2_a)}, {CSTR(UCS2_a UCS2_b)}, 2, TCHAR, -1},
|
||||||
{{CSTR(UCS2_a)}, {CSTR(UCS2_a UCS2_b)}, 3, -1},
|
{{CSTR(UCS2_a)}, {CSTR(UCS2_a UCS2_b)}, 3, TCHAR, -1},
|
||||||
{{CSTR(UCS2_a)}, {CSTR(UCS2_a UCS2_b)}, 100, -1},
|
{{CSTR(UCS2_a)}, {CSTR(UCS2_a UCS2_b)}, 100, TCHAR, -1},
|
||||||
|
|
||||||
{{NULL, 0}, {NULL, 0}, 0, 0}
|
{{NULL, 0}, {NULL, 0}, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -1083,7 +1095,7 @@ strnncollsp_char_one(CHARSET_INFO *cs, const STRNNCOLLSP_CHAR_PARAM *p)
|
|||||||
int res= cs->coll->strnncollsp_nchars(cs,
|
int res= cs->coll->strnncollsp_nchars(cs,
|
||||||
(uchar *) p->a.str, p->a.length,
|
(uchar *) p->a.str, p->a.length,
|
||||||
(uchar *) p->b.str, p->b.length,
|
(uchar *) p->b.str, p->b.length,
|
||||||
p->nchars);
|
p->nchars, p->flags);
|
||||||
str2hex(ahex, sizeof(ahex), p->a.str, p->a.length);
|
str2hex(ahex, sizeof(ahex), p->a.str, p->a.length);
|
||||||
str2hex(bhex, sizeof(bhex), p->b.str, p->b.length);
|
str2hex(bhex, sizeof(bhex), p->b.str, p->b.length);
|
||||||
diag("%-25s %-12s %-12s %3d %7d %7d%s",
|
diag("%-25s %-12s %-12s %3d %7d %7d%s",
|
||||||
@@ -1099,7 +1111,7 @@ strnncollsp_char_one(CHARSET_INFO *cs, const STRNNCOLLSP_CHAR_PARAM *p)
|
|||||||
res= cs->coll->strnncollsp_nchars(cs,
|
res= cs->coll->strnncollsp_nchars(cs,
|
||||||
(uchar *) p->b.str, p->b.length,
|
(uchar *) p->b.str, p->b.length,
|
||||||
(uchar *) p->a.str, p->a.length,
|
(uchar *) p->a.str, p->a.length,
|
||||||
p->nchars);
|
p->nchars, p->flags);
|
||||||
if (!eqres(res, -p->res))
|
if (!eqres(res, -p->res))
|
||||||
{
|
{
|
||||||
diag("Comparison in reverse order failed. Expected %d, got %d",
|
diag("Comparison in reverse order failed. Expected %d, got %d",
|
||||||
|
Reference in New Issue
Block a user