Escape quotes in string values in producers
[dbsrgits/SQL-Translator.git] / lib / SQL / Translator / Producer / Oracle.pm
index 34a9be8..d3f7a12 100644 (file)
@@ -93,6 +93,7 @@ our ( $DEBUG, $WARN );
 our $VERSION = '1.59';
 $DEBUG   = 0 unless defined $DEBUG;
 
+use base 'SQL::Translator::Producer';
 use SQL::Translator::Schema::Constants;
 use SQL::Translator::Utils qw(header_comment);
 
@@ -461,10 +462,9 @@ sub create_table {
         if ( my @table_comments = $table->comments ) {
             for my $comment ( @table_comments ) {
                 next unless $comment;
-                $comment =~ s/'/''/g;
-                push @field_comments, "COMMENT ON TABLE $table_name_q is\n '".
-                $comment . "'" unless $options->{no_comments}
-                ;
+                $comment = __PACKAGE__->_quote_string($comment);
+                push @field_comments, "COMMENT ON TABLE $table_name_q is\n $comment"
+                    unless $options->{no_comments};
             }
         }
 
@@ -550,8 +550,7 @@ sub create_field {
     my @size      = $field->size;
     my %extra     = $field->extra;
     my $list      = $extra{'list'} || [];
-    # \todo deal with embedded quotes
-    my $commalist = join( ', ', map { qq['$_'] } @$list );
+    my $commalist = join( ', ', map { __PACKAGE__->_quote_string($_) } @$list );
 
     if ( $data_type eq 'enum' ) {
         $check = "CHECK ($field_name_q IN ($commalist))";
@@ -660,7 +659,7 @@ sub create_field {
                 ) {
             $default = 'SYSDATE';
         } else {
-            $default = $default =~ m/null/i ? 'NULL' : "'$default'"
+            $default = $default =~ m/null/i ? 'NULL' : __PACKAGE__->_quote_string($default);
         }
 
         $field_def .= " DEFAULT $default",
@@ -718,10 +717,10 @@ sub create_field {
     push @field_defs, $field_def;
 
     if ( my $comment = $field->comments ) {
-        $comment =~ s/'/''/g;
+        $comment =~ __PACKAGE__->_quote_string($comment);
         push @field_comments,
-          "COMMENT ON COLUMN $table_name_q.$field_name_q is\n '" .
-            $comment . "';" unless $options->{no_comments};
+          "COMMENT ON COLUMN $table_name_q.$field_name_q is\n $comment;"
+              unless $options->{no_comments};
     }
 
     return \@create, \@field_defs, \@trigger_defs, \@field_comments;