UR
view release on metacpan or search on metacpan
lib/UR/DataSource/Oracle.pm view on Meta::CPAN
sub get_unique_index_details_from_data_dictionary {
my ($self, $owner_name, $table_name) = @_;
my $sql = qq(
select cc.constraint_name, cc.column_name
from all_cons_columns cc
join all_constraints c
on c.constraint_name = cc.constraint_name
and c.owner = cc.owner
and c.constraint_type = 'U'
where cc.table_name = ?
and cc.owner = ?
union
select ai.index_name, aic.column_name
from all_indexes ai
join all_ind_columns aic
on aic.index_name = ai.index_name
and aic.index_owner = ai.owner
where ai.uniqueness = 'UNIQUE'
and aic.table_name = ?
and aic.index_owner = ?
);
my $dbh = $self->get_default_handle();
return undef unless $dbh;
my $sth = $dbh->prepare($sql);
return undef unless $sth;
$sth->execute($table_name, $owner_name, $table_name, $owner_name);
my $ret;
while (my $data = $sth->fetchrow_hashref()) {
$ret->{$data->{'CONSTRAINT_NAME'}} ||= [];
push @{ $ret->{ $data->{CONSTRAINT_NAME} } }, $data->{COLUMN_NAME};
}
return $ret;
}
sub set_userenv {
# there are two places to set these oracle variables-
# 1. this method in UR::DataSource::Oracle is a class method
# that can be called to change the values later
# 2. the method in YourSubclass::DataSource::Oracle is called in
# init_created_handle which is called while the datasource
# is still being set up- it operates directly on the db handle
my ($self, %p) = @_;
my $dbh = $p{'dbh'} || $self->get_default_handle();
# module is application name
my $module = $p{'module'} || $0;
# storing username in 'action' oracle variable
my $action = $p{'action'};
if (! defined($action)) {
$action = getpwuid($>); # real UID
}
my $sql = q{BEGIN dbms_application_info.set_module(?, ?); END;};
my $sth = $dbh->prepare($sql);
if (!$sth) {
warn "Couldnt prepare query to set module/action in Oracle";
return undef;
}
$sth->execute($module, $action) || warn "Couldnt set module/action in Oracle";
}
sub get_userenv {
# there are two ways to set these values but this is
# the only way to retrieve the values after they are set
my ($self, $dbh) = @_;
if (!$dbh) {
$dbh = $self->get_default_handle();
}
if (!$dbh) {
warn "No dbh";
return undef;
}
my $sql = q{
SELECT sys_context('USERENV','MODULE') as module,
sys_context('USERENV','ACTION') as action
FROM dual
};
my $sth = $dbh->prepare($sql);
return undef unless $sth;
$sth->execute() || die "execute failed: $!";
my $r = $sth->fetchrow_hashref();
return $r;
}
my %ur_data_type_for_vendor_data_type = (
'VARCHAR2' => ['Text', undef],
'BLOB' => ['XmlBlob', undef],
);
sub ur_data_type_for_data_source_data_type {
my($class,$type) = @_;
$type = $class->normalize_vendor_type($type);
my $urtype = $ur_data_type_for_vendor_data_type{$type};
unless (defined $urtype) {
$urtype = $class->SUPER::ur_data_type_for_data_source_data_type($type);
}
return $urtype;
}
( run in 0.975 second using v1.01-cache-2.11-cpan-39bf76dae61 )