summaryrefslogtreecommitdiffstats
path: root/mysql-test/main/column_compression.test
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-04 18:07:14 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-04 18:07:14 +0000
commita175314c3e5827eb193872241446f2f8f5c9d33c (patch)
treecd3d60ca99ae00829c52a6ca79150a5b6e62528b /mysql-test/main/column_compression.test
parentInitial commit. (diff)
downloadmariadb-10.5-a175314c3e5827eb193872241446f2f8f5c9d33c.tar.xz
mariadb-10.5-a175314c3e5827eb193872241446f2f8f5c9d33c.zip
Adding upstream version 1:10.5.12.upstream/1%10.5.12upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'mysql-test/main/column_compression.test')
-rw-r--r--mysql-test/main/column_compression.test296
1 files changed, 296 insertions, 0 deletions
diff --git a/mysql-test/main/column_compression.test b/mysql-test/main/column_compression.test
new file mode 100644
index 00000000..2ae50be9
--- /dev/null
+++ b/mysql-test/main/column_compression.test
@@ -0,0 +1,296 @@
+--source include/have_innodb.inc
+--source include/have_csv.inc
+
+let $MYSQLD_DATADIR= `select @@datadir`;
+
+SET column_compression_zlib_wrap=true;
+let $typec= BLOB COMPRESSED;
+let $typeu= BLOB;
+--source column_compression.inc
+
+let $typec= TEXT COMPRESSED;
+let $typeu= TEXT;
+--source column_compression.inc
+
+let $typec= VARBINARY(10000) COMPRESSED;
+let $typeu= VARBINARY(10000);
+--source column_compression.inc
+
+let $typec= VARCHAR(10000) COMPRESSED;
+let $typeu= VARCHAR(10000);
+--source column_compression.inc
+
+let $typec= TEXT COMPRESSED CHARSET ucs2;
+let $typeu= TEXT;
+--source column_compression.inc
+
+SET column_compression_zlib_wrap=DEFAULT;
+let $typec= BLOB COMPRESSED;
+let $typeu= BLOB;
+--source column_compression.inc
+
+--error ER_PARSE_ERROR
+CREATE TABLE t1(a CHAR(100) COMPRESSED);
+--error ER_WRONG_FIELD_SPEC
+CREATE TABLE t1(a CHAR(100) NOT NULL COMPRESSED);
+--error ER_PARSE_ERROR
+CREATE TABLE t1(a INT COMPRESSED);
+--error ER_UNKNOWN_COMPRESSION_METHOD
+CREATE TABLE t1(a BLOB COMPRESSED=unknown);
+--error ER_PARSE_ERROR
+CREATE TABLE t1(a BLOB COMPRESSED COMPRESSED);
+CREATE TABLE t1(a INT);
+--error ER_PARSE_ERROR
+ALTER TABLE t1 MODIFY a INT COMPRESSED;
+--error ER_WRONG_FIELD_SPEC
+ALTER TABLE t1 MODIFY a INT NOT NULL COMPRESSED;
+DROP TABLE t1;
+
+--echo # Test CSV
+CREATE TABLE t1(a BLOB COMPRESSED NOT NULL) ENGINE=CSV;
+INSERT INTO t1 VALUES(REPEAT('a', 110));
+SELECT LENGTH(a) FROM t1;
+ALTER TABLE t1 ENGINE=MyISAM;
+SELECT LENGTH(a) FROM t1;
+ALTER TABLE t1 ENGINE=CSV;
+SELECT LENGTH(a) FROM t1;
+SHOW CREATE TABLE t1;
+--cat_file $MYSQLD_DATADIR/test/t1.CSV
+DROP TABLE t1;
+
+--echo # Test fields that don't fit data
+CREATE TABLE t1(a VARCHAR(9) COMPRESSED);
+--error ER_DATA_TOO_LONG
+INSERT INTO t1 VALUES(REPEAT('a', 10));
+INSERT INTO t1 VALUES(REPEAT(' ', 10));
+SELECT a, LENGTH(a) FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1(a TINYTEXT COMPRESSED);
+SET column_compression_threshold=300;
+INSERT INTO t1 VALUES(REPEAT('a', 254));
+INSERT INTO t1 VALUES(REPEAT(' ', 254));
+--error ER_DATA_TOO_LONG
+INSERT INTO t1 VALUES(REPEAT('a', 255));
+INSERT INTO t1 VALUES(REPEAT(' ', 255));
+--error ER_DATA_TOO_LONG
+INSERT INTO t1 VALUES(REPEAT('a', 256));
+INSERT INTO t1 VALUES(REPEAT(' ', 256));
+--error ER_DATA_TOO_LONG
+INSERT INTO t1 VALUES(REPEAT('a', 257));
+INSERT INTO t1 VALUES(REPEAT(' ', 257));
+SET column_compression_threshold=DEFAULT;
+SELECT LEFT(a, 10), LENGTH(a) FROM t1 ORDER BY 1;
+DROP TABLE t1;
+
+--echo # Corner case: VARCHAR(255) COMPRESSED must have 2 bytes pack length
+CREATE TABLE t1(a VARCHAR(255) COMPRESSED);
+SHOW CREATE TABLE t1;
+SET column_compression_threshold=300;
+INSERT INTO t1 VALUES(REPEAT('a', 255));
+SET column_compression_threshold=DEFAULT;
+SELECT a, LENGTH(a) FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1(a VARCHAR(65531) COMPRESSED);
+SET column_compression_threshold=65537;
+INSERT INTO t1 VALUES(REPEAT('a', 65530));
+INSERT INTO t1 VALUES(REPEAT(' ', 65530));
+INSERT INTO t1 VALUES(REPEAT('a', 65531));
+INSERT INTO t1 VALUES(REPEAT(' ', 65531));
+--error ER_DATA_TOO_LONG
+INSERT INTO t1 VALUES(REPEAT('a', 65532));
+INSERT INTO t1 VALUES(REPEAT(' ', 65532));
+--error ER_DATA_TOO_LONG
+INSERT INTO t1 VALUES(REPEAT('a', 65533));
+INSERT INTO t1 VALUES(REPEAT(' ', 65533));
+SET column_compression_threshold=DEFAULT;
+SELECT LEFT(a, 10), LENGTH(a) FROM t1 ORDER BY 1, 2;
+DROP TABLE t1;
+
+
+--echo #
+--echo # MDEV-14929 - AddressSanitizer: memcpy-param-overlap in
+--echo # Field_longstr::compress
+--echo #
+CREATE TABLE t1(b BLOB COMPRESSED);
+INSERT INTO t1 VALUES('foo'),('bar');
+SET SESSION optimizer_switch = 'derived_merge=off';
+SELECT * FROM ( SELECT * FROM t1 ) AS sq ORDER BY b;
+SET SESSION optimizer_switch=DEFAULT;
+DROP TABLE t1;
+
+
+--echo #
+--echo # MDEV-15762 - VARCHAR(0) COMPRESSED crashes the server
+--echo #
+CREATE TABLE t1(a VARCHAR(0) COMPRESSED);
+--error ER_DATA_TOO_LONG
+INSERT INTO t1 VALUES('a');
+INSERT INTO t1 VALUES(' ');
+SELECT LENGTH(a) FROM t1;
+DROP TABLE t1;
+
+
+--echo #
+--echo # MDEV-15763 - VARCHAR(1) COMPRESSED crashes the server
+--echo #
+CREATE TABLE t1(a VARCHAR(1) COMPRESSED);
+SET column_compression_threshold=0;
+INSERT INTO t1 VALUES('a');
+SET column_compression_threshold=DEFAULT;
+DROP TABLE t1;
+
+
+--echo #
+--echo # MDEV-15938 - TINYTEXT CHARACTER SET utf8 COMPRESSED truncates data
+--echo #
+CREATE TABLE t1(a TINYTEXT COMPRESSED, b TINYTEXT) CHARACTER SET utf8;
+INSERT INTO t1 VALUES (REPEAT(_latin1'a', 254), REPEAT(_latin1'a', 254));
+SELECT CHAR_LENGTH(a), CHAR_LENGTH(b), LEFT(a, 10), LEFT(b, 10) FROM t1;
+DROP TABLE t1;
+
+
+--echo #
+--echo # MDEV-16134 Wrong I_S.COLUMNS.CHARACTER_XXX_LENGTH value for compressed columns
+--echo #
+
+CREATE TABLE t1
+(
+ a VARCHAR(10) COMPRESSED CHARACTER SET latin1,
+ b VARCHAR(10) COMPRESSED CHARACTER SET utf8
+);
+SELECT COLUMN_NAME, CHARACTER_MAXIMUM_LENGTH, CHARACTER_OCTET_LENGTH
+FROM INFORMATION_SCHEMA.COLUMNS
+WHERE TABLE_SCHEMA='test' AND TABLE_NAME='t1' AND COLUMN_NAME IN ('a','b')
+ORDER BY COLUMN_NAME;
+DROP TABLE t1;
+
+
+--echo #
+--echo # MDEV-15592 - Column COMPRESSED should select a 'high order' datatype
+--echo #
+CREATE TABLE t1(a TINYTEXT COMPRESSED);
+INSERT INTO t1 VALUES(REPEAT('a', 255));
+SELECT LEFT(a, 10), LENGTH(a) FROM t1;
+DROP TABLE t1;
+
+
+--echo #
+--echo # MDEV-16729 VARCHAR COMPRESSED is created with a wrong length for multi-byte character sets
+--echo #
+
+CREATE OR REPLACE TABLE t1 (a VARCHAR(1000) COMPRESSED CHARACTER SET utf8);
+SHOW CREATE TABLE t1;
+SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
+WHERE TABLE_SCHEMA='test' AND TABLE_NAME='t1';
+DROP TABLE t1;
+
+
+--echo #
+--echo # MDEV-17363 - Compressed columns cannot be restored from dump
+--echo #
+--error ER_WRONG_FIELD_SPEC
+CREATE TABLE t1(a INT NOT NULL COMPRESSED);
+SHOW WARNINGS;
+
+CREATE TABLE t1(
+ a JSON COMPRESSED,
+ b VARCHAR(1000) COMPRESSED BINARY,
+ c NVARCHAR(1000) COMPRESSED BINARY,
+ d TINYTEXT COMPRESSED BINARY
+);
+SHOW CREATE TABLE t1;
+DROP TABLE t1;
+
+
+--echo #
+--echo # VARCHAR and TEXT variants
+--echo #
+
+--let type=VARCHAR(10)
+--source include/column_compression_syntax_varchar.inc
+
+--let type=TINYTEXT
+--source include/column_compression_syntax_varchar.inc
+
+--let type=TEXT
+--source include/column_compression_syntax_varchar.inc
+
+--let type=MEDIUMTEXT
+--source include/column_compression_syntax_varchar.inc
+
+--let type=LONGTEXT
+--source include/column_compression_syntax_varchar.inc
+
+
+--echo #
+--echo # VARBINARY and BLOB variables
+--echo #
+
+--let type=VARCHAR(10)
+--source include/column_compression_syntax_varbinary.inc
+
+--let type=TINYBLOB
+--source include/column_compression_syntax_varbinary.inc
+
+--let type=BLOB
+--source include/column_compression_syntax_varbinary.inc
+
+--let type=MEDIUMBLOB
+--source include/column_compression_syntax_varbinary.inc
+
+--let type=LONGBLOB
+--source include/column_compression_syntax_varbinary.inc
+
+
+--echo #
+--echo # NVARCHAR
+--echo #
+
+CREATE TABLE t1 (a NVARCHAR(10) COMPRESSED);
+SHOW CREATE TABLE t1;
+DROP TABLE t1;
+--error ER_PARSE_ERROR
+CREATE TABLE t1 (a NVARCHAR(10) COMPRESSED BINARY COMPRESSED);
+--error ER_PARSE_ERROR
+CREATE TABLE t1 (a NVARCHAR(10) COMPRESSED DEFAULT '' COMPRESSED);
+
+--echo #
+--echo # MDEV-21348 - Memory leak in Storage-Engine Independent Column
+--echo # Compression
+--echo #
+CREATE TABLE t1(a BLOB COMPRESSED);
+SET column_compression_threshold=0;
+INSERT INTO t1 VALUES('aa');
+SET column_compression_threshold=DEFAULT;
+DROP TABLE t1;
+
+--echo #
+--echo # End of 10.3 tests
+--echo #
+
+
+--echo #
+--echo # Start of 10.5 tests
+--echo #
+
+--echo #
+--echo # MDEV-19727 Add Type_handler::Key_part_spec_init_ft
+--echo #
+
+#
+# Indexes on COMPRESSED columns are generally prohibited, so we don't have
+# to override Type_handler_xxx_compressed::Key_part_spec_init_ft().
+# Note, we could support FULLTEXT indexes on compressed columns eventually.
+#
+
+--error ER_COMPRESSED_COLUMN_USED_AS_KEY
+CREATE TABLE t1 (a VARCHAR(1000) COMPRESSED, FULLTEXT INDEX(a));
+
+--error ER_COMPRESSED_COLUMN_USED_AS_KEY
+CREATE TABLE t1 (a TEXT COMPRESSED, FULLTEXT INDEX(a));
+
+--echo #
+--echo # End of 10.5 tests
+--echo #