patch from abraxxa (Alexander Hartmaier) to truncate unique constraint names that...
[dbsrgits/SQL-Translator.git] / lib / SQL / Translator / Producer / Oracle.pm
index 1996140..f8cbe5f 100644 (file)
@@ -118,7 +118,7 @@ my %translate  = (
     # MySQL types
     #
     bigint     => 'number',
-    double     => [ 'float', 126 ],
+    double     => 'float',
     decimal    => 'number',
     float      => 'float',
     int        => 'number',
@@ -133,7 +133,7 @@ my %translate  = (
     mediumblob => 'blob',
     longblob   => 'blob',
     tinytext   => 'varchar2',
-    text       => 'varchar2',
+    text       => 'clob',
     longtext   => 'clob',
     mediumtext => 'clob',
     enum       => 'varchar2',
@@ -349,7 +349,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 +625,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 ) . ')';