Merge lp:~akopytov/percona-server/bugs-1039536-1081003-5.5 into lp:percona-server/5.5

Proposed by Alexey Kopytov
Status: Merged
Approved by: Laurynas Biveinis
Approved revision: no longer in the source branch.
Merged at revision: 365
Proposed branch: lp:~akopytov/percona-server/bugs-1039536-1081003-5.5
Merge into: lp:percona-server/5.5
Diff against target: 1449 lines (+108/-589)
3 files modified
Percona-Server/client/mysqldump.c (+108/-34)
Percona-Server/mysql-test/r/percona_mysqldump_innodb_optimize_keys.result (+0/-367)
Percona-Server/mysql-test/t/percona_mysqldump_innodb_optimize_keys.test (+0/-188)
To merge this branch: bzr merge lp:~akopytov/percona-server/bugs-1039536-1081003-5.5
Reviewer Review Type Date Requested Status
Laurynas Biveinis (community) Approve
Review via email: mp+135092@code.launchpad.net

Description of the change

Bug #1039536: mysqldump --innodb-optimize-keys can generate invalid
              table definitions
Bug #1081003: mysqldump --innodb-optimize-keys handles AUTO_INCREMENT
              columns inefficiently

The problem in bug #1039536 was that mysqldump --innodb-optimize-keys
did not handle composite indexes correctly when verifying if the
optimization is applicable with respect to AUTO_INCREMENT columns. When
an AUTO_INCREMENT column was encountered in the SHOW CREATE TABLE
output, the column was marked so that subsequent index specifications
involving that column would not be used in deferred index creation
mechanism, as MySQL does not allow creating tables with unindexed
AUTO_INCREMENT columns. However, the code checking if an index
specification involves a previously marked AUTO_INCREMENT column failed
to handle composite keys correctly, so those keys were optimized away
resulting in an invalid table definition.

A closely related problem in bug #1081003 was that even in cases where
indexes with AUTO_INCREMENT columns where correctly detected, mysqldump
prevented all such keys from optimization, even though it is sufficient
to skip just one (e.g. the first one).

Fixed by refactoring the AUTO_INCREMENT handling code in mysqldump
--innodb-optimize-keys to:

- process composite keys correctly

- prevent only the first key indexing an AUTO_INCREMENT columns from
  optimization

- use a simple pointer instead of the hash table to keep track of
  AUTO_INCREMENT column with a simple pointer, as the server only allows
  one such column per table anyway

To post a comment you must log in.
Revision history for this message
Alexey Kopytov (akopytov) wrote :
Revision history for this message
Laurynas Biveinis (laurynas-biveinis) wrote :

Same minor comments as for 5.1.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'Percona-Server/client/mysqldump.c'
--- Percona-Server/client/mysqldump.c 2012-10-17 03:47:45 +0000
+++ Percona-Server/client/mysqldump.c 2012-11-20 09:38:30 +0000
@@ -84,6 +84,13 @@
84#define IGNORE_DATA 0x01 /* don't dump data for this table */84#define IGNORE_DATA 0x01 /* don't dump data for this table */
85#define IGNORE_INSERT_DELAYED 0x02 /* table doesn't support INSERT DELAYED */85#define IGNORE_INSERT_DELAYED 0x02 /* table doesn't support INSERT DELAYED */
8686
87typedef enum {
88 KEY_TYPE_NONE,
89 KEY_TYPE_PRIMARY,
90 KEY_TYPE_UNIQUE,
91 KEY_TYPE_NON_UNIQUE
92} key_type_t;
93
87/* general_log or slow_log tables under mysql database */94/* general_log or slow_log tables under mysql database */
88static inline my_bool general_log_or_slow_log_tables(const char *db, 95static inline my_bool general_log_or_slow_log_tables(const char *db,
89 const char *table)96 const char *table)
@@ -2454,20 +2461,62 @@
2454}2461}
24552462
2456/*2463/*
2457 Parse the specified key definition string and check if the key indexes2464 Parse the specified key definition string and check if the key contains an
2458 any of the columns from ignored_columns.2465 AUTO_INCREMENT column as the first key part. We only check for the first key
2466 part, because unlike MyISAM, InnoDB does not allow the AUTO_INCREMENT column
2467 as a secondary key column, i.e. the AUTO_INCREMENT column would not be
2468 considered indexed for such key specification.
2459*/2469*/
2460static my_bool contains_ignored_column(HASH *ignored_columns, char *keydef)2470static my_bool contains_autoinc_column(const char *autoinc_column,
2471 const char *keydef,
2472 key_type_t type)
2461{2473{
2462 char *leftp, *rightp;2474 char *from, *to;
24632475 uint idnum;
2464 if ((leftp = strchr(keydef, '(')) &&2476
2465 (rightp = strchr(leftp, ')')) &&2477 DBUG_ASSERT(type != KEY_TYPE_NONE);
2466 rightp > leftp + 3 && /* (`...`) */2478
2467 leftp[1] == '`' &&2479 if (autoinc_column == NULL || !(from= strchr(keydef, '`')))
2468 rightp[-1] == '`' &&2480 return FALSE;
2469 my_hash_search(ignored_columns, (uchar *) leftp + 2, rightp - leftp - 3))2481
2470 return TRUE;2482 to= from;
2483 idnum= 0;
2484
2485 while ((to= strchr(to + 1, '`')))
2486 {
2487 /*
2488 Double backticks represent a backtick in identifier, rather than a quote
2489 character.
2490 */
2491 if (to[1] == '`')
2492 {
2493 to++;
2494 continue;
2495 }
2496
2497 if (to <= from + 1)
2498 break; /* Broken key definition */
2499
2500 idnum++;
2501
2502 /*
2503 Skip the check if it's the first identifier and we are processing a
2504 secondary key.
2505 */
2506 if ((type == KEY_TYPE_PRIMARY || idnum != 1) &&
2507 !strncmp(autoinc_column, from + 1, to - from - 1))
2508 return TRUE;
2509
2510 /*
2511 Check only the first (for PRIMARY KEY) or the second (for secondary keys)
2512 quoted identifier.
2513 */
2514 if ((idnum == 1 + test(type != KEY_TYPE_PRIMARY)) ||
2515 !(from= strchr(to + 1, '`')))
2516 break;
2517
2518 to= from;
2519 }
24712520
2472 return FALSE;2521 return FALSE;
2473}2522}
@@ -2495,13 +2544,11 @@
2495static void skip_secondary_keys(char *create_str, my_bool has_pk)2544static void skip_secondary_keys(char *create_str, my_bool has_pk)
2496{2545{
2497 char *ptr, *strend;2546 char *ptr, *strend;
2498 char *last_comma = NULL;2547 char *last_comma= NULL;
2499 HASH ignored_columns;
2500 my_bool pk_processed= FALSE;2548 my_bool pk_processed= FALSE;
25012549 char *autoinc_column= NULL;
2502 if (my_hash_init(&ignored_columns, charset_info, 16, 0, 0,2550 my_bool has_autoinc= FALSE;
2503 (my_hash_get_key) get_table_key, my_free, 0))2551 key_type_t type;
2504 exit(EX_EOM);
25052552
2506 strend= create_str + strlen(create_str);2553 strend= create_str + strlen(create_str);
25072554
@@ -2509,7 +2556,6 @@
2509 while (*ptr)2556 while (*ptr)
2510 {2557 {
2511 char *tmp, *orig_ptr, c;2558 char *tmp, *orig_ptr, c;
2512 my_bool is_unique= FALSE;
25132559
2514 orig_ptr= ptr;2560 orig_ptr= ptr;
2515 /* Skip leading whitespace */2561 /* Skip leading whitespace */
@@ -2522,12 +2568,22 @@
2522 c= *tmp;2568 c= *tmp;
2523 *tmp= '\0'; /* so strstr() only processes the current line */2569 *tmp= '\0'; /* so strstr() only processes the current line */
25242570
2571 if (!strncmp(ptr, "UNIQUE KEY ", sizeof("UNIQUE KEY ") - 1))
2572 type= KEY_TYPE_UNIQUE;
2573 else if (!strncmp(ptr, "KEY ", sizeof("KEY ") - 1))
2574 type= KEY_TYPE_NON_UNIQUE;
2575 else if (!strncmp(ptr, "PRIMARY KEY ", sizeof("PRIMARY KEY ") - 1))
2576 type= KEY_TYPE_PRIMARY;
2577 else
2578 type= KEY_TYPE_NONE;
2579
2580 has_autoinc= (type != KEY_TYPE_NONE) ?
2581 contains_autoinc_column(autoinc_column, ptr, type) : FALSE;
2582
2525 /* Is it a secondary index definition? */2583 /* Is it a secondary index definition? */
2526 if (c == '\n' &&2584 if (c == '\n' &&
2527 (((is_unique= !strncmp(ptr, "UNIQUE KEY ", sizeof("UNIQUE KEY ")-1)) &&2585 ((type == KEY_TYPE_UNIQUE && (pk_processed || !has_pk)) ||
2528 (pk_processed || !has_pk)) ||2586 type == KEY_TYPE_NON_UNIQUE) && !has_autoinc)
2529 !strncmp(ptr, "KEY ", sizeof("KEY ") - 1)) &&
2530 !contains_ignored_column(&ignored_columns, ptr))
2531 {2587 {
2532 char *data, *end= tmp - 1;2588 char *data, *end= tmp - 1;
25332589
@@ -2560,23 +2616,41 @@
2560 *last_comma= ',';2616 *last_comma= ',';
2561 }2617 }
25622618
2563 if ((has_pk && is_unique && !pk_processed) ||2619 /*
2564 !strncmp(ptr, "PRIMARY KEY ", sizeof("PRIMARY KEY ") - 1))2620 If we are skipping a key which indexes an AUTO_INCREMENT column, it is
2621 safe to optimize all subsequent keys, i.e. we should not be checking for
2622 that column anymore.
2623 */
2624 if (type != KEY_TYPE_NONE && has_autoinc)
2625 {
2626 DBUG_ASSERT(autoinc_column != NULL);
2627
2628 my_free(autoinc_column);
2629 autoinc_column= NULL;
2630 }
2631
2632 if ((has_pk && type == KEY_TYPE_UNIQUE && !pk_processed) ||
2633 type == KEY_TYPE_PRIMARY)
2565 pk_processed= TRUE;2634 pk_processed= TRUE;
25662635
2567 if (strstr(ptr, "AUTO_INCREMENT") && *ptr == '`')2636 if (strstr(ptr, "AUTO_INCREMENT") && *ptr == '`')
2568 {2637 {
2569 /*2638 /*
2570 If a secondary key is defined on this column later,2639 The first secondary key defined on this column later cannot be
2571 it cannot be skipped, as CREATE TABLE would fail on import.2640 skipped, as CREATE TABLE would fail on import. Unless there is a
2641 PRIMARY KEY and it indexes that column.
2572 */2642 */
2573 for (end= ptr + 1; *end != '`' && *end != '\0'; end++);2643 for (end= ptr + 1;
2574 if (*end == '`' && end > ptr + 1 &&2644 /* Skip double backticks as they are a part of identifier */
2575 my_hash_insert(&ignored_columns,2645 *end != '\0' && (*end != '`' || end[1] == '`');
2576 (uchar *) my_strndup(ptr + 1,2646 end++)
2577 end - ptr - 1, MYF(0))))2647 /* empty */;
2648
2649 if (*end == '`' && end > ptr + 1)
2578 {2650 {
2579 exit(EX_EOM);2651 DBUG_ASSERT(autoinc_column == NULL);
2652
2653 autoinc_column= my_strndup(ptr + 1, end - ptr - 1, MYF(MY_FAE));
2580 }2654 }
2581 }2655 }
25822656
@@ -2588,7 +2662,7 @@
2588 }2662 }
2589 }2663 }
25902664
2591 my_hash_free(&ignored_columns);2665 my_free(autoinc_column);
2592}2666}
25932667
2594/*2668/*
25952669
=== added file 'Percona-Server/mysql-test/r/percona_mysqldump_innodb_optimize_keys.result'
--- Percona-Server/mysql-test/r/percona_mysqldump_innodb_optimize_keys.result 1970-01-01 00:00:00 +0000
+++ Percona-Server/mysql-test/r/percona_mysqldump_innodb_optimize_keys.result 2012-11-20 09:38:30 +0000
@@ -0,0 +1,441 @@
1#
2# Test the --innodb-optimize-keys option.
3#
4CREATE TABLE t1 (a INT NOT NULL PRIMARY KEY, b INT, KEY(b)) ENGINE=MyISAM;
5######################################
6
7/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
8/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
9/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
10/*!40101 SET NAMES utf8 */;
11/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
12/*!40103 SET TIME_ZONE='+00:00' */;
13/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
14/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
15/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
16/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
17DROP TABLE IF EXISTS `t1`;
18/*!40101 SET @saved_cs_client = @@character_set_client */;
19/*!40101 SET character_set_client = utf8 */;
20CREATE TABLE `t1` (
21 `a` int(11) NOT NULL,
22 `b` int(11) DEFAULT NULL,
23 PRIMARY KEY (`a`),
24 KEY `b` (`b`)
25) ENGINE=MyISAM DEFAULT CHARSET=latin1;
26/*!40101 SET character_set_client = @saved_cs_client */;
27
28LOCK TABLES `t1` WRITE;
29/*!40000 ALTER TABLE `t1` DISABLE KEYS */;
30/*!40000 ALTER TABLE `t1` ENABLE KEYS */;
31UNLOCK TABLES;
32/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
33
34/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
35/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
36/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
37/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
38/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
39/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
40/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
41
42######################################
43DROP TABLE t1;
44CREATE TABLE t2 (a INT PRIMARY KEY) ENGINE=InnoDB;
45INSERT INTO t2 VALUES (0), (1), (2);
46CREATE TABLE t1 (
47id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
48a INT, b VARCHAR(255), c DECIMAL(10,3),
49KEY (b),
50UNIQUE KEY uniq(c,a),
51FOREIGN KEY (a) REFERENCES t2(a) ON DELETE CASCADE
52) ENGINE=InnoDB;
53INSERT INTO t1(a,b,c) VALUES (0, "0", 0.0), (1, "1", 1.1), (2, "2", 2.2);
54######################################
55
56/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
57/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
58/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
59/*!40101 SET NAMES utf8 */;
60/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
61/*!40103 SET TIME_ZONE='+00:00' */;
62/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
63/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
64/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
65/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
66DROP TABLE IF EXISTS `t1`;
67/*!40101 SET @saved_cs_client = @@character_set_client */;
68/*!40101 SET character_set_client = utf8 */;
69CREATE TABLE `t1` (
70 `id` int(11) NOT NULL AUTO_INCREMENT,
71 `a` int(11) DEFAULT NULL,
72 `b` varchar(255) DEFAULT NULL,
73 `c` decimal(10,3) DEFAULT NULL,
74 PRIMARY KEY (`id`),
75 CONSTRAINT `t1_ibfk_1` FOREIGN KEY (`a`) REFERENCES `t2` (`a`) ON DELETE CASCADE
76) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;
77/*!40101 SET character_set_client = @saved_cs_client */;
78
79LOCK TABLES `t1` WRITE;
80/*!40000 ALTER TABLE `t1` DISABLE KEYS */;
81INSERT INTO `t1` VALUES (1,0,'0',0.000),(2,1,'1',1.100),(3,2,'2',2.200);
82ALTER TABLE `t1` ADD UNIQUE KEY `uniq` (`c`,`a`), ADD KEY `b` (`b`), ADD KEY `a` (`a`);
83/*!40000 ALTER TABLE `t1` ENABLE KEYS */;
84UNLOCK TABLES;
85DROP TABLE IF EXISTS `t2`;
86/*!40101 SET @saved_cs_client = @@character_set_client */;
87/*!40101 SET character_set_client = utf8 */;
88CREATE TABLE `t2` (
89 `a` int(11) NOT NULL,
90 PRIMARY KEY (`a`)
91) ENGINE=InnoDB DEFAULT CHARSET=latin1;
92/*!40101 SET character_set_client = @saved_cs_client */;
93
94LOCK TABLES `t2` WRITE;
95/*!40000 ALTER TABLE `t2` DISABLE KEYS */;
96INSERT INTO `t2` VALUES (0),(1),(2);
97/*!40000 ALTER TABLE `t2` ENABLE KEYS */;
98UNLOCK TABLES;
99/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
100
101/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
102/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
103/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
104/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
105/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
106/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
107/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
108
109######################################
110DROP TABLE t1, t2;
111CREATE TABLE t1 (
112id INT NOT NULL AUTO_INCREMENT,
113KEY (id)
114) ENGINE=InnoDB;
115CREATE TABLE t2 (
116id INT NOT NULL AUTO_INCREMENT,
117UNIQUE KEY (id)
118) ENGINE=InnoDB;
119INSERT INTO t1 VALUES (), (), ();
120INSERT INTO t2 VALUES (), (), ();
121######################################
122
123/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
124/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
125/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
126/*!40101 SET NAMES utf8 */;
127/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
128/*!40103 SET TIME_ZONE='+00:00' */;
129/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
130/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
131/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
132/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
133DROP TABLE IF EXISTS `t1`;
134/*!40101 SET @saved_cs_client = @@character_set_client */;
135/*!40101 SET character_set_client = utf8 */;
136CREATE TABLE `t1` (
137 `id` int(11) NOT NULL AUTO_INCREMENT,
138 KEY `id` (`id`)
139) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;
140/*!40101 SET character_set_client = @saved_cs_client */;
141
142LOCK TABLES `t1` WRITE;
143/*!40000 ALTER TABLE `t1` DISABLE KEYS */;
144INSERT INTO `t1` VALUES (1),(2),(3);
145/*!40000 ALTER TABLE `t1` ENABLE KEYS */;
146UNLOCK TABLES;
147DROP TABLE IF EXISTS `t2`;
148/*!40101 SET @saved_cs_client = @@character_set_client */;
149/*!40101 SET character_set_client = utf8 */;
150CREATE TABLE `t2` (
151 `id` int(11) NOT NULL AUTO_INCREMENT,
152 UNIQUE KEY `id` (`id`)
153) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;
154/*!40101 SET character_set_client = @saved_cs_client */;
155
156LOCK TABLES `t2` WRITE;
157/*!40000 ALTER TABLE `t2` DISABLE KEYS */;
158INSERT INTO `t2` VALUES (1),(2),(3);
159/*!40000 ALTER TABLE `t2` ENABLE KEYS */;
160UNLOCK TABLES;
161/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
162
163/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
164/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
165/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
166/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
167/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
168/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
169/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
170
171######################################
172DROP TABLE t1, t2;
173CREATE TABLE t1 (
174a INT NOT NULL,
175UNIQUE KEY (a)) ENGINE=InnoDB;
176CREATE TABLE t2 (
177a INT NOT NULL,
178b INT NOT NULL,
179UNIQUE KEY (a,b)) ENGINE=InnoDB;
180CREATE TABLE t3 (
181a INT,
182b INT,
183UNIQUE KEY (a,b)) ENGINE=InnoDB;
184CREATE TABLE t4 (
185a INT NOT NULL,
186b INT NOT NULL,
187PRIMARY KEY (a,b),
188UNIQUE KEY(b)) ENGINE=InnoDB;
189SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE
190TABLE_SCHEMA=DATABASE() AND
191TABLE_NAME='t1' AND
192COLUMN_KEY='PRI';
193COUNT(*)
1941
195SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE
196TABLE_SCHEMA=DATABASE() AND
197TABLE_NAME='t2' AND
198COLUMN_KEY='PRI';
199COUNT(*)
2002
201SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE
202TABLE_SCHEMA=DATABASE() AND
203TABLE_NAME='t3' AND
204COLUMN_KEY='PRI';
205COUNT(*)
2060
207SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE
208TABLE_SCHEMA=DATABASE() AND
209TABLE_NAME='t4' AND
210COLUMN_KEY='PRI';
211COUNT(*)
2122
213INSERT INTO t1 VALUES (1), (2), (3);
214INSERT INTO t2 VALUES (1,1), (2,2), (3,3);
215INSERT INTO t3 SELECT * FROM t2;
216INSERT INTO t4 SELECT * FROM t2;
217######################################
218
219/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
220/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
221/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
222/*!40101 SET NAMES utf8 */;
223/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
224/*!40103 SET TIME_ZONE='+00:00' */;
225/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
226/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
227/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
228/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
229DROP TABLE IF EXISTS `t1`;
230/*!40101 SET @saved_cs_client = @@character_set_client */;
231/*!40101 SET character_set_client = utf8 */;
232CREATE TABLE `t1` (
233 `a` int(11) NOT NULL,
234 UNIQUE KEY `a` (`a`)
235) ENGINE=InnoDB DEFAULT CHARSET=latin1;
236/*!40101 SET character_set_client = @saved_cs_client */;
237
238LOCK TABLES `t1` WRITE;
239/*!40000 ALTER TABLE `t1` DISABLE KEYS */;
240INSERT INTO `t1` VALUES (1),(2),(3);
241/*!40000 ALTER TABLE `t1` ENABLE KEYS */;
242UNLOCK TABLES;
243DROP TABLE IF EXISTS `t2`;
244/*!40101 SET @saved_cs_client = @@character_set_client */;
245/*!40101 SET character_set_client = utf8 */;
246CREATE TABLE `t2` (
247 `a` int(11) NOT NULL,
248 `b` int(11) NOT NULL,
249 UNIQUE KEY `a` (`a`,`b`)
250) ENGINE=InnoDB DEFAULT CHARSET=latin1;
251/*!40101 SET character_set_client = @saved_cs_client */;
252
253LOCK TABLES `t2` WRITE;
254/*!40000 ALTER TABLE `t2` DISABLE KEYS */;
255INSERT INTO `t2` VALUES (1,1),(2,2),(3,3);
256/*!40000 ALTER TABLE `t2` ENABLE KEYS */;
257UNLOCK TABLES;
258DROP TABLE IF EXISTS `t3`;
259/*!40101 SET @saved_cs_client = @@character_set_client */;
260/*!40101 SET character_set_client = utf8 */;
261CREATE TABLE `t3` (
262 `a` int(11) DEFAULT NULL,
263 `b` int(11) DEFAULT NULL
264) ENGINE=InnoDB DEFAULT CHARSET=latin1;
265/*!40101 SET character_set_client = @saved_cs_client */;
266
267LOCK TABLES `t3` WRITE;
268/*!40000 ALTER TABLE `t3` DISABLE KEYS */;
269INSERT INTO `t3` VALUES (1,1),(2,2),(3,3);
270ALTER TABLE `t3` ADD UNIQUE KEY `a` (`a`,`b`);
271/*!40000 ALTER TABLE `t3` ENABLE KEYS */;
272UNLOCK TABLES;
273DROP TABLE IF EXISTS `t4`;
274/*!40101 SET @saved_cs_client = @@character_set_client */;
275/*!40101 SET character_set_client = utf8 */;
276CREATE TABLE `t4` (
277 `a` int(11) NOT NULL,
278 `b` int(11) NOT NULL,
279 PRIMARY KEY (`a`,`b`)
280) ENGINE=InnoDB DEFAULT CHARSET=latin1;
281/*!40101 SET character_set_client = @saved_cs_client */;
282
283LOCK TABLES `t4` WRITE;
284/*!40000 ALTER TABLE `t4` DISABLE KEYS */;
285INSERT INTO `t4` VALUES (1,1),(2,2),(3,3);
286ALTER TABLE `t4` ADD UNIQUE KEY `b` (`b`);
287/*!40000 ALTER TABLE `t4` ENABLE KEYS */;
288UNLOCK TABLES;
289/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
290
291/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
292/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
293/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
294/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
295/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
296/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
297/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
298
299######################################
300DROP TABLE t1, t2, t3, t4;
301CREATE TABLE t1 (
302id INT NOT NULL PRIMARY KEY
303) ENGINE=InnoDB;
304CREATE TABLE t2 (
305id INT NOT NULL AUTO_INCREMENT,
306a INT NOT NULL,
307PRIMARY KEY (id),
308KEY (a),
309FOREIGN KEY (a) REFERENCES t2 (id)
310) ENGINE=InnoDB;
311INSERT INTO t1 VALUES (1), (2), (3);
312INSERT INTO t2 VALUES (1, 1), (2, 2), (3, 3);
313######################################
314
315/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
316/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
317/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
318/*!40101 SET NAMES utf8 */;
319/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
320/*!40103 SET TIME_ZONE='+00:00' */;
321/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
322/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
323/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
324/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
325DROP TABLE IF EXISTS `t1`;
326/*!40101 SET @saved_cs_client = @@character_set_client */;
327/*!40101 SET character_set_client = utf8 */;
328CREATE TABLE `t1` (
329 `id` int(11) NOT NULL,
330 PRIMARY KEY (`id`)
331) ENGINE=InnoDB DEFAULT CHARSET=latin1;
332/*!40101 SET character_set_client = @saved_cs_client */;
333
334LOCK TABLES `t1` WRITE;
335/*!40000 ALTER TABLE `t1` DISABLE KEYS */;
336INSERT INTO `t1` VALUES (1),(2),(3);
337/*!40000 ALTER TABLE `t1` ENABLE KEYS */;
338UNLOCK TABLES;
339DROP TABLE IF EXISTS `t2`;
340/*!40101 SET @saved_cs_client = @@character_set_client */;
341/*!40101 SET character_set_client = utf8 */;
342CREATE TABLE `t2` (
343 `id` int(11) NOT NULL AUTO_INCREMENT,
344 `a` int(11) NOT NULL,
345 PRIMARY KEY (`id`),
346 CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`a`) REFERENCES `t2` (`id`)
347) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;
348/*!40101 SET character_set_client = @saved_cs_client */;
349
350LOCK TABLES `t2` WRITE;
351/*!40000 ALTER TABLE `t2` DISABLE KEYS */;
352INSERT INTO `t2` VALUES (1,1),(2,2),(3,3);
353ALTER TABLE `t2` ADD KEY `a` (`a`);
354/*!40000 ALTER TABLE `t2` ENABLE KEYS */;
355UNLOCK TABLES;
356/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
357
358/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
359/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
360/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
361/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
362/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
363/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
364/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
365
366######################################
367DROP TABLE t1, t2;
368CREATE TABLE t1 (
369id INT NOT NULL AUTO_INCREMENT,
370uid INT NOT NULL,
371`id``` INT NOT NULL,
372```id` INT NOT NULL,
373# The following ones may be skipped and used in ALTER TABLE later
374KEY k1 (```id`, id),
375KEY k2 (```id`, `id```),
376# The following one should be kept in CREATE TABLE
377KEY k3 (id, uid),
378# The following one may be skipped again
379KEY k4 (id, `id```)
380) ENGINE=InnoDB;
381CREATE TABLE t2 (
382id INT NOT NULL AUTO_INCREMENT,
383PRIMARY KEY (id),
384KEY k1 (id),
385KEY k2 (id)
386) ENGINE=InnoDB;
387######################################
388
389/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
390/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
391/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
392/*!40101 SET NAMES utf8 */;
393/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
394/*!40103 SET TIME_ZONE='+00:00' */;
395/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
396/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
397/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
398/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
399DROP TABLE IF EXISTS `t1`;
400/*!40101 SET @saved_cs_client = @@character_set_client */;
401/*!40101 SET character_set_client = utf8 */;
402CREATE TABLE `t1` (
403 `id` int(11) NOT NULL AUTO_INCREMENT,
404 `uid` int(11) NOT NULL,
405 `id``` int(11) NOT NULL,
406 ```id` int(11) NOT NULL,
407 KEY `k3` (`id`,`uid`)
408) ENGINE=InnoDB DEFAULT CHARSET=latin1;
409/*!40101 SET character_set_client = @saved_cs_client */;
410
411LOCK TABLES `t1` WRITE;
412/*!40000 ALTER TABLE `t1` DISABLE KEYS */;
413ALTER TABLE `t1` ADD KEY `k1` (```id`,`id`), ADD KEY `k2` (```id`,`id```), ADD KEY `k4` (`id`,`id```);
414/*!40000 ALTER TABLE `t1` ENABLE KEYS */;
415UNLOCK TABLES;
416DROP TABLE IF EXISTS `t2`;
417/*!40101 SET @saved_cs_client = @@character_set_client */;
418/*!40101 SET character_set_client = utf8 */;
419CREATE TABLE `t2` (
420 `id` int(11) NOT NULL AUTO_INCREMENT,
421 PRIMARY KEY (`id`)
422) ENGINE=InnoDB DEFAULT CHARSET=latin1;
423/*!40101 SET character_set_client = @saved_cs_client */;
424
425LOCK TABLES `t2` WRITE;
426/*!40000 ALTER TABLE `t2` DISABLE KEYS */;
427ALTER TABLE `t2` ADD KEY `k1` (`id`), ADD KEY `k2` (`id`);
428/*!40000 ALTER TABLE `t2` ENABLE KEYS */;
429UNLOCK TABLES;
430/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
431
432/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
433/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
434/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
435/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
436/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
437/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
438/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
439
440######################################
441DROP TABLE t1, t2;
0442
=== removed file 'Percona-Server/mysql-test/r/percona_mysqldump_innodb_optimize_keys.result'
--- Percona-Server/mysql-test/r/percona_mysqldump_innodb_optimize_keys.result 2012-04-18 23:26:09 +0000
+++ Percona-Server/mysql-test/r/percona_mysqldump_innodb_optimize_keys.result 1970-01-01 00:00:00 +0000
@@ -1,367 +0,0 @@
1#
2# Test the --innodb-optimize-keys option.
3#
4CREATE TABLE t1 (a INT NOT NULL PRIMARY KEY, b INT, KEY(b)) ENGINE=MyISAM;
5######################################
6
7/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
8/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
9/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
10/*!40101 SET NAMES utf8 */;
11/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
12/*!40103 SET TIME_ZONE='+00:00' */;
13/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
14/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
15/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
16/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
17DROP TABLE IF EXISTS `t1`;
18/*!40101 SET @saved_cs_client = @@character_set_client */;
19/*!40101 SET character_set_client = utf8 */;
20CREATE TABLE `t1` (
21 `a` int(11) NOT NULL,
22 `b` int(11) DEFAULT NULL,
23 PRIMARY KEY (`a`),
24 KEY `b` (`b`)
25) ENGINE=MyISAM DEFAULT CHARSET=latin1;
26/*!40101 SET character_set_client = @saved_cs_client */;
27
28LOCK TABLES `t1` WRITE;
29/*!40000 ALTER TABLE `t1` DISABLE KEYS */;
30/*!40000 ALTER TABLE `t1` ENABLE KEYS */;
31UNLOCK TABLES;
32/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
33
34/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
35/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
36/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
37/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
38/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
39/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
40/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
41
42######################################
43DROP TABLE t1;
44CREATE TABLE t2 (a INT PRIMARY KEY) ENGINE=InnoDB;
45INSERT INTO t2 VALUES (0), (1), (2);
46CREATE TABLE t1 (
47id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
48a INT, b VARCHAR(255), c DECIMAL(10,3),
49KEY (b),
50UNIQUE KEY uniq(c,a),
51FOREIGN KEY (a) REFERENCES t2(a) ON DELETE CASCADE
52) ENGINE=InnoDB;
53INSERT INTO t1(a,b,c) VALUES (0, "0", 0.0), (1, "1", 1.1), (2, "2", 2.2);
54######################################
55
56/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
57/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
58/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
59/*!40101 SET NAMES utf8 */;
60/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
61/*!40103 SET TIME_ZONE='+00:00' */;
62/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
63/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
64/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
65/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
66DROP TABLE IF EXISTS `t1`;
67/*!40101 SET @saved_cs_client = @@character_set_client */;
68/*!40101 SET character_set_client = utf8 */;
69CREATE TABLE `t1` (
70 `id` int(11) NOT NULL AUTO_INCREMENT,
71 `a` int(11) DEFAULT NULL,
72 `b` varchar(255) DEFAULT NULL,
73 `c` decimal(10,3) DEFAULT NULL,
74 PRIMARY KEY (`id`),
75 CONSTRAINT `t1_ibfk_1` FOREIGN KEY (`a`) REFERENCES `t2` (`a`) ON DELETE CASCADE
76) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;
77/*!40101 SET character_set_client = @saved_cs_client */;
78
79LOCK TABLES `t1` WRITE;
80/*!40000 ALTER TABLE `t1` DISABLE KEYS */;
81INSERT INTO `t1` VALUES (1,0,'0',0.000),(2,1,'1',1.100),(3,2,'2',2.200);
82ALTER TABLE `t1` ADD UNIQUE KEY `uniq` (`c`,`a`), ADD KEY `b` (`b`), ADD KEY `a` (`a`);
83/*!40000 ALTER TABLE `t1` ENABLE KEYS */;
84UNLOCK TABLES;
85DROP TABLE IF EXISTS `t2`;
86/*!40101 SET @saved_cs_client = @@character_set_client */;
87/*!40101 SET character_set_client = utf8 */;
88CREATE TABLE `t2` (
89 `a` int(11) NOT NULL,
90 PRIMARY KEY (`a`)
91) ENGINE=InnoDB DEFAULT CHARSET=latin1;
92/*!40101 SET character_set_client = @saved_cs_client */;
93
94LOCK TABLES `t2` WRITE;
95/*!40000 ALTER TABLE `t2` DISABLE KEYS */;
96INSERT INTO `t2` VALUES (0),(1),(2);
97/*!40000 ALTER TABLE `t2` ENABLE KEYS */;
98UNLOCK TABLES;
99/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
100
101/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
102/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
103/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
104/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
105/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
106/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
107/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
108
109######################################
110DROP TABLE t1, t2;
111CREATE TABLE t1 (
112id INT NOT NULL AUTO_INCREMENT,
113KEY (id)
114) ENGINE=InnoDB;
115CREATE TABLE t2 (
116id INT NOT NULL AUTO_INCREMENT,
117UNIQUE KEY (id)
118) ENGINE=InnoDB;
119INSERT INTO t1 VALUES (), (), ();
120INSERT INTO t2 VALUES (), (), ();
121######################################
122
123/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
124/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
125/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
126/*!40101 SET NAMES utf8 */;
127/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
128/*!40103 SET TIME_ZONE='+00:00' */;
129/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
130/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
131/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
132/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
133DROP TABLE IF EXISTS `t1`;
134/*!40101 SET @saved_cs_client = @@character_set_client */;
135/*!40101 SET character_set_client = utf8 */;
136CREATE TABLE `t1` (
137 `id` int(11) NOT NULL AUTO_INCREMENT,
138 KEY `id` (`id`)
139) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;
140/*!40101 SET character_set_client = @saved_cs_client */;
141
142LOCK TABLES `t1` WRITE;
143/*!40000 ALTER TABLE `t1` DISABLE KEYS */;
144INSERT INTO `t1` VALUES (1),(2),(3);
145/*!40000 ALTER TABLE `t1` ENABLE KEYS */;
146UNLOCK TABLES;
147DROP TABLE IF EXISTS `t2`;
148/*!40101 SET @saved_cs_client = @@character_set_client */;
149/*!40101 SET character_set_client = utf8 */;
150CREATE TABLE `t2` (
151 `id` int(11) NOT NULL AUTO_INCREMENT,
152 UNIQUE KEY `id` (`id`)
153) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;
154/*!40101 SET character_set_client = @saved_cs_client */;
155
156LOCK TABLES `t2` WRITE;
157/*!40000 ALTER TABLE `t2` DISABLE KEYS */;
158INSERT INTO `t2` VALUES (1),(2),(3);
159/*!40000 ALTER TABLE `t2` ENABLE KEYS */;
160UNLOCK TABLES;
161/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
162
163/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
164/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
165/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
166/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
167/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
168/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
169/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
170
171######################################
172DROP TABLE t1, t2;
173CREATE TABLE t1 (
174a INT NOT NULL,
175UNIQUE KEY (a)) ENGINE=InnoDB;
176CREATE TABLE t2 (
177a INT NOT NULL,
178b INT NOT NULL,
179UNIQUE KEY (a,b)) ENGINE=InnoDB;
180CREATE TABLE t3 (
181a INT,
182b INT,
183UNIQUE KEY (a,b)) ENGINE=InnoDB;
184CREATE TABLE t4 (
185a INT NOT NULL,
186b INT NOT NULL,
187PRIMARY KEY (a,b),
188UNIQUE KEY(b)) ENGINE=InnoDB;
189SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE
190TABLE_SCHEMA=DATABASE() AND
191TABLE_NAME='t1' AND
192COLUMN_KEY='PRI';
193COUNT(*)
1941
195SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE
196TABLE_SCHEMA=DATABASE() AND
197TABLE_NAME='t2' AND
198COLUMN_KEY='PRI';
199COUNT(*)
2002
201SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE
202TABLE_SCHEMA=DATABASE() AND
203TABLE_NAME='t3' AND
204COLUMN_KEY='PRI';
205COUNT(*)
2060
207SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE
208TABLE_SCHEMA=DATABASE() AND
209TABLE_NAME='t4' AND
210COLUMN_KEY='PRI';
211COUNT(*)
2122
213INSERT INTO t1 VALUES (1), (2), (3);
214INSERT INTO t2 VALUES (1,1), (2,2), (3,3);
215INSERT INTO t3 SELECT * FROM t2;
216INSERT INTO t4 SELECT * FROM t2;
217######################################
218
219/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
220/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
221/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
222/*!40101 SET NAMES utf8 */;
223/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
224/*!40103 SET TIME_ZONE='+00:00' */;
225/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
226/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
227/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
228/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
229DROP TABLE IF EXISTS `t1`;
230/*!40101 SET @saved_cs_client = @@character_set_client */;
231/*!40101 SET character_set_client = utf8 */;
232CREATE TABLE `t1` (
233 `a` int(11) NOT NULL,
234 UNIQUE KEY `a` (`a`)
235) ENGINE=InnoDB DEFAULT CHARSET=latin1;
236/*!40101 SET character_set_client = @saved_cs_client */;
237
238LOCK TABLES `t1` WRITE;
239/*!40000 ALTER TABLE `t1` DISABLE KEYS */;
240INSERT INTO `t1` VALUES (1),(2),(3);
241/*!40000 ALTER TABLE `t1` ENABLE KEYS */;
242UNLOCK TABLES;
243DROP TABLE IF EXISTS `t2`;
244/*!40101 SET @saved_cs_client = @@character_set_client */;
245/*!40101 SET character_set_client = utf8 */;
246CREATE TABLE `t2` (
247 `a` int(11) NOT NULL,
248 `b` int(11) NOT NULL,
249 UNIQUE KEY `a` (`a`,`b`)
250) ENGINE=InnoDB DEFAULT CHARSET=latin1;
251/*!40101 SET character_set_client = @saved_cs_client */;
252
253LOCK TABLES `t2` WRITE;
254/*!40000 ALTER TABLE `t2` DISABLE KEYS */;
255INSERT INTO `t2` VALUES (1,1),(2,2),(3,3);
256/*!40000 ALTER TABLE `t2` ENABLE KEYS */;
257UNLOCK TABLES;
258DROP TABLE IF EXISTS `t3`;
259/*!40101 SET @saved_cs_client = @@character_set_client */;
260/*!40101 SET character_set_client = utf8 */;
261CREATE TABLE `t3` (
262 `a` int(11) DEFAULT NULL,
263 `b` int(11) DEFAULT NULL
264) ENGINE=InnoDB DEFAULT CHARSET=latin1;
265/*!40101 SET character_set_client = @saved_cs_client */;
266
267LOCK TABLES `t3` WRITE;
268/*!40000 ALTER TABLE `t3` DISABLE KEYS */;
269INSERT INTO `t3` VALUES (1,1),(2,2),(3,3);
270ALTER TABLE `t3` ADD UNIQUE KEY `a` (`a`,`b`);
271/*!40000 ALTER TABLE `t3` ENABLE KEYS */;
272UNLOCK TABLES;
273DROP TABLE IF EXISTS `t4`;
274/*!40101 SET @saved_cs_client = @@character_set_client */;
275/*!40101 SET character_set_client = utf8 */;
276CREATE TABLE `t4` (
277 `a` int(11) NOT NULL,
278 `b` int(11) NOT NULL,
279 PRIMARY KEY (`a`,`b`)
280) ENGINE=InnoDB DEFAULT CHARSET=latin1;
281/*!40101 SET character_set_client = @saved_cs_client */;
282
283LOCK TABLES `t4` WRITE;
284/*!40000 ALTER TABLE `t4` DISABLE KEYS */;
285INSERT INTO `t4` VALUES (1,1),(2,2),(3,3);
286ALTER TABLE `t4` ADD UNIQUE KEY `b` (`b`);
287/*!40000 ALTER TABLE `t4` ENABLE KEYS */;
288UNLOCK TABLES;
289/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
290
291/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
292/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
293/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
294/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
295/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
296/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
297/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
298
299######################################
300DROP TABLE t1, t2, t3, t4;
301CREATE TABLE t1 (
302id INT NOT NULL PRIMARY KEY
303) ENGINE=InnoDB;
304CREATE TABLE t2 (
305id INT NOT NULL AUTO_INCREMENT,
306a INT NOT NULL,
307PRIMARY KEY (id),
308KEY (a),
309FOREIGN KEY (a) REFERENCES t2 (id)
310) ENGINE=InnoDB;
311INSERT INTO t1 VALUES (1), (2), (3);
312INSERT INTO t2 VALUES (1, 1), (2, 2), (3, 3);
313######################################
314
315/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
316/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
317/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
318/*!40101 SET NAMES utf8 */;
319/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
320/*!40103 SET TIME_ZONE='+00:00' */;
321/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
322/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
323/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
324/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
325DROP TABLE IF EXISTS `t1`;
326/*!40101 SET @saved_cs_client = @@character_set_client */;
327/*!40101 SET character_set_client = utf8 */;
328CREATE TABLE `t1` (
329 `id` int(11) NOT NULL,
330 PRIMARY KEY (`id`)
331) ENGINE=InnoDB DEFAULT CHARSET=latin1;
332/*!40101 SET character_set_client = @saved_cs_client */;
333
334LOCK TABLES `t1` WRITE;
335/*!40000 ALTER TABLE `t1` DISABLE KEYS */;
336INSERT INTO `t1` VALUES (1),(2),(3);
337/*!40000 ALTER TABLE `t1` ENABLE KEYS */;
338UNLOCK TABLES;
339DROP TABLE IF EXISTS `t2`;
340/*!40101 SET @saved_cs_client = @@character_set_client */;
341/*!40101 SET character_set_client = utf8 */;
342CREATE TABLE `t2` (
343 `id` int(11) NOT NULL AUTO_INCREMENT,
344 `a` int(11) NOT NULL,
345 PRIMARY KEY (`id`),
346 CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`a`) REFERENCES `t2` (`id`)
347) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;
348/*!40101 SET character_set_client = @saved_cs_client */;
349
350LOCK TABLES `t2` WRITE;
351/*!40000 ALTER TABLE `t2` DISABLE KEYS */;
352INSERT INTO `t2` VALUES (1,1),(2,2),(3,3);
353ALTER TABLE `t2` ADD KEY `a` (`a`);
354/*!40000 ALTER TABLE `t2` ENABLE KEYS */;
355UNLOCK TABLES;
356/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
357
358/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
359/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
360/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
361/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
362/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
363/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
364/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
365
366######################################
367DROP TABLE t1, t2;
3680
=== added file 'Percona-Server/mysql-test/t/percona_mysqldump_innodb_optimize_keys.test'
--- Percona-Server/mysql-test/t/percona_mysqldump_innodb_optimize_keys.test 1970-01-01 00:00:00 +0000
+++ Percona-Server/mysql-test/t/percona_mysqldump_innodb_optimize_keys.test 2012-11-20 09:38:30 +0000
@@ -0,0 +1,227 @@
1# Embedded server doesn't support external clients
2--source include/not_embedded.inc
3
4# Fast index creation is only available in InnoDB plugin
5--source include/have_innodb.inc
6
7# Save the initial number of concurrent sessions
8--source include/count_sessions.inc
9
10--echo #
11--echo # Test the --innodb-optimize-keys option.
12--echo #
13
14--let $file=$MYSQLTEST_VARDIR/tmp/t1.sql
15
16# First test that the option has no effect on non-InnoDB tables
17
18CREATE TABLE t1 (a INT NOT NULL PRIMARY KEY, b INT, KEY(b)) ENGINE=MyISAM;
19
20--exec $MYSQL_DUMP --skip-comments --innodb-optimize-keys test t1 >$file
21
22--echo ######################################
23--cat_file $file
24--echo ######################################
25
26--remove_file $file
27
28DROP TABLE t1;
29
30# Check that for InnoDB tables secondary keys are created after the data is
31# dumped but foreign ones are left in CREATE TABLE
32
33CREATE TABLE t2 (a INT PRIMARY KEY) ENGINE=InnoDB;
34INSERT INTO t2 VALUES (0), (1), (2);
35
36CREATE TABLE t1 (
37 id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
38 a INT, b VARCHAR(255), c DECIMAL(10,3),
39 KEY (b),
40 UNIQUE KEY uniq(c,a),
41 FOREIGN KEY (a) REFERENCES t2(a) ON DELETE CASCADE
42) ENGINE=InnoDB;
43
44INSERT INTO t1(a,b,c) VALUES (0, "0", 0.0), (1, "1", 1.1), (2, "2", 2.2);
45
46--exec $MYSQL_DUMP --skip-comments --innodb-optimize-keys test t1 t2 >$file
47
48--echo ######################################
49--cat_file $file
50--echo ######################################
51
52# Check that the resulting dump can be imported back
53
54--exec $MYSQL test < $file
55
56--remove_file $file
57
58DROP TABLE t1, t2;
59
60########################################################################
61# Bug #812179: AUTO_INCREMENT columns must be skipped by the
62# --innodb-optimize-keys optimization in mysqldump
63########################################################################
64
65CREATE TABLE t1 (
66 id INT NOT NULL AUTO_INCREMENT,
67 KEY (id)
68) ENGINE=InnoDB;
69
70CREATE TABLE t2 (
71 id INT NOT NULL AUTO_INCREMENT,
72 UNIQUE KEY (id)
73) ENGINE=InnoDB;
74
75INSERT INTO t1 VALUES (), (), ();
76INSERT INTO t2 VALUES (), (), ();
77
78--exec $MYSQL_DUMP --skip-comments --innodb-optimize-keys test t1 t2 >$file
79
80--echo ######################################
81--cat_file $file
82--echo ######################################
83
84# Check that the resulting dump can be imported back
85
86--exec $MYSQL test < $file
87
88--remove_file $file
89
90DROP TABLE t1, t2;
91
92########################################################################
93# Bug #851674: --innodb-optimize-keys does not work correctly with table
94# without PRIMARY KEY
95########################################################################
96
97CREATE TABLE t1 (
98 a INT NOT NULL,
99 UNIQUE KEY (a)) ENGINE=InnoDB;
100
101CREATE TABLE t2 (
102 a INT NOT NULL,
103 b INT NOT NULL,
104 UNIQUE KEY (a,b)) ENGINE=InnoDB;
105
106CREATE TABLE t3 (
107 a INT,
108 b INT,
109 UNIQUE KEY (a,b)) ENGINE=InnoDB;
110
111CREATE TABLE t4 (
112 a INT NOT NULL,
113 b INT NOT NULL,
114 PRIMARY KEY (a,b),
115 UNIQUE KEY(b)) ENGINE=InnoDB;
116
117SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE
118 TABLE_SCHEMA=DATABASE() AND
119 TABLE_NAME='t1' AND
120 COLUMN_KEY='PRI';
121SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE
122 TABLE_SCHEMA=DATABASE() AND
123 TABLE_NAME='t2' AND
124 COLUMN_KEY='PRI';
125SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE
126 TABLE_SCHEMA=DATABASE() AND
127 TABLE_NAME='t3' AND
128 COLUMN_KEY='PRI';
129SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE
130 TABLE_SCHEMA=DATABASE() AND
131 TABLE_NAME='t4' AND
132 COLUMN_KEY='PRI';
133
134INSERT INTO t1 VALUES (1), (2), (3);
135INSERT INTO t2 VALUES (1,1), (2,2), (3,3);
136INSERT INTO t3 SELECT * FROM t2;
137INSERT INTO t4 SELECT * FROM t2;
138
139--exec $MYSQL_DUMP --skip-comments --innodb-optimize-keys test t1 t2 t3 t4 >$file
140
141--echo ######################################
142--cat_file $file
143--echo ######################################
144
145# Check that the resulting dump can be imported back
146
147--exec $MYSQL test < $file
148
149--remove_file $file
150
151DROP TABLE t1, t2, t3, t4;
152
153########################################################################
154# Bug #859078: --innodb-optimize-keys should ignore foreign keys
155########################################################################
156
157CREATE TABLE t1 (
158 id INT NOT NULL PRIMARY KEY
159) ENGINE=InnoDB;
160
161CREATE TABLE t2 (
162 id INT NOT NULL AUTO_INCREMENT,
163 a INT NOT NULL,
164 PRIMARY KEY (id),
165 KEY (a),
166 FOREIGN KEY (a) REFERENCES t2 (id)
167) ENGINE=InnoDB;
168
169INSERT INTO t1 VALUES (1), (2), (3);
170INSERT INTO t2 VALUES (1, 1), (2, 2), (3, 3);
171
172--exec $MYSQL_DUMP --skip-comments --innodb-optimize-keys test t1 t2 >$file
173
174--echo ######################################
175--cat_file $file
176--echo ######################################
177
178# Check that the resulting dump can be imported back
179
180--exec $MYSQL test < $file
181
182--remove_file $file
183
184DROP TABLE t1, t2;
185
186########################################################################
187# Bug #1039536: mysqldump --innodb-optimize-keys can generate invalid table
188# definitions
189########################################################################
190
191CREATE TABLE t1 (
192 id INT NOT NULL AUTO_INCREMENT,
193 uid INT NOT NULL,
194 `id``` INT NOT NULL,
195 ```id` INT NOT NULL,
196 # The following ones may be skipped and used in ALTER TABLE later
197 KEY k1 (```id`, id),
198 KEY k2 (```id`, `id```),
199 # The following one should be kept in CREATE TABLE
200 KEY k3 (id, uid),
201 # The following one may be skipped again
202 KEY k4 (id, `id```)
203) ENGINE=InnoDB;
204
205CREATE TABLE t2 (
206 id INT NOT NULL AUTO_INCREMENT,
207 PRIMARY KEY (id),
208 KEY k1 (id),
209 KEY k2 (id)
210) ENGINE=InnoDB;
211
212--exec $MYSQL_DUMP --skip-comments --innodb-optimize-keys test t1 t2 >$file
213
214--echo ######################################
215--cat_file $file
216--echo ######################################
217
218# Check that the resulting dump can be imported back
219
220--exec $MYSQL test < $file
221
222--remove_file $file
223
224DROP TABLE t1, t2;
225
226# Wait till we reached the initial number of concurrent sessions
227--source include/wait_until_count_sessions.inc
0228
=== removed file 'Percona-Server/mysql-test/t/percona_mysqldump_innodb_optimize_keys.test'
--- Percona-Server/mysql-test/t/percona_mysqldump_innodb_optimize_keys.test 2012-04-18 23:26:09 +0000
+++ Percona-Server/mysql-test/t/percona_mysqldump_innodb_optimize_keys.test 1970-01-01 00:00:00 +0000
@@ -1,188 +0,0 @@
1# Embedded server doesn't support external clients
2--source include/not_embedded.inc
3
4# Fast index creation is only available in InnoDB plugin
5--source include/have_innodb.inc
6
7# Save the initial number of concurrent sessions
8--source include/count_sessions.inc
9
10--echo #
11--echo # Test the --innodb-optimize-keys option.
12--echo #
13
14--let $file=$MYSQLTEST_VARDIR/tmp/t1.sql
15
16# First test that the option has no effect on non-InnoDB tables
17
18CREATE TABLE t1 (a INT NOT NULL PRIMARY KEY, b INT, KEY(b)) ENGINE=MyISAM;
19
20--exec $MYSQL_DUMP --skip-comments --innodb-optimize-keys test t1 >$file
21
22--echo ######################################
23--cat_file $file
24--echo ######################################
25
26--remove_file $file
27
28DROP TABLE t1;
29
30
31# Check that for InnoDB tables secondary keys are created after the data is
32# dumped but foreign ones are left in CREATE TABLE
33
34CREATE TABLE t2 (a INT PRIMARY KEY) ENGINE=InnoDB;
35INSERT INTO t2 VALUES (0), (1), (2);
36
37CREATE TABLE t1 (
38 id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
39 a INT, b VARCHAR(255), c DECIMAL(10,3),
40 KEY (b),
41 UNIQUE KEY uniq(c,a),
42 FOREIGN KEY (a) REFERENCES t2(a) ON DELETE CASCADE
43) ENGINE=InnoDB;
44
45INSERT INTO t1(a,b,c) VALUES (0, "0", 0.0), (1, "1", 1.1), (2, "2", 2.2);
46
47--exec $MYSQL_DUMP --skip-comments --innodb-optimize-keys test t1 t2 >$file
48
49--echo ######################################
50--cat_file $file
51--echo ######################################
52
53# Check that the resulting dump can be imported back
54
55--exec $MYSQL test < $file
56
57--remove_file $file
58
59DROP TABLE t1, t2;
60
61########################################################################
62# Bug #812179: AUTO_INCREMENT columns must be skipped by the
63# --innodb-optimize-keys optimization in mysqldump
64########################################################################
65
66CREATE TABLE t1 (
67 id INT NOT NULL AUTO_INCREMENT,
68 KEY (id)
69) ENGINE=InnoDB;
70
71CREATE TABLE t2 (
72 id INT NOT NULL AUTO_INCREMENT,
73 UNIQUE KEY (id)
74) ENGINE=InnoDB;
75
76INSERT INTO t1 VALUES (), (), ();
77INSERT INTO t2 VALUES (), (), ();
78
79--exec $MYSQL_DUMP --skip-comments --innodb-optimize-keys test t1 t2 >$file
80
81--echo ######################################
82--cat_file $file
83--echo ######################################
84
85# Check that the resulting dump can be imported back
86
87--exec $MYSQL test < $file
88
89--remove_file $file
90
91DROP TABLE t1, t2;
92
93########################################################################
94# Bug #851674: --innodb-optimize-keys does not work correctly with table
95# without PRIMARY KEY
96########################################################################
97
98CREATE TABLE t1 (
99 a INT NOT NULL,
100 UNIQUE KEY (a)) ENGINE=InnoDB;
101
102CREATE TABLE t2 (
103 a INT NOT NULL,
104 b INT NOT NULL,
105 UNIQUE KEY (a,b)) ENGINE=InnoDB;
106
107CREATE TABLE t3 (
108 a INT,
109 b INT,
110 UNIQUE KEY (a,b)) ENGINE=InnoDB;
111
112CREATE TABLE t4 (
113 a INT NOT NULL,
114 b INT NOT NULL,
115 PRIMARY KEY (a,b),
116 UNIQUE KEY(b)) ENGINE=InnoDB;
117
118SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE
119 TABLE_SCHEMA=DATABASE() AND
120 TABLE_NAME='t1' AND
121 COLUMN_KEY='PRI';
122SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE
123 TABLE_SCHEMA=DATABASE() AND
124 TABLE_NAME='t2' AND
125 COLUMN_KEY='PRI';
126SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE
127 TABLE_SCHEMA=DATABASE() AND
128 TABLE_NAME='t3' AND
129 COLUMN_KEY='PRI';
130SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE
131 TABLE_SCHEMA=DATABASE() AND
132 TABLE_NAME='t4' AND
133 COLUMN_KEY='PRI';
134
135INSERT INTO t1 VALUES (1), (2), (3);
136INSERT INTO t2 VALUES (1,1), (2,2), (3,3);
137INSERT INTO t3 SELECT * FROM t2;
138INSERT INTO t4 SELECT * FROM t2;
139
140--exec $MYSQL_DUMP --skip-comments --innodb-optimize-keys test t1 t2 t3 t4 >$file
141
142--echo ######################################
143--cat_file $file
144--echo ######################################
145
146# Check that the resulting dump can be imported back
147
148--exec $MYSQL test < $file
149
150--remove_file $file
151
152DROP TABLE t1, t2, t3, t4;
153
154########################################################################
155# Bug #859078: --innodb-optimize-keys should ignore foreign keys
156########################################################################
157
158CREATE TABLE t1 (
159 id INT NOT NULL PRIMARY KEY
160) ENGINE=InnoDB;
161
162CREATE TABLE t2 (
163 id INT NOT NULL AUTO_INCREMENT,
164 a INT NOT NULL,
165 PRIMARY KEY (id),
166 KEY (a),
167 FOREIGN KEY (a) REFERENCES t2 (id)
168) ENGINE=InnoDB;
169
170INSERT INTO t1 VALUES (1), (2), (3);
171INSERT INTO t2 VALUES (1, 1), (2, 2), (3, 3);
172
173--exec $MYSQL_DUMP --skip-comments --innodb-optimize-keys test t1 t2 >$file
174
175--echo ######################################
176--cat_file $file
177--echo ######################################
178
179# Check that the resulting dump can be imported back
180
181--exec $MYSQL test < $file
182
183--remove_file $file
184
185DROP TABLE t1, t2;
186
187# Wait till we reached the initial number of concurrent sessions
188--source include/wait_until_count_sessions.inc

Subscribers

People subscribed via source and target branches