use strict;
use warnings;
+use base qw/DBIx::Class::Storage::DBI::MultiColumnIn/;
+use mro 'c3';
+
use DBD::Pg qw(:pg_types);
-use base qw/DBIx::Class::Storage::DBI/;
+# Ask for a DBD::Pg with array support
+warn "DBD::Pg 2.9.2 or greater is strongly recommended\n"
+ if ($DBD::Pg::VERSION < 2.009002); # pg uses (used?) version::qv()
-# __PACKAGE__->load_components(qw/PK::Auto/);
+sub with_deferred_fk_checks {
+ my ($self, $sub) = @_;
-# Warn about problematic versions of DBD::Pg
-warn "DBD::Pg 1.49 is strongly recommended"
- if ($DBD::Pg::VERSION < 1.49);
+ $self->last_dbh->do('SET CONSTRAINTS ALL DEFERRED');
+ $sub->();
+}
sub _dbh_last_insert_id {
my ($self, $dbh, $seq) = @_;
$self->throw_exception("could not fetch primary key for " . $source->name . ", could not "
. "get autoinc sequence for $col (check that table and column specifications are correct "
. "and in the correct case)") unless defined $seq;
- $self->dbh_do($self->can('_dbh_last_insert_id'), $seq);
+ $self->dbh_do('_dbh_last_insert_id', $seq);
}
sub _dbh_get_autoinc_seq {
sub get_autoinc_seq {
my ($self,$source,$col) = @_;
-
+
my @pri = $source->primary_columns;
- my ($schema,$table) = $source->name =~ /^(.+)\.(.+)$/ ? ($1,$2)
- : (undef,$source->name);
- $self->dbh_do($self->can('_dbh_get_autoinc_seq'), $schema, $table, @pri);
+ my $schema;
+ my $table = $source->name;
+
+ if (ref $table eq 'SCALAR') {
+ $table = $$table;
+ }
+ elsif ($table =~ /^(.+)\.(.+)$/) {
+ ($schema, $table) = ($1, $2);
+ }
+
+ $self->dbh_do('_dbh_get_autoinc_seq', $schema, $table, @pri);
}
sub sqlt_type {
my $bind_attributes = {
bytea => { pg_type => DBD::Pg::PG_BYTEA },
+ blob => { pg_type => DBD::Pg::PG_BYTEA },
};
-
+
if( defined $bind_attributes->{$data_type} ) {
return $bind_attributes->{$data_type};
}
}
}
+sub _sequence_fetch {
+ my ( $self, $type, $seq ) = @_;
+ my ($id) = $self->last_dbh->selectrow_array("SELECT nextval('${seq}')");
+ return $id;
+}
+
+sub _svp_begin {
+ my ($self, $name) = @_;
+
+ $self->last_dbh->pg_savepoint($name);
+}
+
+sub _svp_release {
+ my ($self, $name) = @_;
+
+ $self->last_dbh->pg_release($name);
+}
+
+sub _svp_rollback {
+ my ($self, $name) = @_;
+
+ $self->last_dbh->pg_rollback_to($name);
+}
+
1;
=head1 NAME