Merge lp:~akopytov/percona-server/bugs-1039536-1081003-5.5 into lp:percona-server/5.5
- bugs-1039536-1081003-5.5
- Merge into 5.5
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 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Laurynas Biveinis (community) | Approve | ||
Review via email: mp+135092@code.launchpad.net |
Commit message
Description of the change
Bug #1039536: mysqldump --innodb-
table definitions
Bug #1081003: mysqldump --innodb-
The problem in bug #1039536 was that mysqldump --innodb-
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-
- 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
Alexey Kopytov (akopytov) wrote : | # |
Laurynas Biveinis (laurynas-biveinis) wrote : | # |
Same minor comments as for 5.1.
Preview Diff
1 | === modified file 'Percona-Server/client/mysqldump.c' | |||
2 | --- Percona-Server/client/mysqldump.c 2012-10-17 03:47:45 +0000 | |||
3 | +++ Percona-Server/client/mysqldump.c 2012-11-20 09:38:30 +0000 | |||
4 | @@ -84,6 +84,13 @@ | |||
5 | 84 | #define IGNORE_DATA 0x01 /* don't dump data for this table */ | 84 | #define IGNORE_DATA 0x01 /* don't dump data for this table */ |
6 | 85 | #define IGNORE_INSERT_DELAYED 0x02 /* table doesn't support INSERT DELAYED */ | 85 | #define IGNORE_INSERT_DELAYED 0x02 /* table doesn't support INSERT DELAYED */ |
7 | 86 | 86 | ||
8 | 87 | typedef enum { | ||
9 | 88 | KEY_TYPE_NONE, | ||
10 | 89 | KEY_TYPE_PRIMARY, | ||
11 | 90 | KEY_TYPE_UNIQUE, | ||
12 | 91 | KEY_TYPE_NON_UNIQUE | ||
13 | 92 | } key_type_t; | ||
14 | 93 | |||
15 | 87 | /* general_log or slow_log tables under mysql database */ | 94 | /* general_log or slow_log tables under mysql database */ |
16 | 88 | static inline my_bool general_log_or_slow_log_tables(const char *db, | 95 | static inline my_bool general_log_or_slow_log_tables(const char *db, |
17 | 89 | const char *table) | 96 | const char *table) |
18 | @@ -2454,20 +2461,62 @@ | |||
19 | 2454 | } | 2461 | } |
20 | 2455 | 2462 | ||
21 | 2456 | /* | 2463 | /* |
24 | 2457 | Parse the specified key definition string and check if the key indexes | 2464 | Parse the specified key definition string and check if the key contains an |
25 | 2458 | any of the columns from ignored_columns. | 2465 | AUTO_INCREMENT column as the first key part. We only check for the first key |
26 | 2466 | part, because unlike MyISAM, InnoDB does not allow the AUTO_INCREMENT column | ||
27 | 2467 | as a secondary key column, i.e. the AUTO_INCREMENT column would not be | ||
28 | 2468 | considered indexed for such key specification. | ||
29 | 2459 | */ | 2469 | */ |
31 | 2460 | static my_bool contains_ignored_column(HASH *ignored_columns, char *keydef) | 2470 | static my_bool contains_autoinc_column(const char *autoinc_column, |
32 | 2471 | const char *keydef, | ||
33 | 2472 | key_type_t type) | ||
34 | 2461 | { | 2473 | { |
44 | 2462 | char *leftp, *rightp; | 2474 | char *from, *to; |
45 | 2463 | 2475 | uint idnum; | |
46 | 2464 | if ((leftp = strchr(keydef, '(')) && | 2476 | |
47 | 2465 | (rightp = strchr(leftp, ')')) && | 2477 | DBUG_ASSERT(type != KEY_TYPE_NONE); |
48 | 2466 | rightp > leftp + 3 && /* (`...`) */ | 2478 | |
49 | 2467 | leftp[1] == '`' && | 2479 | if (autoinc_column == NULL || !(from= strchr(keydef, '`'))) |
50 | 2468 | rightp[-1] == '`' && | 2480 | return FALSE; |
51 | 2469 | my_hash_search(ignored_columns, (uchar *) leftp + 2, rightp - leftp - 3)) | 2481 | |
52 | 2470 | return TRUE; | 2482 | to= from; |
53 | 2483 | idnum= 0; | ||
54 | 2484 | |||
55 | 2485 | while ((to= strchr(to + 1, '`'))) | ||
56 | 2486 | { | ||
57 | 2487 | /* | ||
58 | 2488 | Double backticks represent a backtick in identifier, rather than a quote | ||
59 | 2489 | character. | ||
60 | 2490 | */ | ||
61 | 2491 | if (to[1] == '`') | ||
62 | 2492 | { | ||
63 | 2493 | to++; | ||
64 | 2494 | continue; | ||
65 | 2495 | } | ||
66 | 2496 | |||
67 | 2497 | if (to <= from + 1) | ||
68 | 2498 | break; /* Broken key definition */ | ||
69 | 2499 | |||
70 | 2500 | idnum++; | ||
71 | 2501 | |||
72 | 2502 | /* | ||
73 | 2503 | Skip the check if it's the first identifier and we are processing a | ||
74 | 2504 | secondary key. | ||
75 | 2505 | */ | ||
76 | 2506 | if ((type == KEY_TYPE_PRIMARY || idnum != 1) && | ||
77 | 2507 | !strncmp(autoinc_column, from + 1, to - from - 1)) | ||
78 | 2508 | return TRUE; | ||
79 | 2509 | |||
80 | 2510 | /* | ||
81 | 2511 | Check only the first (for PRIMARY KEY) or the second (for secondary keys) | ||
82 | 2512 | quoted identifier. | ||
83 | 2513 | */ | ||
84 | 2514 | if ((idnum == 1 + test(type != KEY_TYPE_PRIMARY)) || | ||
85 | 2515 | !(from= strchr(to + 1, '`'))) | ||
86 | 2516 | break; | ||
87 | 2517 | |||
88 | 2518 | to= from; | ||
89 | 2519 | } | ||
90 | 2471 | 2520 | ||
91 | 2472 | return FALSE; | 2521 | return FALSE; |
92 | 2473 | } | 2522 | } |
93 | @@ -2495,13 +2544,11 @@ | |||
94 | 2495 | static void skip_secondary_keys(char *create_str, my_bool has_pk) | 2544 | static void skip_secondary_keys(char *create_str, my_bool has_pk) |
95 | 2496 | { | 2545 | { |
96 | 2497 | char *ptr, *strend; | 2546 | char *ptr, *strend; |
99 | 2498 | char *last_comma = NULL; | 2547 | char *last_comma= NULL; |
98 | 2499 | HASH ignored_columns; | ||
100 | 2500 | my_bool pk_processed= FALSE; | 2548 | my_bool pk_processed= FALSE; |
105 | 2501 | 2549 | char *autoinc_column= NULL; | |
106 | 2502 | if (my_hash_init(&ignored_columns, charset_info, 16, 0, 0, | 2550 | my_bool has_autoinc= FALSE; |
107 | 2503 | (my_hash_get_key) get_table_key, my_free, 0)) | 2551 | key_type_t type; |
104 | 2504 | exit(EX_EOM); | ||
108 | 2505 | 2552 | ||
109 | 2506 | strend= create_str + strlen(create_str); | 2553 | strend= create_str + strlen(create_str); |
110 | 2507 | 2554 | ||
111 | @@ -2509,7 +2556,6 @@ | |||
112 | 2509 | while (*ptr) | 2556 | while (*ptr) |
113 | 2510 | { | 2557 | { |
114 | 2511 | char *tmp, *orig_ptr, c; | 2558 | char *tmp, *orig_ptr, c; |
115 | 2512 | my_bool is_unique= FALSE; | ||
116 | 2513 | 2559 | ||
117 | 2514 | orig_ptr= ptr; | 2560 | orig_ptr= ptr; |
118 | 2515 | /* Skip leading whitespace */ | 2561 | /* Skip leading whitespace */ |
119 | @@ -2522,12 +2568,22 @@ | |||
120 | 2522 | c= *tmp; | 2568 | c= *tmp; |
121 | 2523 | *tmp= '\0'; /* so strstr() only processes the current line */ | 2569 | *tmp= '\0'; /* so strstr() only processes the current line */ |
122 | 2524 | 2570 | ||
123 | 2571 | if (!strncmp(ptr, "UNIQUE KEY ", sizeof("UNIQUE KEY ") - 1)) | ||
124 | 2572 | type= KEY_TYPE_UNIQUE; | ||
125 | 2573 | else if (!strncmp(ptr, "KEY ", sizeof("KEY ") - 1)) | ||
126 | 2574 | type= KEY_TYPE_NON_UNIQUE; | ||
127 | 2575 | else if (!strncmp(ptr, "PRIMARY KEY ", sizeof("PRIMARY KEY ") - 1)) | ||
128 | 2576 | type= KEY_TYPE_PRIMARY; | ||
129 | 2577 | else | ||
130 | 2578 | type= KEY_TYPE_NONE; | ||
131 | 2579 | |||
132 | 2580 | has_autoinc= (type != KEY_TYPE_NONE) ? | ||
133 | 2581 | contains_autoinc_column(autoinc_column, ptr, type) : FALSE; | ||
134 | 2582 | |||
135 | 2525 | /* Is it a secondary index definition? */ | 2583 | /* Is it a secondary index definition? */ |
136 | 2526 | if (c == '\n' && | 2584 | if (c == '\n' && |
141 | 2527 | (((is_unique= !strncmp(ptr, "UNIQUE KEY ", sizeof("UNIQUE KEY ")-1)) && | 2585 | ((type == KEY_TYPE_UNIQUE && (pk_processed || !has_pk)) || |
142 | 2528 | (pk_processed || !has_pk)) || | 2586 | type == KEY_TYPE_NON_UNIQUE) && !has_autoinc) |
139 | 2529 | !strncmp(ptr, "KEY ", sizeof("KEY ") - 1)) && | ||
140 | 2530 | !contains_ignored_column(&ignored_columns, ptr)) | ||
143 | 2531 | { | 2587 | { |
144 | 2532 | char *data, *end= tmp - 1; | 2588 | char *data, *end= tmp - 1; |
145 | 2533 | 2589 | ||
146 | @@ -2560,23 +2616,41 @@ | |||
147 | 2560 | *last_comma= ','; | 2616 | *last_comma= ','; |
148 | 2561 | } | 2617 | } |
149 | 2562 | 2618 | ||
152 | 2563 | if ((has_pk && is_unique && !pk_processed) || | 2619 | /* |
153 | 2564 | !strncmp(ptr, "PRIMARY KEY ", sizeof("PRIMARY KEY ") - 1)) | 2620 | If we are skipping a key which indexes an AUTO_INCREMENT column, it is |
154 | 2621 | safe to optimize all subsequent keys, i.e. we should not be checking for | ||
155 | 2622 | that column anymore. | ||
156 | 2623 | */ | ||
157 | 2624 | if (type != KEY_TYPE_NONE && has_autoinc) | ||
158 | 2625 | { | ||
159 | 2626 | DBUG_ASSERT(autoinc_column != NULL); | ||
160 | 2627 | |||
161 | 2628 | my_free(autoinc_column); | ||
162 | 2629 | autoinc_column= NULL; | ||
163 | 2630 | } | ||
164 | 2631 | |||
165 | 2632 | if ((has_pk && type == KEY_TYPE_UNIQUE && !pk_processed) || | ||
166 | 2633 | type == KEY_TYPE_PRIMARY) | ||
167 | 2565 | pk_processed= TRUE; | 2634 | pk_processed= TRUE; |
168 | 2566 | 2635 | ||
169 | 2567 | if (strstr(ptr, "AUTO_INCREMENT") && *ptr == '`') | 2636 | if (strstr(ptr, "AUTO_INCREMENT") && *ptr == '`') |
170 | 2568 | { | 2637 | { |
171 | 2569 | /* | 2638 | /* |
174 | 2570 | If a secondary key is defined on this column later, | 2639 | The first secondary key defined on this column later cannot be |
175 | 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 |
176 | 2641 | PRIMARY KEY and it indexes that column. | ||
177 | 2572 | */ | 2642 | */ |
183 | 2573 | for (end= ptr + 1; *end != '`' && *end != '\0'; end++); | 2643 | for (end= ptr + 1; |
184 | 2574 | if (*end == '`' && end > ptr + 1 && | 2644 | /* Skip double backticks as they are a part of identifier */ |
185 | 2575 | my_hash_insert(&ignored_columns, | 2645 | *end != '\0' && (*end != '`' || end[1] == '`'); |
186 | 2576 | (uchar *) my_strndup(ptr + 1, | 2646 | end++) |
187 | 2577 | end - ptr - 1, MYF(0)))) | 2647 | /* empty */; |
188 | 2648 | |||
189 | 2649 | if (*end == '`' && end > ptr + 1) | ||
190 | 2578 | { | 2650 | { |
192 | 2579 | exit(EX_EOM); | 2651 | DBUG_ASSERT(autoinc_column == NULL); |
193 | 2652 | |||
194 | 2653 | autoinc_column= my_strndup(ptr + 1, end - ptr - 1, MYF(MY_FAE)); | ||
195 | 2580 | } | 2654 | } |
196 | 2581 | } | 2655 | } |
197 | 2582 | 2656 | ||
198 | @@ -2588,7 +2662,7 @@ | |||
199 | 2588 | } | 2662 | } |
200 | 2589 | } | 2663 | } |
201 | 2590 | 2664 | ||
203 | 2591 | my_hash_free(&ignored_columns); | 2665 | my_free(autoinc_column); |
204 | 2592 | } | 2666 | } |
205 | 2593 | 2667 | ||
206 | 2594 | /* | 2668 | /* |
207 | 2595 | 2669 | ||
208 | === added file 'Percona-Server/mysql-test/r/percona_mysqldump_innodb_optimize_keys.result' | |||
209 | --- Percona-Server/mysql-test/r/percona_mysqldump_innodb_optimize_keys.result 1970-01-01 00:00:00 +0000 | |||
210 | +++ Percona-Server/mysql-test/r/percona_mysqldump_innodb_optimize_keys.result 2012-11-20 09:38:30 +0000 | |||
211 | @@ -0,0 +1,441 @@ | |||
212 | 1 | # | ||
213 | 2 | # Test the --innodb-optimize-keys option. | ||
214 | 3 | # | ||
215 | 4 | CREATE TABLE t1 (a INT NOT NULL PRIMARY KEY, b INT, KEY(b)) ENGINE=MyISAM; | ||
216 | 5 | ###################################### | ||
217 | 6 | |||
218 | 7 | /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; | ||
219 | 8 | /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; | ||
220 | 9 | /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; | ||
221 | 10 | /*!40101 SET NAMES utf8 */; | ||
222 | 11 | /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; | ||
223 | 12 | /*!40103 SET TIME_ZONE='+00:00' */; | ||
224 | 13 | /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; | ||
225 | 14 | /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; | ||
226 | 15 | /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; | ||
227 | 16 | /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; | ||
228 | 17 | DROP TABLE IF EXISTS `t1`; | ||
229 | 18 | /*!40101 SET @saved_cs_client = @@character_set_client */; | ||
230 | 19 | /*!40101 SET character_set_client = utf8 */; | ||
231 | 20 | CREATE TABLE `t1` ( | ||
232 | 21 | `a` int(11) NOT NULL, | ||
233 | 22 | `b` int(11) DEFAULT NULL, | ||
234 | 23 | PRIMARY KEY (`a`), | ||
235 | 24 | KEY `b` (`b`) | ||
236 | 25 | ) ENGINE=MyISAM DEFAULT CHARSET=latin1; | ||
237 | 26 | /*!40101 SET character_set_client = @saved_cs_client */; | ||
238 | 27 | |||
239 | 28 | LOCK TABLES `t1` WRITE; | ||
240 | 29 | /*!40000 ALTER TABLE `t1` DISABLE KEYS */; | ||
241 | 30 | /*!40000 ALTER TABLE `t1` ENABLE KEYS */; | ||
242 | 31 | UNLOCK TABLES; | ||
243 | 32 | /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; | ||
244 | 33 | |||
245 | 34 | /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; | ||
246 | 35 | /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; | ||
247 | 36 | /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; | ||
248 | 37 | /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; | ||
249 | 38 | /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; | ||
250 | 39 | /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; | ||
251 | 40 | /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; | ||
252 | 41 | |||
253 | 42 | ###################################### | ||
254 | 43 | DROP TABLE t1; | ||
255 | 44 | CREATE TABLE t2 (a INT PRIMARY KEY) ENGINE=InnoDB; | ||
256 | 45 | INSERT INTO t2 VALUES (0), (1), (2); | ||
257 | 46 | CREATE TABLE t1 ( | ||
258 | 47 | id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, | ||
259 | 48 | a INT, b VARCHAR(255), c DECIMAL(10,3), | ||
260 | 49 | KEY (b), | ||
261 | 50 | UNIQUE KEY uniq(c,a), | ||
262 | 51 | FOREIGN KEY (a) REFERENCES t2(a) ON DELETE CASCADE | ||
263 | 52 | ) ENGINE=InnoDB; | ||
264 | 53 | INSERT INTO t1(a,b,c) VALUES (0, "0", 0.0), (1, "1", 1.1), (2, "2", 2.2); | ||
265 | 54 | ###################################### | ||
266 | 55 | |||
267 | 56 | /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; | ||
268 | 57 | /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; | ||
269 | 58 | /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; | ||
270 | 59 | /*!40101 SET NAMES utf8 */; | ||
271 | 60 | /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; | ||
272 | 61 | /*!40103 SET TIME_ZONE='+00:00' */; | ||
273 | 62 | /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; | ||
274 | 63 | /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; | ||
275 | 64 | /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; | ||
276 | 65 | /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; | ||
277 | 66 | DROP TABLE IF EXISTS `t1`; | ||
278 | 67 | /*!40101 SET @saved_cs_client = @@character_set_client */; | ||
279 | 68 | /*!40101 SET character_set_client = utf8 */; | ||
280 | 69 | CREATE TABLE `t1` ( | ||
281 | 70 | `id` int(11) NOT NULL AUTO_INCREMENT, | ||
282 | 71 | `a` int(11) DEFAULT NULL, | ||
283 | 72 | `b` varchar(255) DEFAULT NULL, | ||
284 | 73 | `c` decimal(10,3) DEFAULT NULL, | ||
285 | 74 | PRIMARY KEY (`id`), | ||
286 | 75 | CONSTRAINT `t1_ibfk_1` FOREIGN KEY (`a`) REFERENCES `t2` (`a`) ON DELETE CASCADE | ||
287 | 76 | ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1; | ||
288 | 77 | /*!40101 SET character_set_client = @saved_cs_client */; | ||
289 | 78 | |||
290 | 79 | LOCK TABLES `t1` WRITE; | ||
291 | 80 | /*!40000 ALTER TABLE `t1` DISABLE KEYS */; | ||
292 | 81 | INSERT INTO `t1` VALUES (1,0,'0',0.000),(2,1,'1',1.100),(3,2,'2',2.200); | ||
293 | 82 | ALTER TABLE `t1` ADD UNIQUE KEY `uniq` (`c`,`a`), ADD KEY `b` (`b`), ADD KEY `a` (`a`); | ||
294 | 83 | /*!40000 ALTER TABLE `t1` ENABLE KEYS */; | ||
295 | 84 | UNLOCK TABLES; | ||
296 | 85 | DROP TABLE IF EXISTS `t2`; | ||
297 | 86 | /*!40101 SET @saved_cs_client = @@character_set_client */; | ||
298 | 87 | /*!40101 SET character_set_client = utf8 */; | ||
299 | 88 | CREATE TABLE `t2` ( | ||
300 | 89 | `a` int(11) NOT NULL, | ||
301 | 90 | PRIMARY KEY (`a`) | ||
302 | 91 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; | ||
303 | 92 | /*!40101 SET character_set_client = @saved_cs_client */; | ||
304 | 93 | |||
305 | 94 | LOCK TABLES `t2` WRITE; | ||
306 | 95 | /*!40000 ALTER TABLE `t2` DISABLE KEYS */; | ||
307 | 96 | INSERT INTO `t2` VALUES (0),(1),(2); | ||
308 | 97 | /*!40000 ALTER TABLE `t2` ENABLE KEYS */; | ||
309 | 98 | UNLOCK TABLES; | ||
310 | 99 | /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; | ||
311 | 100 | |||
312 | 101 | /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; | ||
313 | 102 | /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; | ||
314 | 103 | /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; | ||
315 | 104 | /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; | ||
316 | 105 | /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; | ||
317 | 106 | /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; | ||
318 | 107 | /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; | ||
319 | 108 | |||
320 | 109 | ###################################### | ||
321 | 110 | DROP TABLE t1, t2; | ||
322 | 111 | CREATE TABLE t1 ( | ||
323 | 112 | id INT NOT NULL AUTO_INCREMENT, | ||
324 | 113 | KEY (id) | ||
325 | 114 | ) ENGINE=InnoDB; | ||
326 | 115 | CREATE TABLE t2 ( | ||
327 | 116 | id INT NOT NULL AUTO_INCREMENT, | ||
328 | 117 | UNIQUE KEY (id) | ||
329 | 118 | ) ENGINE=InnoDB; | ||
330 | 119 | INSERT INTO t1 VALUES (), (), (); | ||
331 | 120 | INSERT INTO t2 VALUES (), (), (); | ||
332 | 121 | ###################################### | ||
333 | 122 | |||
334 | 123 | /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; | ||
335 | 124 | /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; | ||
336 | 125 | /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; | ||
337 | 126 | /*!40101 SET NAMES utf8 */; | ||
338 | 127 | /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; | ||
339 | 128 | /*!40103 SET TIME_ZONE='+00:00' */; | ||
340 | 129 | /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; | ||
341 | 130 | /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; | ||
342 | 131 | /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; | ||
343 | 132 | /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; | ||
344 | 133 | DROP TABLE IF EXISTS `t1`; | ||
345 | 134 | /*!40101 SET @saved_cs_client = @@character_set_client */; | ||
346 | 135 | /*!40101 SET character_set_client = utf8 */; | ||
347 | 136 | CREATE TABLE `t1` ( | ||
348 | 137 | `id` int(11) NOT NULL AUTO_INCREMENT, | ||
349 | 138 | KEY `id` (`id`) | ||
350 | 139 | ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1; | ||
351 | 140 | /*!40101 SET character_set_client = @saved_cs_client */; | ||
352 | 141 | |||
353 | 142 | LOCK TABLES `t1` WRITE; | ||
354 | 143 | /*!40000 ALTER TABLE `t1` DISABLE KEYS */; | ||
355 | 144 | INSERT INTO `t1` VALUES (1),(2),(3); | ||
356 | 145 | /*!40000 ALTER TABLE `t1` ENABLE KEYS */; | ||
357 | 146 | UNLOCK TABLES; | ||
358 | 147 | DROP TABLE IF EXISTS `t2`; | ||
359 | 148 | /*!40101 SET @saved_cs_client = @@character_set_client */; | ||
360 | 149 | /*!40101 SET character_set_client = utf8 */; | ||
361 | 150 | CREATE TABLE `t2` ( | ||
362 | 151 | `id` int(11) NOT NULL AUTO_INCREMENT, | ||
363 | 152 | UNIQUE KEY `id` (`id`) | ||
364 | 153 | ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1; | ||
365 | 154 | /*!40101 SET character_set_client = @saved_cs_client */; | ||
366 | 155 | |||
367 | 156 | LOCK TABLES `t2` WRITE; | ||
368 | 157 | /*!40000 ALTER TABLE `t2` DISABLE KEYS */; | ||
369 | 158 | INSERT INTO `t2` VALUES (1),(2),(3); | ||
370 | 159 | /*!40000 ALTER TABLE `t2` ENABLE KEYS */; | ||
371 | 160 | UNLOCK TABLES; | ||
372 | 161 | /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; | ||
373 | 162 | |||
374 | 163 | /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; | ||
375 | 164 | /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; | ||
376 | 165 | /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; | ||
377 | 166 | /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; | ||
378 | 167 | /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; | ||
379 | 168 | /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; | ||
380 | 169 | /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; | ||
381 | 170 | |||
382 | 171 | ###################################### | ||
383 | 172 | DROP TABLE t1, t2; | ||
384 | 173 | CREATE TABLE t1 ( | ||
385 | 174 | a INT NOT NULL, | ||
386 | 175 | UNIQUE KEY (a)) ENGINE=InnoDB; | ||
387 | 176 | CREATE TABLE t2 ( | ||
388 | 177 | a INT NOT NULL, | ||
389 | 178 | b INT NOT NULL, | ||
390 | 179 | UNIQUE KEY (a,b)) ENGINE=InnoDB; | ||
391 | 180 | CREATE TABLE t3 ( | ||
392 | 181 | a INT, | ||
393 | 182 | b INT, | ||
394 | 183 | UNIQUE KEY (a,b)) ENGINE=InnoDB; | ||
395 | 184 | CREATE TABLE t4 ( | ||
396 | 185 | a INT NOT NULL, | ||
397 | 186 | b INT NOT NULL, | ||
398 | 187 | PRIMARY KEY (a,b), | ||
399 | 188 | UNIQUE KEY(b)) ENGINE=InnoDB; | ||
400 | 189 | SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE | ||
401 | 190 | TABLE_SCHEMA=DATABASE() AND | ||
402 | 191 | TABLE_NAME='t1' AND | ||
403 | 192 | COLUMN_KEY='PRI'; | ||
404 | 193 | COUNT(*) | ||
405 | 194 | 1 | ||
406 | 195 | SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE | ||
407 | 196 | TABLE_SCHEMA=DATABASE() AND | ||
408 | 197 | TABLE_NAME='t2' AND | ||
409 | 198 | COLUMN_KEY='PRI'; | ||
410 | 199 | COUNT(*) | ||
411 | 200 | 2 | ||
412 | 201 | SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE | ||
413 | 202 | TABLE_SCHEMA=DATABASE() AND | ||
414 | 203 | TABLE_NAME='t3' AND | ||
415 | 204 | COLUMN_KEY='PRI'; | ||
416 | 205 | COUNT(*) | ||
417 | 206 | 0 | ||
418 | 207 | SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE | ||
419 | 208 | TABLE_SCHEMA=DATABASE() AND | ||
420 | 209 | TABLE_NAME='t4' AND | ||
421 | 210 | COLUMN_KEY='PRI'; | ||
422 | 211 | COUNT(*) | ||
423 | 212 | 2 | ||
424 | 213 | INSERT INTO t1 VALUES (1), (2), (3); | ||
425 | 214 | INSERT INTO t2 VALUES (1,1), (2,2), (3,3); | ||
426 | 215 | INSERT INTO t3 SELECT * FROM t2; | ||
427 | 216 | INSERT INTO t4 SELECT * FROM t2; | ||
428 | 217 | ###################################### | ||
429 | 218 | |||
430 | 219 | /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; | ||
431 | 220 | /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; | ||
432 | 221 | /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; | ||
433 | 222 | /*!40101 SET NAMES utf8 */; | ||
434 | 223 | /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; | ||
435 | 224 | /*!40103 SET TIME_ZONE='+00:00' */; | ||
436 | 225 | /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; | ||
437 | 226 | /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; | ||
438 | 227 | /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; | ||
439 | 228 | /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; | ||
440 | 229 | DROP TABLE IF EXISTS `t1`; | ||
441 | 230 | /*!40101 SET @saved_cs_client = @@character_set_client */; | ||
442 | 231 | /*!40101 SET character_set_client = utf8 */; | ||
443 | 232 | CREATE TABLE `t1` ( | ||
444 | 233 | `a` int(11) NOT NULL, | ||
445 | 234 | UNIQUE KEY `a` (`a`) | ||
446 | 235 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; | ||
447 | 236 | /*!40101 SET character_set_client = @saved_cs_client */; | ||
448 | 237 | |||
449 | 238 | LOCK TABLES `t1` WRITE; | ||
450 | 239 | /*!40000 ALTER TABLE `t1` DISABLE KEYS */; | ||
451 | 240 | INSERT INTO `t1` VALUES (1),(2),(3); | ||
452 | 241 | /*!40000 ALTER TABLE `t1` ENABLE KEYS */; | ||
453 | 242 | UNLOCK TABLES; | ||
454 | 243 | DROP TABLE IF EXISTS `t2`; | ||
455 | 244 | /*!40101 SET @saved_cs_client = @@character_set_client */; | ||
456 | 245 | /*!40101 SET character_set_client = utf8 */; | ||
457 | 246 | CREATE TABLE `t2` ( | ||
458 | 247 | `a` int(11) NOT NULL, | ||
459 | 248 | `b` int(11) NOT NULL, | ||
460 | 249 | UNIQUE KEY `a` (`a`,`b`) | ||
461 | 250 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; | ||
462 | 251 | /*!40101 SET character_set_client = @saved_cs_client */; | ||
463 | 252 | |||
464 | 253 | LOCK TABLES `t2` WRITE; | ||
465 | 254 | /*!40000 ALTER TABLE `t2` DISABLE KEYS */; | ||
466 | 255 | INSERT INTO `t2` VALUES (1,1),(2,2),(3,3); | ||
467 | 256 | /*!40000 ALTER TABLE `t2` ENABLE KEYS */; | ||
468 | 257 | UNLOCK TABLES; | ||
469 | 258 | DROP TABLE IF EXISTS `t3`; | ||
470 | 259 | /*!40101 SET @saved_cs_client = @@character_set_client */; | ||
471 | 260 | /*!40101 SET character_set_client = utf8 */; | ||
472 | 261 | CREATE TABLE `t3` ( | ||
473 | 262 | `a` int(11) DEFAULT NULL, | ||
474 | 263 | `b` int(11) DEFAULT NULL | ||
475 | 264 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; | ||
476 | 265 | /*!40101 SET character_set_client = @saved_cs_client */; | ||
477 | 266 | |||
478 | 267 | LOCK TABLES `t3` WRITE; | ||
479 | 268 | /*!40000 ALTER TABLE `t3` DISABLE KEYS */; | ||
480 | 269 | INSERT INTO `t3` VALUES (1,1),(2,2),(3,3); | ||
481 | 270 | ALTER TABLE `t3` ADD UNIQUE KEY `a` (`a`,`b`); | ||
482 | 271 | /*!40000 ALTER TABLE `t3` ENABLE KEYS */; | ||
483 | 272 | UNLOCK TABLES; | ||
484 | 273 | DROP TABLE IF EXISTS `t4`; | ||
485 | 274 | /*!40101 SET @saved_cs_client = @@character_set_client */; | ||
486 | 275 | /*!40101 SET character_set_client = utf8 */; | ||
487 | 276 | CREATE TABLE `t4` ( | ||
488 | 277 | `a` int(11) NOT NULL, | ||
489 | 278 | `b` int(11) NOT NULL, | ||
490 | 279 | PRIMARY KEY (`a`,`b`) | ||
491 | 280 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; | ||
492 | 281 | /*!40101 SET character_set_client = @saved_cs_client */; | ||
493 | 282 | |||
494 | 283 | LOCK TABLES `t4` WRITE; | ||
495 | 284 | /*!40000 ALTER TABLE `t4` DISABLE KEYS */; | ||
496 | 285 | INSERT INTO `t4` VALUES (1,1),(2,2),(3,3); | ||
497 | 286 | ALTER TABLE `t4` ADD UNIQUE KEY `b` (`b`); | ||
498 | 287 | /*!40000 ALTER TABLE `t4` ENABLE KEYS */; | ||
499 | 288 | UNLOCK TABLES; | ||
500 | 289 | /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; | ||
501 | 290 | |||
502 | 291 | /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; | ||
503 | 292 | /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; | ||
504 | 293 | /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; | ||
505 | 294 | /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; | ||
506 | 295 | /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; | ||
507 | 296 | /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; | ||
508 | 297 | /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; | ||
509 | 298 | |||
510 | 299 | ###################################### | ||
511 | 300 | DROP TABLE t1, t2, t3, t4; | ||
512 | 301 | CREATE TABLE t1 ( | ||
513 | 302 | id INT NOT NULL PRIMARY KEY | ||
514 | 303 | ) ENGINE=InnoDB; | ||
515 | 304 | CREATE TABLE t2 ( | ||
516 | 305 | id INT NOT NULL AUTO_INCREMENT, | ||
517 | 306 | a INT NOT NULL, | ||
518 | 307 | PRIMARY KEY (id), | ||
519 | 308 | KEY (a), | ||
520 | 309 | FOREIGN KEY (a) REFERENCES t2 (id) | ||
521 | 310 | ) ENGINE=InnoDB; | ||
522 | 311 | INSERT INTO t1 VALUES (1), (2), (3); | ||
523 | 312 | INSERT INTO t2 VALUES (1, 1), (2, 2), (3, 3); | ||
524 | 313 | ###################################### | ||
525 | 314 | |||
526 | 315 | /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; | ||
527 | 316 | /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; | ||
528 | 317 | /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; | ||
529 | 318 | /*!40101 SET NAMES utf8 */; | ||
530 | 319 | /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; | ||
531 | 320 | /*!40103 SET TIME_ZONE='+00:00' */; | ||
532 | 321 | /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; | ||
533 | 322 | /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; | ||
534 | 323 | /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; | ||
535 | 324 | /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; | ||
536 | 325 | DROP TABLE IF EXISTS `t1`; | ||
537 | 326 | /*!40101 SET @saved_cs_client = @@character_set_client */; | ||
538 | 327 | /*!40101 SET character_set_client = utf8 */; | ||
539 | 328 | CREATE TABLE `t1` ( | ||
540 | 329 | `id` int(11) NOT NULL, | ||
541 | 330 | PRIMARY KEY (`id`) | ||
542 | 331 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; | ||
543 | 332 | /*!40101 SET character_set_client = @saved_cs_client */; | ||
544 | 333 | |||
545 | 334 | LOCK TABLES `t1` WRITE; | ||
546 | 335 | /*!40000 ALTER TABLE `t1` DISABLE KEYS */; | ||
547 | 336 | INSERT INTO `t1` VALUES (1),(2),(3); | ||
548 | 337 | /*!40000 ALTER TABLE `t1` ENABLE KEYS */; | ||
549 | 338 | UNLOCK TABLES; | ||
550 | 339 | DROP TABLE IF EXISTS `t2`; | ||
551 | 340 | /*!40101 SET @saved_cs_client = @@character_set_client */; | ||
552 | 341 | /*!40101 SET character_set_client = utf8 */; | ||
553 | 342 | CREATE TABLE `t2` ( | ||
554 | 343 | `id` int(11) NOT NULL AUTO_INCREMENT, | ||
555 | 344 | `a` int(11) NOT NULL, | ||
556 | 345 | PRIMARY KEY (`id`), | ||
557 | 346 | CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`a`) REFERENCES `t2` (`id`) | ||
558 | 347 | ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1; | ||
559 | 348 | /*!40101 SET character_set_client = @saved_cs_client */; | ||
560 | 349 | |||
561 | 350 | LOCK TABLES `t2` WRITE; | ||
562 | 351 | /*!40000 ALTER TABLE `t2` DISABLE KEYS */; | ||
563 | 352 | INSERT INTO `t2` VALUES (1,1),(2,2),(3,3); | ||
564 | 353 | ALTER TABLE `t2` ADD KEY `a` (`a`); | ||
565 | 354 | /*!40000 ALTER TABLE `t2` ENABLE KEYS */; | ||
566 | 355 | UNLOCK TABLES; | ||
567 | 356 | /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; | ||
568 | 357 | |||
569 | 358 | /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; | ||
570 | 359 | /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; | ||
571 | 360 | /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; | ||
572 | 361 | /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; | ||
573 | 362 | /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; | ||
574 | 363 | /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; | ||
575 | 364 | /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; | ||
576 | 365 | |||
577 | 366 | ###################################### | ||
578 | 367 | DROP TABLE t1, t2; | ||
579 | 368 | CREATE TABLE t1 ( | ||
580 | 369 | id INT NOT NULL AUTO_INCREMENT, | ||
581 | 370 | uid INT NOT NULL, | ||
582 | 371 | `id``` INT NOT NULL, | ||
583 | 372 | ```id` INT NOT NULL, | ||
584 | 373 | # The following ones may be skipped and used in ALTER TABLE later | ||
585 | 374 | KEY k1 (```id`, id), | ||
586 | 375 | KEY k2 (```id`, `id```), | ||
587 | 376 | # The following one should be kept in CREATE TABLE | ||
588 | 377 | KEY k3 (id, uid), | ||
589 | 378 | # The following one may be skipped again | ||
590 | 379 | KEY k4 (id, `id```) | ||
591 | 380 | ) ENGINE=InnoDB; | ||
592 | 381 | CREATE TABLE t2 ( | ||
593 | 382 | id INT NOT NULL AUTO_INCREMENT, | ||
594 | 383 | PRIMARY KEY (id), | ||
595 | 384 | KEY k1 (id), | ||
596 | 385 | KEY k2 (id) | ||
597 | 386 | ) ENGINE=InnoDB; | ||
598 | 387 | ###################################### | ||
599 | 388 | |||
600 | 389 | /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; | ||
601 | 390 | /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; | ||
602 | 391 | /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; | ||
603 | 392 | /*!40101 SET NAMES utf8 */; | ||
604 | 393 | /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; | ||
605 | 394 | /*!40103 SET TIME_ZONE='+00:00' */; | ||
606 | 395 | /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; | ||
607 | 396 | /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; | ||
608 | 397 | /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; | ||
609 | 398 | /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; | ||
610 | 399 | DROP TABLE IF EXISTS `t1`; | ||
611 | 400 | /*!40101 SET @saved_cs_client = @@character_set_client */; | ||
612 | 401 | /*!40101 SET character_set_client = utf8 */; | ||
613 | 402 | CREATE TABLE `t1` ( | ||
614 | 403 | `id` int(11) NOT NULL AUTO_INCREMENT, | ||
615 | 404 | `uid` int(11) NOT NULL, | ||
616 | 405 | `id``` int(11) NOT NULL, | ||
617 | 406 | ```id` int(11) NOT NULL, | ||
618 | 407 | KEY `k3` (`id`,`uid`) | ||
619 | 408 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; | ||
620 | 409 | /*!40101 SET character_set_client = @saved_cs_client */; | ||
621 | 410 | |||
622 | 411 | LOCK TABLES `t1` WRITE; | ||
623 | 412 | /*!40000 ALTER TABLE `t1` DISABLE KEYS */; | ||
624 | 413 | ALTER TABLE `t1` ADD KEY `k1` (```id`,`id`), ADD KEY `k2` (```id`,`id```), ADD KEY `k4` (`id`,`id```); | ||
625 | 414 | /*!40000 ALTER TABLE `t1` ENABLE KEYS */; | ||
626 | 415 | UNLOCK TABLES; | ||
627 | 416 | DROP TABLE IF EXISTS `t2`; | ||
628 | 417 | /*!40101 SET @saved_cs_client = @@character_set_client */; | ||
629 | 418 | /*!40101 SET character_set_client = utf8 */; | ||
630 | 419 | CREATE TABLE `t2` ( | ||
631 | 420 | `id` int(11) NOT NULL AUTO_INCREMENT, | ||
632 | 421 | PRIMARY KEY (`id`) | ||
633 | 422 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; | ||
634 | 423 | /*!40101 SET character_set_client = @saved_cs_client */; | ||
635 | 424 | |||
636 | 425 | LOCK TABLES `t2` WRITE; | ||
637 | 426 | /*!40000 ALTER TABLE `t2` DISABLE KEYS */; | ||
638 | 427 | ALTER TABLE `t2` ADD KEY `k1` (`id`), ADD KEY `k2` (`id`); | ||
639 | 428 | /*!40000 ALTER TABLE `t2` ENABLE KEYS */; | ||
640 | 429 | UNLOCK TABLES; | ||
641 | 430 | /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; | ||
642 | 431 | |||
643 | 432 | /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; | ||
644 | 433 | /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; | ||
645 | 434 | /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; | ||
646 | 435 | /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; | ||
647 | 436 | /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; | ||
648 | 437 | /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; | ||
649 | 438 | /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; | ||
650 | 439 | |||
651 | 440 | ###################################### | ||
652 | 441 | DROP TABLE t1, t2; | ||
653 | 0 | 442 | ||
654 | === removed file 'Percona-Server/mysql-test/r/percona_mysqldump_innodb_optimize_keys.result' | |||
655 | --- Percona-Server/mysql-test/r/percona_mysqldump_innodb_optimize_keys.result 2012-04-18 23:26:09 +0000 | |||
656 | +++ Percona-Server/mysql-test/r/percona_mysqldump_innodb_optimize_keys.result 1970-01-01 00:00:00 +0000 | |||
657 | @@ -1,367 +0,0 @@ | |||
658 | 1 | # | ||
659 | 2 | # Test the --innodb-optimize-keys option. | ||
660 | 3 | # | ||
661 | 4 | CREATE TABLE t1 (a INT NOT NULL PRIMARY KEY, b INT, KEY(b)) ENGINE=MyISAM; | ||
662 | 5 | ###################################### | ||
663 | 6 | |||
664 | 7 | /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; | ||
665 | 8 | /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; | ||
666 | 9 | /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; | ||
667 | 10 | /*!40101 SET NAMES utf8 */; | ||
668 | 11 | /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; | ||
669 | 12 | /*!40103 SET TIME_ZONE='+00:00' */; | ||
670 | 13 | /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; | ||
671 | 14 | /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; | ||
672 | 15 | /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; | ||
673 | 16 | /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; | ||
674 | 17 | DROP TABLE IF EXISTS `t1`; | ||
675 | 18 | /*!40101 SET @saved_cs_client = @@character_set_client */; | ||
676 | 19 | /*!40101 SET character_set_client = utf8 */; | ||
677 | 20 | CREATE TABLE `t1` ( | ||
678 | 21 | `a` int(11) NOT NULL, | ||
679 | 22 | `b` int(11) DEFAULT NULL, | ||
680 | 23 | PRIMARY KEY (`a`), | ||
681 | 24 | KEY `b` (`b`) | ||
682 | 25 | ) ENGINE=MyISAM DEFAULT CHARSET=latin1; | ||
683 | 26 | /*!40101 SET character_set_client = @saved_cs_client */; | ||
684 | 27 | |||
685 | 28 | LOCK TABLES `t1` WRITE; | ||
686 | 29 | /*!40000 ALTER TABLE `t1` DISABLE KEYS */; | ||
687 | 30 | /*!40000 ALTER TABLE `t1` ENABLE KEYS */; | ||
688 | 31 | UNLOCK TABLES; | ||
689 | 32 | /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; | ||
690 | 33 | |||
691 | 34 | /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; | ||
692 | 35 | /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; | ||
693 | 36 | /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; | ||
694 | 37 | /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; | ||
695 | 38 | /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; | ||
696 | 39 | /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; | ||
697 | 40 | /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; | ||
698 | 41 | |||
699 | 42 | ###################################### | ||
700 | 43 | DROP TABLE t1; | ||
701 | 44 | CREATE TABLE t2 (a INT PRIMARY KEY) ENGINE=InnoDB; | ||
702 | 45 | INSERT INTO t2 VALUES (0), (1), (2); | ||
703 | 46 | CREATE TABLE t1 ( | ||
704 | 47 | id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, | ||
705 | 48 | a INT, b VARCHAR(255), c DECIMAL(10,3), | ||
706 | 49 | KEY (b), | ||
707 | 50 | UNIQUE KEY uniq(c,a), | ||
708 | 51 | FOREIGN KEY (a) REFERENCES t2(a) ON DELETE CASCADE | ||
709 | 52 | ) ENGINE=InnoDB; | ||
710 | 53 | INSERT INTO t1(a,b,c) VALUES (0, "0", 0.0), (1, "1", 1.1), (2, "2", 2.2); | ||
711 | 54 | ###################################### | ||
712 | 55 | |||
713 | 56 | /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; | ||
714 | 57 | /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; | ||
715 | 58 | /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; | ||
716 | 59 | /*!40101 SET NAMES utf8 */; | ||
717 | 60 | /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; | ||
718 | 61 | /*!40103 SET TIME_ZONE='+00:00' */; | ||
719 | 62 | /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; | ||
720 | 63 | /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; | ||
721 | 64 | /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; | ||
722 | 65 | /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; | ||
723 | 66 | DROP TABLE IF EXISTS `t1`; | ||
724 | 67 | /*!40101 SET @saved_cs_client = @@character_set_client */; | ||
725 | 68 | /*!40101 SET character_set_client = utf8 */; | ||
726 | 69 | CREATE TABLE `t1` ( | ||
727 | 70 | `id` int(11) NOT NULL AUTO_INCREMENT, | ||
728 | 71 | `a` int(11) DEFAULT NULL, | ||
729 | 72 | `b` varchar(255) DEFAULT NULL, | ||
730 | 73 | `c` decimal(10,3) DEFAULT NULL, | ||
731 | 74 | PRIMARY KEY (`id`), | ||
732 | 75 | CONSTRAINT `t1_ibfk_1` FOREIGN KEY (`a`) REFERENCES `t2` (`a`) ON DELETE CASCADE | ||
733 | 76 | ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1; | ||
734 | 77 | /*!40101 SET character_set_client = @saved_cs_client */; | ||
735 | 78 | |||
736 | 79 | LOCK TABLES `t1` WRITE; | ||
737 | 80 | /*!40000 ALTER TABLE `t1` DISABLE KEYS */; | ||
738 | 81 | INSERT INTO `t1` VALUES (1,0,'0',0.000),(2,1,'1',1.100),(3,2,'2',2.200); | ||
739 | 82 | ALTER TABLE `t1` ADD UNIQUE KEY `uniq` (`c`,`a`), ADD KEY `b` (`b`), ADD KEY `a` (`a`); | ||
740 | 83 | /*!40000 ALTER TABLE `t1` ENABLE KEYS */; | ||
741 | 84 | UNLOCK TABLES; | ||
742 | 85 | DROP TABLE IF EXISTS `t2`; | ||
743 | 86 | /*!40101 SET @saved_cs_client = @@character_set_client */; | ||
744 | 87 | /*!40101 SET character_set_client = utf8 */; | ||
745 | 88 | CREATE TABLE `t2` ( | ||
746 | 89 | `a` int(11) NOT NULL, | ||
747 | 90 | PRIMARY KEY (`a`) | ||
748 | 91 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; | ||
749 | 92 | /*!40101 SET character_set_client = @saved_cs_client */; | ||
750 | 93 | |||
751 | 94 | LOCK TABLES `t2` WRITE; | ||
752 | 95 | /*!40000 ALTER TABLE `t2` DISABLE KEYS */; | ||
753 | 96 | INSERT INTO `t2` VALUES (0),(1),(2); | ||
754 | 97 | /*!40000 ALTER TABLE `t2` ENABLE KEYS */; | ||
755 | 98 | UNLOCK TABLES; | ||
756 | 99 | /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; | ||
757 | 100 | |||
758 | 101 | /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; | ||
759 | 102 | /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; | ||
760 | 103 | /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; | ||
761 | 104 | /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; | ||
762 | 105 | /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; | ||
763 | 106 | /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; | ||
764 | 107 | /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; | ||
765 | 108 | |||
766 | 109 | ###################################### | ||
767 | 110 | DROP TABLE t1, t2; | ||
768 | 111 | CREATE TABLE t1 ( | ||
769 | 112 | id INT NOT NULL AUTO_INCREMENT, | ||
770 | 113 | KEY (id) | ||
771 | 114 | ) ENGINE=InnoDB; | ||
772 | 115 | CREATE TABLE t2 ( | ||
773 | 116 | id INT NOT NULL AUTO_INCREMENT, | ||
774 | 117 | UNIQUE KEY (id) | ||
775 | 118 | ) ENGINE=InnoDB; | ||
776 | 119 | INSERT INTO t1 VALUES (), (), (); | ||
777 | 120 | INSERT INTO t2 VALUES (), (), (); | ||
778 | 121 | ###################################### | ||
779 | 122 | |||
780 | 123 | /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; | ||
781 | 124 | /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; | ||
782 | 125 | /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; | ||
783 | 126 | /*!40101 SET NAMES utf8 */; | ||
784 | 127 | /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; | ||
785 | 128 | /*!40103 SET TIME_ZONE='+00:00' */; | ||
786 | 129 | /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; | ||
787 | 130 | /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; | ||
788 | 131 | /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; | ||
789 | 132 | /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; | ||
790 | 133 | DROP TABLE IF EXISTS `t1`; | ||
791 | 134 | /*!40101 SET @saved_cs_client = @@character_set_client */; | ||
792 | 135 | /*!40101 SET character_set_client = utf8 */; | ||
793 | 136 | CREATE TABLE `t1` ( | ||
794 | 137 | `id` int(11) NOT NULL AUTO_INCREMENT, | ||
795 | 138 | KEY `id` (`id`) | ||
796 | 139 | ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1; | ||
797 | 140 | /*!40101 SET character_set_client = @saved_cs_client */; | ||
798 | 141 | |||
799 | 142 | LOCK TABLES `t1` WRITE; | ||
800 | 143 | /*!40000 ALTER TABLE `t1` DISABLE KEYS */; | ||
801 | 144 | INSERT INTO `t1` VALUES (1),(2),(3); | ||
802 | 145 | /*!40000 ALTER TABLE `t1` ENABLE KEYS */; | ||
803 | 146 | UNLOCK TABLES; | ||
804 | 147 | DROP TABLE IF EXISTS `t2`; | ||
805 | 148 | /*!40101 SET @saved_cs_client = @@character_set_client */; | ||
806 | 149 | /*!40101 SET character_set_client = utf8 */; | ||
807 | 150 | CREATE TABLE `t2` ( | ||
808 | 151 | `id` int(11) NOT NULL AUTO_INCREMENT, | ||
809 | 152 | UNIQUE KEY `id` (`id`) | ||
810 | 153 | ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1; | ||
811 | 154 | /*!40101 SET character_set_client = @saved_cs_client */; | ||
812 | 155 | |||
813 | 156 | LOCK TABLES `t2` WRITE; | ||
814 | 157 | /*!40000 ALTER TABLE `t2` DISABLE KEYS */; | ||
815 | 158 | INSERT INTO `t2` VALUES (1),(2),(3); | ||
816 | 159 | /*!40000 ALTER TABLE `t2` ENABLE KEYS */; | ||
817 | 160 | UNLOCK TABLES; | ||
818 | 161 | /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; | ||
819 | 162 | |||
820 | 163 | /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; | ||
821 | 164 | /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; | ||
822 | 165 | /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; | ||
823 | 166 | /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; | ||
824 | 167 | /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; | ||
825 | 168 | /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; | ||
826 | 169 | /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; | ||
827 | 170 | |||
828 | 171 | ###################################### | ||
829 | 172 | DROP TABLE t1, t2; | ||
830 | 173 | CREATE TABLE t1 ( | ||
831 | 174 | a INT NOT NULL, | ||
832 | 175 | UNIQUE KEY (a)) ENGINE=InnoDB; | ||
833 | 176 | CREATE TABLE t2 ( | ||
834 | 177 | a INT NOT NULL, | ||
835 | 178 | b INT NOT NULL, | ||
836 | 179 | UNIQUE KEY (a,b)) ENGINE=InnoDB; | ||
837 | 180 | CREATE TABLE t3 ( | ||
838 | 181 | a INT, | ||
839 | 182 | b INT, | ||
840 | 183 | UNIQUE KEY (a,b)) ENGINE=InnoDB; | ||
841 | 184 | CREATE TABLE t4 ( | ||
842 | 185 | a INT NOT NULL, | ||
843 | 186 | b INT NOT NULL, | ||
844 | 187 | PRIMARY KEY (a,b), | ||
845 | 188 | UNIQUE KEY(b)) ENGINE=InnoDB; | ||
846 | 189 | SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE | ||
847 | 190 | TABLE_SCHEMA=DATABASE() AND | ||
848 | 191 | TABLE_NAME='t1' AND | ||
849 | 192 | COLUMN_KEY='PRI'; | ||
850 | 193 | COUNT(*) | ||
851 | 194 | 1 | ||
852 | 195 | SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE | ||
853 | 196 | TABLE_SCHEMA=DATABASE() AND | ||
854 | 197 | TABLE_NAME='t2' AND | ||
855 | 198 | COLUMN_KEY='PRI'; | ||
856 | 199 | COUNT(*) | ||
857 | 200 | 2 | ||
858 | 201 | SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE | ||
859 | 202 | TABLE_SCHEMA=DATABASE() AND | ||
860 | 203 | TABLE_NAME='t3' AND | ||
861 | 204 | COLUMN_KEY='PRI'; | ||
862 | 205 | COUNT(*) | ||
863 | 206 | 0 | ||
864 | 207 | SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE | ||
865 | 208 | TABLE_SCHEMA=DATABASE() AND | ||
866 | 209 | TABLE_NAME='t4' AND | ||
867 | 210 | COLUMN_KEY='PRI'; | ||
868 | 211 | COUNT(*) | ||
869 | 212 | 2 | ||
870 | 213 | INSERT INTO t1 VALUES (1), (2), (3); | ||
871 | 214 | INSERT INTO t2 VALUES (1,1), (2,2), (3,3); | ||
872 | 215 | INSERT INTO t3 SELECT * FROM t2; | ||
873 | 216 | INSERT INTO t4 SELECT * FROM t2; | ||
874 | 217 | ###################################### | ||
875 | 218 | |||
876 | 219 | /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; | ||
877 | 220 | /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; | ||
878 | 221 | /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; | ||
879 | 222 | /*!40101 SET NAMES utf8 */; | ||
880 | 223 | /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; | ||
881 | 224 | /*!40103 SET TIME_ZONE='+00:00' */; | ||
882 | 225 | /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; | ||
883 | 226 | /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; | ||
884 | 227 | /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; | ||
885 | 228 | /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; | ||
886 | 229 | DROP TABLE IF EXISTS `t1`; | ||
887 | 230 | /*!40101 SET @saved_cs_client = @@character_set_client */; | ||
888 | 231 | /*!40101 SET character_set_client = utf8 */; | ||
889 | 232 | CREATE TABLE `t1` ( | ||
890 | 233 | `a` int(11) NOT NULL, | ||
891 | 234 | UNIQUE KEY `a` (`a`) | ||
892 | 235 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; | ||
893 | 236 | /*!40101 SET character_set_client = @saved_cs_client */; | ||
894 | 237 | |||
895 | 238 | LOCK TABLES `t1` WRITE; | ||
896 | 239 | /*!40000 ALTER TABLE `t1` DISABLE KEYS */; | ||
897 | 240 | INSERT INTO `t1` VALUES (1),(2),(3); | ||
898 | 241 | /*!40000 ALTER TABLE `t1` ENABLE KEYS */; | ||
899 | 242 | UNLOCK TABLES; | ||
900 | 243 | DROP TABLE IF EXISTS `t2`; | ||
901 | 244 | /*!40101 SET @saved_cs_client = @@character_set_client */; | ||
902 | 245 | /*!40101 SET character_set_client = utf8 */; | ||
903 | 246 | CREATE TABLE `t2` ( | ||
904 | 247 | `a` int(11) NOT NULL, | ||
905 | 248 | `b` int(11) NOT NULL, | ||
906 | 249 | UNIQUE KEY `a` (`a`,`b`) | ||
907 | 250 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; | ||
908 | 251 | /*!40101 SET character_set_client = @saved_cs_client */; | ||
909 | 252 | |||
910 | 253 | LOCK TABLES `t2` WRITE; | ||
911 | 254 | /*!40000 ALTER TABLE `t2` DISABLE KEYS */; | ||
912 | 255 | INSERT INTO `t2` VALUES (1,1),(2,2),(3,3); | ||
913 | 256 | /*!40000 ALTER TABLE `t2` ENABLE KEYS */; | ||
914 | 257 | UNLOCK TABLES; | ||
915 | 258 | DROP TABLE IF EXISTS `t3`; | ||
916 | 259 | /*!40101 SET @saved_cs_client = @@character_set_client */; | ||
917 | 260 | /*!40101 SET character_set_client = utf8 */; | ||
918 | 261 | CREATE TABLE `t3` ( | ||
919 | 262 | `a` int(11) DEFAULT NULL, | ||
920 | 263 | `b` int(11) DEFAULT NULL | ||
921 | 264 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; | ||
922 | 265 | /*!40101 SET character_set_client = @saved_cs_client */; | ||
923 | 266 | |||
924 | 267 | LOCK TABLES `t3` WRITE; | ||
925 | 268 | /*!40000 ALTER TABLE `t3` DISABLE KEYS */; | ||
926 | 269 | INSERT INTO `t3` VALUES (1,1),(2,2),(3,3); | ||
927 | 270 | ALTER TABLE `t3` ADD UNIQUE KEY `a` (`a`,`b`); | ||
928 | 271 | /*!40000 ALTER TABLE `t3` ENABLE KEYS */; | ||
929 | 272 | UNLOCK TABLES; | ||
930 | 273 | DROP TABLE IF EXISTS `t4`; | ||
931 | 274 | /*!40101 SET @saved_cs_client = @@character_set_client */; | ||
932 | 275 | /*!40101 SET character_set_client = utf8 */; | ||
933 | 276 | CREATE TABLE `t4` ( | ||
934 | 277 | `a` int(11) NOT NULL, | ||
935 | 278 | `b` int(11) NOT NULL, | ||
936 | 279 | PRIMARY KEY (`a`,`b`) | ||
937 | 280 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; | ||
938 | 281 | /*!40101 SET character_set_client = @saved_cs_client */; | ||
939 | 282 | |||
940 | 283 | LOCK TABLES `t4` WRITE; | ||
941 | 284 | /*!40000 ALTER TABLE `t4` DISABLE KEYS */; | ||
942 | 285 | INSERT INTO `t4` VALUES (1,1),(2,2),(3,3); | ||
943 | 286 | ALTER TABLE `t4` ADD UNIQUE KEY `b` (`b`); | ||
944 | 287 | /*!40000 ALTER TABLE `t4` ENABLE KEYS */; | ||
945 | 288 | UNLOCK TABLES; | ||
946 | 289 | /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; | ||
947 | 290 | |||
948 | 291 | /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; | ||
949 | 292 | /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; | ||
950 | 293 | /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; | ||
951 | 294 | /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; | ||
952 | 295 | /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; | ||
953 | 296 | /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; | ||
954 | 297 | /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; | ||
955 | 298 | |||
956 | 299 | ###################################### | ||
957 | 300 | DROP TABLE t1, t2, t3, t4; | ||
958 | 301 | CREATE TABLE t1 ( | ||
959 | 302 | id INT NOT NULL PRIMARY KEY | ||
960 | 303 | ) ENGINE=InnoDB; | ||
961 | 304 | CREATE TABLE t2 ( | ||
962 | 305 | id INT NOT NULL AUTO_INCREMENT, | ||
963 | 306 | a INT NOT NULL, | ||
964 | 307 | PRIMARY KEY (id), | ||
965 | 308 | KEY (a), | ||
966 | 309 | FOREIGN KEY (a) REFERENCES t2 (id) | ||
967 | 310 | ) ENGINE=InnoDB; | ||
968 | 311 | INSERT INTO t1 VALUES (1), (2), (3); | ||
969 | 312 | INSERT INTO t2 VALUES (1, 1), (2, 2), (3, 3); | ||
970 | 313 | ###################################### | ||
971 | 314 | |||
972 | 315 | /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; | ||
973 | 316 | /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; | ||
974 | 317 | /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; | ||
975 | 318 | /*!40101 SET NAMES utf8 */; | ||
976 | 319 | /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; | ||
977 | 320 | /*!40103 SET TIME_ZONE='+00:00' */; | ||
978 | 321 | /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; | ||
979 | 322 | /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; | ||
980 | 323 | /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; | ||
981 | 324 | /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; | ||
982 | 325 | DROP TABLE IF EXISTS `t1`; | ||
983 | 326 | /*!40101 SET @saved_cs_client = @@character_set_client */; | ||
984 | 327 | /*!40101 SET character_set_client = utf8 */; | ||
985 | 328 | CREATE TABLE `t1` ( | ||
986 | 329 | `id` int(11) NOT NULL, | ||
987 | 330 | PRIMARY KEY (`id`) | ||
988 | 331 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; | ||
989 | 332 | /*!40101 SET character_set_client = @saved_cs_client */; | ||
990 | 333 | |||
991 | 334 | LOCK TABLES `t1` WRITE; | ||
992 | 335 | /*!40000 ALTER TABLE `t1` DISABLE KEYS */; | ||
993 | 336 | INSERT INTO `t1` VALUES (1),(2),(3); | ||
994 | 337 | /*!40000 ALTER TABLE `t1` ENABLE KEYS */; | ||
995 | 338 | UNLOCK TABLES; | ||
996 | 339 | DROP TABLE IF EXISTS `t2`; | ||
997 | 340 | /*!40101 SET @saved_cs_client = @@character_set_client */; | ||
998 | 341 | /*!40101 SET character_set_client = utf8 */; | ||
999 | 342 | CREATE TABLE `t2` ( | ||
1000 | 343 | `id` int(11) NOT NULL AUTO_INCREMENT, | ||
1001 | 344 | `a` int(11) NOT NULL, | ||
1002 | 345 | PRIMARY KEY (`id`), | ||
1003 | 346 | CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`a`) REFERENCES `t2` (`id`) | ||
1004 | 347 | ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1; | ||
1005 | 348 | /*!40101 SET character_set_client = @saved_cs_client */; | ||
1006 | 349 | |||
1007 | 350 | LOCK TABLES `t2` WRITE; | ||
1008 | 351 | /*!40000 ALTER TABLE `t2` DISABLE KEYS */; | ||
1009 | 352 | INSERT INTO `t2` VALUES (1,1),(2,2),(3,3); | ||
1010 | 353 | ALTER TABLE `t2` ADD KEY `a` (`a`); | ||
1011 | 354 | /*!40000 ALTER TABLE `t2` ENABLE KEYS */; | ||
1012 | 355 | UNLOCK TABLES; | ||
1013 | 356 | /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; | ||
1014 | 357 | |||
1015 | 358 | /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; | ||
1016 | 359 | /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; | ||
1017 | 360 | /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; | ||
1018 | 361 | /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; | ||
1019 | 362 | /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; | ||
1020 | 363 | /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; | ||
1021 | 364 | /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; | ||
1022 | 365 | |||
1023 | 366 | ###################################### | ||
1024 | 367 | DROP TABLE t1, t2; | ||
1025 | 368 | 0 | ||
1026 | === added file 'Percona-Server/mysql-test/t/percona_mysqldump_innodb_optimize_keys.test' | |||
1027 | --- Percona-Server/mysql-test/t/percona_mysqldump_innodb_optimize_keys.test 1970-01-01 00:00:00 +0000 | |||
1028 | +++ Percona-Server/mysql-test/t/percona_mysqldump_innodb_optimize_keys.test 2012-11-20 09:38:30 +0000 | |||
1029 | @@ -0,0 +1,227 @@ | |||
1030 | 1 | # Embedded server doesn't support external clients | ||
1031 | 2 | --source include/not_embedded.inc | ||
1032 | 3 | |||
1033 | 4 | # Fast index creation is only available in InnoDB plugin | ||
1034 | 5 | --source include/have_innodb.inc | ||
1035 | 6 | |||
1036 | 7 | # Save the initial number of concurrent sessions | ||
1037 | 8 | --source include/count_sessions.inc | ||
1038 | 9 | |||
1039 | 10 | --echo # | ||
1040 | 11 | --echo # Test the --innodb-optimize-keys option. | ||
1041 | 12 | --echo # | ||
1042 | 13 | |||
1043 | 14 | --let $file=$MYSQLTEST_VARDIR/tmp/t1.sql | ||
1044 | 15 | |||
1045 | 16 | # First test that the option has no effect on non-InnoDB tables | ||
1046 | 17 | |||
1047 | 18 | CREATE TABLE t1 (a INT NOT NULL PRIMARY KEY, b INT, KEY(b)) ENGINE=MyISAM; | ||
1048 | 19 | |||
1049 | 20 | --exec $MYSQL_DUMP --skip-comments --innodb-optimize-keys test t1 >$file | ||
1050 | 21 | |||
1051 | 22 | --echo ###################################### | ||
1052 | 23 | --cat_file $file | ||
1053 | 24 | --echo ###################################### | ||
1054 | 25 | |||
1055 | 26 | --remove_file $file | ||
1056 | 27 | |||
1057 | 28 | DROP TABLE t1; | ||
1058 | 29 | |||
1059 | 30 | # Check that for InnoDB tables secondary keys are created after the data is | ||
1060 | 31 | # dumped but foreign ones are left in CREATE TABLE | ||
1061 | 32 | |||
1062 | 33 | CREATE TABLE t2 (a INT PRIMARY KEY) ENGINE=InnoDB; | ||
1063 | 34 | INSERT INTO t2 VALUES (0), (1), (2); | ||
1064 | 35 | |||
1065 | 36 | CREATE TABLE t1 ( | ||
1066 | 37 | id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, | ||
1067 | 38 | a INT, b VARCHAR(255), c DECIMAL(10,3), | ||
1068 | 39 | KEY (b), | ||
1069 | 40 | UNIQUE KEY uniq(c,a), | ||
1070 | 41 | FOREIGN KEY (a) REFERENCES t2(a) ON DELETE CASCADE | ||
1071 | 42 | ) ENGINE=InnoDB; | ||
1072 | 43 | |||
1073 | 44 | INSERT INTO t1(a,b,c) VALUES (0, "0", 0.0), (1, "1", 1.1), (2, "2", 2.2); | ||
1074 | 45 | |||
1075 | 46 | --exec $MYSQL_DUMP --skip-comments --innodb-optimize-keys test t1 t2 >$file | ||
1076 | 47 | |||
1077 | 48 | --echo ###################################### | ||
1078 | 49 | --cat_file $file | ||
1079 | 50 | --echo ###################################### | ||
1080 | 51 | |||
1081 | 52 | # Check that the resulting dump can be imported back | ||
1082 | 53 | |||
1083 | 54 | --exec $MYSQL test < $file | ||
1084 | 55 | |||
1085 | 56 | --remove_file $file | ||
1086 | 57 | |||
1087 | 58 | DROP TABLE t1, t2; | ||
1088 | 59 | |||
1089 | 60 | ######################################################################## | ||
1090 | 61 | # Bug #812179: AUTO_INCREMENT columns must be skipped by the | ||
1091 | 62 | # --innodb-optimize-keys optimization in mysqldump | ||
1092 | 63 | ######################################################################## | ||
1093 | 64 | |||
1094 | 65 | CREATE TABLE t1 ( | ||
1095 | 66 | id INT NOT NULL AUTO_INCREMENT, | ||
1096 | 67 | KEY (id) | ||
1097 | 68 | ) ENGINE=InnoDB; | ||
1098 | 69 | |||
1099 | 70 | CREATE TABLE t2 ( | ||
1100 | 71 | id INT NOT NULL AUTO_INCREMENT, | ||
1101 | 72 | UNIQUE KEY (id) | ||
1102 | 73 | ) ENGINE=InnoDB; | ||
1103 | 74 | |||
1104 | 75 | INSERT INTO t1 VALUES (), (), (); | ||
1105 | 76 | INSERT INTO t2 VALUES (), (), (); | ||
1106 | 77 | |||
1107 | 78 | --exec $MYSQL_DUMP --skip-comments --innodb-optimize-keys test t1 t2 >$file | ||
1108 | 79 | |||
1109 | 80 | --echo ###################################### | ||
1110 | 81 | --cat_file $file | ||
1111 | 82 | --echo ###################################### | ||
1112 | 83 | |||
1113 | 84 | # Check that the resulting dump can be imported back | ||
1114 | 85 | |||
1115 | 86 | --exec $MYSQL test < $file | ||
1116 | 87 | |||
1117 | 88 | --remove_file $file | ||
1118 | 89 | |||
1119 | 90 | DROP TABLE t1, t2; | ||
1120 | 91 | |||
1121 | 92 | ######################################################################## | ||
1122 | 93 | # Bug #851674: --innodb-optimize-keys does not work correctly with table | ||
1123 | 94 | # without PRIMARY KEY | ||
1124 | 95 | ######################################################################## | ||
1125 | 96 | |||
1126 | 97 | CREATE TABLE t1 ( | ||
1127 | 98 | a INT NOT NULL, | ||
1128 | 99 | UNIQUE KEY (a)) ENGINE=InnoDB; | ||
1129 | 100 | |||
1130 | 101 | CREATE TABLE t2 ( | ||
1131 | 102 | a INT NOT NULL, | ||
1132 | 103 | b INT NOT NULL, | ||
1133 | 104 | UNIQUE KEY (a,b)) ENGINE=InnoDB; | ||
1134 | 105 | |||
1135 | 106 | CREATE TABLE t3 ( | ||
1136 | 107 | a INT, | ||
1137 | 108 | b INT, | ||
1138 | 109 | UNIQUE KEY (a,b)) ENGINE=InnoDB; | ||
1139 | 110 | |||
1140 | 111 | CREATE TABLE t4 ( | ||
1141 | 112 | a INT NOT NULL, | ||
1142 | 113 | b INT NOT NULL, | ||
1143 | 114 | PRIMARY KEY (a,b), | ||
1144 | 115 | UNIQUE KEY(b)) ENGINE=InnoDB; | ||
1145 | 116 | |||
1146 | 117 | SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE | ||
1147 | 118 | TABLE_SCHEMA=DATABASE() AND | ||
1148 | 119 | TABLE_NAME='t1' AND | ||
1149 | 120 | COLUMN_KEY='PRI'; | ||
1150 | 121 | SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE | ||
1151 | 122 | TABLE_SCHEMA=DATABASE() AND | ||
1152 | 123 | TABLE_NAME='t2' AND | ||
1153 | 124 | COLUMN_KEY='PRI'; | ||
1154 | 125 | SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE | ||
1155 | 126 | TABLE_SCHEMA=DATABASE() AND | ||
1156 | 127 | TABLE_NAME='t3' AND | ||
1157 | 128 | COLUMN_KEY='PRI'; | ||
1158 | 129 | SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE | ||
1159 | 130 | TABLE_SCHEMA=DATABASE() AND | ||
1160 | 131 | TABLE_NAME='t4' AND | ||
1161 | 132 | COLUMN_KEY='PRI'; | ||
1162 | 133 | |||
1163 | 134 | INSERT INTO t1 VALUES (1), (2), (3); | ||
1164 | 135 | INSERT INTO t2 VALUES (1,1), (2,2), (3,3); | ||
1165 | 136 | INSERT INTO t3 SELECT * FROM t2; | ||
1166 | 137 | INSERT INTO t4 SELECT * FROM t2; | ||
1167 | 138 | |||
1168 | 139 | --exec $MYSQL_DUMP --skip-comments --innodb-optimize-keys test t1 t2 t3 t4 >$file | ||
1169 | 140 | |||
1170 | 141 | --echo ###################################### | ||
1171 | 142 | --cat_file $file | ||
1172 | 143 | --echo ###################################### | ||
1173 | 144 | |||
1174 | 145 | # Check that the resulting dump can be imported back | ||
1175 | 146 | |||
1176 | 147 | --exec $MYSQL test < $file | ||
1177 | 148 | |||
1178 | 149 | --remove_file $file | ||
1179 | 150 | |||
1180 | 151 | DROP TABLE t1, t2, t3, t4; | ||
1181 | 152 | |||
1182 | 153 | ######################################################################## | ||
1183 | 154 | # Bug #859078: --innodb-optimize-keys should ignore foreign keys | ||
1184 | 155 | ######################################################################## | ||
1185 | 156 | |||
1186 | 157 | CREATE TABLE t1 ( | ||
1187 | 158 | id INT NOT NULL PRIMARY KEY | ||
1188 | 159 | ) ENGINE=InnoDB; | ||
1189 | 160 | |||
1190 | 161 | CREATE TABLE t2 ( | ||
1191 | 162 | id INT NOT NULL AUTO_INCREMENT, | ||
1192 | 163 | a INT NOT NULL, | ||
1193 | 164 | PRIMARY KEY (id), | ||
1194 | 165 | KEY (a), | ||
1195 | 166 | FOREIGN KEY (a) REFERENCES t2 (id) | ||
1196 | 167 | ) ENGINE=InnoDB; | ||
1197 | 168 | |||
1198 | 169 | INSERT INTO t1 VALUES (1), (2), (3); | ||
1199 | 170 | INSERT INTO t2 VALUES (1, 1), (2, 2), (3, 3); | ||
1200 | 171 | |||
1201 | 172 | --exec $MYSQL_DUMP --skip-comments --innodb-optimize-keys test t1 t2 >$file | ||
1202 | 173 | |||
1203 | 174 | --echo ###################################### | ||
1204 | 175 | --cat_file $file | ||
1205 | 176 | --echo ###################################### | ||
1206 | 177 | |||
1207 | 178 | # Check that the resulting dump can be imported back | ||
1208 | 179 | |||
1209 | 180 | --exec $MYSQL test < $file | ||
1210 | 181 | |||
1211 | 182 | --remove_file $file | ||
1212 | 183 | |||
1213 | 184 | DROP TABLE t1, t2; | ||
1214 | 185 | |||
1215 | 186 | ######################################################################## | ||
1216 | 187 | # Bug #1039536: mysqldump --innodb-optimize-keys can generate invalid table | ||
1217 | 188 | # definitions | ||
1218 | 189 | ######################################################################## | ||
1219 | 190 | |||
1220 | 191 | CREATE TABLE t1 ( | ||
1221 | 192 | id INT NOT NULL AUTO_INCREMENT, | ||
1222 | 193 | uid INT NOT NULL, | ||
1223 | 194 | `id``` INT NOT NULL, | ||
1224 | 195 | ```id` INT NOT NULL, | ||
1225 | 196 | # The following ones may be skipped and used in ALTER TABLE later | ||
1226 | 197 | KEY k1 (```id`, id), | ||
1227 | 198 | KEY k2 (```id`, `id```), | ||
1228 | 199 | # The following one should be kept in CREATE TABLE | ||
1229 | 200 | KEY k3 (id, uid), | ||
1230 | 201 | # The following one may be skipped again | ||
1231 | 202 | KEY k4 (id, `id```) | ||
1232 | 203 | ) ENGINE=InnoDB; | ||
1233 | 204 | |||
1234 | 205 | CREATE TABLE t2 ( | ||
1235 | 206 | id INT NOT NULL AUTO_INCREMENT, | ||
1236 | 207 | PRIMARY KEY (id), | ||
1237 | 208 | KEY k1 (id), | ||
1238 | 209 | KEY k2 (id) | ||
1239 | 210 | ) ENGINE=InnoDB; | ||
1240 | 211 | |||
1241 | 212 | --exec $MYSQL_DUMP --skip-comments --innodb-optimize-keys test t1 t2 >$file | ||
1242 | 213 | |||
1243 | 214 | --echo ###################################### | ||
1244 | 215 | --cat_file $file | ||
1245 | 216 | --echo ###################################### | ||
1246 | 217 | |||
1247 | 218 | # Check that the resulting dump can be imported back | ||
1248 | 219 | |||
1249 | 220 | --exec $MYSQL test < $file | ||
1250 | 221 | |||
1251 | 222 | --remove_file $file | ||
1252 | 223 | |||
1253 | 224 | DROP TABLE t1, t2; | ||
1254 | 225 | |||
1255 | 226 | # Wait till we reached the initial number of concurrent sessions | ||
1256 | 227 | --source include/wait_until_count_sessions.inc | ||
1257 | 0 | 228 | ||
1258 | === removed file 'Percona-Server/mysql-test/t/percona_mysqldump_innodb_optimize_keys.test' | |||
1259 | --- Percona-Server/mysql-test/t/percona_mysqldump_innodb_optimize_keys.test 2012-04-18 23:26:09 +0000 | |||
1260 | +++ Percona-Server/mysql-test/t/percona_mysqldump_innodb_optimize_keys.test 1970-01-01 00:00:00 +0000 | |||
1261 | @@ -1,188 +0,0 @@ | |||
1262 | 1 | # Embedded server doesn't support external clients | ||
1263 | 2 | --source include/not_embedded.inc | ||
1264 | 3 | |||
1265 | 4 | # Fast index creation is only available in InnoDB plugin | ||
1266 | 5 | --source include/have_innodb.inc | ||
1267 | 6 | |||
1268 | 7 | # Save the initial number of concurrent sessions | ||
1269 | 8 | --source include/count_sessions.inc | ||
1270 | 9 | |||
1271 | 10 | --echo # | ||
1272 | 11 | --echo # Test the --innodb-optimize-keys option. | ||
1273 | 12 | --echo # | ||
1274 | 13 | |||
1275 | 14 | --let $file=$MYSQLTEST_VARDIR/tmp/t1.sql | ||
1276 | 15 | |||
1277 | 16 | # First test that the option has no effect on non-InnoDB tables | ||
1278 | 17 | |||
1279 | 18 | CREATE TABLE t1 (a INT NOT NULL PRIMARY KEY, b INT, KEY(b)) ENGINE=MyISAM; | ||
1280 | 19 | |||
1281 | 20 | --exec $MYSQL_DUMP --skip-comments --innodb-optimize-keys test t1 >$file | ||
1282 | 21 | |||
1283 | 22 | --echo ###################################### | ||
1284 | 23 | --cat_file $file | ||
1285 | 24 | --echo ###################################### | ||
1286 | 25 | |||
1287 | 26 | --remove_file $file | ||
1288 | 27 | |||
1289 | 28 | DROP TABLE t1; | ||
1290 | 29 | |||
1291 | 30 | |||
1292 | 31 | # Check that for InnoDB tables secondary keys are created after the data is | ||
1293 | 32 | # dumped but foreign ones are left in CREATE TABLE | ||
1294 | 33 | |||
1295 | 34 | CREATE TABLE t2 (a INT PRIMARY KEY) ENGINE=InnoDB; | ||
1296 | 35 | INSERT INTO t2 VALUES (0), (1), (2); | ||
1297 | 36 | |||
1298 | 37 | CREATE TABLE t1 ( | ||
1299 | 38 | id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, | ||
1300 | 39 | a INT, b VARCHAR(255), c DECIMAL(10,3), | ||
1301 | 40 | KEY (b), | ||
1302 | 41 | UNIQUE KEY uniq(c,a), | ||
1303 | 42 | FOREIGN KEY (a) REFERENCES t2(a) ON DELETE CASCADE | ||
1304 | 43 | ) ENGINE=InnoDB; | ||
1305 | 44 | |||
1306 | 45 | INSERT INTO t1(a,b,c) VALUES (0, "0", 0.0), (1, "1", 1.1), (2, "2", 2.2); | ||
1307 | 46 | |||
1308 | 47 | --exec $MYSQL_DUMP --skip-comments --innodb-optimize-keys test t1 t2 >$file | ||
1309 | 48 | |||
1310 | 49 | --echo ###################################### | ||
1311 | 50 | --cat_file $file | ||
1312 | 51 | --echo ###################################### | ||
1313 | 52 | |||
1314 | 53 | # Check that the resulting dump can be imported back | ||
1315 | 54 | |||
1316 | 55 | --exec $MYSQL test < $file | ||
1317 | 56 | |||
1318 | 57 | --remove_file $file | ||
1319 | 58 | |||
1320 | 59 | DROP TABLE t1, t2; | ||
1321 | 60 | |||
1322 | 61 | ######################################################################## | ||
1323 | 62 | # Bug #812179: AUTO_INCREMENT columns must be skipped by the | ||
1324 | 63 | # --innodb-optimize-keys optimization in mysqldump | ||
1325 | 64 | ######################################################################## | ||
1326 | 65 | |||
1327 | 66 | CREATE TABLE t1 ( | ||
1328 | 67 | id INT NOT NULL AUTO_INCREMENT, | ||
1329 | 68 | KEY (id) | ||
1330 | 69 | ) ENGINE=InnoDB; | ||
1331 | 70 | |||
1332 | 71 | CREATE TABLE t2 ( | ||
1333 | 72 | id INT NOT NULL AUTO_INCREMENT, | ||
1334 | 73 | UNIQUE KEY (id) | ||
1335 | 74 | ) ENGINE=InnoDB; | ||
1336 | 75 | |||
1337 | 76 | INSERT INTO t1 VALUES (), (), (); | ||
1338 | 77 | INSERT INTO t2 VALUES (), (), (); | ||
1339 | 78 | |||
1340 | 79 | --exec $MYSQL_DUMP --skip-comments --innodb-optimize-keys test t1 t2 >$file | ||
1341 | 80 | |||
1342 | 81 | --echo ###################################### | ||
1343 | 82 | --cat_file $file | ||
1344 | 83 | --echo ###################################### | ||
1345 | 84 | |||
1346 | 85 | # Check that the resulting dump can be imported back | ||
1347 | 86 | |||
1348 | 87 | --exec $MYSQL test < $file | ||
1349 | 88 | |||
1350 | 89 | --remove_file $file | ||
1351 | 90 | |||
1352 | 91 | DROP TABLE t1, t2; | ||
1353 | 92 | |||
1354 | 93 | ######################################################################## | ||
1355 | 94 | # Bug #851674: --innodb-optimize-keys does not work correctly with table | ||
1356 | 95 | # without PRIMARY KEY | ||
1357 | 96 | ######################################################################## | ||
1358 | 97 | |||
1359 | 98 | CREATE TABLE t1 ( | ||
1360 | 99 | a INT NOT NULL, | ||
1361 | 100 | UNIQUE KEY (a)) ENGINE=InnoDB; | ||
1362 | 101 | |||
1363 | 102 | CREATE TABLE t2 ( | ||
1364 | 103 | a INT NOT NULL, | ||
1365 | 104 | b INT NOT NULL, | ||
1366 | 105 | UNIQUE KEY (a,b)) ENGINE=InnoDB; | ||
1367 | 106 | |||
1368 | 107 | CREATE TABLE t3 ( | ||
1369 | 108 | a INT, | ||
1370 | 109 | b INT, | ||
1371 | 110 | UNIQUE KEY (a,b)) ENGINE=InnoDB; | ||
1372 | 111 | |||
1373 | 112 | CREATE TABLE t4 ( | ||
1374 | 113 | a INT NOT NULL, | ||
1375 | 114 | b INT NOT NULL, | ||
1376 | 115 | PRIMARY KEY (a,b), | ||
1377 | 116 | UNIQUE KEY(b)) ENGINE=InnoDB; | ||
1378 | 117 | |||
1379 | 118 | SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE | ||
1380 | 119 | TABLE_SCHEMA=DATABASE() AND | ||
1381 | 120 | TABLE_NAME='t1' AND | ||
1382 | 121 | COLUMN_KEY='PRI'; | ||
1383 | 122 | SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE | ||
1384 | 123 | TABLE_SCHEMA=DATABASE() AND | ||
1385 | 124 | TABLE_NAME='t2' AND | ||
1386 | 125 | COLUMN_KEY='PRI'; | ||
1387 | 126 | SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE | ||
1388 | 127 | TABLE_SCHEMA=DATABASE() AND | ||
1389 | 128 | TABLE_NAME='t3' AND | ||
1390 | 129 | COLUMN_KEY='PRI'; | ||
1391 | 130 | SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE | ||
1392 | 131 | TABLE_SCHEMA=DATABASE() AND | ||
1393 | 132 | TABLE_NAME='t4' AND | ||
1394 | 133 | COLUMN_KEY='PRI'; | ||
1395 | 134 | |||
1396 | 135 | INSERT INTO t1 VALUES (1), (2), (3); | ||
1397 | 136 | INSERT INTO t2 VALUES (1,1), (2,2), (3,3); | ||
1398 | 137 | INSERT INTO t3 SELECT * FROM t2; | ||
1399 | 138 | INSERT INTO t4 SELECT * FROM t2; | ||
1400 | 139 | |||
1401 | 140 | --exec $MYSQL_DUMP --skip-comments --innodb-optimize-keys test t1 t2 t3 t4 >$file | ||
1402 | 141 | |||
1403 | 142 | --echo ###################################### | ||
1404 | 143 | --cat_file $file | ||
1405 | 144 | --echo ###################################### | ||
1406 | 145 | |||
1407 | 146 | # Check that the resulting dump can be imported back | ||
1408 | 147 | |||
1409 | 148 | --exec $MYSQL test < $file | ||
1410 | 149 | |||
1411 | 150 | --remove_file $file | ||
1412 | 151 | |||
1413 | 152 | DROP TABLE t1, t2, t3, t4; | ||
1414 | 153 | |||
1415 | 154 | ######################################################################## | ||
1416 | 155 | # Bug #859078: --innodb-optimize-keys should ignore foreign keys | ||
1417 | 156 | ######################################################################## | ||
1418 | 157 | |||
1419 | 158 | CREATE TABLE t1 ( | ||
1420 | 159 | id INT NOT NULL PRIMARY KEY | ||
1421 | 160 | ) ENGINE=InnoDB; | ||
1422 | 161 | |||
1423 | 162 | CREATE TABLE t2 ( | ||
1424 | 163 | id INT NOT NULL AUTO_INCREMENT, | ||
1425 | 164 | a INT NOT NULL, | ||
1426 | 165 | PRIMARY KEY (id), | ||
1427 | 166 | KEY (a), | ||
1428 | 167 | FOREIGN KEY (a) REFERENCES t2 (id) | ||
1429 | 168 | ) ENGINE=InnoDB; | ||
1430 | 169 | |||
1431 | 170 | INSERT INTO t1 VALUES (1), (2), (3); | ||
1432 | 171 | INSERT INTO t2 VALUES (1, 1), (2, 2), (3, 3); | ||
1433 | 172 | |||
1434 | 173 | --exec $MYSQL_DUMP --skip-comments --innodb-optimize-keys test t1 t2 >$file | ||
1435 | 174 | |||
1436 | 175 | --echo ###################################### | ||
1437 | 176 | --cat_file $file | ||
1438 | 177 | --echo ###################################### | ||
1439 | 178 | |||
1440 | 179 | # Check that the resulting dump can be imported back | ||
1441 | 180 | |||
1442 | 181 | --exec $MYSQL test < $file | ||
1443 | 182 | |||
1444 | 183 | --remove_file $file | ||
1445 | 184 | |||
1446 | 185 | DROP TABLE t1, t2; | ||
1447 | 186 | |||
1448 | 187 | # Wait till we reached the initial number of concurrent sessions | ||
1449 | 188 | --source include/wait_until_count_sessions.inc |
http:// jenkins. percona. com/view/ PS%205. 5/job/percona- server- 5.5-param/ 575/