1
0
mirror of https://github.com/MariaDB/server.git synced 2026-10-23 18:49:29 +03:00
Files
mariadb/mysql-test/main/comment_database.test
Aleksey Midenkov 7b14da6cd0 MDEV-41157 Follow-up test fix: strip version-dependent charset result
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.
2026-09-29 00:13:55 +03:00

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