# MySQL types
#
bigint => 'number',
- double => [ 'float', 126 ],
+ double => 'float',
decimal => 'number',
float => 'float',
int => 'number',
mediumblob => 'blob',
longblob => 'blob',
tinytext => 'varchar2',
- text => [ 'varchar2', 4000 ],
+ text => 'clob',
longtext => 'clob',
mediumtext => 'clob',
enum => 'varchar2',
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 ) {
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' );
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 ) . ')';