diff --git a/mysql-test/columnstore/basic/r/ctype_extent_koi8u.result b/mysql-test/columnstore/basic/r/ctype_extent_koi8u.result new file mode 100644 index 000000000..231c29855 --- /dev/null +++ b/mysql-test/columnstore/basic/r/ctype_extent_koi8u.result @@ -0,0 +1,248 @@ +DROP DATABASE IF EXISTS mcs_ctype_extent_koi8u; +CREATE DATABASE mcs_ctype_extent_koi8u; +USE mcs_ctype_extent_koi8u; +SET default_storage_engine=ColumnStore; +CREATE PROCEDURE show_extent_min_max(schema_arg VARCHAR(64), +table_arg VARCHAR(64), +column_arg VARCHAR(64)) +BEGIN +SELECT +c.table_schema, +c.table_name, +c.column_name, +hex(CAST(e.min_value AS SIGNED)), +hex(CAST(e.max_value AS SIGNED)) +FROM +information_schema.columnstore_extents e, +information_schema.columnstore_columns c +WHERE c.object_id=e.object_id +AND table_schema=schema_arg +AND table_name=table_arg +AND column_name=column_arg; +END; +$$ +CREATE FUNCTION caltrace_extract_block_diagnostics(msg TEXT CHARACTER SET utf8mb4) +RETURNS TEXT CHARACTER SET utf8mb4 +BEGIN +RETURN CONCAT(regexp_substr(msg, '(BlocksTouched-[^;]*);'), ' ', +regexp_substr(msg, '(PartitionBlocksEliminated-[^;]*);')); +END; +$$ +# +# MCOL-4871 Extent elimination for short CHAR does not work well +# +SET NAMES utf8; +CREATE PROCEDURE test(collation VARCHAR(64)) +BEGIN +DECLARE stmt TEXT; +DECLARE CONTINUE HANDLER FOR 9999 +BEGIN +GET DIAGNOSTICS CONDITION 1 @errmsg = MESSAGE_TEXT; +SET @errmsg=caltrace_extract_block_diagnostics(@errmsg); +RESIGNAL SET MESSAGE_TEXT=@errmsg; +END; +DO calsettrace(1); +SET stmt='CREATE TABLE t1 (c1 CHAR(2) CHARACTER SET koi8u COLLATE koi8u_general_ci)'; +SET stmt=REPLACE(stmt,'koi8u_general_ci', collation); +SELECT stmt AS ``; +EXECUTE IMMEDIATE stmt; +INSERT INTO t1 VALUES ('Ъ─') /*_koi8u x'FF80'*/; +SELECT c1, HEX(c1) FROM t1; +CALL show_extent_min_max(database(),'t1','c1'); +SELECT * FROM t1 WHERE c1='Ъ─'; +SHOW WARNINGS; +SELECT * FROM t1 WHERE c1='Ъя' /*_koi8u x'FFF1'*/; +SHOW WARNINGS; +DROP TABLE t1; +SET stmt='CREATE TABLE t1 (c1 CHAR(4) CHARACTER SET koi8u COLLATE koi8u_general_ci)'; +SET stmt=REPLACE(stmt,'koi8u_general_ci', collation); +SELECT stmt AS ``; +EXECUTE IMMEDIATE stmt; +INSERT INTO t1 VALUES ('ЪЪЪ─') /*_koi8u x'FFFFFF80'*/; +SELECT c1, HEX(c1) FROM t1; +CALL show_extent_min_max(database(),'t1','c1'); +SELECT * FROM t1 WHERE c1='ЪЪЪ─'; +SHOW WARNINGS; +SELECT * FROM t1 WHERE c1='ЪЪЪя' /*_koi8u x'FFFFFFF1'*/; +SHOW WARNINGS; +DROP TABLE t1; +SET stmt='CREATE TABLE t1 (c1 CHAR(8) CHARACTER SET koi8u COLLATE koi8u_general_ci)'; +SET stmt=REPLACE(stmt,'koi8u_general_ci', collation); +SELECT stmt AS ``; +EXECUTE IMMEDIATE stmt; +INSERT INTO t1 VALUES ('ЪЪЪЪЪЪЪ─') /*_koi8u x'FFFFFFFFFFFFFF80'*/; +SELECT c1, HEX(c1) FROM t1; +CALL show_extent_min_max(database(),'t1','c1'); +SELECT * FROM t1 WHERE c1='ЪЪЪЪЪЪЪ─'; +SHOW WARNINGS; +SELECT * FROM t1 WHERE c1='ЪЪЪЪЪЪЪя' /*_koi8u x'FFFFFFFFFFFFFFF1'*/; +SHOW WARNINGS; +DROP TABLE t1; +DO calsettrace(0); +END; +$$ +CALL test('koi8u_general_ci'); + +CREATE TABLE t1 (c1 CHAR(2) CHARACTER SET koi8u COLLATE koi8u_general_ci) +c1 HEX(c1) +Ъ─ FF80 +table_schema table_name column_name hex(CAST(e.min_value AS SIGNED)) hex(CAST(e.max_value AS SIGNED)) +mcs_ctype_extent_koi8u t1 c1 FFFFFFFFFFFF80FF FFFFFFFFFFFF80FF +c1 +Ъ─ +Level Code Message +Note 9999 BlocksTouched-1; PartitionBlocksEliminated-0; +c1 +Level Code Message +Note 9999 BlocksTouched-0; PartitionBlocksEliminated-1; + +CREATE TABLE t1 (c1 CHAR(4) CHARACTER SET koi8u COLLATE koi8u_general_ci) +c1 HEX(c1) +ЪЪЪ─ FFFFFF80 +table_schema table_name column_name hex(CAST(e.min_value AS SIGNED)) hex(CAST(e.max_value AS SIGNED)) +mcs_ctype_extent_koi8u t1 c1 FFFFFFFF80FFFFFF FFFFFFFF80FFFFFF +c1 +ЪЪЪ─ +Level Code Message +Note 9999 BlocksTouched-1; PartitionBlocksEliminated-0; +c1 +Level Code Message +Note 9999 BlocksTouched-0; PartitionBlocksEliminated-1; + +CREATE TABLE t1 (c1 CHAR(8) CHARACTER SET koi8u COLLATE koi8u_general_ci) +c1 HEX(c1) +ЪЪЪЪЪЪЪ─ FFFFFFFFFFFFFF80 +table_schema table_name column_name hex(CAST(e.min_value AS SIGNED)) hex(CAST(e.max_value AS SIGNED)) +mcs_ctype_extent_koi8u t1 c1 80FFFFFFFFFFFFFF 80FFFFFFFFFFFFFF +c1 +ЪЪЪЪЪЪЪ─ +Level Code Message +Note 9999 BlocksTouched-1; PartitionBlocksEliminated-0; +c1 +Level Code Message +Note 9999 BlocksTouched-0; PartitionBlocksEliminated-1; +CALL test('koi8u_general_nopad_ci'); + +CREATE TABLE t1 (c1 CHAR(2) CHARACTER SET koi8u COLLATE koi8u_general_nopad_ci) +c1 HEX(c1) +Ъ─ FF80 +table_schema table_name column_name hex(CAST(e.min_value AS SIGNED)) hex(CAST(e.max_value AS SIGNED)) +mcs_ctype_extent_koi8u t1 c1 FFFFFFFFFFFF80FF FFFFFFFFFFFF80FF +c1 +Ъ─ +Level Code Message +Note 9999 BlocksTouched-1; PartitionBlocksEliminated-0; +c1 +Level Code Message +Note 9999 BlocksTouched-0; PartitionBlocksEliminated-1; + +CREATE TABLE t1 (c1 CHAR(4) CHARACTER SET koi8u COLLATE koi8u_general_nopad_ci) +c1 HEX(c1) +ЪЪЪ─ FFFFFF80 +table_schema table_name column_name hex(CAST(e.min_value AS SIGNED)) hex(CAST(e.max_value AS SIGNED)) +mcs_ctype_extent_koi8u t1 c1 FFFFFFFF80FFFFFF FFFFFFFF80FFFFFF +c1 +ЪЪЪ─ +Level Code Message +Note 9999 BlocksTouched-1; PartitionBlocksEliminated-0; +c1 +Level Code Message +Note 9999 BlocksTouched-0; PartitionBlocksEliminated-1; + +CREATE TABLE t1 (c1 CHAR(8) CHARACTER SET koi8u COLLATE koi8u_general_nopad_ci) +c1 HEX(c1) +ЪЪЪЪЪЪЪ─ FFFFFFFFFFFFFF80 +table_schema table_name column_name hex(CAST(e.min_value AS SIGNED)) hex(CAST(e.max_value AS SIGNED)) +mcs_ctype_extent_koi8u t1 c1 80FFFFFFFFFFFFFF 80FFFFFFFFFFFFFF +c1 +ЪЪЪЪЪЪЪ─ +Level Code Message +Note 9999 BlocksTouched-1; PartitionBlocksEliminated-0; +c1 +Level Code Message +Note 9999 BlocksTouched-0; PartitionBlocksEliminated-1; +CALL test('koi8u_bin'); + +CREATE TABLE t1 (c1 CHAR(2) CHARACTER SET koi8u COLLATE koi8u_bin) +c1 HEX(c1) +Ъ─ FF80 +table_schema table_name column_name hex(CAST(e.min_value AS SIGNED)) hex(CAST(e.max_value AS SIGNED)) +mcs_ctype_extent_koi8u t1 c1 FFFFFFFFFFFF80FF FFFFFFFFFFFF80FF +c1 +Ъ─ +Level Code Message +Note 9999 BlocksTouched-1; PartitionBlocksEliminated-0; +c1 +Level Code Message +Note 9999 BlocksTouched-0; PartitionBlocksEliminated-1; + +CREATE TABLE t1 (c1 CHAR(4) CHARACTER SET koi8u COLLATE koi8u_bin) +c1 HEX(c1) +ЪЪЪ─ FFFFFF80 +table_schema table_name column_name hex(CAST(e.min_value AS SIGNED)) hex(CAST(e.max_value AS SIGNED)) +mcs_ctype_extent_koi8u t1 c1 FFFFFFFF80FFFFFF FFFFFFFF80FFFFFF +c1 +ЪЪЪ─ +Level Code Message +Note 9999 BlocksTouched-1; PartitionBlocksEliminated-0; +c1 +Level Code Message +Note 9999 BlocksTouched-0; PartitionBlocksEliminated-1; + +CREATE TABLE t1 (c1 CHAR(8) CHARACTER SET koi8u COLLATE koi8u_bin) +c1 HEX(c1) +ЪЪЪЪЪЪЪ─ FFFFFFFFFFFFFF80 +table_schema table_name column_name hex(CAST(e.min_value AS SIGNED)) hex(CAST(e.max_value AS SIGNED)) +mcs_ctype_extent_koi8u t1 c1 80FFFFFFFFFFFFFF 80FFFFFFFFFFFFFF +c1 +ЪЪЪЪЪЪЪ─ +Level Code Message +Note 9999 BlocksTouched-1; PartitionBlocksEliminated-0; +c1 +Level Code Message +Note 9999 BlocksTouched-0; PartitionBlocksEliminated-1; +CALL test('koi8u_nopad_bin'); + +CREATE TABLE t1 (c1 CHAR(2) CHARACTER SET koi8u COLLATE koi8u_nopad_bin) +c1 HEX(c1) +Ъ─ FF80 +table_schema table_name column_name hex(CAST(e.min_value AS SIGNED)) hex(CAST(e.max_value AS SIGNED)) +mcs_ctype_extent_koi8u t1 c1 FFFFFFFFFFFF80FF FFFFFFFFFFFF80FF +c1 +Ъ─ +Level Code Message +Note 9999 BlocksTouched-1; PartitionBlocksEliminated-0; +c1 +Level Code Message +Note 9999 BlocksTouched-0; PartitionBlocksEliminated-1; + +CREATE TABLE t1 (c1 CHAR(4) CHARACTER SET koi8u COLLATE koi8u_nopad_bin) +c1 HEX(c1) +ЪЪЪ─ FFFFFF80 +table_schema table_name column_name hex(CAST(e.min_value AS SIGNED)) hex(CAST(e.max_value AS SIGNED)) +mcs_ctype_extent_koi8u t1 c1 FFFFFFFF80FFFFFF FFFFFFFF80FFFFFF +c1 +ЪЪЪ─ +Level Code Message +Note 9999 BlocksTouched-1; PartitionBlocksEliminated-0; +c1 +Level Code Message +Note 9999 BlocksTouched-0; PartitionBlocksEliminated-1; + +CREATE TABLE t1 (c1 CHAR(8) CHARACTER SET koi8u COLLATE koi8u_nopad_bin) +c1 HEX(c1) +ЪЪЪЪЪЪЪ─ FFFFFFFFFFFFFF80 +table_schema table_name column_name hex(CAST(e.min_value AS SIGNED)) hex(CAST(e.max_value AS SIGNED)) +mcs_ctype_extent_koi8u t1 c1 80FFFFFFFFFFFFFF 80FFFFFFFFFFFFFF +c1 +ЪЪЪЪЪЪЪ─ +Level Code Message +Note 9999 BlocksTouched-1; PartitionBlocksEliminated-0; +c1 +Level Code Message +Note 9999 BlocksTouched-0; PartitionBlocksEliminated-1; +DROP PROCEDURE test; +DROP PROCEDURE show_extent_min_max; +DROP FUNCTION caltrace_extract_block_diagnostics; +DROP DATABASE mcs_ctype_extent_koi8u; +USE test; diff --git a/mysql-test/columnstore/basic/r/ctype_extent_latin1.result b/mysql-test/columnstore/basic/r/ctype_extent_latin1.result new file mode 100644 index 000000000..fb338da26 --- /dev/null +++ b/mysql-test/columnstore/basic/r/ctype_extent_latin1.result @@ -0,0 +1,312 @@ +DROP DATABASE IF EXISTS mcs_ctype_extent_latin1; +CREATE DATABASE mcs_ctype_extent_latin1; +USE mcs_ctype_extent_latin1; +SET default_storage_engine=ColumnStore; +CREATE PROCEDURE show_extent_min_max(schema_arg VARCHAR(64), +table_arg VARCHAR(64), +column_arg VARCHAR(64)) +BEGIN +SELECT +c.table_schema, +c.table_name, +c.column_name, +hex(CAST(e.min_value AS SIGNED)), +hex(CAST(e.max_value AS SIGNED)) +FROM +information_schema.columnstore_extents e, +information_schema.columnstore_columns c +WHERE c.object_id=e.object_id +AND table_schema=schema_arg +AND table_name=table_arg +AND column_name=column_arg; +END; +$$ +CREATE FUNCTION caltrace_extract_block_diagnostics(msg TEXT CHARACTER SET utf8mb4) +RETURNS TEXT CHARACTER SET utf8mb4 +BEGIN +RETURN CONCAT(regexp_substr(msg, '(BlocksTouched-[^;]*);'), ' ', +regexp_substr(msg, '(PartitionBlocksEliminated-[^;]*);')); +END; +$$ +# +# MCOL-4871 Extent elimination for short CHAR does not work well +# +SET NAMES utf8; +CREATE PROCEDURE test(collation VARCHAR(64)) +BEGIN +DECLARE stmt TEXT; +DECLARE CONTINUE HANDLER FOR 9999 +BEGIN +GET DIAGNOSTICS CONDITION 1 @errmsg = MESSAGE_TEXT; +SET @errmsg=caltrace_extract_block_diagnostics(@errmsg); +RESIGNAL SET MESSAGE_TEXT=@errmsg; +END; +DO calsettrace(1); +SET stmt='CREATE TABLE t1 (c1 CHAR(1) CHARACTER SET latin1 COLLATE latin1_swedish_ci)'; +SET stmt=REPLACE(stmt,'latin1_swedish_ci', collation); +SELECT stmt AS ``; +EXECUTE IMMEDIATE stmt; +INSERT INTO t1 VALUES (0xE9); +SELECT c1, HEX(c1) FROM t1; +CALL show_extent_min_max(database(),'t1','c1'); +SELECT * FROM t1 WHERE c1=x'E9'; +SHOW WARNINGS; +SELECT * FROM t1 WHERE c1='o'; +SHOW WARNINGS; +DROP TABLE t1; +SET stmt='CREATE TABLE t1 (c1 CHAR(2) CHARACTER SET latin1 COLLATE latin1_swedish_ci)'; +SET stmt=REPLACE(stmt,'latin1_swedish_ci', collation); +SELECT stmt AS ``; +EXECUTE IMMEDIATE stmt; +INSERT INTO t1 VALUES ('ÿ€' /*_latin1 x'FF80'*/); +SELECT c1, HEX(c1) FROM t1; +CALL show_extent_min_max(database(),'t1','c1'); +SELECT * FROM t1 WHERE c1='ÿ€'; +SHOW WARNINGS; +SELECT * FROM t1 WHERE c1=x'FF7F' /* 'ÿ' */; +SHOW WARNINGS; +DROP TABLE t1; +SET stmt='CREATE TABLE t1 (c1 CHAR(4) CHARACTER SET latin1 COLLATE latin1_swedish_ci)'; +SET stmt=REPLACE(stmt,'latin1_swedish_ci', collation); +SELECT stmt AS ``; +EXECUTE IMMEDIATE stmt; +INSERT INTO t1 VALUES ('ÿÿÿ€' /*_latin1 x'FFFFFF80'*/); +SELECT c1, HEX(c1) FROM t1; +CALL show_extent_min_max(database(),'t1','c1'); +SELECT * FROM t1 WHERE c1='ÿÿÿ€'; +SHOW WARNINGS; +SELECT * FROM t1 WHERE c1=x'FFFFFF7F' /* 'ÿÿÿ' */; +SHOW WARNINGS; +DROP TABLE t1; +SET stmt='CREATE TABLE t1 (c1 CHAR(8) CHARACTER SET latin1 COLLATE latin1_swedish_ci)'; +SET stmt=REPLACE(stmt,'latin1_swedish_ci', collation); +SELECT stmt AS ``; +EXECUTE IMMEDIATE stmt; +INSERT INTO t1 VALUES ('ÿÿÿÿÿÿÿ€' /*_latin1 x'FFFFFFFFFFFFFF80'*/); +SELECT c1, HEX(c1) FROM t1; +CALL show_extent_min_max(database(),'t1','c1'); +SELECT * FROM t1 WHERE c1='ÿÿÿÿÿÿÿ€'; +SHOW WARNINGS; +SELECT * FROM t1 WHERE c1=x'FFFFFFFFFFFFFF7F' /* 'ÿÿÿÿÿÿÿ' */; +SHOW WARNINGS; +DROP TABLE t1; +DO calsettrace(0); +END; +$$ +CALL test('latin1_swedish_ci'); + +CREATE TABLE t1 (c1 CHAR(1) CHARACTER SET latin1 COLLATE latin1_swedish_ci) +c1 HEX(c1) +é E9 +table_schema table_name column_name hex(CAST(e.min_value AS SIGNED)) hex(CAST(e.max_value AS SIGNED)) +mcs_ctype_extent_latin1 t1 c1 FFFFFFFFFFFFFFE9 FFFFFFFFFFFFFFE9 +c1 +é +Level Code Message +Note 9999 BlocksTouched-1; PartitionBlocksEliminated-0; +c1 +Level Code Message +Note 9999 BlocksTouched-0; PartitionBlocksEliminated-1; + +CREATE TABLE t1 (c1 CHAR(2) CHARACTER SET latin1 COLLATE latin1_swedish_ci) +c1 HEX(c1) +ÿ€ FF80 +table_schema table_name column_name hex(CAST(e.min_value AS SIGNED)) hex(CAST(e.max_value AS SIGNED)) +mcs_ctype_extent_latin1 t1 c1 FFFFFFFFFFFF80FF FFFFFFFFFFFF80FF +c1 +ÿ€ +Level Code Message +Note 9999 BlocksTouched-1; PartitionBlocksEliminated-0; +c1 +Level Code Message +Note 9999 BlocksTouched-0; PartitionBlocksEliminated-1; + +CREATE TABLE t1 (c1 CHAR(4) CHARACTER SET latin1 COLLATE latin1_swedish_ci) +c1 HEX(c1) +ÿÿÿ€ FFFFFF80 +table_schema table_name column_name hex(CAST(e.min_value AS SIGNED)) hex(CAST(e.max_value AS SIGNED)) +mcs_ctype_extent_latin1 t1 c1 FFFFFFFF80FFFFFF FFFFFFFF80FFFFFF +c1 +ÿÿÿ€ +Level Code Message +Note 9999 BlocksTouched-1; PartitionBlocksEliminated-0; +c1 +Level Code Message +Note 9999 BlocksTouched-0; PartitionBlocksEliminated-1; + +CREATE TABLE t1 (c1 CHAR(8) CHARACTER SET latin1 COLLATE latin1_swedish_ci) +c1 HEX(c1) +ÿÿÿÿÿÿÿ€ FFFFFFFFFFFFFF80 +table_schema table_name column_name hex(CAST(e.min_value AS SIGNED)) hex(CAST(e.max_value AS SIGNED)) +mcs_ctype_extent_latin1 t1 c1 80FFFFFFFFFFFFFF 80FFFFFFFFFFFFFF +c1 +ÿÿÿÿÿÿÿ€ +Level Code Message +Note 9999 BlocksTouched-1; PartitionBlocksEliminated-0; +c1 +Level Code Message +Note 9999 BlocksTouched-0; PartitionBlocksEliminated-1; +CALL test('latin1_swedish_nopad_ci'); + +CREATE TABLE t1 (c1 CHAR(1) CHARACTER SET latin1 COLLATE latin1_swedish_nopad_ci) +c1 HEX(c1) +é E9 +table_schema table_name column_name hex(CAST(e.min_value AS SIGNED)) hex(CAST(e.max_value AS SIGNED)) +mcs_ctype_extent_latin1 t1 c1 FFFFFFFFFFFFFFE9 FFFFFFFFFFFFFFE9 +c1 +é +Level Code Message +Note 9999 BlocksTouched-1; PartitionBlocksEliminated-0; +c1 +Level Code Message +Note 9999 BlocksTouched-0; PartitionBlocksEliminated-1; + +CREATE TABLE t1 (c1 CHAR(2) CHARACTER SET latin1 COLLATE latin1_swedish_nopad_ci) +c1 HEX(c1) +ÿ€ FF80 +table_schema table_name column_name hex(CAST(e.min_value AS SIGNED)) hex(CAST(e.max_value AS SIGNED)) +mcs_ctype_extent_latin1 t1 c1 FFFFFFFFFFFF80FF FFFFFFFFFFFF80FF +c1 +ÿ€ +Level Code Message +Note 9999 BlocksTouched-1; PartitionBlocksEliminated-0; +c1 +Level Code Message +Note 9999 BlocksTouched-0; PartitionBlocksEliminated-1; + +CREATE TABLE t1 (c1 CHAR(4) CHARACTER SET latin1 COLLATE latin1_swedish_nopad_ci) +c1 HEX(c1) +ÿÿÿ€ FFFFFF80 +table_schema table_name column_name hex(CAST(e.min_value AS SIGNED)) hex(CAST(e.max_value AS SIGNED)) +mcs_ctype_extent_latin1 t1 c1 FFFFFFFF80FFFFFF FFFFFFFF80FFFFFF +c1 +ÿÿÿ€ +Level Code Message +Note 9999 BlocksTouched-1; PartitionBlocksEliminated-0; +c1 +Level Code Message +Note 9999 BlocksTouched-0; PartitionBlocksEliminated-1; + +CREATE TABLE t1 (c1 CHAR(8) CHARACTER SET latin1 COLLATE latin1_swedish_nopad_ci) +c1 HEX(c1) +ÿÿÿÿÿÿÿ€ FFFFFFFFFFFFFF80 +table_schema table_name column_name hex(CAST(e.min_value AS SIGNED)) hex(CAST(e.max_value AS SIGNED)) +mcs_ctype_extent_latin1 t1 c1 80FFFFFFFFFFFFFF 80FFFFFFFFFFFFFF +c1 +ÿÿÿÿÿÿÿ€ +Level Code Message +Note 9999 BlocksTouched-1; PartitionBlocksEliminated-0; +c1 +Level Code Message +Note 9999 BlocksTouched-0; PartitionBlocksEliminated-1; +CALL test('latin1_bin'); + +CREATE TABLE t1 (c1 CHAR(1) CHARACTER SET latin1 COLLATE latin1_bin) +c1 HEX(c1) +é E9 +table_schema table_name column_name hex(CAST(e.min_value AS SIGNED)) hex(CAST(e.max_value AS SIGNED)) +mcs_ctype_extent_latin1 t1 c1 FFFFFFFFFFFFFFE9 FFFFFFFFFFFFFFE9 +c1 +é +Level Code Message +Note 9999 BlocksTouched-1; PartitionBlocksEliminated-0; +c1 +Level Code Message +Note 9999 BlocksTouched-0; PartitionBlocksEliminated-1; + +CREATE TABLE t1 (c1 CHAR(2) CHARACTER SET latin1 COLLATE latin1_bin) +c1 HEX(c1) +ÿ€ FF80 +table_schema table_name column_name hex(CAST(e.min_value AS SIGNED)) hex(CAST(e.max_value AS SIGNED)) +mcs_ctype_extent_latin1 t1 c1 FFFFFFFFFFFF80FF FFFFFFFFFFFF80FF +c1 +ÿ€ +Level Code Message +Note 9999 BlocksTouched-1; PartitionBlocksEliminated-0; +c1 +Level Code Message +Note 9999 BlocksTouched-0; PartitionBlocksEliminated-1; + +CREATE TABLE t1 (c1 CHAR(4) CHARACTER SET latin1 COLLATE latin1_bin) +c1 HEX(c1) +ÿÿÿ€ FFFFFF80 +table_schema table_name column_name hex(CAST(e.min_value AS SIGNED)) hex(CAST(e.max_value AS SIGNED)) +mcs_ctype_extent_latin1 t1 c1 FFFFFFFF80FFFFFF FFFFFFFF80FFFFFF +c1 +ÿÿÿ€ +Level Code Message +Note 9999 BlocksTouched-1; PartitionBlocksEliminated-0; +c1 +Level Code Message +Note 9999 BlocksTouched-0; PartitionBlocksEliminated-1; + +CREATE TABLE t1 (c1 CHAR(8) CHARACTER SET latin1 COLLATE latin1_bin) +c1 HEX(c1) +ÿÿÿÿÿÿÿ€ FFFFFFFFFFFFFF80 +table_schema table_name column_name hex(CAST(e.min_value AS SIGNED)) hex(CAST(e.max_value AS SIGNED)) +mcs_ctype_extent_latin1 t1 c1 80FFFFFFFFFFFFFF 80FFFFFFFFFFFFFF +c1 +ÿÿÿÿÿÿÿ€ +Level Code Message +Note 9999 BlocksTouched-1; PartitionBlocksEliminated-0; +c1 +Level Code Message +Note 9999 BlocksTouched-0; PartitionBlocksEliminated-1; +CALL test('latin1_nopad_bin'); + +CREATE TABLE t1 (c1 CHAR(1) CHARACTER SET latin1 COLLATE latin1_nopad_bin) +c1 HEX(c1) +é E9 +table_schema table_name column_name hex(CAST(e.min_value AS SIGNED)) hex(CAST(e.max_value AS SIGNED)) +mcs_ctype_extent_latin1 t1 c1 FFFFFFFFFFFFFFE9 FFFFFFFFFFFFFFE9 +c1 +é +Level Code Message +Note 9999 BlocksTouched-1; PartitionBlocksEliminated-0; +c1 +Level Code Message +Note 9999 BlocksTouched-0; PartitionBlocksEliminated-1; + +CREATE TABLE t1 (c1 CHAR(2) CHARACTER SET latin1 COLLATE latin1_nopad_bin) +c1 HEX(c1) +ÿ€ FF80 +table_schema table_name column_name hex(CAST(e.min_value AS SIGNED)) hex(CAST(e.max_value AS SIGNED)) +mcs_ctype_extent_latin1 t1 c1 FFFFFFFFFFFF80FF FFFFFFFFFFFF80FF +c1 +ÿ€ +Level Code Message +Note 9999 BlocksTouched-1; PartitionBlocksEliminated-0; +c1 +Level Code Message +Note 9999 BlocksTouched-0; PartitionBlocksEliminated-1; + +CREATE TABLE t1 (c1 CHAR(4) CHARACTER SET latin1 COLLATE latin1_nopad_bin) +c1 HEX(c1) +ÿÿÿ€ FFFFFF80 +table_schema table_name column_name hex(CAST(e.min_value AS SIGNED)) hex(CAST(e.max_value AS SIGNED)) +mcs_ctype_extent_latin1 t1 c1 FFFFFFFF80FFFFFF FFFFFFFF80FFFFFF +c1 +ÿÿÿ€ +Level Code Message +Note 9999 BlocksTouched-1; PartitionBlocksEliminated-0; +c1 +Level Code Message +Note 9999 BlocksTouched-0; PartitionBlocksEliminated-1; + +CREATE TABLE t1 (c1 CHAR(8) CHARACTER SET latin1 COLLATE latin1_nopad_bin) +c1 HEX(c1) +ÿÿÿÿÿÿÿ€ FFFFFFFFFFFFFF80 +table_schema table_name column_name hex(CAST(e.min_value AS SIGNED)) hex(CAST(e.max_value AS SIGNED)) +mcs_ctype_extent_latin1 t1 c1 80FFFFFFFFFFFFFF 80FFFFFFFFFFFFFF +c1 +ÿÿÿÿÿÿÿ€ +Level Code Message +Note 9999 BlocksTouched-1; PartitionBlocksEliminated-0; +c1 +Level Code Message +Note 9999 BlocksTouched-0; PartitionBlocksEliminated-1; +DROP PROCEDURE test; +DROP PROCEDURE show_extent_min_max; +DROP FUNCTION caltrace_extract_block_diagnostics; +DROP DATABASE mcs_ctype_extent_latin1; +USE test; diff --git a/mysql-test/columnstore/basic/r/ctype_extent_utf8mb3.result b/mysql-test/columnstore/basic/r/ctype_extent_utf8mb3.result new file mode 100644 index 000000000..70d32ffaa --- /dev/null +++ b/mysql-test/columnstore/basic/r/ctype_extent_utf8mb3.result @@ -0,0 +1,238 @@ +DROP DATABASE IF EXISTS mcs_ctype_extent_utf8mb3; +CREATE DATABASE mcs_ctype_extent_utf8mb3; +USE mcs_ctype_extent_utf8mb3; +SET default_storage_engine=ColumnStore; +CREATE PROCEDURE show_extent_min_max(schema_arg VARCHAR(64), +table_arg VARCHAR(64), +column_arg VARCHAR(64)) +BEGIN +SELECT +c.table_schema, +c.table_name, +c.column_name, +hex(CAST(e.min_value AS SIGNED)), +hex(CAST(e.max_value AS SIGNED)) +FROM +information_schema.columnstore_extents e, +information_schema.columnstore_columns c +WHERE c.object_id=e.object_id +AND table_schema=schema_arg +AND table_name=table_arg +AND column_name=column_arg; +END; +$$ +CREATE FUNCTION caltrace_extract_block_diagnostics(msg TEXT CHARACTER SET utf8mb4) +RETURNS TEXT CHARACTER SET utf8mb4 +BEGIN +RETURN CONCAT(regexp_substr(msg, '(BlocksTouched-[^;]*);'), ' ', +regexp_substr(msg, '(PartitionBlocksEliminated-[^;]*);')); +END; +$$ +# +# MCOL-4871 Extent elimination for short CHAR does not work well +# +SET NAMES utf8; +CREATE PROCEDURE test(collation VARCHAR(64)) +BEGIN +DECLARE stmt TEXT; +DECLARE CONTINUE HANDLER FOR 9999 +BEGIN +GET DIAGNOSTICS CONDITION 1 @errmsg = MESSAGE_TEXT; +SET @errmsg=caltrace_extract_block_diagnostics(@errmsg); +RESIGNAL SET MESSAGE_TEXT=@errmsg; +END; +DO calsettrace(1); +SET stmt='CREATE TABLE t1 (c1 CHAR(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci)'; +SET stmt=REPLACE(stmt,'utf8mb3_general_ci', collation); +SELECT stmt AS ``; +EXECUTE IMMEDIATE stmt; +INSERT INTO t1 VALUES ('a'); +SELECT c1, HEX(c1) FROM t1; +CALL show_extent_min_max(database(),'t1','c1'); +SELECT * FROM t1 WHERE c1='a'; +SHOW WARNINGS; +SELECT * FROM t1 WHERE c1='b'; +SHOW WARNINGS; +DROP TABLE t1; +SET stmt='CREATE TABLE t1 (c1 CHAR(2) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci)'; +SET stmt=REPLACE(stmt,'utf8mb3_general_ci', collation); +SELECT stmt AS ``; +EXECUTE IMMEDIATE stmt; +INSERT INTO t1 VALUES ('aa'); +SELECT c1, HEX(c1) FROM t1; +CALL show_extent_min_max(database(),'t1','c1'); +SELECT * FROM t1 WHERE c1='aa'; +SHOW WARNINGS; +SELECT * FROM t1 WHERE c1='bb'; +SHOW WARNINGS; +DROP TABLE t1; +DO calsettrace(0); +END; +$$ +CALL test('utf8mb3_unicode_ci'); + +CREATE TABLE t1 (c1 CHAR(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci) +c1 HEX(c1) +a 61 +table_schema table_name column_name hex(CAST(e.min_value AS SIGNED)) hex(CAST(e.max_value AS SIGNED)) +mcs_ctype_extent_utf8mb3 t1 c1 61 61 +c1 +a +Level Code Message +Note 9999 BlocksTouched-1; PartitionBlocksEliminated-0; +c1 +Level Code Message +Note 9999 BlocksTouched-0; PartitionBlocksEliminated-1; + +CREATE TABLE t1 (c1 CHAR(2) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci) +c1 HEX(c1) +aa 6161 +table_schema table_name column_name hex(CAST(e.min_value AS SIGNED)) hex(CAST(e.max_value AS SIGNED)) +mcs_ctype_extent_utf8mb3 t1 c1 6161 6161 +c1 +aa +Level Code Message +Note 9999 BlocksTouched-1; PartitionBlocksEliminated-0; +c1 +Level Code Message +Note 9999 BlocksTouched-0; PartitionBlocksEliminated-1; +CALL test('utf8mb3_unicode_nopad_ci'); + +CREATE TABLE t1 (c1 CHAR(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_nopad_ci) +c1 HEX(c1) +a 61 +table_schema table_name column_name hex(CAST(e.min_value AS SIGNED)) hex(CAST(e.max_value AS SIGNED)) +mcs_ctype_extent_utf8mb3 t1 c1 61 61 +c1 +a +Level Code Message +Note 9999 BlocksTouched-1; PartitionBlocksEliminated-0; +c1 +Level Code Message +Note 9999 BlocksTouched-0; PartitionBlocksEliminated-1; + +CREATE TABLE t1 (c1 CHAR(2) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_nopad_ci) +c1 HEX(c1) +aa 6161 +table_schema table_name column_name hex(CAST(e.min_value AS SIGNED)) hex(CAST(e.max_value AS SIGNED)) +mcs_ctype_extent_utf8mb3 t1 c1 6161 6161 +c1 +aa +Level Code Message +Note 9999 BlocksTouched-1; PartitionBlocksEliminated-0; +c1 +Level Code Message +Note 9999 BlocksTouched-0; PartitionBlocksEliminated-1; +CALL test('utf8mb3_general_ci'); + +CREATE TABLE t1 (c1 CHAR(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci) +c1 HEX(c1) +a 61 +table_schema table_name column_name hex(CAST(e.min_value AS SIGNED)) hex(CAST(e.max_value AS SIGNED)) +mcs_ctype_extent_utf8mb3 t1 c1 61 61 +c1 +a +Level Code Message +Note 9999 BlocksTouched-1; PartitionBlocksEliminated-0; +c1 +Level Code Message +Note 9999 BlocksTouched-0; PartitionBlocksEliminated-1; + +CREATE TABLE t1 (c1 CHAR(2) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci) +c1 HEX(c1) +aa 6161 +table_schema table_name column_name hex(CAST(e.min_value AS SIGNED)) hex(CAST(e.max_value AS SIGNED)) +mcs_ctype_extent_utf8mb3 t1 c1 6161 6161 +c1 +aa +Level Code Message +Note 9999 BlocksTouched-1; PartitionBlocksEliminated-0; +c1 +Level Code Message +Note 9999 BlocksTouched-0; PartitionBlocksEliminated-1; +CALL test('utf8mb3_general_nopad_ci'); + +CREATE TABLE t1 (c1 CHAR(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_nopad_ci) +c1 HEX(c1) +a 61 +table_schema table_name column_name hex(CAST(e.min_value AS SIGNED)) hex(CAST(e.max_value AS SIGNED)) +mcs_ctype_extent_utf8mb3 t1 c1 61 61 +c1 +a +Level Code Message +Note 9999 BlocksTouched-1; PartitionBlocksEliminated-0; +c1 +Level Code Message +Note 9999 BlocksTouched-0; PartitionBlocksEliminated-1; + +CREATE TABLE t1 (c1 CHAR(2) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_nopad_ci) +c1 HEX(c1) +aa 6161 +table_schema table_name column_name hex(CAST(e.min_value AS SIGNED)) hex(CAST(e.max_value AS SIGNED)) +mcs_ctype_extent_utf8mb3 t1 c1 6161 6161 +c1 +aa +Level Code Message +Note 9999 BlocksTouched-1; PartitionBlocksEliminated-0; +c1 +Level Code Message +Note 9999 BlocksTouched-0; PartitionBlocksEliminated-1; +CALL test('utf8mb3_bin'); + +CREATE TABLE t1 (c1 CHAR(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin) +c1 HEX(c1) +a 61 +table_schema table_name column_name hex(CAST(e.min_value AS SIGNED)) hex(CAST(e.max_value AS SIGNED)) +mcs_ctype_extent_utf8mb3 t1 c1 61 61 +c1 +a +Level Code Message +Note 9999 BlocksTouched-1; PartitionBlocksEliminated-0; +c1 +Level Code Message +Note 9999 BlocksTouched-0; PartitionBlocksEliminated-1; + +CREATE TABLE t1 (c1 CHAR(2) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin) +c1 HEX(c1) +aa 6161 +table_schema table_name column_name hex(CAST(e.min_value AS SIGNED)) hex(CAST(e.max_value AS SIGNED)) +mcs_ctype_extent_utf8mb3 t1 c1 6161 6161 +c1 +aa +Level Code Message +Note 9999 BlocksTouched-1; PartitionBlocksEliminated-0; +c1 +Level Code Message +Note 9999 BlocksTouched-0; PartitionBlocksEliminated-1; +CALL test('utf8mb3_nopad_bin'); + +CREATE TABLE t1 (c1 CHAR(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_nopad_bin) +c1 HEX(c1) +a 61 +table_schema table_name column_name hex(CAST(e.min_value AS SIGNED)) hex(CAST(e.max_value AS SIGNED)) +mcs_ctype_extent_utf8mb3 t1 c1 61 61 +c1 +a +Level Code Message +Note 9999 BlocksTouched-1; PartitionBlocksEliminated-0; +c1 +Level Code Message +Note 9999 BlocksTouched-0; PartitionBlocksEliminated-1; + +CREATE TABLE t1 (c1 CHAR(2) CHARACTER SET utf8mb3 COLLATE utf8mb3_nopad_bin) +c1 HEX(c1) +aa 6161 +table_schema table_name column_name hex(CAST(e.min_value AS SIGNED)) hex(CAST(e.max_value AS SIGNED)) +mcs_ctype_extent_utf8mb3 t1 c1 6161 6161 +c1 +aa +Level Code Message +Note 9999 BlocksTouched-1; PartitionBlocksEliminated-0; +c1 +Level Code Message +Note 9999 BlocksTouched-0; PartitionBlocksEliminated-1; +DROP PROCEDURE test; +DROP PROCEDURE show_extent_min_max; +DROP FUNCTION caltrace_extract_block_diagnostics; +DROP DATABASE mcs_ctype_extent_utf8mb3; +USE test; diff --git a/mysql-test/columnstore/basic/t/ctype_extent_koi8u.test b/mysql-test/columnstore/basic/t/ctype_extent_koi8u.test new file mode 100644 index 000000000..9e2e61989 --- /dev/null +++ b/mysql-test/columnstore/basic/t/ctype_extent_koi8u.test @@ -0,0 +1,86 @@ +--source ../include/have_columnstore.inc +--source ../include/func_caltrace_create_if_needed.inc +--disable_warnings +DROP DATABASE IF EXISTS mcs_ctype_extent_koi8u; +--enable_warnings +CREATE DATABASE mcs_ctype_extent_koi8u; +USE mcs_ctype_extent_koi8u; +SET default_storage_engine=ColumnStore; +--source ../include/ctype_extent_proc_create.inc + +--echo # +--echo # MCOL-4871 Extent elimination for short CHAR does not work well +--echo # + +SET NAMES utf8; + +DELIMITER $$; +CREATE PROCEDURE test(collation VARCHAR(64)) +BEGIN + DECLARE stmt TEXT; + DECLARE CONTINUE HANDLER FOR 9999 + BEGIN + GET DIAGNOSTICS CONDITION 1 @errmsg = MESSAGE_TEXT; + SET @errmsg=caltrace_extract_block_diagnostics(@errmsg); + RESIGNAL SET MESSAGE_TEXT=@errmsg; + END; + + DO calsettrace(1); + + SET stmt='CREATE TABLE t1 (c1 CHAR(2) CHARACTER SET koi8u COLLATE koi8u_general_ci)'; + SET stmt=REPLACE(stmt,'koi8u_general_ci', collation); + SELECT stmt AS ``; + EXECUTE IMMEDIATE stmt; + INSERT INTO t1 VALUES ('Ъ─') /*_koi8u x'FF80'*/; + SELECT c1, HEX(c1) FROM t1; + CALL show_extent_min_max(database(),'t1','c1'); + SELECT * FROM t1 WHERE c1='Ъ─'; + SHOW WARNINGS; + SELECT * FROM t1 WHERE c1='Ъя' /*_koi8u x'FFF1'*/; + SHOW WARNINGS; + DROP TABLE t1; + + SET stmt='CREATE TABLE t1 (c1 CHAR(4) CHARACTER SET koi8u COLLATE koi8u_general_ci)'; + SET stmt=REPLACE(stmt,'koi8u_general_ci', collation); + SELECT stmt AS ``; + EXECUTE IMMEDIATE stmt; + INSERT INTO t1 VALUES ('ЪЪЪ─') /*_koi8u x'FFFFFF80'*/; + SELECT c1, HEX(c1) FROM t1; + CALL show_extent_min_max(database(),'t1','c1'); + SELECT * FROM t1 WHERE c1='ЪЪЪ─'; + SHOW WARNINGS; + SELECT * FROM t1 WHERE c1='ЪЪЪя' /*_koi8u x'FFFFFFF1'*/; + SHOW WARNINGS; + DROP TABLE t1; + + SET stmt='CREATE TABLE t1 (c1 CHAR(8) CHARACTER SET koi8u COLLATE koi8u_general_ci)'; + SET stmt=REPLACE(stmt,'koi8u_general_ci', collation); + SELECT stmt AS ``; + EXECUTE IMMEDIATE stmt; + INSERT INTO t1 VALUES ('ЪЪЪЪЪЪЪ─') /*_koi8u x'FFFFFFFFFFFFFF80'*/; + SELECT c1, HEX(c1) FROM t1; + CALL show_extent_min_max(database(),'t1','c1'); + SELECT * FROM t1 WHERE c1='ЪЪЪЪЪЪЪ─'; + SHOW WARNINGS; + SELECT * FROM t1 WHERE c1='ЪЪЪЪЪЪЪя' /*_koi8u x'FFFFFFFFFFFFFFF1'*/; + SHOW WARNINGS; + DROP TABLE t1; + + DO calsettrace(0); + +END; +$$ +DELIMITER ;$$ + +CALL test('koi8u_general_ci'); +CALL test('koi8u_general_nopad_ci'); +CALL test('koi8u_bin'); +CALL test('koi8u_nopad_bin'); + +DROP PROCEDURE test; + + +--source ../include/ctype_extent_proc_drop.inc +--source ../include/func_caltrace_drop_if_needed.inc +DROP DATABASE mcs_ctype_extent_koi8u; +USE test; diff --git a/mysql-test/columnstore/basic/t/ctype_extent_latin1.test b/mysql-test/columnstore/basic/t/ctype_extent_latin1.test new file mode 100644 index 000000000..eda30160a --- /dev/null +++ b/mysql-test/columnstore/basic/t/ctype_extent_latin1.test @@ -0,0 +1,99 @@ +--source ../include/have_columnstore.inc +--source ../include/func_caltrace_create_if_needed.inc +--disable_warnings +DROP DATABASE IF EXISTS mcs_ctype_extent_latin1; +--enable_warnings +CREATE DATABASE mcs_ctype_extent_latin1; +USE mcs_ctype_extent_latin1; +SET default_storage_engine=ColumnStore; +--source ../include/ctype_extent_proc_create.inc + +--echo # +--echo # MCOL-4871 Extent elimination for short CHAR does not work well +--echo # + +SET NAMES utf8; + +DELIMITER $$; +CREATE PROCEDURE test(collation VARCHAR(64)) +BEGIN + DECLARE stmt TEXT; + DECLARE CONTINUE HANDLER FOR 9999 + BEGIN + GET DIAGNOSTICS CONDITION 1 @errmsg = MESSAGE_TEXT; + SET @errmsg=caltrace_extract_block_diagnostics(@errmsg); + RESIGNAL SET MESSAGE_TEXT=@errmsg; + END; + + DO calsettrace(1); + + SET stmt='CREATE TABLE t1 (c1 CHAR(1) CHARACTER SET latin1 COLLATE latin1_swedish_ci)'; + SET stmt=REPLACE(stmt,'latin1_swedish_ci', collation); + SELECT stmt AS ``; + EXECUTE IMMEDIATE stmt; + INSERT INTO t1 VALUES (0xE9); + SELECT c1, HEX(c1) FROM t1; + CALL show_extent_min_max(database(),'t1','c1'); + SELECT * FROM t1 WHERE c1=x'E9'; + SHOW WARNINGS; + SELECT * FROM t1 WHERE c1='o'; + SHOW WARNINGS; + DROP TABLE t1; + + SET stmt='CREATE TABLE t1 (c1 CHAR(2) CHARACTER SET latin1 COLLATE latin1_swedish_ci)'; + SET stmt=REPLACE(stmt,'latin1_swedish_ci', collation); + SELECT stmt AS ``; + EXECUTE IMMEDIATE stmt; + INSERT INTO t1 VALUES ('ÿ€' /*_latin1 x'FF80'*/); + SELECT c1, HEX(c1) FROM t1; + CALL show_extent_min_max(database(),'t1','c1'); + SELECT * FROM t1 WHERE c1='ÿ€'; + SHOW WARNINGS; + SELECT * FROM t1 WHERE c1=x'FF7F' /* 'ÿ' */; + SHOW WARNINGS; + DROP TABLE t1; + + SET stmt='CREATE TABLE t1 (c1 CHAR(4) CHARACTER SET latin1 COLLATE latin1_swedish_ci)'; + SET stmt=REPLACE(stmt,'latin1_swedish_ci', collation); + SELECT stmt AS ``; + EXECUTE IMMEDIATE stmt; + INSERT INTO t1 VALUES ('ÿÿÿ€' /*_latin1 x'FFFFFF80'*/); + SELECT c1, HEX(c1) FROM t1; + CALL show_extent_min_max(database(),'t1','c1'); + SELECT * FROM t1 WHERE c1='ÿÿÿ€'; + SHOW WARNINGS; + SELECT * FROM t1 WHERE c1=x'FFFFFF7F' /* 'ÿÿÿ' */; + SHOW WARNINGS; + DROP TABLE t1; + + SET stmt='CREATE TABLE t1 (c1 CHAR(8) CHARACTER SET latin1 COLLATE latin1_swedish_ci)'; + SET stmt=REPLACE(stmt,'latin1_swedish_ci', collation); + SELECT stmt AS ``; + EXECUTE IMMEDIATE stmt; + INSERT INTO t1 VALUES ('ÿÿÿÿÿÿÿ€' /*_latin1 x'FFFFFFFFFFFFFF80'*/); + SELECT c1, HEX(c1) FROM t1; + CALL show_extent_min_max(database(),'t1','c1'); + SELECT * FROM t1 WHERE c1='ÿÿÿÿÿÿÿ€'; + SHOW WARNINGS; + SELECT * FROM t1 WHERE c1=x'FFFFFFFFFFFFFF7F' /* 'ÿÿÿÿÿÿÿ' */; + SHOW WARNINGS; + DROP TABLE t1; + + DO calsettrace(0); + +END; +$$ +DELIMITER ;$$ + +CALL test('latin1_swedish_ci'); +CALL test('latin1_swedish_nopad_ci'); +CALL test('latin1_bin'); +CALL test('latin1_nopad_bin'); + +DROP PROCEDURE test; + + +--source ../include/ctype_extent_proc_drop.inc +--source ../include/func_caltrace_drop_if_needed.inc +DROP DATABASE mcs_ctype_extent_latin1; +USE test; diff --git a/mysql-test/columnstore/basic/t/ctype_extent_utf8mb3.test b/mysql-test/columnstore/basic/t/ctype_extent_utf8mb3.test new file mode 100644 index 000000000..529cb950c --- /dev/null +++ b/mysql-test/columnstore/basic/t/ctype_extent_utf8mb3.test @@ -0,0 +1,74 @@ +--source ../include/have_columnstore.inc +--source ../include/func_caltrace_create_if_needed.inc +--disable_warnings +DROP DATABASE IF EXISTS mcs_ctype_extent_utf8mb3; +--enable_warnings +CREATE DATABASE mcs_ctype_extent_utf8mb3; +USE mcs_ctype_extent_utf8mb3; +SET default_storage_engine=ColumnStore; +--source ../include/ctype_extent_proc_create.inc + +--echo # +--echo # MCOL-4871 Extent elimination for short CHAR does not work well +--echo # + +SET NAMES utf8; + +DELIMITER $$; +CREATE PROCEDURE test(collation VARCHAR(64)) +BEGIN + DECLARE stmt TEXT; + DECLARE CONTINUE HANDLER FOR 9999 + BEGIN + GET DIAGNOSTICS CONDITION 1 @errmsg = MESSAGE_TEXT; + SET @errmsg=caltrace_extract_block_diagnostics(@errmsg); + RESIGNAL SET MESSAGE_TEXT=@errmsg; + END; + + DO calsettrace(1); + + SET stmt='CREATE TABLE t1 (c1 CHAR(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci)'; + SET stmt=REPLACE(stmt,'utf8mb3_general_ci', collation); + SELECT stmt AS ``; + EXECUTE IMMEDIATE stmt; + INSERT INTO t1 VALUES ('a'); + SELECT c1, HEX(c1) FROM t1; + CALL show_extent_min_max(database(),'t1','c1'); + SELECT * FROM t1 WHERE c1='a'; + SHOW WARNINGS; + SELECT * FROM t1 WHERE c1='b'; + SHOW WARNINGS; + DROP TABLE t1; + + SET stmt='CREATE TABLE t1 (c1 CHAR(2) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci)'; + SET stmt=REPLACE(stmt,'utf8mb3_general_ci', collation); + SELECT stmt AS ``; + EXECUTE IMMEDIATE stmt; + INSERT INTO t1 VALUES ('aa'); + SELECT c1, HEX(c1) FROM t1; + CALL show_extent_min_max(database(),'t1','c1'); + SELECT * FROM t1 WHERE c1='aa'; + SHOW WARNINGS; + SELECT * FROM t1 WHERE c1='bb'; + SHOW WARNINGS; + DROP TABLE t1; + + DO calsettrace(0); + +END; +$$ +DELIMITER ;$$ + +CALL test('utf8mb3_unicode_ci'); +CALL test('utf8mb3_unicode_nopad_ci'); +CALL test('utf8mb3_general_ci'); +CALL test('utf8mb3_general_nopad_ci'); +CALL test('utf8mb3_bin'); +CALL test('utf8mb3_nopad_bin'); + +DROP PROCEDURE test; + +--source ../include/ctype_extent_proc_drop.inc +--source ../include/func_caltrace_drop_if_needed.inc +DROP DATABASE mcs_ctype_extent_utf8mb3; +USE test; diff --git a/mysql-test/columnstore/include/ctype_extent_proc_create.inc b/mysql-test/columnstore/include/ctype_extent_proc_create.inc new file mode 100644 index 000000000..ee106243c --- /dev/null +++ b/mysql-test/columnstore/include/ctype_extent_proc_create.inc @@ -0,0 +1,32 @@ + +DELIMITER $$; +CREATE PROCEDURE show_extent_min_max(schema_arg VARCHAR(64), + table_arg VARCHAR(64), + column_arg VARCHAR(64)) +BEGIN + SELECT + c.table_schema, + c.table_name, + c.column_name, + hex(CAST(e.min_value AS SIGNED)), + hex(CAST(e.max_value AS SIGNED)) + FROM + information_schema.columnstore_extents e, + information_schema.columnstore_columns c + WHERE c.object_id=e.object_id + AND table_schema=schema_arg + AND table_name=table_arg + AND column_name=column_arg; +END; +$$ +DELIMITER ;$$ + +DELIMITER $$; +CREATE FUNCTION caltrace_extract_block_diagnostics(msg TEXT CHARACTER SET utf8mb4) + RETURNS TEXT CHARACTER SET utf8mb4 +BEGIN + RETURN CONCAT(regexp_substr(msg, '(BlocksTouched-[^;]*);'), ' ', + regexp_substr(msg, '(PartitionBlocksEliminated-[^;]*);')); +END; +$$ +DELIMITER ;$$ diff --git a/mysql-test/columnstore/include/ctype_extent_proc_drop.inc b/mysql-test/columnstore/include/ctype_extent_proc_drop.inc new file mode 100644 index 000000000..669b5b401 --- /dev/null +++ b/mysql-test/columnstore/include/ctype_extent_proc_drop.inc @@ -0,0 +1,2 @@ +DROP PROCEDURE show_extent_min_max; +DROP FUNCTION caltrace_extract_block_diagnostics; diff --git a/mysql-test/columnstore/include/func_caltrace_create_if_needed.inc b/mysql-test/columnstore/include/func_caltrace_create_if_needed.inc new file mode 100644 index 000000000..2ce52d991 --- /dev/null +++ b/mysql-test/columnstore/include/func_caltrace_create_if_needed.inc @@ -0,0 +1,25 @@ +# +# Functions calgettrace() and calsettrace(): +# - normally exist when "mtr --extern" is running +# - do not exist when mtr without --extern is running +# +# This file creates the functions if they do not exist. +# + +let $func_exists_calsettrace=`SELECT COUNT(*) FROM mysql.func WHERE name='calsettrace'`; +--disable_query_log +if (!$func_exists_calsettrace) +{ + CREATE FUNCTION calsettrace RETURNS INTEGER SONAME "ha_columnstore.so"; +} +--enable_query_log + + +let $func_exists_calgettrace=`SELECT COUNT(*) FROM mysql.func WHERE name='calgettrace'`; +--disable_query_log +if (!$func_exists_calgettrace) +{ + CREATE FUNCTION calgettrace RETURNS STRING SONAME "ha_columnstore.so"; +} +--enable_query_log + diff --git a/mysql-test/columnstore/include/func_caltrace_drop_if_needed.inc b/mysql-test/columnstore/include/func_caltrace_drop_if_needed.inc new file mode 100644 index 000000000..b89eeebdd --- /dev/null +++ b/mysql-test/columnstore/include/func_caltrace_drop_if_needed.inc @@ -0,0 +1,13 @@ +--disable_query_log +if (!$func_exists_calgettrace) +{ + DROP FUNCTION calgettrace; +} +--enable_query_log + +--disable_query_log +if (!$func_exists_calsettrace) +{ + DROP FUNCTION calsettrace; +} +--enable_query_log