File: invisible_columns.test

package info (click to toggle)
mysql-8.0 8.0.43-3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 1,273,924 kB
  • sloc: cpp: 4,684,605; ansic: 412,450; pascal: 108,398; java: 83,641; perl: 30,221; cs: 27,067; sql: 26,594; sh: 24,181; python: 21,816; yacc: 17,169; php: 11,522; xml: 7,388; javascript: 7,076; makefile: 2,194; lex: 1,075; awk: 670; asm: 520; objc: 183; ruby: 97; lisp: 86
file content (204 lines) | stat: -rw-r--r-- 8,075 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
################################################################################
# WL10905 - Support for INVISIBLE columns.                                     #
################################################################################

--echo #########################################################################
--echo # Test cases common to all the storage engines.                         #
--echo #########################################################################
--source include/invisible_columns.inc


--echo #########################################################################
--echo # Test cases specific to InnoDB storage engine.                         #
--echo #########################################################################

SET SESSION DEFAULT_STORAGE_ENGINE= InnoDB;

--echo #------------------------------------------------------------------------
--echo # Test case to verify INVISIBLE columns with CREATE TEMPORARY TABLE LIKE
--echo #------------------------------------------------------------------------
CREATE TABLE t1(f1 INT INVISIBLE, f2 INT);
CREATE TEMPORARY TABLE t2 LIKE t1;
SELECT * FROM t2;
SHOW CREATE TABLE t2;
SHOW COLUMNS FROM t2;
DROP TABLE t1, t2;


--echo #------------------------------------------------------------------------
--echo # Test case to verify foreign key constraint on a primary key column
--echo # referencing an invisible column.
--echo #------------------------------------------------------------------------
CREATE TABLE t1 (f1 INT, f2 INT PRIMARY KEY INVISIBLE);
CREATE TABLE t2 (f1 INT PRIMARY KEY, f2 INT,
                 CONSTRAINT FOREIGN KEY (f1) REFERENCES t1(f2));
SHOW CREATE TABLE t1;
SHOW CREATE TABLE t2;

INSERT INTO t1(f1, f2) VALUES(1, 1);
INSERT INTO t2 VALUES (1, 2);
--error ER_NO_REFERENCED_ROW_2
INSERT INTO t2 VALUES (2, 3);
DROP TABLE t1, t2;


--echo #------------------------------------------------------------------------
--echo # Test case to verify Foreign Key Constraint on non-index column
--echo # referencing an invisible column.
--echo #------------------------------------------------------------------------
CREATE TABLE t1 (f1 INT, f2 INT PRIMARY KEY INVISIBLE);
CREATE TABLE t2 (f1 INT, f2 INT, CONSTRAINT FOREIGN KEY (f1) REFERENCES t1(f2));
SHOW CREATE TABLE t1;
SHOW CREATE TABLE t2;

INSERT INTO t1(f1, f2) VALUES(1, 1);
INSERT INTO t2 VALUES (1, 2);
--error ER_NO_REFERENCED_ROW_2
INSERT INTO t2 VALUES (2, 3);
DROP TABLE t1, t2;


--echo #------------------------------------------------------------------------
--echo # Test case to verify Foreign Key Constraint on invisible column
--echo # referencing a visible column.
--echo #------------------------------------------------------------------------
CREATE TABLE t1 (f1 INT, f2 INT PRIMARY KEY);
CREATE TABLE t2 (f1 INT PRIMARY KEY INVISIBLE, f2 INT,
                 CONSTRAINT FOREIGN KEY (f1) REFERENCES t1(f2));
SHOW CREATE TABLE t1;
SHOW CREATE TABLE t2;

INSERT INTO t1 VALUES(1, 1);
INSERT INTO t2(f1, f2) VALUES (1, 2);
--error ER_NO_REFERENCED_ROW_2
INSERT INTO t2(f1, f2) VALUES (2, 3);
DROP TABLE t1, t2;


--echo #------------------------------------------------------------------------
--echo # Test case to verify add Foreign Key Constraint referencing an invisible
--echo # column to an existing table.
--echo #------------------------------------------------------------------------
CREATE TABLE t1 (f1 INT, f2 INT PRIMARY KEY INVISIBLE);
CREATE TABLE t2 (f1 INT PRIMARY KEY, f2 INT);
SHOW CREATE TABLE t1;
SHOW CREATE TABLE t2;
INSERT INTO t1(f1, f2) VALUES (1, 1);

ALTER TABLE t2 ADD CONSTRAINT FOREIGN KEY (f1) REFERENCES t1(f2);
SHOW CREATE TABLE t2;
INSERT INTO t2 VALUES (1, 3);
--error ER_NO_REFERENCED_ROW_2
INSERT INTO t2 VALUES (2, 3);
DROP TABLE t2;


--echo #------------------------------------------------------------------------
--echo # Test case to verify drop Foreign Key Constraint referencing an
--echo # invisible column.
--echo #------------------------------------------------------------------------
CREATE TABLE t2 (f1 INT PRIMARY KEY, f2 INT,
                 CONSTRAINT FOREIGN KEY (f1) REFERENCES t1(f2));
SHOW CREATE TABLE t2;
ALTER TABLE t2 DROP CONSTRAINT t2_ibfk_1;
SHOW CREATE TABLE t2;
DROP TABLE t1, t2;


--echo #------------------------------------------------------------------------
--echo # Test case to verify column visibility alter using INPLACE algorithm.
--echo #------------------------------------------------------------------------
CREATE TABLE t1 (f1 INT, f2 INT);
ALTER TABLE t1 ALTER COLUMN f1 SET INVISIBLE, ALGORITHM = INPLACE;
SHOW CREATE TABLE t1;
ALTER TABLE t1 CHANGE f1 f1 INT VISIBLE, ALGORITHM = INPLACE;
SHOW CREATE TABLE t1;
ALTER TABLE t1 MODIFY f1 INT INVISIBLE, ALGORITHM = INPLACE;
SHOW CREATE TABLE t1;
ALTER TABLE t1 ALTER COLUMN f1 SET INVISIBLE, ALGORITHM = INPLACE;
SHOW CREATE TABLE t1;


--echo #------------------------------------------------------------------------
--echo # Test case to verify column visibility alter using INSTANT algorithm.
--echo #------------------------------------------------------------------------
ALTER TABLE t1 ALTER COLUMN f1 SET INVISIBLE, ALGORITHM = INSTANT;
SHOW CREATE TABLE t1;
ALTER TABLE t1 CHANGE f1 f1 INT VISIBLE, ALGORITHM = INSTANT;
SHOW CREATE TABLE t1;
ALTER TABLE t1 MODIFY f1 INT INVISIBLE, ALGORITHM = INSTANT;
SHOW CREATE TABLE t1;
ALTER TABLE t1 ALTER COLUMN f1 SET INVISIBLE, ALGORITHM = INSTANT;
SHOW CREATE TABLE t1;
DROP TABLE t1;


--echo #------------------------------------------------------------------------
--echo # Test case to verify Partition table with INVISIBLE column.
--echo #------------------------------------------------------------------------
--echo # Range partition
CREATE TABLE t1(a INT, b DATE NOT NULL INVISIBLE)
        PARTITION BY RANGE( YEAR(b) ) (
        PARTITION p0 VALUES LESS THAN (1960),
        PARTITION p1 VALUES LESS THAN (1970),
        PARTITION p2 VALUES LESS THAN (1980),
        PARTITION p3 VALUES LESS THAN (1990));
SHOW CREATE TABLE t1;
SHOW COLUMNS FROM t1;
INSERT INTO t1(a, b) VALUES(1, '1960-01-01');
SELECT a, b FROM t1;
DROP TABLE t1;

--echo # List partition
CREATE TABLE t1(id INT NOT NULL INVISIBLE, name VARCHAR(10))
        PARTITION BY LIST(id) (
        PARTITION p0 VALUES IN (10,19),
        PARTITION p1 VALUES IN (20,29),
        PARTITION p2 VALUES IN (30,39),
        PARTITION p3 VALUES IN (40,49));
SHOW CREATE TABLE t1;
SHOW COLUMNS FROM t1;
INSERT INTO t1(id, name) VALUES(30,'aaa');
SELECT id, name FROM t1;
DROP TABLE t1;

--echo # Hash partition
CREATE TABLE t1(id INT NOT NULL INVISIBLE, name VARCHAR(40))
        PARTITION BY HASH(id)
        PARTITIONS 4;
SHOW CREATE TABLE t1;
SHOW COLUMNS FROM t1;
INSERT INTO t1(id, name) VALUES(60,'aaa');
SELECT id, name FROM t1;
DROP TABLE t1;

--echo # Key partition
CREATE TABLE t1(id INT PRIMARY KEY NOT NULL INVISIBLE, name VARCHAR(40))
        PARTITION BY KEY()
        PARTITIONS 4;
SHOW CREATE TABLE t1;
SHOW COLUMNS FROM t1;
INSERT INTO t1(id, name) VALUES(60,'aaa');
SELECT id, name FROM t1;
DROP TABLE t1;

SET SESSION DEFAULT_STORAGE_ENGINE= DEFAULT;


--echo #------------------------------------------------------------------------
--echo # Bug#33781534 - I_S.KEY_COLUMN_USAGE does not lists invisible columns
--echo #                which has key constraints.
--echo #------------------------------------------------------------------------

CREATE TABLE t1 (f1 INT PRIMARY KEY INVISIBLE, f2 INT UNIQUE INVISIBLE,
                 f3 INT, FOREIGN KEY (f2) REFERENCES t1(f1));
SHOW CREATE TABLE t1;
--echo # Columns with invisible attribute are listed by the INFORMATION_SCHEMA.COLUMNS.
--sorted_result
SELECT TABLE_NAME, COLUMN_NAME, EXTRA FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='t1';
--echo # Without fix, following query returns empty resultset. With fix, key columns
--echo # with invisible attribute should be listed.
--sorted_result
SELECT TABLE_NAME, CONSTRAINT_NAME, COLUMN_NAME, REFERENCED_COLUMN_NAME
       FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME='t1';
DROP TABLE t1;