Merged fix-1038276-changehandler-hex-looking-vals

This commit is contained in:
Brian Fraser
2012-08-24 20:26:04 -03:00
21 changed files with 151 additions and 50 deletions

View File

@@ -909,11 +909,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'";
@@ -4702,10 +4703,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";
}
@@ -4739,11 +4743,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 )
. ')';
}
@@ -4752,7 +4760,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);
}