From f8fa5cd3e3bc8f4e162c0cc428ac17ca66c57b2a Mon Sep 17 00:00:00 2001 From: Brian Fraser Date: Wed, 22 Aug 2012 16:21:35 -0300 Subject: [PATCH] Updated Quoter and ChangeHandler in all the modules --- bin/pt-archiver | 5 +++-- bin/pt-deadlock-logger | 5 +++-- bin/pt-duplicate-key-checker | 5 +++-- bin/pt-find | 5 +++-- bin/pt-fk-error-logger | 5 +++-- bin/pt-heartbeat | 5 +++-- bin/pt-index-usage | 5 +++-- bin/pt-kill | 5 +++-- bin/pt-online-schema-change | 5 +++-- bin/pt-query-advisor | 5 +++-- bin/pt-query-digest | 5 +++-- bin/pt-slave-restart | 5 +++-- bin/pt-table-checksum | 5 +++-- bin/pt-table-sync | 22 ++++++++++++++++------ bin/pt-table-usage | 5 +++-- bin/pt-upgrade | 22 ++++++++++++++++------ 16 files changed, 74 insertions(+), 40 deletions(-) diff --git a/bin/pt-archiver b/bin/pt-archiver index 70355b73..2fae8664 100755 --- a/bin/pt-archiver +++ b/bin/pt-archiver @@ -2521,11 +2521,12 @@ sub quote { } sub quote_val { - my ( $self, $val ) = @_; + my ( $self, $val, %args ) = @_; return 'NULL' unless defined $val; # undef = NULL return "''" if $val eq ''; # blank string = '' - return $val if $val =~ m/^0x[0-9a-fA-F]+$/; # hex data + return $val if $val =~ m/^0x[0-9a-fA-F]+$/ # quote hex data + && !$args{is_char}; # unless is_char is true $val =~ s/(['\\])/\\$1/g; return "'$val'"; diff --git a/bin/pt-deadlock-logger b/bin/pt-deadlock-logger index 3e385cd4..3223d9d9 100755 --- a/bin/pt-deadlock-logger +++ b/bin/pt-deadlock-logger @@ -1706,11 +1706,12 @@ sub quote { } sub quote_val { - my ( $self, $val ) = @_; + my ( $self, $val, %args ) = @_; return 'NULL' unless defined $val; # undef = NULL return "''" if $val eq ''; # blank string = '' - return $val if $val =~ m/^0x[0-9a-fA-F]+$/; # hex data + return $val if $val =~ m/^0x[0-9a-fA-F]+$/ # quote hex data + && !$args{is_char}; # unless is_char is true $val =~ s/(['\\])/\\$1/g; return "'$val'"; diff --git a/bin/pt-duplicate-key-checker b/bin/pt-duplicate-key-checker index 64165559..8ba599e6 100755 --- a/bin/pt-duplicate-key-checker +++ b/bin/pt-duplicate-key-checker @@ -38,11 +38,12 @@ sub quote { } sub quote_val { - my ( $self, $val ) = @_; + my ( $self, $val, %args ) = @_; return 'NULL' unless defined $val; # undef = NULL return "''" if $val eq ''; # blank string = '' - return $val if $val =~ m/^0x[0-9a-fA-F]+$/; # hex data + return $val if $val =~ m/^0x[0-9a-fA-F]+$/ # quote hex data + && !$args{is_char}; # unless is_char is true $val =~ s/(['\\])/\\$1/g; return "'$val'"; diff --git a/bin/pt-find b/bin/pt-find index 6e35cbfe..2c66e2e3 100755 --- a/bin/pt-find +++ b/bin/pt-find @@ -1436,11 +1436,12 @@ sub quote { } sub quote_val { - my ( $self, $val ) = @_; + my ( $self, $val, %args ) = @_; return 'NULL' unless defined $val; # undef = NULL return "''" if $val eq ''; # blank string = '' - return $val if $val =~ m/^0x[0-9a-fA-F]+$/; # hex data + return $val if $val =~ m/^0x[0-9a-fA-F]+$/ # quote hex data + && !$args{is_char}; # unless is_char is true $val =~ s/(['\\])/\\$1/g; return "'$val'"; diff --git a/bin/pt-fk-error-logger b/bin/pt-fk-error-logger index 38763d54..38a0eb46 100755 --- a/bin/pt-fk-error-logger +++ b/bin/pt-fk-error-logger @@ -1063,11 +1063,12 @@ sub quote { } sub quote_val { - my ( $self, $val ) = @_; + my ( $self, $val, %args ) = @_; return 'NULL' unless defined $val; # undef = NULL return "''" if $val eq ''; # blank string = '' - return $val if $val =~ m/^0x[0-9a-fA-F]+$/; # hex data + return $val if $val =~ m/^0x[0-9a-fA-F]+$/ # quote hex data + && !$args{is_char}; # unless is_char is true $val =~ s/(['\\])/\\$1/g; return "'$val'"; diff --git a/bin/pt-heartbeat b/bin/pt-heartbeat index edc02a36..21c3d6f5 100755 --- a/bin/pt-heartbeat +++ b/bin/pt-heartbeat @@ -2360,11 +2360,12 @@ sub quote { } sub quote_val { - my ( $self, $val ) = @_; + my ( $self, $val, %args ) = @_; return 'NULL' unless defined $val; # undef = NULL return "''" if $val eq ''; # blank string = '' - return $val if $val =~ m/^0x[0-9a-fA-F]+$/; # hex data + return $val if $val =~ m/^0x[0-9a-fA-F]+$/ # quote hex data + && !$args{is_char}; # unless is_char is true $val =~ s/(['\\])/\\$1/g; return "'$val'"; diff --git a/bin/pt-index-usage b/bin/pt-index-usage index 188a8539..eb6b282b 100755 --- a/bin/pt-index-usage +++ b/bin/pt-index-usage @@ -411,11 +411,12 @@ sub quote { } sub quote_val { - my ( $self, $val ) = @_; + my ( $self, $val, %args ) = @_; return 'NULL' unless defined $val; # undef = NULL return "''" if $val eq ''; # blank string = '' - return $val if $val =~ m/^0x[0-9a-fA-F]+$/; # hex data + return $val if $val =~ m/^0x[0-9a-fA-F]+$/ # quote hex data + && !$args{is_char}; # unless is_char is true $val =~ s/(['\\])/\\$1/g; return "'$val'"; diff --git a/bin/pt-kill b/bin/pt-kill index 06df0bcb..f0428386 100755 --- a/bin/pt-kill +++ b/bin/pt-kill @@ -4106,11 +4106,12 @@ sub quote { } sub quote_val { - my ( $self, $val ) = @_; + my ( $self, $val, %args ) = @_; return 'NULL' unless defined $val; # undef = NULL return "''" if $val eq ''; # blank string = '' - return $val if $val =~ m/^0x[0-9a-fA-F]+$/; # hex data + return $val if $val =~ m/^0x[0-9a-fA-F]+$/ # quote hex data + && !$args{is_char}; # unless is_char is true $val =~ s/(['\\])/\\$1/g; return "'$val'"; diff --git a/bin/pt-online-schema-change b/bin/pt-online-schema-change index c03b7ce0..91f90f40 100755 --- a/bin/pt-online-schema-change +++ b/bin/pt-online-schema-change @@ -2270,11 +2270,12 @@ sub quote { } sub quote_val { - my ( $self, $val ) = @_; + my ( $self, $val, %args ) = @_; return 'NULL' unless defined $val; # undef = NULL return "''" if $val eq ''; # blank string = '' - return $val if $val =~ m/^0x[0-9a-fA-F]+$/; # hex data + return $val if $val =~ m/^0x[0-9a-fA-F]+$/ # quote hex data + && !$args{is_char}; # unless is_char is true $val =~ s/(['\\])/\\$1/g; return "'$val'"; diff --git a/bin/pt-query-advisor b/bin/pt-query-advisor index 2170103e..43295e5a 100755 --- a/bin/pt-query-advisor +++ b/bin/pt-query-advisor @@ -1436,11 +1436,12 @@ sub quote { } sub quote_val { - my ( $self, $val ) = @_; + my ( $self, $val, %args ) = @_; return 'NULL' unless defined $val; # undef = NULL return "''" if $val eq ''; # blank string = '' - return $val if $val =~ m/^0x[0-9a-fA-F]+$/; # hex data + return $val if $val =~ m/^0x[0-9a-fA-F]+$/ # quote hex data + && !$args{is_char}; # unless is_char is true $val =~ s/(['\\])/\\$1/g; return "'$val'"; diff --git a/bin/pt-query-digest b/bin/pt-query-digest index 5a899af3..fc78b4fe 100755 --- a/bin/pt-query-digest +++ b/bin/pt-query-digest @@ -411,11 +411,12 @@ sub quote { } sub quote_val { - my ( $self, $val ) = @_; + my ( $self, $val, %args ) = @_; return 'NULL' unless defined $val; # undef = NULL return "''" if $val eq ''; # blank string = '' - return $val if $val =~ m/^0x[0-9a-fA-F]+$/; # hex data + return $val if $val =~ m/^0x[0-9a-fA-F]+$/ # quote hex data + && !$args{is_char}; # unless is_char is true $val =~ s/(['\\])/\\$1/g; return "'$val'"; diff --git a/bin/pt-slave-restart b/bin/pt-slave-restart index f20ccb6f..57269e81 100755 --- a/bin/pt-slave-restart +++ b/bin/pt-slave-restart @@ -38,11 +38,12 @@ sub quote { } sub quote_val { - my ( $self, $val ) = @_; + my ( $self, $val, %args ) = @_; return 'NULL' unless defined $val; # undef = NULL return "''" if $val eq ''; # blank string = '' - return $val if $val =~ m/^0x[0-9a-fA-F]+$/; # hex data + return $val if $val =~ m/^0x[0-9a-fA-F]+$/ # quote hex data + && !$args{is_char}; # unless is_char is true $val =~ s/(['\\])/\\$1/g; return "'$val'"; diff --git a/bin/pt-table-checksum b/bin/pt-table-checksum index 30b21d52..620b6c43 100755 --- a/bin/pt-table-checksum +++ b/bin/pt-table-checksum @@ -2034,11 +2034,12 @@ sub quote { } sub quote_val { - my ( $self, $val ) = @_; + my ( $self, $val, %args ) = @_; return 'NULL' unless defined $val; # undef = NULL return "''" if $val eq ''; # blank string = '' - return $val if $val =~ m/^0x[0-9a-fA-F]+$/; # hex data + return $val if $val =~ m/^0x[0-9a-fA-F]+$/ # quote hex data + && !$args{is_char}; # unless is_char is true $val =~ s/(['\\])/\\$1/g; return "'$val'"; diff --git a/bin/pt-table-sync b/bin/pt-table-sync index 2207c55b..cccea956 100755 --- a/bin/pt-table-sync +++ b/bin/pt-table-sync @@ -1513,11 +1513,12 @@ sub quote { } sub quote_val { - my ( $self, $val ) = @_; + my ( $self, $val, %args ) = @_; return 'NULL' unless defined $val; # undef = NULL return "''" if $val eq ''; # blank string = '' - return $val if $val =~ m/^0x[0-9a-fA-F]+$/; # hex data + return $val if $val =~ m/^0x[0-9a-fA-F]+$/ # quote hex data + && !$args{is_char}; # unless is_char is true $val =~ s/(['\\])/\\$1/g; return "'$val'"; @@ -3412,10 +3413,13 @@ sub make_UPDATE { else { @cols = $self->sort_cols($row); } + my $types = $self->{tbl_struct}->{type_for}; return "UPDATE $self->{dst_db_tbl} SET " . join(', ', map { + my $is_char = ($types->{$_} || '') =~ m/char|text/i; $self->{Quoter}->quote($_) - . '=' . $self->{Quoter}->quote_val($row->{$_}) + . '=' . $self->{Quoter}->quote_val($row->{$_}, + is_char => $is_char); } grep { !$in_where{$_} } @cols) . " WHERE $where LIMIT 1"; } @@ -3449,11 +3453,15 @@ sub make_row { else { @cols = $self->sort_cols($row); } - my $q = $self->{Quoter}; + my $q = $self->{Quoter}; + my $type_for = $self->{tbl_struct}->{type_for}; return "$verb INTO $self->{dst_db_tbl}(" . join(', ', map { $q->quote($_) } @cols) . ') VALUES (' - . join(', ', map { $q->quote_val($_) } @{$row}{@cols} ) + . join(', ', map { + my $is_char = ($type_for->{$_} || '') =~ m/char|text/i; + $q->quote_val($row->{$_}, + is_char => $is_char) } @cols ) . ')'; } @@ -3462,7 +3470,9 @@ sub make_where_clause { my @clauses = map { my $val = $row->{$_}; my $sep = defined $val ? '=' : ' IS '; - $self->{Quoter}->quote($_) . $sep . $self->{Quoter}->quote_val($val); + my $is_char = ($self->{tbl_struct}->{type_for}->{$_} || '') =~ m/char|text/i; + $self->{Quoter}->quote($_) . $sep . $self->{Quoter}->quote_val($val, + is_char => $is_char); } @$cols; return join(' AND ', @clauses); } diff --git a/bin/pt-table-usage b/bin/pt-table-usage index 97b88f4c..ca75c6a1 100755 --- a/bin/pt-table-usage +++ b/bin/pt-table-usage @@ -5487,11 +5487,12 @@ sub quote { } sub quote_val { - my ( $self, $val ) = @_; + my ( $self, $val, %args ) = @_; return 'NULL' unless defined $val; # undef = NULL return "''" if $val eq ''; # blank string = '' - return $val if $val =~ m/^0x[0-9a-fA-F]+$/; # hex data + return $val if $val =~ m/^0x[0-9a-fA-F]+$/ # quote hex data + && !$args{is_char}; # unless is_char is true $val =~ s/(['\\])/\\$1/g; return "'$val'"; diff --git a/bin/pt-upgrade b/bin/pt-upgrade index daa72ddc..3169148f 100755 --- a/bin/pt-upgrade +++ b/bin/pt-upgrade @@ -852,11 +852,12 @@ sub quote { } sub quote_val { - my ( $self, $val ) = @_; + my ( $self, $val, %args ) = @_; return 'NULL' unless defined $val; # undef = NULL return "''" if $val eq ''; # blank string = '' - return $val if $val =~ m/^0x[0-9a-fA-F]+$/; # hex data + return $val if $val =~ m/^0x[0-9a-fA-F]+$/ # quote hex data + && !$args{is_char}; # unless is_char is true $val =~ s/(['\\])/\\$1/g; return "'$val'"; @@ -4646,10 +4647,13 @@ sub make_UPDATE { else { @cols = $self->sort_cols($row); } + my $types = $self->{tbl_struct}->{type_for}; return "UPDATE $self->{dst_db_tbl} SET " . join(', ', map { + my $is_char = ($types->{$_} || '') =~ m/char|text/i; $self->{Quoter}->quote($_) - . '=' . $self->{Quoter}->quote_val($row->{$_}) + . '=' . $self->{Quoter}->quote_val($row->{$_}, + is_char => $is_char); } grep { !$in_where{$_} } @cols) . " WHERE $where LIMIT 1"; } @@ -4683,11 +4687,15 @@ sub make_row { else { @cols = $self->sort_cols($row); } - my $q = $self->{Quoter}; + my $q = $self->{Quoter}; + my $type_for = $self->{tbl_struct}->{type_for}; return "$verb INTO $self->{dst_db_tbl}(" . join(', ', map { $q->quote($_) } @cols) . ') VALUES (' - . join(', ', map { $q->quote_val($_) } @{$row}{@cols} ) + . join(', ', map { + my $is_char = ($type_for->{$_} || '') =~ m/char|text/i; + $q->quote_val($row->{$_}, + is_char => $is_char) } @cols ) . ')'; } @@ -4696,7 +4704,9 @@ sub make_where_clause { my @clauses = map { my $val = $row->{$_}; my $sep = defined $val ? '=' : ' IS '; - $self->{Quoter}->quote($_) . $sep . $self->{Quoter}->quote_val($val); + my $is_char = ($self->{tbl_struct}->{type_for}->{$_} || '') =~ m/char|text/i; + $self->{Quoter}->quote($_) . $sep . $self->{Quoter}->quote_val($val, + is_char => $is_char); } @$cols; return join(' AND ', @clauses); }