DBIx-Class-Schema-Loader
view release on metacpan or search on metacpan
lib/DBIx/Class/Schema/Loader/DBI/Sybase.pm view on Meta::CPAN
SELECT name
FROM master.dbo.sysdatabases
EOF
my @dbs;
foreach my $db_name (@$db_names) {
push @dbs, $db_name
unless any { $_ eq $db_name } $self->_system_databases;
}
$self->db_schema({});
DB: foreach my $db (@dbs) {
if (not ((ref $owners eq 'ARRAY' && $owners->[0] eq '%') || $owners eq '%')) {
my @owners;
foreach my $owner (@$owners) {
push @owners, $owner
if defined $self->_uid($db, $owner);
}
next DB unless @owners;
$self->db_schema->{$db} = \@owners;
}
else {
# for post-processing below
$self->db_schema->{$db} = '%';
}
}
$self->qualify_objects(1);
}
else {
if ($db ne $current_db) {
$self->dbh->do("USE [$db]");
$self->qualify_objects(1);
}
}
}
else {
$self->qualify_objects(1);
}
}
elsif (ref $self->db_schema eq 'ARRAY' || (not defined $self->db_schema)) {
my $owners = $self->db_schema;
$owners ||= [ $self->dbh->selectrow_array('SELECT user_name()') ];
$self->qualify_objects(1) if @$owners > 1;
$self->db_schema({ $current_db => $owners });
}
foreach my $db (keys %{ $self->db_schema }) {
if ($self->db_schema->{$db} eq '%') {
my $owners = $self->dbh->selectcol_arrayref(<<"EOF");
SELECT name
FROM [$db].dbo.sysusers
WHERE uid <> gid
EOF
$self->db_schema->{$db} = $owners;
$self->qualify_objects(1);
}
}
}
sub _tables_list {
my ($self) = @_;
my @tables;
while (my ($db, $owners) = each %{ $self->db_schema }) {
foreach my $owner (@$owners) {
my ($uid) = $self->_uid($db, $owner);
my $table_names = $self->dbh->selectcol_arrayref(<<"EOF");
SELECT name
FROM [$db].dbo.sysobjects
WHERE uid = $uid
AND type IN ('U', 'V')
EOF
TABLE: foreach my $table_name (@$table_names) {
next TABLE if any { $_ eq $table_name } $self->_system_tables;
push @tables, DBIx::Class::Schema::Loader::Table::Sybase->new(
loader => $self,
name => $table_name,
database => $db,
schema => $owner,
);
}
}
}
return $self->_filter_tables(\@tables);
}
sub _uid {
my ($self, $db, $owner) = @_;
my ($uid) = $self->dbh->selectrow_array(<<"EOF");
SELECT uid
FROM [$db].dbo.sysusers
WHERE name = @{[ $self->dbh->quote($owner) ]}
EOF
return $uid;
}
sub _table_columns {
my ($self, $table) = @_;
my $db = $table->database;
my $owner = $table->schema;
my $columns = $self->dbh->selectcol_arrayref(<<"EOF");
SELECT c.name
( run in 1.485 second using v1.01-cache-2.11-cpan-5735350b133 )