diff options
author | Sergey Vojtovich <svoj@mariadb.org> | 2018-05-02 13:45:44 +0400 |
---|---|---|
committer | Sergey Vojtovich <svoj@mariadb.org> | 2018-05-11 19:57:07 +0400 |
commit | c982924242b8227ec9a0a6808379b1d3e45ba686 (patch) | |
tree | 411d9fb13a57d195ebbfcc5cf2fd8a73501dd90d /mysql-test/main/column_compression.test | |
parent | 8ad12b6664dc89b7b29992c6366abdf9c310db17 (diff) | |
download | mariadb-git-c982924242b8227ec9a0a6808379b1d3e45ba686.tar.gz |
MDEV-15592 - Column COMPRESSED should select a 'high order' datatype
Compressed blob columns didn't accept data at their capacity. E.g. storing
255 bytes to TINYBLOB results in "Data too long" error.
Now it is allowed assuming compression method was able to produce shorter
string (so that both metadata and compressed data fits blob) and
column_compression_threshold is lower than blob.
If no compression was performed, we still have to reserve additional byte
for metadata and thus we perform normal data truncation and return it's
status.
Diffstat (limited to 'mysql-test/main/column_compression.test')
-rw-r--r-- | mysql-test/main/column_compression.test | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/mysql-test/main/column_compression.test b/mysql-test/main/column_compression.test index cdd9adb254d..f3220503694 100644 --- a/mysql-test/main/column_compression.test +++ b/mysql-test/main/column_compression.test @@ -64,11 +64,19 @@ 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 a, LENGTH(a) FROM t1; +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 @@ -80,6 +88,22 @@ 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 @@ -113,6 +137,7 @@ 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 # @@ -136,3 +161,12 @@ 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; |