$dbh->do($_) for @{ $self->{extra}{create} || [] };
if (not ($self->{vendor} eq 'mssql' && $dbh->{Driver}{Name} eq 'Sybase')) {
- $dbh->do($_) for @{ $self->{data_type_tests}{ddl} || []};
+ foreach my $ddl (@{ $self->{data_type_tests}{ddl} || []}) {
+ if (my $cb = $self->{data_types_ddl_cb}) {
+ $cb->($ddl);
+ }
+ else {
+ $dbh->do($ddl);
+ }
+ }
}
$self->{_created} = 1;
);
is(
- sprintf("%.3f", $class35->column_info('a_double')->{default_value}), '10.555',
+ sprintf("%.3f", $class35->column_info('a_double')->{default_value}||0), '10.555',
'constant numeric default',
);
is(
- sprintf("%.3f", $class35->column_info('a_negative_double')->{default_value}), -10.555,
+ sprintf("%.3f", $class35->column_info('a_negative_double')->{default_value}||0), -10.555,
'constant negative numeric default',
);
$dbh->do($_) foreach (@statements);
if (not ($self->{vendor} eq 'mssql' && $dbh->{Driver}{Name} eq 'Sybase')) {
- $dbh->do($_) foreach (@{ $self->{data_type_tests}{ddl} || [] });
+ foreach my $ddl (@{ $self->{data_type_tests}{ddl} || [] }) {
+ if (my $cb = $self->{data_types_ddl_cb}) {
+ $cb->($ddl);
+ }
+ else {
+ $dbh->do($ddl);
+ }
+ }
}
unless ($self->{skip_rels}) {
my %seen_col_names;
while (my ($col_def, $expected_info) = each %$types) {
- (my $type_alias = $col_def) =~ s/\( ([^)]+) \)//xg;
+ (my $type_alias = $col_def) =~ s/\( (.+) \)(?=(?:[^()]* '(?:[^']* (?:''|\\')* [^']*)* [^\\']' [^()]*)*\z)//xg;
my $size = $1;
$size = '' unless defined $size;
+ $size = '' unless $size =~ /^[\d, ]+\z/;
$size =~ s/\s+//g;
my @size = split /,/, $size;
# some DBs don't like very long column names
- if ($self->{vendor} =~ /^(?:firebird|sqlanywhere|oracle|db2)\z/i) {
+ if ($self->{vendor} =~ /^(?:Firebird|SQLAnywhere|Oracle|DB2)\z/i) {
my ($col_def, $default) = $type_alias =~ /^(.*)(default.*)?\z/i;
$type_alias = substr $col_def, 0, 15;