use Test::Exception;
use Scope::Guard ();
use Try::Tiny;
+use DBIx::Class::Optional::Dependencies ();
use lib qw(t/lib);
use DBICTest;
-DBICTest::Schema->load_classes('EventSmallDT');
+my ($dsn, $user, $pass) = @ENV{map { "DBICTEST_MSSQL_ODBC_${_}" } qw/DSN USER PASS/};
+my ($dsn2, $user2, $pass2) = @ENV{map { "DBICTEST_MSSQL_${_}" } qw/DSN USER PASS/};
+my ($dsn3, $user3, $pass3) = @ENV{map { "DBICTEST_MSSQL_ADO_${_}" } qw/DSN USER PASS/};
+
+plan skip_all => 'Test needs ' .
+ (join ' and ', map { $_ ? $_ : () }
+ DBIx::Class::Optional::Dependencies->req_missing_for('test_dt'),
+ (join ' or ', map { $_ ? $_ : () }
+ DBIx::Class::Optional::Dependencies->req_missing_for('test_rdbms_mssql_odbc'),
+ DBIx::Class::Optional::Dependencies->req_missing_for('test_rdbms_mssql_sybase'),
+ DBIx::Class::Optional::Dependencies->req_missing_for('test_rdbms_mssql_ado')))
+ unless
+ DBIx::Class::Optional::Dependencies->req_ok_for ('test_dt') && (
+ $dsn && DBIx::Class::Optional::Dependencies->req_ok_for('test_rdbms_mssql_odbc')
+ or
+ $dsn2 && DBIx::Class::Optional::Dependencies->req_ok_for('test_rdbms_mssql_sybase')
+ or
+ $dsn3 && DBIx::Class::Optional::Dependencies->req_ok_for('test_rdbms_mssql_ado'))
+ or (not $dsn || $dsn2 || $dsn3);
# use this if you keep a copy of DBD::Sybase linked to FreeTDS somewhere else
BEGIN {
}
}
-my ($dsn, $user, $pass) = @ENV{map { "DBICTEST_MSSQL_ODBC_${_}" } qw/DSN USER PASS/};
-my ($dsn2, $user2, $pass2) = @ENV{map { "DBICTEST_MSSQL_${_}" } qw/DSN USER PASS/};
-
-if (not ($dsn || $dsn2)) {
+if (not ($dsn || $dsn2 || $dsn3)) {
plan skip_all =>
- 'Set $ENV{DBICTEST_MSSQL_ODBC_DSN} and/or $ENV{DBICTEST_MSSQL_DSN} _USER '
- .'and _PASS to run this test' .
- "\nWarning: This test drops and creates a table called 'small_dt'";
+ 'Set $ENV{DBICTEST_MSSQL_ODBC_DSN} and/or $ENV{DBICTEST_MSSQL_DSN} and/or '
+ .'$ENV{DBICTEST_MSSQL_ADO_DSN} _USER and _PASS to run this test' .
+ "\nWarning: This test drops and creates tables called 'event_small_dt' and"
+ ." 'track'.";
}
-plan skip_all => 'Test needs ' . DBIx::Class::Optional::Dependencies->req_missing_for ('test_dt')
- unless DBIx::Class::Optional::Dependencies->req_ok_for ('test_dt');
+DBICTest::Schema->load_classes('EventSmallDT');
my @connect_info = (
[ $dsn, $user, $pass ],
[ $dsn2, $user2, $pass2 ],
+ [ $dsn3, $user3, $pass3 ],
);
my $schema;
}
}
- my $guard = Scope::Guard->new(\&cleanup);
+ my $guard = Scope::Guard->new(sub{ cleanup($schema) });
- try { $schema->storage->dbh->do("DROP TABLE track") };
+ # $^W because DBD::ADO is a piece of crap
+ try { local $^W = 0; $schema->storage->dbh->do("DROP TABLE track") };
$schema->storage->dbh->do(<<"SQL");
CREATE TABLE track (
trackid INT IDENTITY PRIMARY KEY,
last_updated_at DATETIME,
)
SQL
- try { $schema->storage->dbh->do("DROP TABLE event_small_dt") };
+ try { local $^W = 0; $schema->storage->dbh->do("DROP TABLE event_small_dt") };
$schema->storage->dbh->do(<<"SQL");
CREATE TABLE event_small_dt (
id INT IDENTITY PRIMARY KEY,
small_dt SMALLDATETIME,
)
SQL
+ try { local $^W = 0; $schema->storage->dbh->do("DROP TABLE event") };
+ $schema->storage->dbh->do(<<"SQL");
+CREATE TABLE event (
+ id int IDENTITY(1,1) NOT NULL,
+ starts_at smalldatetime NULL,
+ created_on datetime NULL,
+ varchar_date varchar(20) NULL,
+ varchar_datetime varchar(20) NULL,
+ skip_inflation datetime NULL,
+ ts_without_tz datetime NULL
+)
+SQL
# coltype, column, source, pk, create_extra, datehash
my @dt_types = (
for my $dt_type (@dt_types) {
my ($type, $col, $source, $pk, $create_extra, $sample_dt) = @$dt_type;
+ delete $sample_dt->{nanosecond} if $dsn =~ /:ADO:/;
+
ok(my $dt = DateTime->new($sample_dt));
my $row;
'DateTime fractional portion roundtrip' )
if exists $sample_dt->{nanosecond};
}
+
+ # Check for bulk insert SQL_DATE funtimes when using DBD::ODBC and sqlncli
+ # dbi:ODBC:driver=SQL Server Native Client 10.0;server=10.6.0.9;database=odbctest;
+ lives_ok {
+ $schema->resultset('Event')->populate([{
+ id => 1,
+ starts_at => undef,
+ },{
+ id => 2,
+ starts_at => '2011-03-22',
+ }])
+ } 'populate with datetime does not throw';
+ ok ( my $row = $schema->resultset('Event')->find(2), 'SQL_DATE bulk insert check' );
}
+
done_testing;
# clean up our mess
sub cleanup {
+ my $schema = shift;
if (my $dbh = eval { $schema->storage->dbh }) {
$dbh->do('DROP TABLE track');
$dbh->do('DROP TABLE event_small_dt');
+ $dbh->do('DROP TABLE event');
}
}