From 144b4794b9fbcec8a3064741b1f673f4de88fce9 Mon Sep 17 00:00:00 2001 From: Daniel Nichter Date: Wed, 20 Feb 2013 09:20:17 -0700 Subject: [PATCH] Rename results file results to rows and meta to results. Test more --save-results. --- bin/pt-upgrade | 46 ++++++++++------- lib/ResultWriter.pm | 51 ++++++++++++------- .../samples/001/insert_results/{meta => rows} | 0 .../samples/001/select_results/results | 36 ++----------- t/pt-upgrade/samples/001/select_results/rows | 34 +++++++++++++ .../002/select_missing_rows_results/query | 2 + .../select_missing_rows_results/results} | 3 +- .../002/select_missing_rows_results/rows | 34 +++++++++++++ ...arning.txt => insert_truncate_warning.txt} | 0 .../003/insert_truncate_warning_results/query | 2 + .../insert_truncate_warning_results/results | 12 +++++ .../003/insert_truncate_warning_results/rows | 2 + .../005/error_on_both_hosts_results/query | 2 + .../005/error_on_both_hosts_results/results | 5 ++ .../005/error_on_both_hosts_results/rows | 2 + .../samples/005/error_on_host1_results/query | 2 + .../005/error_on_host1_results/results | 5 ++ .../samples/005/error_on_host1_results/rows | 2 + .../samples/005/error_on_host2_results/query | 2 + .../005/error_on_host2_results/results | 6 +++ .../samples/005/error_on_host2_results/rows | 7 +++ 21 files changed, 187 insertions(+), 68 deletions(-) rename t/pt-upgrade/samples/001/insert_results/{meta => rows} (100%) create mode 100644 t/pt-upgrade/samples/001/select_results/rows create mode 100644 t/pt-upgrade/samples/002/select_missing_rows_results/query rename t/pt-upgrade/samples/{001/select_results/meta => 002/select_missing_rows_results/results} (61%) create mode 100644 t/pt-upgrade/samples/002/select_missing_rows_results/rows rename t/pt-upgrade/samples/003/{insert_truncate.warning.txt => insert_truncate_warning.txt} (100%) create mode 100644 t/pt-upgrade/samples/003/insert_truncate_warning_results/query create mode 100644 t/pt-upgrade/samples/003/insert_truncate_warning_results/results create mode 100644 t/pt-upgrade/samples/003/insert_truncate_warning_results/rows create mode 100644 t/pt-upgrade/samples/005/error_on_both_hosts_results/query create mode 100644 t/pt-upgrade/samples/005/error_on_both_hosts_results/results create mode 100644 t/pt-upgrade/samples/005/error_on_both_hosts_results/rows create mode 100644 t/pt-upgrade/samples/005/error_on_host1_results/query create mode 100644 t/pt-upgrade/samples/005/error_on_host1_results/results create mode 100644 t/pt-upgrade/samples/005/error_on_host1_results/rows create mode 100644 t/pt-upgrade/samples/005/error_on_host2_results/query create mode 100644 t/pt-upgrade/samples/005/error_on_host2_results/results create mode 100644 t/pt-upgrade/samples/005/error_on_host2_results/rows diff --git a/bin/pt-upgrade b/bin/pt-upgrade index ba580eb0..51fd6e7b 100755 --- a/bin/pt-upgrade +++ b/bin/pt-upgrade @@ -5932,13 +5932,13 @@ has '_query_fh' => ( required => 0, ); -has '_meta_fh' => ( +has '_results_fh' => ( is => 'rw', isa => 'Maybe[FileHandle]', required => 0, ); -has '_results_fh' => ( +has '_rows_fh' => ( is => 'rw', isa => 'Maybe[FileHandle]', required => 0, @@ -5954,19 +5954,19 @@ sub BUILDARGS { open my $_query_fh, '>', $query_file or die "Cannot open $query_file for writing: $OS_ERROR"; - my $meta_file = "$dir/meta"; - open my $_meta_fh, '>', $meta_file - or die "Cannot open $meta_file for writing: $OS_ERROR"; - my $results_file = "$dir/results"; open my $_results_fh, '>', $results_file or die "Cannot open $results_file for writing: $OS_ERROR"; + my $rows_file = "$dir/rows"; + open my $_rows_fh, '>', $rows_file + or die "Cannot open $rows_file for writing: $OS_ERROR"; + my $self = { %$args, _query_fh => $_query_fh, - _meta_fh => $_meta_fh, _results_fh => $_results_fh, + _rows_fh => $_rows_fh, }; return $self; @@ -5982,18 +5982,30 @@ sub save { print { $self->_query_fh } $event->{arg}, "\n##\n"; if ( my $error = $results->{error} ) { - print { $self->_meta_fh } $error, "\n##\n"; - print { $self->_results_fh } '', "\n##\n"; + print { $self->_results_fh } + $self->dumper({ error => $error}, 'results'), "\n##\n"; + + print { $self->_rows_fh } "\n##\n"; } else { - my $sth = $results->{sth}; - my $rows = $sth->fetchall_arrayref(); - eval { - $sth->finish; - delete $results->{sth}; - }; - print { $self->_meta_fh } $self->dumper($results, 'meta'), "\n##\n"; - print { $self->_results_fh } $self->dumper($rows, 'results'), "\n##\n"; + my $rows; + if ( my $sth = $results->{sth} ) { + if ( $event->{arg} =~ m/(?:^\s*SELECT|(?:\*\/\s*SELECT))/i ) { + $rows = $sth->fetchall_arrayref(); + } + eval { + $sth->finish; + }; + if ( $EVAL_ERROR ) { + PTDEBUG && _d($EVAL_ERROR); + } + } + print { $self->_rows_fh } + ($rows ? $self->dumper($rows, 'rows') : ''), "\n##\n"; + + delete $results->{error}; + delete $results->{sth}; + print { $self->_results_fh } $self->dumper($results, 'results'), "\n##\n"; } return; diff --git a/lib/ResultWriter.pm b/lib/ResultWriter.pm index 17ad4b11..aa36c6f3 100644 --- a/lib/ResultWriter.pm +++ b/lib/ResultWriter.pm @@ -48,13 +48,13 @@ has '_query_fh' => ( required => 0, ); -has '_meta_fh' => ( +has '_results_fh' => ( is => 'rw', isa => 'Maybe[FileHandle]', required => 0, ); -has '_results_fh' => ( +has '_rows_fh' => ( is => 'rw', isa => 'Maybe[FileHandle]', required => 0, @@ -70,19 +70,19 @@ sub BUILDARGS { open my $_query_fh, '>', $query_file or die "Cannot open $query_file for writing: $OS_ERROR"; - my $meta_file = "$dir/meta"; - open my $_meta_fh, '>', $meta_file - or die "Cannot open $meta_file for writing: $OS_ERROR"; - my $results_file = "$dir/results"; open my $_results_fh, '>', $results_file or die "Cannot open $results_file for writing: $OS_ERROR"; + my $rows_file = "$dir/rows"; + open my $_rows_fh, '>', $rows_file + or die "Cannot open $rows_file for writing: $OS_ERROR"; + my $self = { %$args, _query_fh => $_query_fh, - _meta_fh => $_meta_fh, _results_fh => $_results_fh, + _rows_fh => $_rows_fh, }; return $self; @@ -95,21 +95,38 @@ sub save { my $event = $args{event}; my $results = $args{results}; + # Save the query. print { $self->_query_fh } $event->{arg}, "\n##\n"; if ( my $error = $results->{error} ) { - print { $self->_meta_fh } $error, "\n##\n"; - print { $self->_results_fh } '', "\n##\n"; + # Save the error. + print { $self->_results_fh } + $self->dumper({ error => $error}, 'results'), "\n##\n"; + + # Save empty rows. + print { $self->_rows_fh } "\n##\n"; } else { - my $sth = $results->{sth}; - my $rows = $sth->fetchall_arrayref(); - eval { - $sth->finish; - delete $results->{sth}; - }; - print { $self->_meta_fh } $self->dumper($results, 'meta'), "\n##\n"; - print { $self->_results_fh } $self->dumper($rows, 'results'), "\n##\n"; + # Save rows, if any (i.e. if it's a SELECT statement). + my $rows; + if ( my $sth = $results->{sth} ) { + if ( $event->{arg} =~ m/(?:^\s*SELECT|(?:\*\/\s*SELECT))/i ) { + $rows = $sth->fetchall_arrayref(); + } + eval { + $sth->finish; + }; + if ( $EVAL_ERROR ) { + PTDEBUG && _d($EVAL_ERROR); + } + } + print { $self->_rows_fh } + ($rows ? $self->dumper($rows, 'rows') : ''), "\n##\n"; + + # Save results. + delete $results->{error}; + delete $results->{sth}; + print { $self->_results_fh } $self->dumper($results, 'results'), "\n##\n"; } return; diff --git a/t/pt-upgrade/samples/001/insert_results/meta b/t/pt-upgrade/samples/001/insert_results/rows similarity index 100% rename from t/pt-upgrade/samples/001/insert_results/meta rename to t/pt-upgrade/samples/001/insert_results/rows diff --git a/t/pt-upgrade/samples/001/select_results/results b/t/pt-upgrade/samples/001/select_results/results index 14661d57..5f0e9efc 100644 --- a/t/pt-upgrade/samples/001/select_results/results +++ b/t/pt-upgrade/samples/001/select_results/results @@ -1,34 +1,6 @@ -$results = [ - [ - '1', - 'a', - '2013-01-01 00:00:01' - ], - [ - '2', - 'b', - '2013-01-01 00:00:02' - ], - [ - '3', - 'c', - '2013-01-01 00:00:03' - ], - [ - '4', - 'd', - '2013-01-01 00:00:04' - ], - [ - '5', - 'e', - '2013-01-01 00:00:05' - ], - [ - '6', - 'f', - '2013-01-01 00:00:06' - ] -]; +$results = { + query_time => '0', + warnings => {} +}; ## diff --git a/t/pt-upgrade/samples/001/select_results/rows b/t/pt-upgrade/samples/001/select_results/rows new file mode 100644 index 00000000..3a7d7d60 --- /dev/null +++ b/t/pt-upgrade/samples/001/select_results/rows @@ -0,0 +1,34 @@ +$rows = [ + [ + '1', + 'a', + '2013-01-01 00:00:01' + ], + [ + '2', + 'b', + '2013-01-01 00:00:02' + ], + [ + '3', + 'c', + '2013-01-01 00:00:03' + ], + [ + '4', + 'd', + '2013-01-01 00:00:04' + ], + [ + '5', + 'e', + '2013-01-01 00:00:05' + ], + [ + '6', + 'f', + '2013-01-01 00:00:06' + ] +]; + +## diff --git a/t/pt-upgrade/samples/002/select_missing_rows_results/query b/t/pt-upgrade/samples/002/select_missing_rows_results/query new file mode 100644 index 00000000..2d6b4add --- /dev/null +++ b/t/pt-upgrade/samples/002/select_missing_rows_results/query @@ -0,0 +1,2 @@ +select * from test.t order by id +## diff --git a/t/pt-upgrade/samples/001/select_results/meta b/t/pt-upgrade/samples/002/select_missing_rows_results/results similarity index 61% rename from t/pt-upgrade/samples/001/select_results/meta rename to t/pt-upgrade/samples/002/select_missing_rows_results/results index d6319468..5f0e9efc 100644 --- a/t/pt-upgrade/samples/001/select_results/meta +++ b/t/pt-upgrade/samples/002/select_missing_rows_results/results @@ -1,5 +1,4 @@ -$meta = { - error => undef, +$results = { query_time => '0', warnings => {} }; diff --git a/t/pt-upgrade/samples/002/select_missing_rows_results/rows b/t/pt-upgrade/samples/002/select_missing_rows_results/rows new file mode 100644 index 00000000..3a7d7d60 --- /dev/null +++ b/t/pt-upgrade/samples/002/select_missing_rows_results/rows @@ -0,0 +1,34 @@ +$rows = [ + [ + '1', + 'a', + '2013-01-01 00:00:01' + ], + [ + '2', + 'b', + '2013-01-01 00:00:02' + ], + [ + '3', + 'c', + '2013-01-01 00:00:03' + ], + [ + '4', + 'd', + '2013-01-01 00:00:04' + ], + [ + '5', + 'e', + '2013-01-01 00:00:05' + ], + [ + '6', + 'f', + '2013-01-01 00:00:06' + ] +]; + +## diff --git a/t/pt-upgrade/samples/003/insert_truncate.warning.txt b/t/pt-upgrade/samples/003/insert_truncate_warning.txt similarity index 100% rename from t/pt-upgrade/samples/003/insert_truncate.warning.txt rename to t/pt-upgrade/samples/003/insert_truncate_warning.txt diff --git a/t/pt-upgrade/samples/003/insert_truncate_warning_results/query b/t/pt-upgrade/samples/003/insert_truncate_warning_results/query new file mode 100644 index 00000000..581b9c92 --- /dev/null +++ b/t/pt-upgrade/samples/003/insert_truncate_warning_results/query @@ -0,0 +1,2 @@ +INSERT INTO t (id, username) VALUES (NULL, 'long_username') +## diff --git a/t/pt-upgrade/samples/003/insert_truncate_warning_results/results b/t/pt-upgrade/samples/003/insert_truncate_warning_results/results new file mode 100644 index 00000000..1ca29dd2 --- /dev/null +++ b/t/pt-upgrade/samples/003/insert_truncate_warning_results/results @@ -0,0 +1,12 @@ +$results = { + query_time => '0', + warnings => { + '1265' => { + code => '1265', + level => 'Warning', + message => 'Data truncated for column \'username\' at row 1' + } + } +}; + +## diff --git a/t/pt-upgrade/samples/003/insert_truncate_warning_results/rows b/t/pt-upgrade/samples/003/insert_truncate_warning_results/rows new file mode 100644 index 00000000..902c9e86 --- /dev/null +++ b/t/pt-upgrade/samples/003/insert_truncate_warning_results/rows @@ -0,0 +1,2 @@ + +## diff --git a/t/pt-upgrade/samples/005/error_on_both_hosts_results/query b/t/pt-upgrade/samples/005/error_on_both_hosts_results/query new file mode 100644 index 00000000..6da30e81 --- /dev/null +++ b/t/pt-upgrade/samples/005/error_on_both_hosts_results/query @@ -0,0 +1,2 @@ +select nonexistent_col from test.t +## diff --git a/t/pt-upgrade/samples/005/error_on_both_hosts_results/results b/t/pt-upgrade/samples/005/error_on_both_hosts_results/results new file mode 100644 index 00000000..af0483ad --- /dev/null +++ b/t/pt-upgrade/samples/005/error_on_both_hosts_results/results @@ -0,0 +1,5 @@ +$results = { + error => 'DBD::mysql::st execute failed: Unknown column \'nonexistent_col\' in \'field list\' [for Statement "select nonexistent_col from test.t"]' +}; + +## diff --git a/t/pt-upgrade/samples/005/error_on_both_hosts_results/rows b/t/pt-upgrade/samples/005/error_on_both_hosts_results/rows new file mode 100644 index 00000000..902c9e86 --- /dev/null +++ b/t/pt-upgrade/samples/005/error_on_both_hosts_results/rows @@ -0,0 +1,2 @@ + +## diff --git a/t/pt-upgrade/samples/005/error_on_host1_results/query b/t/pt-upgrade/samples/005/error_on_host1_results/query new file mode 100644 index 00000000..6812a8e2 --- /dev/null +++ b/t/pt-upgrade/samples/005/error_on_host1_results/query @@ -0,0 +1,2 @@ +select host2_col from test.t +## diff --git a/t/pt-upgrade/samples/005/error_on_host1_results/results b/t/pt-upgrade/samples/005/error_on_host1_results/results new file mode 100644 index 00000000..a59d693e --- /dev/null +++ b/t/pt-upgrade/samples/005/error_on_host1_results/results @@ -0,0 +1,5 @@ +$results = { + error => 'DBD::mysql::st execute failed: Unknown column \'host2_col\' in \'field list\' [for Statement "select host2_col from test.t"]' +}; + +## diff --git a/t/pt-upgrade/samples/005/error_on_host1_results/rows b/t/pt-upgrade/samples/005/error_on_host1_results/rows new file mode 100644 index 00000000..902c9e86 --- /dev/null +++ b/t/pt-upgrade/samples/005/error_on_host1_results/rows @@ -0,0 +1,2 @@ + +## diff --git a/t/pt-upgrade/samples/005/error_on_host2_results/query b/t/pt-upgrade/samples/005/error_on_host2_results/query new file mode 100644 index 00000000..165bbc4b --- /dev/null +++ b/t/pt-upgrade/samples/005/error_on_host2_results/query @@ -0,0 +1,2 @@ +select host1_col from test.t +## diff --git a/t/pt-upgrade/samples/005/error_on_host2_results/results b/t/pt-upgrade/samples/005/error_on_host2_results/results new file mode 100644 index 00000000..5f0e9efc --- /dev/null +++ b/t/pt-upgrade/samples/005/error_on_host2_results/results @@ -0,0 +1,6 @@ +$results = { + query_time => '0', + warnings => {} +}; + +## diff --git a/t/pt-upgrade/samples/005/error_on_host2_results/rows b/t/pt-upgrade/samples/005/error_on_host2_results/rows new file mode 100644 index 00000000..075ddaf2 --- /dev/null +++ b/t/pt-upgrade/samples/005/error_on_host2_results/rows @@ -0,0 +1,7 @@ +$rows = [ + [ + '1' + ] +]; + +##