polardbxengine/mysql-test/t/functional_index_debug.test

271 lines
8.4 KiB
Plaintext

--source include/have_debug.inc
--echo # Show all hidden columns, so that we can inspect that the column
--echo # is created with the correct character set/collation, length, data type
--echo # etc.
CREATE TABLE t1 (
str_col VARCHAR(255),
dbl_col DOUBLE,
decimal_col DECIMAL(5, 2),
date_col DATE,
time_col TIME,
time_with_fractions_col TIME(6),
datetime_col DATETIME,
datetime_with_fractions_col DATETIME(6),
json_col JSON,
dbl_with_length DOUBLE(4, 2),
unsigned_int INT UNSIGNED,
geometry_col POINT,
INDEX idx1 ((CONVERT(SUBSTRING(str_col, 2, 1) USING latin1))),
INDEX idx2 ((ABS(dbl_col))),
INDEX idx3 ((TRUNCATE(decimal_col, 0))),
INDEX idx4 ((YEAR(date_col))),
INDEX idx5 ((ADDTIME('01:00:00', time_col))),
INDEX idx6 ((ADDTIME('01:00:00', time_with_fractions_col))),
INDEX idx7 ((DATE_SUB(datetime_col, INTERVAL 30 DAY))),
INDEX idx8 ((DATE_SUB(datetime_with_fractions_col, INTERVAL 30 DAY))),
INDEX idx9 ((JSON_VALID(json_col))),
INDEX idx10 ((ROUND(dbl_col, 2))),
INDEX idx11 ((dbl_with_length * 2.0)),
INDEX idx12 ((ABS(unsigned_int))),
INDEX idx13 ((ST_X(geometry_col)))
);
SET SESSION debug="+d,show_hidden_columns";
SHOW CREATE TABLE t1;
SET SESSION debug="-d,show_hidden_columns";
DROP TABLE t1;
--echo # Check that the hidden generated column is renamed if the functional
--echo # index is renamed.
CREATE TABLE t1 (col1 INT, INDEX my_index((FLOOR(col1))));
SET SESSION debug="+d,show_hidden_columns";
SHOW CREATE TABLE t1;
ALTER TABLE t1 RENAME INDEX my_index TO foobar;
SHOW CREATE TABLE t1;
SET SESSION debug="-d,show_hidden_columns";
DROP TABLE t1;
--echo # Check that the hidden generated columns are removed if a functional
--echo # index is deleted.
SET SESSION debug="+d,show_hidden_columns";
CREATE TABLE t1 (
col1 INT
, col2 INT
, INDEX idx1 ((ABS(col1)))
, INDEX idx2 ((col1 + 1), (col2 + 2)));
SHOW CREATE TABLE t1;
ALTER TABLE t1 DROP INDEX idx2;
SHOW CREATE TABLE t1;
DROP TABLE t1;
SET SESSION debug="-d,show_hidden_columns";
# Ensure that multi-valued index isn''t covering and index scan isn''t used
SET SESSION debug="+d,show_hidden_columns";
CREATE TABLE t1(j json, INDEX mv_idx((CAST(j AS UNSIGNED ARRAY))));
SHOW CREATE TABLE t1;
SELECT 680963a1f6dcb151c3e713b46b4c3452 FROM t1 ;
EXPLAIN SELECT 680963a1f6dcb151c3e713b46b4c3452 FROM t1 ;
SET SESSION debug="-d,show_hidden_columns";
DROP TABLE t1;
--echo #
--echo # Bug#28037195 ASSERTION `FALSE' IN IN
--echo # ITEM_FIELD::REPLACE_FIELD_PROCESSOR AT SQL_TABLE.CC:5850
--echo #
CREATE TABLE t2 (c1 INT);
--error ER_BAD_FIELD_ERROR
CREATE INDEX name_collision ON t2((ABS(cq)));
DROP TABLE t2;
--echo #
--echo # Bug#28069679 WL#1075 ASSERTION `!M_EXPRESSION->FIXED' FAILED
--echo #
CREATE TABLE t1 (
col1 INT,
INDEX idx ((PI()))
);
DROP TABLE t1;
--echo #
--echo # Bug#28069710 WL#1075 ASSERTION
--echo # `R0 != STRING_RESULT && R1 != STRING_RESULT'
--echo #
CREATE TABLE t1 (
col1 VARCHAR(255),
INDEX idx1 ((col1 * col1))
);
DROP TABLE t1;
--echo #
--echo # Bug#28069731 WL#1075 ASSERTION `!TABLE || (!TABLE->WRITE_SET ||
--echo # BITMAP_IS_SET(TABLE->WRITE_SE
--echo #
CREATE TABLE table10_innodb_int_autoinc (
col_int_key int(11) DEFAULT NULL,
col_char_32_key char(32) DEFAULT NULL,
col_char_32_not_null_key char(32) NOT NULL,
pk int(11) NOT NULL AUTO_INCREMENT,
col_int_not_null_key int(11) NOT NULL,
PRIMARY KEY (pk),
KEY col_int_key (col_int_key),
KEY col_char_32_key (col_char_32_key),
KEY col_char_32_not_null_key (col_char_32_not_null_key),
KEY col_int_not_null_key (col_int_not_null_key),
KEY i1 (((col_int_key + col_int_key))),
KEY i2 (((col_int_key < 5))),
KEY i3 (((col_int_key < 9))),
KEY i5 (((col_int_not_null_key > 1)))
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_0900_ai_ci;
INSERT INTO table10_innodb_int_autoinc VALUES
(43,'if','that',1,99)
, (1,'we','she',2,1203568640)
, (7,'f','kxc',3,40)
, (-1846411264,'xce','mean',4,5)
, (9,'r','c',5,0)
, (5,'ek','the',6,138)
, (77,'l','i',7,-1414922240)
, (1,'k','q',8,1)
, (-1284505600,'sa','w',9,8)
, (NULL,'ate','t',10,4);
HANDLER table10_innodb_int_autoinc OPEN AS alias1 ;
HANDLER alias1 READ `PRIMARY` NEXT WHERE `col_int_not_null_key` <= 'j' LIMIT 8;
DROP TABLE table10_innodb_int_autoinc;
--echo # Test that removing and altering functional indexes works correctly
--echo # with different casing.
CREATE TABLE t1 (
col1 INT
, INDEX myKey ((ABS(col1))));
--echo # Get the expected name of the hidden generated column.
SELECT MD5(CONCAT("myKey", "0"));
SET SESSION debug="+d,show_hidden_columns";
--echo # Column names aren't case sensitive, so this DDL should find the column
--echo # and give an error saying that the column cannot be removed due to
--echo # functional index.
--error ER_CANNOT_DROP_COLUMN_FUNCTIONAL_INDEX
ALTER TABLE t1 DROP COLUMN 84A85350b439e4a8875061c9b8a13f70;
SHOW CREATE TABLE t1;
--echo # Index names aren't case sensitive, so this DDL should rename the index
--echo # and the hidden generated column as well.
ALTER TABLE t1 RENAME INDEX myKEY TO renaMEDkey;
SHOW CREATE TABLE t1;
--echo # Index names aren't case sensitive, so this DDL should remove the index
--echo # and the column.
ALTER TABLE t1 DROP INDEX renamedkey;
SHOW CREATE TABLE t1;
DROP TABLE t1;
SET SESSION debug="-d,show_hidden_columns";
--echo #
--echo # Bug#28216553 ASSERTION `FIELD_TYPE < (MYSQL_TYPE_BIT + 1) || FIELD_TYPE
--echo #
CREATE TABLE table1130 ( pk INTEGER AUTO_INCREMENT, a1 INTEGER NOT NULL, b1
INTEGER NULL, c1 BLOB NULL, d1 VARCHAR(2) NULL, PRIMARY KEY (pk), KEY
((COALESCE(a1))));
DROP TABLE table1130;
--error ER_FUNCTIONAL_INDEX_ON_FIELD
CREATE TABLE table29 (
pk INTEGER AUTO_INCREMENT
, a1 VARCHAR(5) NOT NULL
, PRIMARY KEY (pk)
, KEY ((a1)));
--echo #
--echo # Bug#28226443 VIRTUAL BOOL ITEM_FIELD::REPLACE_FIELD_PROCESSOR(UCHAR*):
--echo # ASSERTION `FALSE' FAIL
--echo #
CREATE TABLE t1(a INT, b INT, c INT, UNIQUE INDEX i((a+b)));
--error ER_KEY_COLUMN_DOES_NOT_EXITS
ALTER TABLE t1 ADD INDEX p(a9e26254e651465c89ff715d5733e97c);
--error ER_BAD_FIELD_ERROR
ALTER TABLE t1 ADD INDEX g((a + a9e26254e651465c89ff715d5733e97c));
DROP TABLE t1;
--echo #
--echo # Bug#28263237 ASSERTION `FALSE' IN ITEM_FIELD::REPLACE_FIELD_PROCESSOR
--echo # AT SQL_TABLE.CC:6303
--echo #
--error ER_FUNCTIONAL_INDEX_ON_FIELD
CREATE TABLE table1286 (a1 BIT(24) NULL, KEY ((a1)));
--error ER_FUNCTIONAL_INDEX_ON_FIELD
CREATE TABLE table276 ( pk INTEGER AUTO_INCREMENT, a1
SET('Nebraska','gfjzdfpngmbhvftlmiwrgduhdsbnkswbacwjvotkav','fjzdf') NULL,
PRIMARY KEY (pk), KEY ((a1)) );
CREATE TABLE t1(
e ENUM('a', 'bbb', 'cccccc')
, s SET('a', 'bbb', 'cccccc')
, b BIT(5)
, KEY ((NULLIF(e, null)))
, KEY ((NULLIF(s, null)))
, KEY ((NULLIF(b, null))));
SET SESSION debug="+d,show_hidden_columns";
SHOW CREATE TABLE t1;
SET SESSION debug="-d,show_hidden_columns";
DROP TABLE t1;
--error ER_SPATIAL_FUNCTIONAL_INDEX
CREATE TABLE table121 (
pk INTEGER AUTO_INCREMENT
, a1 SET('Michigan','w','d') NOT NULL
, PRIMARY KEY (pk)
, KEY ((ST_Centroid(a1))));
--echo # Test that the collation is set correctly for numeric columns. If we
--echo # have forgotten to set the correct collation, the hidden generated
--echo # column will have a VARBINARY field, and we won't be able to use the
--echo # index due to collation mismatch.
CREATE TABLE t1 (
col1 INT
, INDEX idx1 ((SOUNDEX(col1))));
SET SESSION debug="+d,show_hidden_columns";
SHOW CREATE TABLE t1;
SET SESSION debug="-d,show_hidden_columns";
EXPLAIN SELECT * FROM t1 WHERE SOUNDEX(col1) = "aa";
DROP TABLE t1;
--echo #
--echo # Bug#29317684 REPLICATION IS SENSITIVE TO ORDER OF HIDDEN COLUMNS FOR
--echo # FUNCTIONAL INDEXES
--echo #
--echo # See that hidden columns are inserted at the end, sorted by their name
SET SESSION debug="+d,show_hidden_columns";
CREATE TABLE t1 (col1 INT, INDEX functional_index_1 ((col1 + 1)));
SHOW CREATE TABLE t1;
CREATE INDEX functional_index_2 ON t1 ((col1 + 2));
SHOW CREATE TABLE t1;
CREATE INDEX functional_index_3 ON t1 ((col1 + 3));
SHOW CREATE TABLE t1;
CREATE INDEX functional_index_4 ON t1 ((col1 + 4));
SHOW CREATE TABLE t1;
ALTER TABLE t1 ADD COLUMN col2 INT;
SHOW CREATE TABLE t1;
CREATE INDEX functional_index_5 ON t1 ((col1 + col2));
SHOW CREATE TABLE t1;
DROP TABLE t1;
CREATE TABLE t1 (
col1 BIT(5),
col2 BIT(10),
KEY functional_index_1 ((NULLIF(col1, NULL))),
KEY functional_index_2 ((NULLIF(col2, NULL)))
);
SHOW CREATE TABLE t1;
DROP TABLE t1;
SET SESSION debug="-d,show_hidden_columns";