File: lowercase_table4.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 (147 lines) | stat: -rw-r--r-- 4,488 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
--source include/big_test.inc
--source include/have_case_insensitive_file_system.inc
--source include/have_lowercase2.inc

--echo #
--echo # Bug#46941 crash with lower_case_table_names=2 and
--echo #           foreign data dictionary confusion
--echo #

CREATE DATABASE XY;
USE XY;

#
# Logs are disabled, since the number of creates tables
# and subsequent select statements may vary between
# versions
#
--disable_query_log
--disable_result_log

let $tcs = `SELECT @@table_open_cache + 1`;

let $i = $tcs;

while ($i)
{
  eval CREATE TABLE XY.T_$i (a INT NOT NULL, b INT NOT NULL, c INT NOT NULL, d INT,
                             primary key(a, b), unique(b)) ENGINE=InnoDB;
  dec $i;
}

eval ALTER TABLE XY.T_$tcs ADD INDEX I1 (c, b),
                           ADD CONSTRAINT C1 FOREIGN KEY (c, b) REFERENCES XY.T_1 (a, b);

eval ALTER TABLE XY.T_$tcs ADD INDEX I2 (b),
                           ADD CONSTRAINT C2 FOREIGN KEY (b) REFERENCES XY.T_1(a);

let $i = $tcs;
while ($i)
{
  eval SELECT * FROM XY.T_$i LIMIT 1;
  dec $i;
}

DROP DATABASE XY;
CREATE DATABASE XY;
USE XY;
eval CREATE TABLE XY.T_$tcs (a INT NOT NULL, b INT NOT NULL, c INT NOT NULL, d INT,
                             PRIMARY KEY(a, b), UNIQUE(b)) ENGINE=InnoDB;
#
# The bug causes this SELECT to err
eval SELECT * FROM XY.T_$tcs LIMIT 1;

--enable_query_log
--enable_result_log
DROP DATABASE XY;
USE TEST;

--echo #
--echo # Bug55222 Mysqldump table names case bug in REFERENCES clause
--echo # InnoDB did not handle lower_case_table_names=2 for
--echo # foreign_table_names and referenced_table_names.
--echo #
--echo # Also provides coverage for bug#25583288 "DO NOT USE
--echo # HA_INNOBASE::GET_FOREIGN_KEY_CREATE_INFO() FOR SHOW CREATE
--echo # TABLE FK" and bug#30110545 "FK TABLE NAME CASING IS OMITTED
--echo # ON MYSQL 8 LOWER_CASE_TABLE_NAMES=2"
--echo #

SHOW VARIABLES LIKE 'lower_case_table_names';

--disable_warnings
DROP TABLE IF EXISTS `Table2`;
DROP TABLE IF EXISTS `Table1`;
--disable_warnings

CREATE TABLE `Table1`(c1 INT PRIMARY KEY) ENGINE=InnoDB;
CREATE TABLE `Table2`(c1 INT PRIMARY KEY, c2 INT) ENGINE=InnoDB;
ALTER TABLE `Table2` ADD CONSTRAINT fk1 FOREIGN KEY(c2) REFERENCES `Table1`(c1);
query_vertical SHOW CREATE TABLE `Table2`;
query_vertical SELECT * FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
WHERE CONSTRAINT_SCHEMA != 'PERFORMANCE_SCHEMA';
DROP TABLE `Table2`;
DROP TABLE `Table1`;

--disable_warnings
DROP TABLE IF EXISTS Product_Order;
DROP TABLE IF EXISTS Product;
DROP TABLE IF EXISTS Customer;
--enable_warnings

CREATE TABLE Product (Category INT NOT NULL, Id INT NOT NULL,
	Price DECIMAL, PRIMARY KEY(Category, Id)) ENGINE=InnoDB;
CREATE TABLE Customer (Id INT NOT NULL, PRIMARY KEY (Id)) ENGINE=InnoDB;
CREATE TABLE Product_Order (No INT NOT NULL AUTO_INCREMENT,
	Product_Category INT NOT NULL,
	Product_Id INT NOT NULL,
	Customer_Id INT NOT NULL,
	PRIMARY KEY(No),
	INDEX (Product_Category, Product_Id),
	FOREIGN KEY (Product_Category, Product_Id)
		REFERENCES Product(Category, Id) ON UPDATE CASCADE ON DELETE RESTRICT,
	INDEX (Customer_Id),
	FOREIGN KEY (Customer_Id)
		REFERENCES Customer(Id)
	) ENGINE=INNODB;

query_vertical SHOW CREATE TABLE Product_Order;
query_vertical SHOW CREATE TABLE Product;
query_vertical SHOW CREATE TABLE Customer;
query_vertical SELECT * FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
WHERE CONSTRAINT_SCHEMA != 'PERFORMANCE_SCHEMA';
DROP TABLE Product_Order;
DROP TABLE Product;
DROP TABLE Customer;

--echo #
--echo # Bug#29957361: TABLE NOT IN THE SHOW TABLES WITH LOWER_CASE_TABLE_NAMES=2
--echo #

CREATE DATABASE my_db;
USE my_db;
CREATE TABLE UPPERCASE_MYISAM (a INT) ENGINE=MYISAM;
CREATE TABLE lowercase_myisam (a INT) ENGINE=MYISAM;
CREATE TABLE UPPERCASE_INNODB (a INT) ENGINE=InnoDB;
CREATE TABLE lowercase_innodb (a INT) ENGINE=InnoDB;
SHOW TABLES;

# Create a new user and assign SELECT privileges on the above tables.
CREATE USER 'test_user'@'localhost';
GRANT SELECT ON my_db.UPPERCASE_MYISAM TO 'test_user'@'localhost';
GRANT SELECT ON my_db.lowercase_myisam TO 'test_user'@'localhost';
GRANT SELECT ON my_db.UPPERCASE_INNODB TO 'test_user'@'localhost';
GRANT SELECT ON my_db.lowercase_innodb TO 'test_user'@'localhost';

# Connect using the new user
--connect(con1, localhost, test_user,,)

USE my_db;
--echo # Without the patch, tables with uppercase table names were not displayed.
SHOW TABLES;

--connection default
--disconnect con1
DROP USER 'test_user'@'localhost';
DROP DATABASE my_db;
USE test;