Revert my previous changes (rev 1722 reverted back to rev 1721)
[dbsrgits/SQL-Translator.git] / lib / SQL / Translator / Producer / Oracle.pm
index 0844dc6..5db9d7d 100644 (file)
@@ -118,7 +118,7 @@ my %translate  = (
     # MySQL types
     #
     bigint     => 'number',
-    double     => [ 'float', 126 ],
+    double     => 'float',
     decimal    => 'number',
     float      => 'float',
     int        => 'number',
@@ -327,7 +327,8 @@ sub create_table {
         for my $c ( $table->get_constraints ) {
             my $name    = $c->name || '';
             my @fields  = map { quote($_,$qf) } $c->fields;
-            my @rfields = quote($c->reference_fields,$qf);
+            my @rfields = map { quote($_,$qf) } $c->reference_fields;
+
             next if !@fields && $c->type ne CHECK_C;
 
             if ( $c->type eq PRIMARY_KEY ) {
@@ -349,7 +350,7 @@ sub create_table {
               if ($name) {
                 # Force prepend of table_name as ORACLE doesn't allow duplicate
                 # CONSTRAINT names even for different tables (ORA-02264)
-                $name = "${table_name}_$name" unless $name =~ /^$table_name/;
+                $name = mk_name( "${table_name}_$name", 'u' ) unless $name =~ /^$table_name/;
               }
               else {
                 $name = mk_name( $table_name, 'u' );
@@ -625,6 +626,16 @@ sub create_field {
         undef @size;
     }
 
+    #
+    # Fixes ORA-00906: missing right parenthesis
+               # if size is 0 or undefined
+    #
+    for (qw/varchar2/) {
+        if ( $data_type =~ /^($_)$/i ) {
+            $size[0] ||= $max_size{$_};
+        }
+    }
+
     $field_def .= " $data_type";
     if ( defined $size[0] && $size[0] > 0 ) {
         $field_def .= '(' . join( ',', @size ) . ')';