mirror of
https://github.com/MariaDB/server.git
synced 2026-10-23 18:49:29 +03:00
Follow-up to 6c391b9205.
SHOW CREATE DATABASE always appends "/*!40100 DEFAULT CHARACTER SET
... */", but the default charset differs by version (latin1 on 11.4,
utf8mb4 on 11.8+). Strip it instead of matching a specific value,
since it is not the subject for the fix.
Also switch to evalp: same execution, but logs "$var" instead of the
substituted value, so the replace_regex/disable_query_log hacks go away.
141 lines
7.3 KiB
Plaintext
141 lines
7.3 KiB
Plaintext
--echo #
|
|
--echo # MDEV-307: Add functionality for database comments
|
|
--echo #
|
|
|
|
# Check an error state
|
|
--error ER_PARSE_ERROR
|
|
CREATE DATABASE db1 COMMENT=;
|
|
|
|
# 1024 bytes
|
|
CREATE DATABASE db1
|
|
COMMENT='abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcd';
|
|
SHOW CREATE DATABASE db1;
|
|
SELECT schema_comment, char_length(schema_comment)
|
|
FROM information_schema.schemata
|
|
WHERE schema_name='db1';
|
|
DROP DATABASE db1;
|
|
|
|
# 1025 bytes (warning)
|
|
SET SQL_MODE='';
|
|
CREATE DATABASE db1
|
|
COMMENT='abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcde';
|
|
SHOW CREATE DATABASE db1;
|
|
SELECT schema_comment, char_length(schema_comment)
|
|
FROM information_schema.schemata
|
|
WHERE schema_name='db1';
|
|
DROP DATABASE db1;
|
|
SET SQL_MODE='TRADITIONAL';
|
|
|
|
# 1025 bytes (error)
|
|
--error ER_TOO_LONG_DATABASE_COMMENT
|
|
CREATE DATABASE db1
|
|
COMMENT='abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcde';
|
|
SELECT schema_comment, char_length(schema_comment)
|
|
FROM information_schema.schemata
|
|
WHERE schema_name='db1';
|
|
|
|
CREATE DATABASE db1 COMMENT 'db1';
|
|
SHOW CREATE DATABASE db1;
|
|
ALTER DATABASE db1 COMMENT = "db1 comment";
|
|
SELECT * FROM information_schema.schemata
|
|
WHERE schema_name='db1';
|
|
DROP DATABASE db1;
|
|
|
|
CREATE DATABASE db1;
|
|
USE db1;
|
|
ALTER DATABASE COMMENT 'db1 comment' CHARACTER SET 'utf8';
|
|
SHOW CREATE DATABASE db1;
|
|
ALTER DATABASE db1 COMMENT 'this is db1 comment';
|
|
SHOW CREATE DATABASE db1;
|
|
ALTER DATABASE CHARACTER SET 'latin1';
|
|
SHOW CREATE DATABASE db1;
|
|
DROP DATABASE db1;
|
|
|
|
# Test the case when the database is named 'comment'
|
|
--disable_service_connection
|
|
CREATE DATABASE comment COMMENT 'comment' CHARACTER SET 'latin2';
|
|
SHOW CREATE DATABASE comment;
|
|
ALTER DATABASE comment COMMENT 'comment comment';
|
|
SHOW CREATE DATABASE comment;
|
|
USE comment;
|
|
ALTER DATABASE COMMENT 'comment';
|
|
SELECT * FROM information_schema.schemata
|
|
WHERE schema_name='comment';
|
|
DROP DATABASE comment;
|
|
--enable_service_connection
|
|
|
|
CREATE DATABASE db1;
|
|
--remove_file $MARIADB_DATADIR/db1/db.opt
|
|
--source include/restart_mysqld.inc
|
|
# We need to call this two times to ensure all code paths are used
|
|
SHOW CREATE DATABASE db1;
|
|
SHOW CREATE DATABASE db1;
|
|
DROP DATABASE db1;
|
|
|
|
--echo #
|
|
--echo # MDEV-41157 CREATE DATABASE COMMENT overflows db.opt comment buffer
|
|
--echo #
|
|
set session sql_mode='';
|
|
--let $long_comment= `select repeat('A', 4000)`
|
|
evalp create database db comment '$long_comment';
|
|
|
|
--echo # Bug 1: put_dbopt() must not overflow when storing a truncated comment
|
|
--replace_regex /A{1024}/<A x1024>/ # /\*!40100[^*]*\*/##
|
|
show create database db;
|
|
flush tables;
|
|
--echo # Bug 2: write_db_opt() must persist a properly terminated truncated comment
|
|
--replace_regex /A{1024}/<A x1024>/ # /\*!40100[^*]*\*/##
|
|
show create database db;
|
|
|
|
--echo # Bug 3: load_db_opt() must clamp an overlong comment loaded from a legacy db.opt file
|
|
--let $def_charset= `select @@character_set_server`
|
|
--let $def_collation= `select @@collation_server`
|
|
--remove_file $MARIADB_DATADIR/db/db.opt
|
|
--write_file $MARIADB_DATADIR/db/db.opt EOF eval
|
|
default-character-set=$def_charset
|
|
default-collation=$def_collation
|
|
comment=$long_comment
|
|
EOF
|
|
flush tables;
|
|
--replace_regex /A{1024}/<A x1024>/ /[\\]/\// # /\*!40100[^*]*\*/##
|
|
show create database db;
|
|
|
|
--echo # Bug 3: ALTER DATABASE without COMMENT must clamp a legacy overlong comment too
|
|
flush tables;
|
|
--replace_regex /[\\]/\//
|
|
alter database db character set 'latin1';
|
|
--replace_regex /A{1024}/<A x1024>/ # /\*!40100[^*]*\*/##
|
|
show create database db;
|
|
|
|
drop database db;
|
|
|
|
--echo # Bug 4: multi-byte comment must be truncated at a character boundary
|
|
set names utf8mb3;
|
|
--let $mb_comment= `select repeat(convert(0xE4B8AD using utf8mb3), 4000)`
|
|
evalp create database dbmb comment '$mb_comment';
|
|
select char_length(schema_comment), octet_length(schema_comment)
|
|
from information_schema.schemata where schema_name='dbmb';
|
|
flush tables;
|
|
select char_length(schema_comment), octet_length(schema_comment)
|
|
from information_schema.schemata where schema_name='dbmb';
|
|
drop database dbmb;
|
|
|
|
--echo # Bug 4: strict sql_mode must reject an overlong multi-byte comment
|
|
set session sql_mode='TRADITIONAL';
|
|
--error ER_TOO_LONG_DATABASE_COMMENT
|
|
evalp create database dbmb comment '$mb_comment';
|
|
set session sql_mode='';
|
|
|
|
--echo # a 1024-character multi-byte table comment must not be byte-clamped
|
|
--let $mb_table_comment= `select repeat(convert(0xE4B8AD using utf8mb3), 1024)`
|
|
evalp create table test.t1 (a int) comment '$mb_table_comment';
|
|
select char_length(table_comment), octet_length(table_comment)
|
|
from information_schema.tables where table_name='t1';
|
|
drop table test.t1;
|
|
|
|
set names default;
|
|
|
|
set session sql_mode=default;
|
|
|
|
--echo # End of 10.11 tests
|