use strict;
use warnings;
use Test::More;
+use DBIx::Class::Optional::Dependencies;
+use DBIx::Class::Schema::Loader::DBI::ODBC::ACCESS ();
use lib qw(t/lib);
use dbixcsl_common_tests;
-my $odbc_dsn = $ENV{DBICTEST_MSACCESS_ODBC_DSN} || '';
-my $odbc_user = $ENV{DBICTEST_MSACCESS_ODBC_USER} || '';
-my $odbc_password = $ENV{DBICTEST_MSACCESS_ODBC_PASS} || '';
+my %env2optdep = map { $_ => lc "test_rdbms_$_" } qw(MSACCESS_ODBC MSACCESS_ADO);
-my $ado_dsn = $ENV{DBICTEST_MSACCESS_ADO_DSN} || '';
-my $ado_user = $ENV{DBICTEST_MSACCESS_ADO_USER} || '';
-my $ado_password = $ENV{DBICTEST_MSACCESS_ADO_PASS} || '';
+plan skip_all => 'requirements not satisfied: ' . (join ' OR ', map
+ { "[ @{[ DBIx::Class::Schema::Loader::Optional::Dependencies->req_missing_for( $_ ) ]} ]" }
+ values %env2optdep
+) unless scalar grep
+ { DBIx::Class::Schema::Loader::Optional::Dependencies->req_ok_for( $_ ) }
+ values %env2optdep
+;
+
+my %dsns;
+for my $type (keys %env2optdep) {
+ my %conninfo;
+ @conninfo{qw(dsn user password)} = map { $ENV{"DBICTEST_${type}_$_"} } qw(DSN USER PASS);
+ next unless $conninfo{dsn};
+
+ my $dep_group = $env2optdep{$type};
+ if (!DBIx::Class::Schema::Loader::Optional::Dependencies->req_ok_for($dep_group)) {
+ diag "Testing with DBICTEST_${type}_DSN needs " . DBIx::Class::Schema::Loader::Optional::Dependencies->req_missing_for($dep_group);
+ next;
+ }
+
+ $dsns{$type} = \%conninfo;
+}
my %ado_extra_types = (
'tinyint' => { data_type => 'tinyint', original => { data_type => 'byte' } },
vendor => 'Access',
auto_inc_pk => 'AUTOINCREMENT PRIMARY KEY',
quote_char => [qw/[ ]/],
- connect_info => [ ($odbc_dsn ? {
- dsn => $odbc_dsn,
- user => $odbc_user,
- password => $odbc_password,
- } : ()),
- ($ado_dsn ? {
- dsn => $ado_dsn,
- user => $ado_user,
- password => $ado_password,
- } : ()),
- ],
+ connect_info => [ map { $dsns{$_} } sort keys %dsns ],
data_types => {
# http://msdn.microsoft.com/en-us/library/bb208866(v=office.12).aspx
#
'image' => { data_type => 'image', original => { data_type => 'longbinary' } },
'longbinary' => { data_type => 'image', original => { data_type => 'longbinary' } },
- ($ado_dsn && (not $odbc_dsn) ? %ado_extra_types : ())
+ %ado_extra_types,
+ },
+ data_types_ddl_cb => sub {
+ my $ddl = shift;
+ {
+ package DBIXCSL_Test::DummySchema;
+ use base 'DBIx::Class::Schema';
+ }
+ my @connect_info = @{$dsns{MSACCESS_ODBC} || $dsns{MSACCESS_ADO}};
+
+ my $schema = DBIXCSL_Test::DummySchema->connect(@connect_info);
+
+ my $loader = DBIx::Class::Schema::Loader::DBI::ODBC::ACCESS->new(
+ schema => $schema,
+ naming => 'current',
+ );
+
+ my $conn = $loader->_ado_connection;
+
+ require Win32::OLE;
+ my $comm = Win32::OLE->new('ADODB.Command');
+
+ $comm->{ActiveConnection} = $conn;
+ $comm->{CommandText} = $ddl;
+ $comm->Execute;
},
);
-if (not ($odbc_dsn || $ado_dsn)) {
- $tester->skip_tests('You need to set the DBICTEST_MSACCESS_ODBC_DSN, and optionally _USER and _PASS and/or the DBICTEST_MSACCESS_ADO_DSN, and optionally _USER and _PASS environment variables');
-}
-else {
- $tester->run_tests();
-}
+$tester->run_tests();
# vim:et sts=4 sw=4 tw=0: