diff --git a/lib/SQL/Translator/Producer/Dumper.pm b/lib/SQL/Translator/Producer/Dumper.pm index 0a24cd6ca..90e2ad50e 100644 --- a/lib/SQL/Translator/Producer/Dumper.pm +++ b/lib/SQL/Translator/Producer/Dumper.pm @@ -169,7 +169,7 @@ FOREACH table IN schema.get_tables; field_name = field.name; fname_len = field.name.length; max_field = fname_len > max_field ? fname_len : max_field; - types.$field_name = field.data_type.match( '(char|str|long|text|enum|date)' ) + types.$field_name = field.data_type.match( '(char|str|long|text|enum|date|timestamp|bytea)' ) ? 'string' : 'number'; field_names.push( field_name ); END; @@ -221,9 +221,9 @@ for my $table ( @tables ) { if ( $add_truncate ) { print "TRUNCATE TABLE $table_name;\n"; } - + ## use dbh->quote_identifier() as a more rigourous option. my $sql = - 'select ' . join(', ', @{ $table->{'fields'} } ) . " from $table_name" + 'select ' . join(', ', map { $db->quote_identifier($_) } @{ $table->{'fields'} } ) . " from $table_name" ; my $sth = $db->prepare( $sql ); $sth->execute; @@ -233,7 +233,11 @@ for my $table ( @tables ) { for my $fld ( @{ $table->{'fields'} } ) { my $val = $rec->{ $fld }; if ( $table->{'types'}{ $fld } eq 'string' ) { + ## would like to be able to use dbh->quote, but that quotes + ## according to the input database handle type. + ## $val = $db->quote($val) if ( defined $val ) { + $val =~ s/\\/\\\\/g; $val =~ s/'/\\'/g; $val = qq['$val'] }