# MySQL types
#
bigint => 'number',
- double => 'number',
+ double => 'float',
decimal => 'number',
- float => 'number',
+ float => 'float',
int => 'number',
integer => 'number',
mediumint => 'number',
mediumblob => 'blob',
longblob => 'blob',
tinytext => 'varchar2',
- text => [ 'varchar2', 4000 ],
+ text => 'clob',
longtext => 'clob',
mediumtext => 'clob',
enum => 'varchar2',
#
my %max_size = (
char => 2000,
+ float => 126,
nchar => 2000,
nvarchar2 => 4000,
number => [ 38, 127 ],
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 ) . ')';