DBIx-Connection
view release on metacpan or search on metacpan
lib/DBIx/Connection/PostgreSQL/SQL.pm view on Meta::CPAN
my ($class, $sequence_name) = @_;
"SELECT nextval('${sequence_name}') AS val"
}
=item reset_sequence
Returns sql statement that restarts sequence.
=cut
sub reset_sequence {
my ($class, $sequence_name, $restart_with, $increment_by) = @_;
("ALTER SEQUENCE ${sequence_name} RESTART WITH ${restart_with}",
($increment_by ? "ALTER SEQUENCE ${sequence_name} INCREMENT ${increment_by}" : ()));
}
=item has_sequence
Returns sql statement that check is sequence exists in database schema
=cut
sub has_sequence {
my ($class, $schema) = @_;
"SELECT pc.relname AS sequence_name
FROM pg_class pc
JOIN pg_authid pa ON pa.oid = pc.relowner AND pc.relkind = 'S' AND pc.relname = lower(?) AND rolname = '". $schema ."' ";
}
=item set_session_variables
Sets session variables
It uses the following sql command pattern:
SET variable TO value;
DBIx::Connection::PostgreSQL::SQL->set_session_variables($connection, {DateStyle => 'US'});
=cut
sub set_session_variables {
my ($class, $connection, $db_session_variables) = @_;
my $sql = "";
$sql .= "SET " . $_ . " TO " . $db_session_variables->{$_} . ";"
for keys %$db_session_variables;
$connection->do($sql);
}
=item update_lob
Updates lob. (Large Object)
Takes connection object, table name, lob column_name, lob conetent, hash_ref to primary key values. optionally lob size column name.
=cut
sub update_lob {
my ($class, $connection, $table_name, $lob_column_name, $lob, $primary_key_values, $lob_size_column_name) = @_;
confess "missing primary key for lob update on ${table_name}.${lob_column_name}"
if (!$primary_key_values || ! (%$primary_key_values));
confess "missing lob size column name" unless $lob_size_column_name;
my $sql = "UPDATE ${table_name} SET ${lob_column_name} = ? ";
$sql .= ($lob_size_column_name ? ", ${lob_size_column_name} = ? " : '')
. $connection->_where_clause($primary_key_values);
$class->_unlink_lob($connection, $class->_get_lob_id($connection, $table_name, $primary_key_values, $lob_column_name));
my $lob_id = $class->_create_lob($connection, $lob);
my $bind_counter = 1;
my $sth = $connection->dbh->prepare($sql);
$sth->bind_param($bind_counter++ ,$lob_id);
$sth->bind_param($bind_counter++ , length($lob)) if $lob_size_column_name;
for my $k (sort keys %$primary_key_values) {
$sth->bind_param($bind_counter++ , $primary_key_values->{$k});
}
$sth->execute();
}
=item fetch_lob
Retrieve lobs.
Takes connection object, table name, lob column_name, hash_ref to primary key values. optionally lob size column name.
By default max lob size is set to 1 GB
DBIx::Connection::Oracle::SQL::LOB_MAX_SIZE = (1024 * 1024 * 1024);
=cut
sub fetch_lob {
my ($class, $connection, $table_name, $lob_column_name, $primary_key_values, $lob_size_column_name) = @_;
confess "missing primary key for lob update on ${table_name}.${lob_column_name}"
if (! $primary_key_values || ! (%$primary_key_values));
confess "missing lob size column name" unless $lob_size_column_name;
my $lob_id = $class->_get_lob_id($connection, $table_name, $primary_key_values, $lob_column_name);
my $lob_size = $class->_get_lob_size($connection, $table_name, $primary_key_values, $lob_size_column_name);
$class->_read_lob($connection, $lob_id, $lob_size);
}
=item _create_lob
Creates lob
=cut
sub _create_lob {
my ($class, $connection, $lob) = @_;
my $dbh = $connection->dbh;
my $autocomit_mode = $connection->has_autocomit_mode;
$connection->begin_work if $autocomit_mode;
my $mode = $dbh->{pg_INV_WRITE};
my $lob_id = $dbh->func($mode, 'lo_creat')
or confess "can't create lob ". $!;
my $lobj_fd = $dbh->func($lob_id, $mode, 'lo_open');
confess "can't open lob ${lob_id}". $!
unless defined $lobj_fd;
( run in 1.002 second using v1.01-cache-2.11-cpan-d8267643d1d )