my $schema;
my $storage_idx = -1;
+sub get_schema {
+ DBICTest::Schema->connect($dsn, $user, $pass, {
+ on_connect_call => [
+ [ blob_setup => log_on_update => 1 ], # this is a safer option
+ ],
+ });
+}
+
for my $storage_type (@storage_types) {
$storage_idx++;
-# this is so we can set ->storage_type before connecting
- my $schema = DBICTest::Schema->clone;
unless ($storage_type eq 'DBI::Sybase') { # autodetect
- $schema->storage_type("::$storage_type");
+ DBICTest::Schema->storage_type("::$storage_type");
}
- $schema->connection($dsn, $user, $pass, {
- AutoCommit => 1,
- on_connect_call => [
- [ blob_setup => log_on_update => 1 ], # this is a safer option
- ],
- });
+ $schema = get_schema();
$schema->storage->ensure_connected;
# so we start unconnected
$schema->storage->disconnect;
-# inserts happen in a txn, so we make sure they can nest
- $schema->txn_begin;
-
# test primary key handling
my $new = $schema->resultset('Artist')->create({ name => 'foo' });
ok($new->artistid > 0, "Auto-PK worked");
$seen_id{$new->artistid}++;
- for (1..6) {
+# check redispatch to storage-specific insert when auto-detected storage
+ if ($storage_type eq 'DBI::Sybase') {
+ DBICTest::Schema->storage_type('::DBI');
+ $schema = get_schema();
+ }
+
+ $new = $schema->resultset('Artist')->create({ name => 'Artist 1' });
+ is ( $seen_id{$new->artistid}, undef, 'id for Artist 1 is unique' );
+ $seen_id{$new->artistid}++;
+
+# inserts happen in a txn, so we make sure it still works inside a txn too
+ $schema->txn_begin;
+
+ for (2..6) {
$new = $schema->resultset('Artist')->create({ name => 'Artist ' . $_ });
is ( $seen_id{$new->artistid}, undef, "id for Artist $_ is unique" );
$seen_id{$new->artistid}++;
# mostly stolen from the blob stuff Nniuq wrote for t/73oracle.t
SKIP: {
skip 'TEXT/IMAGE support does not work with FreeTDS', 12
- if $schema->storage->_using_freetds;
+ if $schema->storage->using_freetds;
my $dbh = $schema->storage->dbh;
{
my $maxloblen = length $binstr{'large'};
- if (not $schema->storage->_using_freetds) {
+ if (not $schema->storage->using_freetds) {
$dbh->{'LongReadLen'} = $maxloblen * 2;
} else {
$dbh->do("set textsize ".($maxloblen * 2));
# try a blob update
my $new_str = $binstr{large} . 'mtfnpy';
+
+ # check redispatch to storage-specific update when auto-detected storage
+ if ($storage_type eq 'DBI::Sybase') {
+ DBICTest::Schema->storage_type('::DBI');
+ $schema = get_schema();
+ }
+
eval { $rs->search({ id => 1 })->update({ blob => $new_str }) };
ok !$@, 'updated blob successfully';
diag $@ if $@;