DBIx-Class-Schema-Loader
view release on metacpan or search on metacpan
t/10_06sybase_common.t view on Meta::CPAN
# Timestamp column
timestamp => { data_type => 'timestamp', inflate_datetime => 0 },
# String Types
'char' => { data_type => 'char', size => 1 },
'char(2)' => { data_type => 'char', size => 2 },
'nchar' => { data_type => 'nchar', size => 1 },
'nchar(2)' => { data_type => 'nchar', size => 2 },
'unichar(2)' => { data_type => 'unichar', size => 2 },
'varchar(2)' => { data_type => 'varchar', size => 2 },
'nvarchar(2)' => { data_type => 'nvarchar', size => 2 },
'univarchar(2)' => { data_type => 'univarchar', size => 2 },
# Binary Types
'binary' => { data_type => 'binary', size => 1 },
'binary(2)' => { data_type => 'binary', size => 2 },
'varbinary(2)' => { data_type => 'varbinary', size => 2 },
},
# test that named constraints aren't picked up as tables (I can't reproduce this on my machine)
failtrigger_warnings => [ qr/^Bad table or view 'sybase_loader_test2_ref_slt1'/ ],
extra => {
create => [
q{
CREATE TABLE sybase_loader_test1 (
id int identity primary key
)
},
q{
CREATE TABLE sybase_loader_test2 (
id int identity primary key,
sybase_loader_test1_id int,
CONSTRAINT sybase_loader_test2_ref_slt1 FOREIGN KEY (sybase_loader_test1_id) REFERENCES sybase_loader_test1 (id)
)
},
],
drop => [ qw/sybase_loader_test1 sybase_loader_test2/ ],
count => 30 * 4,
run => sub {
$schema = shift;
SKIP: {
my $dbh = $schema->storage->dbh;
try {
$dbh->do('USE master');
}
catch {
skip "these tests require the sysadmin role", 30 * 4;
};
try {
$dbh->do('CREATE DATABASE [dbicsl_test1]');
$dbh->do('CREATE DATABASE [dbicsl_test2]');
}
catch {
skip "cannot create databases: $_", 30 * 4;
};
try {
local $SIG{__WARN__} = sigwarn_silencer(
qr/^Password correctly set\.$|^Account unlocked\.$|^New login created\.$|^New user added\.$/
);
$dbh->do("sp_addlogin dbicsl_user1, dbicsl, [dbicsl_test1]");
$dbh->do("sp_addlogin dbicsl_user2, dbicsl, [dbicsl_test2]");
$dbh->do("USE [dbicsl_test1]");
$dbh->do("sp_adduser dbicsl_user1");
$dbh->do("sp_adduser dbicsl_user2");
$dbh->do("GRANT ALL TO dbicsl_user1");
$dbh->do("GRANT ALL TO dbicsl_user2");
$dbh->do("USE [dbicsl_test2]");
$dbh->do("sp_adduser dbicsl_user2");
$dbh->do("sp_adduser dbicsl_user1");
$dbh->do("GRANT ALL TO dbicsl_user2");
$dbh->do("GRANT ALL TO dbicsl_user1");
}
catch {
skip "cannot add logins: $_", 30 * 4;
};
my ($dbh1, $dbh2);
{
local $SIG{__WARN__} = sigwarn_silencer(
qr/can't change context/
);
$dbh1 = DBI->connect($dsn, 'dbicsl_user1', 'dbicsl', {
RaiseError => 1,
PrintError => 0,
});
$dbh1->do('USE [dbicsl_test1]');
$dbh2 = DBI->connect($dsn, 'dbicsl_user2', 'dbicsl', {
RaiseError => 1,
PrintError => 0,
});
$dbh2->do('USE [dbicsl_test2]');
}
$dbh1->do(<<"EOF");
CREATE TABLE sybase_loader_test4 (
id INT IDENTITY PRIMARY KEY,
value VARCHAR(100) NULL
)
EOF
$dbh1->do('GRANT ALL ON sybase_loader_test4 TO dbicsl_user2');
$dbh1->do(<<"EOF");
CREATE TABLE sybase_loader_test5 (
id INT IDENTITY PRIMARY KEY,
value VARCHAR(100) NULL,
four_id INTEGER,
CONSTRAINT loader_test5_uniq UNIQUE (four_id),
FOREIGN KEY (four_id) REFERENCES sybase_loader_test4 (id)
)
EOF
$dbh2->do(<<"EOF");
CREATE TABLE sybase_loader_test5 (
pk INT IDENTITY PRIMARY KEY,
value VARCHAR(100) NULL,
four_id INTEGER,
t/10_06sybase_common.t view on Meta::CPAN
->has_relationship('sybase_loader_test7');
} 'cross-database relationship in multi database schema';
lives_and {
ok $test_schema->source('SybaseLoaderTest7')
->has_relationship('sybase_loader_test8s');
} 'cross-database relationship in multi database schema';
}
}
}
},
},
)->run_tests();
END {
if (not $ENV{SCHEMA_LOADER_TESTS_NOCLEANUP}) {
rmtree EXTRA_DUMP_DIR;
if ($databases_created) {
my $dbh = $schema->storage->dbh;
$dbh->do('USE master');
local $dbh->{FetchHashKeyName} = 'NAME_lc';
my $sth = $dbh->prepare('sp_who');
$sth->execute;
while (my $row = $sth->fetchrow_hashref) {
if ($row->{dbname} =~ /^dbicsl_test[12]\z/) {
$dbh->do("kill $row->{spid}");
}
}
foreach my $table ('[dbicsl_test1].dbicsl_user1.sybase_loader_test8',
'[dbicsl_test2].dbicsl_user2.sybase_loader_test7',
'[dbicsl_test2].dbicsl_user2.sybase_loader_test6',
'[dbicsl_test2].dbicsl_user2.sybase_loader_test5',
'[dbicsl_test1].dbicsl_user1.sybase_loader_test5',
'[dbicsl_test1].dbicsl_user1.sybase_loader_test4') {
try {
$dbh->do("DROP TABLE $table");
}
catch {
diag "Error dropping table $table: $_";
};
}
foreach my $db (qw/dbicsl_test1 dbicsl_test2/) {
try {
$dbh->do("DROP DATABASE [$db]");
}
catch {
diag "Error dropping test database $db: $_";
};
}
foreach my $login (qw/dbicsl_user1 dbicsl_user2/) {
try {
local $SIG{__WARN__} = sigwarn_silencer(
qr/^Account locked\.$|^Login dropped\.$/
);
$dbh->do("sp_droplogin $login");
}
catch {
diag "Error dropping login $login: $_"
unless /Incorrect syntax/;
};
}
}
}
}
# vim:et sts=4 sw=4 tw=0:
( run in 1.869 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )