1
0
mirror of https://github.com/mariadb-corporation/mariadb-columnstore-engine.git synced 2025-07-30 19:23:07 +03:00

MCOL-4871 This patch adds relevant tests

This commit is contained in:
Roman Nozdrin
2021-12-17 12:51:42 +00:00
parent 7b5845a4aa
commit a31066ff0e
10 changed files with 1129 additions and 0 deletions

View File

@ -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;

View File

@ -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' /* 'ÿ<DEL>' */;
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' /* 'ÿÿÿ<DEL>' */;
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' /* 'ÿÿÿÿÿÿÿ<DEL>' */;
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;

View File

@ -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;

View File

@ -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;

View File

@ -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' /* 'ÿ<DEL>' */;
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' /* 'ÿÿÿ<DEL>' */;
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' /* 'ÿÿÿÿÿÿÿ<DEL>' */;
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;

View File

@ -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;

View File

@ -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 ;$$

View File

@ -0,0 +1,2 @@
DROP PROCEDURE show_extent_min_max;
DROP FUNCTION caltrace_extract_block_diagnostics;

View File

@ -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

View File

@ -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