271 lines
8.4 KiB
Plaintext
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";
|