use strict;
-use warnings;
+use warnings;
no warnings 'uninitialized';
use Test::More;
use lib qw(t/lib);
use DBICTest;
-require DBIx::Class::Storage::DBI::Sybase;
-require DBIx::Class::Storage::DBI::Sybase::NoBindVars;
-
my ($dsn, $user, $pass) = @ENV{map { "DBICTEST_SYBASE_${_}" } qw/DSN USER PASS/};
-my $TESTS = 63 + 2;
+my $TESTS = 66 + 2;
if (not ($dsn && $user)) {
plan skip_all =>
}
my @storage_types = (
- 'DBI::Sybase',
- 'DBI::Sybase::NoBindVars',
+ 'DBI::Sybase::ASE',
+ 'DBI::Sybase::ASE::NoBindVars',
);
+eval "require DBIx::Class::Storage::$_;" for @storage_types;
+
my $schema;
my $storage_idx = -1;
my $ping_count = 0;
{
- my $ping = DBIx::Class::Storage::DBI::Sybase->can('_ping');
- *DBIx::Class::Storage::DBI::Sybase::_ping = sub {
+ my $ping = DBIx::Class::Storage::DBI::Sybase::ASE->can('_ping');
+ *DBIx::Class::Storage::DBI::Sybase::ASE::_ping = sub {
$ping_count++;
goto $ping;
};
for my $storage_type (@storage_types) {
$storage_idx++;
- unless ($storage_type eq 'DBI::Sybase') { # autodetect
+ unless ($storage_type eq 'DBI::Sybase::ASE') { # autodetect
DBICTest::Schema->storage_type("::$storage_type");
}
$schema->storage->ensure_connected;
if ($storage_idx == 0 &&
- $schema->storage->isa('DBIx::Class::Storage::DBI::Sybase::NoBindVars')) {
+ $schema->storage->isa('DBIx::Class::Storage::DBI::Sybase::ASE::NoBindVars')) {
# no placeholders in this version of Sybase or DBD::Sybase (or using FreeTDS)
my $tb = Test::More->builder;
$tb->skip('no placeholders') for 1..$TESTS;
$seen_id{$new->artistid}++;
# check redispatch to storage-specific insert when auto-detected storage
- if ($storage_type eq 'DBI::Sybase') {
+ if ($storage_type eq 'DBI::Sybase::ASE') {
DBICTest::Schema->storage_type('::DBI');
$schema = get_schema();
}
$dbh->do(qq[
CREATE TABLE bindtype_test
(
- id INT IDENTITY PRIMARY KEY,
- bytea IMAGE NULL,
- blob IMAGE NULL,
- clob TEXT NULL
+ id INT IDENTITY PRIMARY KEY,
+ bytea IMAGE NULL,
+ blob IMAGE NULL,
+ clob TEXT NULL,
+ a_memo IMAGE NULL
)
],{ RaiseError => 1, PrintError => 0 });
}
my $new_str = $binstr{large} . 'mtfnpy';
# check redispatch to storage-specific update when auto-detected storage
- if ($storage_type eq 'DBI::Sybase') {
+ if ($storage_type eq 'DBI::Sybase::ASE') {
DBICTest::Schema->storage_type('::DBI');
$schema = get_schema();
}
bytea => 1,
blob => $binstr{large},
clob => $new_str,
+ a_memo => 2,
},
{
bytea => 1,
blob => $binstr{large},
clob => $new_str,
+ a_memo => 2,
},
]);
} 'insert_bulk with blobs does not die';
bytea => 1,
blob => $binstr{large},
clob => $new_str,
+ a_memo => 2,
},
{
id => 2,
bytea => 1,
blob => $binstr{large},
clob => $new_str,
+ a_memo => 2,
},
]);
- } 'insert_bulk with blobs and explicit identity DOES not die';
+ } 'insert_bulk with blobs and explicit identity does NOT die';
is((grep $_->blob eq $binstr{large}, $rs->all), 2,
'IMAGE column set correctly via insert_bulk with identity');
$row = $rs->create({ amount => 100 });
} 'inserted a money value';
- is eval { $rs->find($row->id)->amount }, 100, 'money value round-trip';
+ cmp_ok eval { $rs->find($row->id)->amount }, '==', 100,
+ 'money value round-trip';
lives_ok {
$row->update({ amount => 200 });
} 'updated a money value';
- is eval { $rs->find($row->id)->amount },
- 200, 'updated money value round-trip';
+ cmp_ok eval { $rs->find($row->id)->amount }, '==', 200,
+ 'updated money value round-trip';
lives_ok {
$row->update({ amount => undef });
} 'updated a money value to NULL';
- my $null_amount = eval { $rs->find($row->id)->amount };
- ok(
- (($null_amount == undef) && (not $@)),
- 'updated money value to NULL round-trip'
+ lives_and {
+ my $null_amount = $rs->find($row->id)->amount;
+ is $null_amount, undef;
+ } 'updated money value to NULL round-trip';
+
+# Test computed columns and timestamps
+ $schema->storage->dbh_do (sub {
+ my ($storage, $dbh) = @_;
+ eval { $dbh->do("DROP TABLE computed_column_test") };
+ $dbh->do(<<'SQL');
+CREATE TABLE computed_column_test (
+ id INT IDENTITY PRIMARY KEY,
+ a_computed_column AS getdate(),
+ a_timestamp timestamp,
+ charfield VARCHAR(20) DEFAULT 'foo'
+)
+SQL
+ });
+
+ require DBICTest::Schema::ComputedColumn;
+ $schema->register_class(
+ ComputedColumn => 'DBICTest::Schema::ComputedColumn'
);
- diag $@ if $@;
+
+ ok (($rs = $schema->resultset('ComputedColumn')),
+ 'got rs for ComputedColumn');
+
+ lives_ok { $row = $rs->create({}) }
+ 'empty insert for a table with computed columns survived';
+
+ lives_ok {
+ $row->update({ charfield => 'bar' })
+ } 'update of a table with computed columns survived';
}
is $ping_count, 0, 'no pings';
END {
if (my $dbh = eval { $schema->storage->_dbh }) {
eval { $dbh->do("DROP TABLE $_") }
- for qw/artist bindtype_test money_test/;
+ for qw/artist bindtype_test money_test computed_column_test/;
}
}