Merge lp:~percona-toolkit-dev/percona-toolkit/fix-i26211-1058285-821722-implicit-ansi_quotes into lp:percona-toolkit/2.1

Proposed by Daniel Nichter
Status: Merged
Approved by: Brian Fraser
Approved revision: 415
Merged at revision: 446
Proposed branch: lp:~percona-toolkit-dev/percona-toolkit/fix-i26211-1058285-821722-implicit-ansi_quotes
Merge into: lp:percona-toolkit/2.1
Prerequisite: lp:~percona-toolkit-dev/percona-toolkit/portable-test-suite
Diff against target: 692 lines (+402/-91)
18 files modified
bin/pt-archiver (+7/-6)
bin/pt-duplicate-key-checker (+7/-6)
bin/pt-find (+7/-6)
bin/pt-heartbeat (+7/-6)
bin/pt-index-usage (+7/-6)
bin/pt-kill (+7/-6)
bin/pt-online-schema-change (+10/-10)
bin/pt-query-advisor (+7/-6)
bin/pt-query-digest (+7/-6)
bin/pt-table-checksum (+7/-6)
bin/pt-table-sync (+7/-6)
bin/pt-table-usage (+7/-6)
bin/pt-upgrade (+7/-6)
lib/TableParser.pm (+13/-8)
t/pt-online-schema-change/ansi_quotes.t (+144/-0)
t/pt-online-schema-change/bugs.t (+0/-1)
t/pt-online-schema-change/samples/issue-26211.sql (+118/-0)
t/pt-online-schema-change/samples/sql-mode-bug-1058285.sql (+33/-0)
To merge this branch: bzr merge lp:~percona-toolkit-dev/percona-toolkit/fix-i26211-1058285-821722-implicit-ansi_quotes
Reviewer Review Type Date Requested Status
Brian Fraser (community) Approve
Daniel Nichter Approve
Review via email: mp+132602@code.launchpad.net

This proposal supersedes a proposal from 2012-10-04.

To post a comment you must log in.
Revision history for this message
Brian Fraser (fraserbn) : Posted in a previous version of this proposal
review: Approve
Revision history for this message
Daniel Nichter (daniel-nichter) wrote : Posted in a previous version of this proposal

I think the customer's particular issue was already fixed in 2.1.4. I've asked someone to verify this.

414. By Daniel Nichter

Test that SQL_MODE isn't changed.

Revision history for this message
Daniel Nichter (daniel-nichter) wrote :

Passes tests.

review: Approve
415. By Brian Fraser

Added a test for the second bug in customer issue 26211

Revision history for this message
Brian Fraser (fraserbn) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'bin/pt-archiver'
--- bin/pt-archiver 2012-10-31 01:12:57 +0000
+++ bin/pt-archiver 2012-11-01 20:30:30 +0000
@@ -1564,13 +1564,14 @@
1564 my $q = $self->{Quoter};1564 my $q = $self->{Quoter};
15651565
1566 my $new_sql_mode1566 my $new_sql_mode
1567 = '/*!40101 SET @OLD_SQL_MODE := @@SQL_MODE, '1567 = q{/*!40101 SET @OLD_SQL_MODE := @@SQL_MODE, }
1568 . q{@@SQL_MODE := REPLACE(REPLACE(@@SQL_MODE, 'ANSI_QUOTES', ''), ',,', ','), }1568 . q{@@SQL_MODE := '', }
1569 . '@OLD_QUOTE := @@SQL_QUOTE_SHOW_CREATE, '1569 . q{@OLD_QUOTE := @@SQL_QUOTE_SHOW_CREATE, }
1570 . '@@SQL_QUOTE_SHOW_CREATE := 1 */';1570 . q{@@SQL_QUOTE_SHOW_CREATE := 1 */};
15711571
1572 my $old_sql_mode = '/*!40101 SET @@SQL_MODE := @OLD_SQL_MODE, '1572 my $old_sql_mode
1573 . '@@SQL_QUOTE_SHOW_CREATE := @OLD_QUOTE */';1573 = q{/*!40101 SET @@SQL_MODE := @OLD_SQL_MODE, }
1574 . q{@@SQL_QUOTE_SHOW_CREATE := @OLD_QUOTE */};
15741575
1575 PTDEBUG && _d($new_sql_mode);1576 PTDEBUG && _d($new_sql_mode);
1576 eval { $dbh->do($new_sql_mode); };1577 eval { $dbh->do($new_sql_mode); };
15771578
=== modified file 'bin/pt-duplicate-key-checker'
--- bin/pt-duplicate-key-checker 2012-10-31 09:18:34 +0000
+++ bin/pt-duplicate-key-checker 2012-11-01 20:30:30 +0000
@@ -206,13 +206,14 @@
206 my $q = $self->{Quoter};206 my $q = $self->{Quoter};
207207
208 my $new_sql_mode208 my $new_sql_mode
209 = '/*!40101 SET @OLD_SQL_MODE := @@SQL_MODE, '209 = q{/*!40101 SET @OLD_SQL_MODE := @@SQL_MODE, }
210 . q{@@SQL_MODE := REPLACE(REPLACE(@@SQL_MODE, 'ANSI_QUOTES', ''), ',,', ','), }210 . q{@@SQL_MODE := '', }
211 . '@OLD_QUOTE := @@SQL_QUOTE_SHOW_CREATE, '211 . q{@OLD_QUOTE := @@SQL_QUOTE_SHOW_CREATE, }
212 . '@@SQL_QUOTE_SHOW_CREATE := 1 */';212 . q{@@SQL_QUOTE_SHOW_CREATE := 1 */};
213213
214 my $old_sql_mode = '/*!40101 SET @@SQL_MODE := @OLD_SQL_MODE, '214 my $old_sql_mode
215 . '@@SQL_QUOTE_SHOW_CREATE := @OLD_QUOTE */';215 = q{/*!40101 SET @@SQL_MODE := @OLD_SQL_MODE, }
216 . q{@@SQL_QUOTE_SHOW_CREATE := @OLD_QUOTE */};
216217
217 PTDEBUG && _d($new_sql_mode);218 PTDEBUG && _d($new_sql_mode);
218 eval { $dbh->do($new_sql_mode); };219 eval { $dbh->do($new_sql_mode); };
219220
=== modified file 'bin/pt-find'
--- bin/pt-find 2012-10-31 09:18:34 +0000
+++ bin/pt-find 2012-11-01 20:30:30 +0000
@@ -1607,13 +1607,14 @@
1607 my $q = $self->{Quoter};1607 my $q = $self->{Quoter};
16081608
1609 my $new_sql_mode1609 my $new_sql_mode
1610 = '/*!40101 SET @OLD_SQL_MODE := @@SQL_MODE, '1610 = q{/*!40101 SET @OLD_SQL_MODE := @@SQL_MODE, }
1611 . q{@@SQL_MODE := REPLACE(REPLACE(@@SQL_MODE, 'ANSI_QUOTES', ''), ',,', ','), }1611 . q{@@SQL_MODE := '', }
1612 . '@OLD_QUOTE := @@SQL_QUOTE_SHOW_CREATE, '1612 . q{@OLD_QUOTE := @@SQL_QUOTE_SHOW_CREATE, }
1613 . '@@SQL_QUOTE_SHOW_CREATE := 1 */';1613 . q{@@SQL_QUOTE_SHOW_CREATE := 1 */};
16141614
1615 my $old_sql_mode = '/*!40101 SET @@SQL_MODE := @OLD_SQL_MODE, '1615 my $old_sql_mode
1616 . '@@SQL_QUOTE_SHOW_CREATE := @OLD_QUOTE */';1616 = q{/*!40101 SET @@SQL_MODE := @OLD_SQL_MODE, }
1617 . q{@@SQL_QUOTE_SHOW_CREATE := @OLD_QUOTE */};
16171618
1618 PTDEBUG && _d($new_sql_mode);1619 PTDEBUG && _d($new_sql_mode);
1619 eval { $dbh->do($new_sql_mode); };1620 eval { $dbh->do($new_sql_mode); };
16201621
=== modified file 'bin/pt-heartbeat'
--- bin/pt-heartbeat 2012-10-31 09:18:34 +0000
+++ bin/pt-heartbeat 2012-11-01 20:30:30 +0000
@@ -2545,13 +2545,14 @@
2545 my $q = $self->{Quoter};2545 my $q = $self->{Quoter};
25462546
2547 my $new_sql_mode2547 my $new_sql_mode
2548 = '/*!40101 SET @OLD_SQL_MODE := @@SQL_MODE, '2548 = q{/*!40101 SET @OLD_SQL_MODE := @@SQL_MODE, }
2549 . q{@@SQL_MODE := REPLACE(REPLACE(@@SQL_MODE, 'ANSI_QUOTES', ''), ',,', ','), }2549 . q{@@SQL_MODE := '', }
2550 . '@OLD_QUOTE := @@SQL_QUOTE_SHOW_CREATE, '2550 . q{@OLD_QUOTE := @@SQL_QUOTE_SHOW_CREATE, }
2551 . '@@SQL_QUOTE_SHOW_CREATE := 1 */';2551 . q{@@SQL_QUOTE_SHOW_CREATE := 1 */};
25522552
2553 my $old_sql_mode = '/*!40101 SET @@SQL_MODE := @OLD_SQL_MODE, '2553 my $old_sql_mode
2554 . '@@SQL_QUOTE_SHOW_CREATE := @OLD_QUOTE */';2554 = q{/*!40101 SET @@SQL_MODE := @OLD_SQL_MODE, }
2555 . q{@@SQL_QUOTE_SHOW_CREATE := @OLD_QUOTE */};
25552556
2556 PTDEBUG && _d($new_sql_mode);2557 PTDEBUG && _d($new_sql_mode);
2557 eval { $dbh->do($new_sql_mode); };2558 eval { $dbh->do($new_sql_mode); };
25582559
=== modified file 'bin/pt-index-usage'
--- bin/pt-index-usage 2012-10-31 09:18:34 +0000
+++ bin/pt-index-usage 2012-11-01 20:30:30 +0000
@@ -2805,13 +2805,14 @@
2805 my $q = $self->{Quoter};2805 my $q = $self->{Quoter};
28062806
2807 my $new_sql_mode2807 my $new_sql_mode
2808 = '/*!40101 SET @OLD_SQL_MODE := @@SQL_MODE, '2808 = q{/*!40101 SET @OLD_SQL_MODE := @@SQL_MODE, }
2809 . q{@@SQL_MODE := REPLACE(REPLACE(@@SQL_MODE, 'ANSI_QUOTES', ''), ',,', ','), }2809 . q{@@SQL_MODE := '', }
2810 . '@OLD_QUOTE := @@SQL_QUOTE_SHOW_CREATE, '2810 . q{@OLD_QUOTE := @@SQL_QUOTE_SHOW_CREATE, }
2811 . '@@SQL_QUOTE_SHOW_CREATE := 1 */';2811 . q{@@SQL_QUOTE_SHOW_CREATE := 1 */};
28122812
2813 my $old_sql_mode = '/*!40101 SET @@SQL_MODE := @OLD_SQL_MODE, '2813 my $old_sql_mode
2814 . '@@SQL_QUOTE_SHOW_CREATE := @OLD_QUOTE */';2814 = q{/*!40101 SET @@SQL_MODE := @OLD_SQL_MODE, }
2815 . q{@@SQL_QUOTE_SHOW_CREATE := @OLD_QUOTE */};
28152816
2816 PTDEBUG && _d($new_sql_mode);2817 PTDEBUG && _d($new_sql_mode);
2817 eval { $dbh->do($new_sql_mode); };2818 eval { $dbh->do($new_sql_mode); };
28182819
=== modified file 'bin/pt-kill'
--- bin/pt-kill 2012-10-31 09:18:34 +0000
+++ bin/pt-kill 2012-11-01 20:30:30 +0000
@@ -2495,13 +2495,14 @@
2495 my $q = $self->{Quoter};2495 my $q = $self->{Quoter};
24962496
2497 my $new_sql_mode2497 my $new_sql_mode
2498 = '/*!40101 SET @OLD_SQL_MODE := @@SQL_MODE, '2498 = q{/*!40101 SET @OLD_SQL_MODE := @@SQL_MODE, }
2499 . q{@@SQL_MODE := REPLACE(REPLACE(@@SQL_MODE, 'ANSI_QUOTES', ''), ',,', ','), }2499 . q{@@SQL_MODE := '', }
2500 . '@OLD_QUOTE := @@SQL_QUOTE_SHOW_CREATE, '2500 . q{@OLD_QUOTE := @@SQL_QUOTE_SHOW_CREATE, }
2501 . '@@SQL_QUOTE_SHOW_CREATE := 1 */';2501 . q{@@SQL_QUOTE_SHOW_CREATE := 1 */};
25022502
2503 my $old_sql_mode = '/*!40101 SET @@SQL_MODE := @OLD_SQL_MODE, '2503 my $old_sql_mode
2504 . '@@SQL_QUOTE_SHOW_CREATE := @OLD_QUOTE */';2504 = q{/*!40101 SET @@SQL_MODE := @OLD_SQL_MODE, }
2505 . q{@@SQL_QUOTE_SHOW_CREATE := @OLD_QUOTE */};
25052506
2506 PTDEBUG && _d($new_sql_mode);2507 PTDEBUG && _d($new_sql_mode);
2507 eval { $dbh->do($new_sql_mode); };2508 eval { $dbh->do($new_sql_mode); };
25082509
=== modified file 'bin/pt-online-schema-change'
--- bin/pt-online-schema-change 2012-10-31 09:18:34 +0000
+++ bin/pt-online-schema-change 2012-11-01 20:30:30 +0000
@@ -2729,13 +2729,14 @@
2729 my $q = $self->{Quoter};2729 my $q = $self->{Quoter};
27302730
2731 my $new_sql_mode2731 my $new_sql_mode
2732 = '/*!40101 SET @OLD_SQL_MODE := @@SQL_MODE, '2732 = q{/*!40101 SET @OLD_SQL_MODE := @@SQL_MODE, }
2733 . q{@@SQL_MODE := REPLACE(REPLACE(@@SQL_MODE, 'ANSI_QUOTES', ''), ',,', ','), }2733 . q{@@SQL_MODE := '', }
2734 . '@OLD_QUOTE := @@SQL_QUOTE_SHOW_CREATE, '2734 . q{@OLD_QUOTE := @@SQL_QUOTE_SHOW_CREATE, }
2735 . '@@SQL_QUOTE_SHOW_CREATE := 1 */';2735 . q{@@SQL_QUOTE_SHOW_CREATE := 1 */};
27362736
2737 my $old_sql_mode = '/*!40101 SET @@SQL_MODE := @OLD_SQL_MODE, '2737 my $old_sql_mode
2738 . '@@SQL_QUOTE_SHOW_CREATE := @OLD_QUOTE */';2738 = q{/*!40101 SET @@SQL_MODE := @OLD_SQL_MODE, }
2739 . q{@@SQL_QUOTE_SHOW_CREATE := @OLD_QUOTE */};
27392740
2740 PTDEBUG && _d($new_sql_mode);2741 PTDEBUG && _d($new_sql_mode);
2741 eval { $dbh->do($new_sql_mode); };2742 eval { $dbh->do($new_sql_mode); };
@@ -8232,10 +8233,9 @@
8232 # the user specified --chunk-size=N on the cmd line, in which8233 # the user specified --chunk-size=N on the cmd line, in which
8233 # case the max child table size is their specified chunk size8234 # case the max child table size is their specified chunk size
8234 # times the fudge factor.8235 # times the fudge factor.
8235 my $max_rows8236 my $max_rows = $o->get('dry-run') ? $o->get('chunk-size') * $limit
8236 = $o->get('dry-run') ? $o->get('chunk-size') * $limit8237 : $chunk_time && $avg_rate ? $avg_rate * $chunk_time * $limit
8237 : $chunk_time ? $avg_rate * $chunk_time * $limit8238 : $o->get('chunk-size') * $limit;
8238 : $o->get('chunk-size') * $limit;
8239 PTDEBUG && _d('Max allowed child table size:', $max_rows);8239 PTDEBUG && _d('Max allowed child table size:', $max_rows);
82408240
8241 $alter_fk_method = determine_alter_fk_method(8241 $alter_fk_method = determine_alter_fk_method(
82428242
=== modified file 'bin/pt-query-advisor'
--- bin/pt-query-advisor 2012-10-31 09:18:34 +0000
+++ bin/pt-query-advisor 2012-11-01 20:30:30 +0000
@@ -5307,13 +5307,14 @@
5307 my $q = $self->{Quoter};5307 my $q = $self->{Quoter};
53085308
5309 my $new_sql_mode5309 my $new_sql_mode
5310 = '/*!40101 SET @OLD_SQL_MODE := @@SQL_MODE, '5310 = q{/*!40101 SET @OLD_SQL_MODE := @@SQL_MODE, }
5311 . q{@@SQL_MODE := REPLACE(REPLACE(@@SQL_MODE, 'ANSI_QUOTES', ''), ',,', ','), }5311 . q{@@SQL_MODE := '', }
5312 . '@OLD_QUOTE := @@SQL_QUOTE_SHOW_CREATE, '5312 . q{@OLD_QUOTE := @@SQL_QUOTE_SHOW_CREATE, }
5313 . '@@SQL_QUOTE_SHOW_CREATE := 1 */';5313 . q{@@SQL_QUOTE_SHOW_CREATE := 1 */};
53145314
5315 my $old_sql_mode = '/*!40101 SET @@SQL_MODE := @OLD_SQL_MODE, '5315 my $old_sql_mode
5316 . '@@SQL_QUOTE_SHOW_CREATE := @OLD_QUOTE */';5316 = q{/*!40101 SET @@SQL_MODE := @OLD_SQL_MODE, }
5317 . q{@@SQL_QUOTE_SHOW_CREATE := @OLD_QUOTE */};
53175318
5318 PTDEBUG && _d($new_sql_mode);5319 PTDEBUG && _d($new_sql_mode);
5319 eval { $dbh->do($new_sql_mode); };5320 eval { $dbh->do($new_sql_mode); };
53205321
=== modified file 'bin/pt-query-digest'
--- bin/pt-query-digest 2012-10-31 09:18:34 +0000
+++ bin/pt-query-digest 2012-11-01 20:30:30 +0000
@@ -8124,13 +8124,14 @@
8124 my $q = $self->{Quoter};8124 my $q = $self->{Quoter};
81258125
8126 my $new_sql_mode8126 my $new_sql_mode
8127 = '/*!40101 SET @OLD_SQL_MODE := @@SQL_MODE, '8127 = q{/*!40101 SET @OLD_SQL_MODE := @@SQL_MODE, }
8128 . q{@@SQL_MODE := REPLACE(REPLACE(@@SQL_MODE, 'ANSI_QUOTES', ''), ',,', ','), }8128 . q{@@SQL_MODE := '', }
8129 . '@OLD_QUOTE := @@SQL_QUOTE_SHOW_CREATE, '8129 . q{@OLD_QUOTE := @@SQL_QUOTE_SHOW_CREATE, }
8130 . '@@SQL_QUOTE_SHOW_CREATE := 1 */';8130 . q{@@SQL_QUOTE_SHOW_CREATE := 1 */};
81318131
8132 my $old_sql_mode = '/*!40101 SET @@SQL_MODE := @OLD_SQL_MODE, '8132 my $old_sql_mode
8133 . '@@SQL_QUOTE_SHOW_CREATE := @OLD_QUOTE */';8133 = q{/*!40101 SET @@SQL_MODE := @OLD_SQL_MODE, }
8134 . q{@@SQL_QUOTE_SHOW_CREATE := @OLD_QUOTE */};
81348135
8135 PTDEBUG && _d($new_sql_mode);8136 PTDEBUG && _d($new_sql_mode);
8136 eval { $dbh->do($new_sql_mode); };8137 eval { $dbh->do($new_sql_mode); };
81378138
=== modified file 'bin/pt-table-checksum'
--- bin/pt-table-checksum 2012-10-31 18:20:54 +0000
+++ bin/pt-table-checksum 2012-11-01 20:30:30 +0000
@@ -3709,13 +3709,14 @@
3709 my $q = $self->{Quoter};3709 my $q = $self->{Quoter};
37103710
3711 my $new_sql_mode3711 my $new_sql_mode
3712 = '/*!40101 SET @OLD_SQL_MODE := @@SQL_MODE, '3712 = q{/*!40101 SET @OLD_SQL_MODE := @@SQL_MODE, }
3713 . q{@@SQL_MODE := REPLACE(REPLACE(@@SQL_MODE, 'ANSI_QUOTES', ''), ',,', ','), }3713 . q{@@SQL_MODE := '', }
3714 . '@OLD_QUOTE := @@SQL_QUOTE_SHOW_CREATE, '3714 . q{@OLD_QUOTE := @@SQL_QUOTE_SHOW_CREATE, }
3715 . '@@SQL_QUOTE_SHOW_CREATE := 1 */';3715 . q{@@SQL_QUOTE_SHOW_CREATE := 1 */};
37163716
3717 my $old_sql_mode = '/*!40101 SET @@SQL_MODE := @OLD_SQL_MODE, '3717 my $old_sql_mode
3718 . '@@SQL_QUOTE_SHOW_CREATE := @OLD_QUOTE */';3718 = q{/*!40101 SET @@SQL_MODE := @OLD_SQL_MODE, }
3719 . q{@@SQL_QUOTE_SHOW_CREATE := @OLD_QUOTE */};
37193720
3720 PTDEBUG && _d($new_sql_mode);3721 PTDEBUG && _d($new_sql_mode);
3721 eval { $dbh->do($new_sql_mode); };3722 eval { $dbh->do($new_sql_mode); };
37223723
=== modified file 'bin/pt-table-sync'
--- bin/pt-table-sync 2012-10-30 23:04:22 +0000
+++ bin/pt-table-sync 2012-11-01 20:30:30 +0000
@@ -2383,13 +2383,14 @@
2383 my $q = $self->{Quoter};2383 my $q = $self->{Quoter};
23842384
2385 my $new_sql_mode2385 my $new_sql_mode
2386 = '/*!40101 SET @OLD_SQL_MODE := @@SQL_MODE, '2386 = q{/*!40101 SET @OLD_SQL_MODE := @@SQL_MODE, }
2387 . q{@@SQL_MODE := REPLACE(REPLACE(@@SQL_MODE, 'ANSI_QUOTES', ''), ',,', ','), }2387 . q{@@SQL_MODE := '', }
2388 . '@OLD_QUOTE := @@SQL_QUOTE_SHOW_CREATE, '2388 . q{@OLD_QUOTE := @@SQL_QUOTE_SHOW_CREATE, }
2389 . '@@SQL_QUOTE_SHOW_CREATE := 1 */';2389 . q{@@SQL_QUOTE_SHOW_CREATE := 1 */};
23902390
2391 my $old_sql_mode = '/*!40101 SET @@SQL_MODE := @OLD_SQL_MODE, '2391 my $old_sql_mode
2392 . '@@SQL_QUOTE_SHOW_CREATE := @OLD_QUOTE */';2392 = q{/*!40101 SET @@SQL_MODE := @OLD_SQL_MODE, }
2393 . q{@@SQL_QUOTE_SHOW_CREATE := @OLD_QUOTE */};
23932394
2394 PTDEBUG && _d($new_sql_mode);2395 PTDEBUG && _d($new_sql_mode);
2395 eval { $dbh->do($new_sql_mode); };2396 eval { $dbh->do($new_sql_mode); };
23962397
=== modified file 'bin/pt-table-usage'
--- bin/pt-table-usage 2012-10-30 23:04:22 +0000
+++ bin/pt-table-usage 2012-11-01 20:30:30 +0000
@@ -5655,13 +5655,14 @@
5655 my $q = $self->{Quoter};5655 my $q = $self->{Quoter};
56565656
5657 my $new_sql_mode5657 my $new_sql_mode
5658 = '/*!40101 SET @OLD_SQL_MODE := @@SQL_MODE, '5658 = q{/*!40101 SET @OLD_SQL_MODE := @@SQL_MODE, }
5659 . q{@@SQL_MODE := REPLACE(REPLACE(@@SQL_MODE, 'ANSI_QUOTES', ''), ',,', ','), }5659 . q{@@SQL_MODE := '', }
5660 . '@OLD_QUOTE := @@SQL_QUOTE_SHOW_CREATE, '5660 . q{@OLD_QUOTE := @@SQL_QUOTE_SHOW_CREATE, }
5661 . '@@SQL_QUOTE_SHOW_CREATE := 1 */';5661 . q{@@SQL_QUOTE_SHOW_CREATE := 1 */};
56625662
5663 my $old_sql_mode = '/*!40101 SET @@SQL_MODE := @OLD_SQL_MODE, '5663 my $old_sql_mode
5664 . '@@SQL_QUOTE_SHOW_CREATE := @OLD_QUOTE */';5664 = q{/*!40101 SET @@SQL_MODE := @OLD_SQL_MODE, }
5665 . q{@@SQL_QUOTE_SHOW_CREATE := @OLD_QUOTE */};
56655666
5666 PTDEBUG && _d($new_sql_mode);5667 PTDEBUG && _d($new_sql_mode);
5667 eval { $dbh->do($new_sql_mode); };5668 eval { $dbh->do($new_sql_mode); };
56685669
=== modified file 'bin/pt-upgrade'
--- bin/pt-upgrade 2012-10-31 01:12:57 +0000
+++ bin/pt-upgrade 2012-11-01 20:30:30 +0000
@@ -482,13 +482,14 @@
482 my $q = $self->{Quoter};482 my $q = $self->{Quoter};
483483
484 my $new_sql_mode484 my $new_sql_mode
485 = '/*!40101 SET @OLD_SQL_MODE := @@SQL_MODE, '485 = q{/*!40101 SET @OLD_SQL_MODE := @@SQL_MODE, }
486 . q{@@SQL_MODE := REPLACE(REPLACE(@@SQL_MODE, 'ANSI_QUOTES', ''), ',,', ','), }486 . q{@@SQL_MODE := '', }
487 . '@OLD_QUOTE := @@SQL_QUOTE_SHOW_CREATE, '487 . q{@OLD_QUOTE := @@SQL_QUOTE_SHOW_CREATE, }
488 . '@@SQL_QUOTE_SHOW_CREATE := 1 */';488 . q{@@SQL_QUOTE_SHOW_CREATE := 1 */};
489489
490 my $old_sql_mode = '/*!40101 SET @@SQL_MODE := @OLD_SQL_MODE, '490 my $old_sql_mode
491 . '@@SQL_QUOTE_SHOW_CREATE := @OLD_QUOTE */';491 = q{/*!40101 SET @@SQL_MODE := @OLD_SQL_MODE, }
492 . q{@@SQL_QUOTE_SHOW_CREATE := @OLD_QUOTE */};
492493
493 PTDEBUG && _d($new_sql_mode);494 PTDEBUG && _d($new_sql_mode);
494 eval { $dbh->do($new_sql_mode); };495 eval { $dbh->do($new_sql_mode); };
495496
=== modified file 'lib/TableParser.pm'
--- lib/TableParser.pm 2012-10-19 23:14:07 +0000
+++ lib/TableParser.pm 2012-11-01 20:30:30 +0000
@@ -56,16 +56,21 @@
56 my $q = $self->{Quoter};56 my $q = $self->{Quoter};
5757
58 # To ensure a consistent output, we save the current (old) SQL mode,58 # To ensure a consistent output, we save the current (old) SQL mode,
59 # then set it to the new SQL mode that what we need. When done, even59 # then set it to the new SQL mode that what we need, which is the
60 # if an error occurs, we restore the old SQL mode.60 # default sql_mode=''. When done, even if an error occurs, we restore
61 # the old SQL mode. The main thing is that we do not want ANSI_QUOTES
62 # because there's code all throughout the tools that expect backtick `
63 # quoted idents, not double-quote " quoted idents. For example:
64 # https://bugs.launchpad.net/percona-toolkit/+bug/1058285
61 my $new_sql_mode65 my $new_sql_mode
62 = '/*!40101 SET @OLD_SQL_MODE := @@SQL_MODE, '66 = q{/*!40101 SET @OLD_SQL_MODE := @@SQL_MODE, }
63 . q{@@SQL_MODE := REPLACE(REPLACE(@@SQL_MODE, 'ANSI_QUOTES', ''), ',,', ','), }67 . q{@@SQL_MODE := '', }
64 . '@OLD_QUOTE := @@SQL_QUOTE_SHOW_CREATE, '68 . q{@OLD_QUOTE := @@SQL_QUOTE_SHOW_CREATE, }
65 . '@@SQL_QUOTE_SHOW_CREATE := 1 */';69 . q{@@SQL_QUOTE_SHOW_CREATE := 1 */};
6670
67 my $old_sql_mode = '/*!40101 SET @@SQL_MODE := @OLD_SQL_MODE, '71 my $old_sql_mode
68 . '@@SQL_QUOTE_SHOW_CREATE := @OLD_QUOTE */';72 = q{/*!40101 SET @@SQL_MODE := @OLD_SQL_MODE, }
73 . q{@@SQL_QUOTE_SHOW_CREATE := @OLD_QUOTE */};
6974
70 # Set new SQL mode.75 # Set new SQL mode.
71 PTDEBUG && _d($new_sql_mode);76 PTDEBUG && _d($new_sql_mode);
7277
=== added file 't/pt-online-schema-change/ansi_quotes.t'
--- t/pt-online-schema-change/ansi_quotes.t 1970-01-01 00:00:00 +0000
+++ t/pt-online-schema-change/ansi_quotes.t 2012-11-01 20:30:30 +0000
@@ -0,0 +1,144 @@
1#!/usr/bin/env perl
2
3BEGIN {
4 die "The PERCONA_TOOLKIT_BRANCH environment variable is not set.\n"
5 unless $ENV{PERCONA_TOOLKIT_BRANCH} && -d $ENV{PERCONA_TOOLKIT_BRANCH};
6 unshift @INC, "$ENV{PERCONA_TOOLKIT_BRANCH}/lib";
7};
8
9use strict;
10use warnings FATAL => 'all';
11use English qw(-no_match_vars);
12use Test::More;
13
14use Data::Dumper;
15use PerconaTest;
16use Sandbox;
17
18require "$trunk/bin/pt-online-schema-change";
19
20diag(`$trunk/sandbox/stop-sandbox 12348 >/dev/null`);
21diag(`MODE_ANSI=1 $trunk/sandbox/start-sandbox master 12348 >/dev/null`);
22
23my $dp = new DSNParser(opts=>$dsn_opts);
24my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp);
25my $dbh = $sb->get_dbh_for('master1');
26
27if ( !$dbh ) {
28 plan skip_all => 'Cannot connect to sandbox master 12348';
29}
30
31# The sandbox servers run with lock_wait_timeout=3 and it's not dynamic
32# so we need to specify --lock-wait-timeout=3 else the tool will die.
33my $master_dsn = 'h=127.1,P=12348,u=msandbox,p=msandbox';
34my @args = (qw(--lock-wait-timeout 3));
35my $output;
36my $exit_status;
37my $sample = "t/pt-online-schema-change/samples/";
38
39# ############################################################################
40# pt-online-schema-change doesn't work with ANSI_QUOTES + some other sql_modes
41# https://bugs.launchpad.net/percona-toolkit/+bug/1058285
42# ############################################################################
43$sb->load_file('master1', "$sample/sql-mode-bug-1058285.sql");
44
45my ($orig_sql_mode) = $dbh->selectrow_array(q{SELECT @@SQL_MODE});
46is(
47 $orig_sql_mode,
48 "REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI,NO_AUTO_VALUE_ON_ZERO",
49 "SQL_MODE set"
50);
51
52($output, $exit_status) = full_output(
53 sub { pt_online_schema_change::main(@args,
54 "$master_dsn,D=issue26211,t=process_model_inst",
55 "--alter", "ADD COLUMN foo int",
56 qw(--dry-run --print --alter-foreign-keys-method auto)) },
57);
58
59is(
60 $exit_status,
61 0,
62 "--dry-run exit 0 (bug 1058285)"
63);
64
65unlike(
66 $output,
67 qr/errno: 121/,
68 "No error 121 (bug 1058285)"
69);
70
71my ($sql_mode) = $dbh->selectrow_array(q{SELECT @@SQL_MODE});
72is(
73 $sql_mode,
74 $orig_sql_mode,
75 "--dry-run SQL_MODE not changed"
76);
77
78($output, $exit_status) = full_output(
79 sub { pt_online_schema_change::main(@args,
80 "$master_dsn,D=issue26211,t=process_model_inst",
81 "--alter", "ADD COLUMN foo int",
82 qw(--execute --alter-foreign-keys-method auto)) },
83);
84
85is(
86 $exit_status,
87 0,
88 "--execute exit 0 (bug 1058285)"
89);
90
91unlike(
92 $output,
93 qr/\QI need a max_rows argument/,
94 "No 'I need a max_rows' error message (bug 1073996)"
95);
96
97# ANSI_QUOTES are on, so it's "foo" not `foo`.
98my $rows = $dbh->selectrow_arrayref("SHOW CREATE TABLE issue26211.process_model_inst");
99like(
100 $rows->[1],
101 qr/"foo"\s+int/i,
102 "--alter actually worked (bug 1058285)"
103);
104
105($sql_mode) = $dbh->selectrow_array(q{SELECT @@SQL_MODE});
106is(
107 $sql_mode,
108 $orig_sql_mode,
109 "--execute SQL_MODE not changed"
110);
111
112# ############################################################################
113# pt-online-schema-change foreign key error
114# Customer issue 26211
115# ############################################################################
116$sb->load_file('master1', "$sample/issue-26211.sql");
117
118my $retval;
119($output, $retval) = full_output(sub { pt_online_schema_change::main(@args,
120 '--alter-foreign-keys-method', 'auto',
121 '--no-check-replication-filters',
122 '--alter', "ENGINE=InnoDB",
123 '--execute', "$master_dsn,D=bug_26211,t=prm_inst")});
124
125is(
126 $retval,
127 0,
128 "Issue 26211: Lives ok"
129) or diag($output);
130
131unlike(
132 $output,
133 qr/\QI need a max_rows argument/,
134 "Issue 26211: No error message"
135);
136
137$dbh->do(q{DROP DATABASE IF EXISTS `bug_26211`});
138
139# #############################################################################
140# Done.
141# #############################################################################
142diag(`$trunk/sandbox/stop-sandbox 12348 >/dev/null`);
143ok($sb->ok(), "Sandbox servers") or BAIL_OUT(__FILE__ . " broke the sandbox");
144done_testing;
0145
=== modified file 't/pt-online-schema-change/bugs.t'
--- t/pt-online-schema-change/bugs.t 2012-10-11 21:20:53 +0000
+++ t/pt-online-schema-change/bugs.t 2012-11-01 20:30:30 +0000
@@ -240,5 +240,4 @@
240# #############################################################################240# #############################################################################
241$sb->wipe_clean($master_dbh);241$sb->wipe_clean($master_dbh);
242ok($sb->ok(), "Sandbox servers") or BAIL_OUT(__FILE__ . " broke the sandbox");242ok($sb->ok(), "Sandbox servers") or BAIL_OUT(__FILE__ . " broke the sandbox");
243
244done_testing;243done_testing;
245244
=== added file 't/pt-online-schema-change/samples/issue-26211.sql'
--- t/pt-online-schema-change/samples/issue-26211.sql 1970-01-01 00:00:00 +0000
+++ t/pt-online-schema-change/samples/issue-26211.sql 2012-11-01 20:30:30 +0000
@@ -0,0 +1,118 @@
1/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
2/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
3/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
4/*!40101 SET NAMES utf8 */;
5/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
6/*!40103 SET TIME_ZONE='+00:00' */;
7/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
8/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
9/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
10/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
11
12
13DROP DATABASE IF EXISTS `bug_26211`;
14CREATE DATABASE `bug_26211`;
15USE `bug_26211`;
16
17DROP TABLE IF EXISTS `mref`;
18/*!40101 SET @saved_cs_client = @@character_set_client */;
19/*!40101 SET character_set_client = utf8 */;
20CREATE TABLE `mref` (
21 `M_ID` decimal(10,0) NOT NULL ,
22 `PR_M_INST_ID` decimal(10,0) NOT NULL ,
23 KEY `I_M_ID` (`M_ID`),
24 KEY `I_PR_M_` (`PR_M_INST_ID`),
25 CONSTRAINT `FK_MREF_REF_PM` FOREIGN KEY (`M_ID`) REFERENCES `pm` (`M_ID`) ON DELETE CASCADE,
26 CONSTRAINT `FK_MREF_REF_PRMI` FOREIGN KEY (`PR_M_INST_ID`) REFERENCES `prm_inst` (`PR_M_INST_ID`) ON DELETE CASCADE
27) ENGINE=InnoDB DEFAULT CHARSET=latin1;
28/*!40101 SET character_set_client = @saved_cs_client */;
29
30DROP TABLE IF EXISTS `pm`;
31/*!40101 SET @saved_cs_client = @@character_set_client */;
32/*!40101 SET character_set_client = utf8 */;
33CREATE TABLE `pm` (
34 `M_ID` decimal(10,0) NOT NULL ,
35 `P_MR_NUM` varchar(64) NOT NULL ,
36 `P_NUM` varchar(50) NOT NULL ,
37 `TYPE` varchar(50) DEFAULT NULL ,
38 `VERSION` decimal(10,0) NOT NULL ,
39 `XML` longtext NOT NULL ,
40 PRIMARY KEY (`M_ID`),
41 UNIQUE KEY `UK_PM` (`P_MR_NUM`,`P_NUM`),
42 KEY `I_PM_P_NUM` (`P_NUM`),
43 CONSTRAINT `FK_PM_REF_P` FOREIGN KEY (`P_NUM`) REFERENCES `p` (`P_NUM`)
44) ENGINE=InnoDB DEFAULT CHARSET=latin1;
45/*!40101 SET character_set_client = @saved_cs_client */;
46
47DROP TABLE IF EXISTS `p`;
48/*!40101 SET @saved_cs_client = @@character_set_client */;
49/*!40101 SET character_set_client = utf8 */;
50CREATE TABLE `p` (
51 `P_NUM` varchar(50) NOT NULL ,
52 `VERSION` decimal(10,0) NOT NULL ,
53 `TYPE` varchar(32) NOT NULL ,
54 `PROTECTED` decimal(1,0) NOT NULL ,
55 `DESCRIPTIONS` varchar(4000) DEFAULT NULL ,
56 PRIMARY KEY (`P_NUM`)
57) ENGINE=InnoDB DEFAULT CHARSET=latin1;
58/*!40101 SET character_set_client = @saved_cs_client */;
59
60
61DROP TABLE IF EXISTS `pr`;
62/*!40101 SET @saved_cs_client = @@character_set_client */;
63/*!40101 SET character_set_client = utf8 */;
64CREATE TABLE `pr` (
65 `PR_ID` decimal(10,0) NOT NULL ,
66 `NUM` varchar(64) NOT NULL ,
67 `HUB_RQD` decimal(1,0) NOT NULL ,
68 `TP_RQD` decimal(1,0) NOT NULL ,
69 `TRANS_TYPE_RQD` decimal(1,0) NOT NULL ,
70 `HUB_LABEL` varchar(255) DEFAULT NULL ,
71 `TP_LABEL` varchar(255) DEFAULT NULL ,
72 `TRANS_TYPE_LABEL` varchar(255) DEFAULT NULL ,
73 `TYPE` varchar(32) NOT NULL ,
74 `PR_M_FLAG` decimal(1,0) NOT NULL ,
75 `USER_DEFINED` decimal(1,0) NOT NULL ,
76 `DESCRIPTIONS` varchar(4000) DEFAULT NULL ,
77 `SIGNATURE` longtext ,
78 PRIMARY KEY (`PR_ID`),
79 KEY `pr_num_index` (`NUM`)
80) ENGINE=InnoDB DEFAULT CHARSET=latin1;
81/*!40101 SET character_set_client = @saved_cs_client */;
82
83DROP TABLE IF EXISTS `prm`;
84/*!40101 SET @saved_cs_client = @@character_set_client */;
85/*!40101 SET character_set_client = utf8 */;
86CREATE TABLE `prm` (
87 `PR_M_ID` decimal(10,0) NOT NULL ,
88 `M_ID` decimal(10,0) NOT NULL ,
89 `PR_ID` decimal(10,0) DEFAULT NULL ,
90 `ACTIVE_VERSION` decimal(10,0) DEFAULT NULL ,
91 `CURRENT_VERSION` decimal(10,0) DEFAULT NULL ,
92 `ENABLED` decimal(1,0) NOT NULL ,
93 `NUM` varchar(64) NOT NULL ,
94 PRIMARY KEY (`PR_M_ID`),
95 KEY `I_PRM_M_ID` (`M_ID`),
96 KEY `I_PRM_PR_ID` (`PR_ID`),
97 KEY `prm_num_indx` (`NUM`),
98 CONSTRAINT `FK_PMOD_REF_PR` FOREIGN KEY (`PR_ID`) REFERENCES `pr` (`PR_ID`),
99 CONSTRAINT `FK_PRM_REF_PM` FOREIGN KEY (`M_ID`) REFERENCES `pm` (`M_ID`) ON DELETE CASCADE
100) ENGINE=InnoDB DEFAULT CHARSET=latin1;
101/*!40101 SET character_set_client = @saved_cs_client */;
102
103DROP TABLE IF EXISTS `prm_inst`;
104/*!40101 SET @saved_cs_client = @@character_set_client */;
105/*!40101 SET character_set_client = utf8 */;
106CREATE TABLE `prm_inst` (
107 `PR_M_INST_ID` decimal(10,0) NOT NULL,
108 `VERSION` decimal(10,0) NOT NULL,
109 `PR_M_ID` decimal(10,0) NOT NULL,
110 PRIMARY KEY (`PR_M_INST_ID`),
111 UNIQUE KEY `UK_PRM_INST` (`VERSION`,`PR_M_ID`),
112 KEY `I_PRM_INST_PR_MODE` (`PR_M_ID`),
113 CONSTRAINT `FK_PRMI_REF_PRM` FOREIGN KEY (`PR_M_ID`) REFERENCES `prm` (`PR_M_ID`) ON DELETE CASCADE
114) ENGINE=InnoDB DEFAULT CHARSET=latin1;
115/*!40101 SET character_set_client = @saved_cs_client */;
116
117
118
0119
=== added file 't/pt-online-schema-change/samples/sql-mode-bug-1058285.sql'
--- t/pt-online-schema-change/samples/sql-mode-bug-1058285.sql 1970-01-01 00:00:00 +0000
+++ t/pt-online-schema-change/samples/sql-mode-bug-1058285.sql 2012-11-01 20:30:30 +0000
@@ -0,0 +1,33 @@
1DROP DATABASE IF EXISTS `issue26211`;
2CREATE DATABASE `issue26211`;
3USE `issue26211`;
4
5CREATE TABLE `process_model` (
6 `PROC_MODEL_ID` decimal(10,0) NOT NULL,
7 `PKG_MEM_ID` decimal(10,0) NOT NULL,
8 `PROC_ID` decimal(10,0) DEFAULT NULL,
9 `ACTIVE_VERSION` decimal(10,0) DEFAULT NULL,
10 `CURRENT_VERSION` decimal(10,0) DEFAULT NULL,
11 `ENABLED` decimal(1,0) NOT NULL,
12 `NAME` varchar(64) NOT NULL,
13 `COMMENTS` varchar(4000) DEFAULT NULL,
14 PRIMARY KEY (`PROC_MODEL_ID`),
15 KEY `I_PROCESS_MODEL_PKG_MEM_ID` (`PKG_MEM_ID`),
16 KEY `I_PROCESS_MODEL_PROC_ID` (`PROC_ID`),
17 KEY `procmodel_name_indx` (`NAME`)
18) ENGINE=InnoDB;
19
20CREATE TABLE `process_model_inst` (
21 `PROC_MODEL_INST_ID` decimal(10,0) NOT NULL,
22 `VERSION` decimal(10,0) NOT NULL,
23 `PROC_MODEL_ID` decimal(10,0) NOT NULL,
24 `DATE_CREATED` datetime NOT NULL,
25 `CHANGE_NOTE` varchar(4000) DEFAULT NULL,
26 `XML` longtext NOT NULL,
27 `AUTHOR` varchar(50) DEFAULT NULL,
28 `CHECKSUM` varchar(64) DEFAULT NULL,
29 PRIMARY KEY (`PROC_MODEL_INST_ID`),
30 UNIQUE KEY `UK_PROCMODEL_INST` (`VERSION`,`PROC_MODEL_ID`),
31 KEY `I_PROCESS_MODEL_INST_PROC_MODE` (`PROC_MODEL_ID`),
32 CONSTRAINT `FK_PROCMODINST_REF_PROCMOD` FOREIGN KEY (`PROC_MODEL_ID`) REFERENCES `process_model` (`PROC_MODEL_ID`) ON DELETE CASCADE
33) ENGINE=InnoDB;

Subscribers

People subscribed via source and target branches