X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F10_09firebird_common.t;h=39fc8492955e6b6ae59de403509eb87923e5e21b;hb=refs%2Ftags%2F0.07021;hp=cd1014ec438502923249a733c238ff44f1b8cbdc;hpb=567aa05681cd48788d132c016b357dc485d54f35;p=dbsrgits%2FDBIx-Class-Schema-Loader.git diff --git a/t/10_09firebird_common.t b/t/10_09firebird_common.t index cd1014e..39fc849 100644 --- a/t/10_09firebird_common.t +++ b/t/10_09firebird_common.t @@ -5,9 +5,13 @@ use Scope::Guard (); use lib qw(t/lib); use dbixcsl_common_tests; -my $dbd_interbase_dsn = $ENV{DBICTEST_FIREBIRD_DSN} || ''; -my $dbd_interbase_user = $ENV{DBICTEST_FIREBIRD_USER} || ''; -my $dbd_interbase_password = $ENV{DBICTEST_FIREBIRD_PASS} || ''; +my $dbd_firebird_dsn = $ENV{DBICTEST_FIREBIRD_DSN} || ''; +my $dbd_firebird_user = $ENV{DBICTEST_FIREBIRD_USER} || ''; +my $dbd_firebird_password = $ENV{DBICTEST_FIREBIRD_PASS} || ''; + +my $dbd_interbase_dsn = $ENV{DBICTEST_FIREBIRD_INTERBASE_DSN} || ''; +my $dbd_interbase_user = $ENV{DBICTEST_FIREBIRD_INTERBASE_USER} || ''; +my $dbd_interbase_password = $ENV{DBICTEST_FIREBIRD_INTERBASE_PASS} || ''; my $odbc_dsn = $ENV{DBICTEST_FIREBIRD_ODBC_DSN} || ''; my $odbc_user = $ENV{DBICTEST_FIREBIRD_ODBC_USER} || ''; @@ -43,8 +47,14 @@ my $tester = dbixcsl_common_tests->new( null => '', preserve_case_mode_is_exclusive => 1, quote_char => '"', - warnings => [ qr/'preserve_case' option/ ], - connect_info => [ ($dbd_interbase_dsn ? { + connect_info => [ + ($dbd_firebird_dsn ? { + dsn => $dbd_firebird_dsn, + user => $dbd_firebird_user, + password => $dbd_firebird_password, + connect_info_opts => { on_connect_call => 'use_softcommit' }, + } : ()), + ($dbd_interbase_dsn ? { dsn => $dbd_interbase_dsn, user => $dbd_interbase_user, password => $dbd_interbase_password, @@ -104,14 +114,20 @@ my $tester = dbixcsl_common_tests->new( 'char' => { data_type => 'char', size => 1 }, 'char(11)' => { data_type => 'char', size => 11 }, 'varchar(20)' => { data_type => 'varchar', size => 20 }, + 'char(22) character set unicode_fss' => + => { data_type => 'char(x) character set unicode_fss', size => 22 }, + 'varchar(33) character set unicode_fss' => + => { data_type => 'varchar(x) character set unicode_fss', size => 33 }, # Blob types 'blob' => { data_type => 'blob' }, 'blob sub_type text' => { data_type => 'blob sub_type text' }, + 'blob sub_type text character set unicode_fss' + => { data_type => 'blob sub_type text character set unicode_fss' }, }, extra => { - count => 6, + count => 9, run => sub { $schema = shift; my ($monikers, $classes, $self) = @_; @@ -144,8 +160,8 @@ q{ my $guard = Scope::Guard->new(\&cleanup_extra); - local $schema->_loader->{preserve_case} = 1; - $schema->_loader->_setup; + local $schema->loader->{preserve_case} = 1; + $schema->loader->_setup; $self->rescan_without_warnings($schema); @@ -162,21 +178,41 @@ q{ is $col_info->{sequence}, 'Gen_Firebird_Loader_Test1_Id', 'correct mixed case sequence name'; is eval { $rsrc->column_info('Foo')->{default_value} }, 42, 'default_value detected for mixed case column'; + + # test the fixed up ->_dbh_type_info_type_name for the ODBC driver + if ($schema->storage->_dbi_connect_info->[0] =~ /:ODBC:/i) { + my %truncated_types = ( + 4 => 'INTEGER', + -9 => 'VARCHAR(x) CHARACTER SET UNICODE_FSS', + -10 => 'BLOB SUB_TYPE TEXT CHARACTER SET UNICODE_FSS', + ); + + for my $type_num (keys %truncated_types) { + is $schema->loader->_dbh_type_info_type_name($type_num), + $truncated_types{$type_num}, + "ODBC ->_dbh_type_info_type_name correct for '$truncated_types{$type_num}'"; + } + } + else { + my $tb = Test::More->builder; + $tb->skip('not testing _dbh_type_info_type_name on DBD::InterBase') for 1..3; + } }, }, ); -if (not ($dbd_interbase_dsn || $odbc_dsn)) { - $tester->skip_tests('You need to set the DBICTEST_FIREBIRD_DSN, _USER and _PASS and/or the DBICTEST_FIREBIRD_ODBC_DSN, _USER and _PASS environment variables'); +if (not ($dbd_firebird_dsn || $dbd_interbase_dsn || $odbc_dsn)) { + $tester->skip_tests('You need to set the DBICTEST_FIREBIRD_DSN, _USER and _PASS and/or the DBICTEST_FIREBIRD_INTERBASE_DSN and/or the DBICTEST_FIREBIRD_ODBC_DSN environment variables'); } else { # get rid of stupid warning from InterBase/GetInfo.pm if ($dbd_interbase_dsn) { local $SIG{__WARN__} = sub { warn @_ - unless $_[0] =~ m|^Use of uninitialized value in sprintf at \S+DBD/InterBase/GetInfo\.pm line \d+\.$| }; + unless $_[0] =~ m{^Use of uninitialized value in sprintf at \S+DBD/InterBase/GetInfo\.pm line \d+\.$|^Missing argument in sprintf at \S+DBD/InterBase/GetInfo.pm line \d+\.$} }; require DBD::InterBase; require DBD::InterBase::GetInfo; } + $tester->run_tests(); }