| DBIx-SQLEngine documentation | Contained in the DBIx-SQLEngine distribution. |
DBIx::SQLEngine::Driver::Pg - Support DBD::Pg
DBI Wrapper: Adds methods to a DBI database handle.
my $sqldb = DBIx::SQLEngine->new( 'dbi:pg:test' );
Portability Subclasses: Uses driver's idioms or emulation.
$hash_ary = $sqldb->fetch_select(
table => 'students'
limit => 5, offset => 10
);
This package provides a subclass of DBIx::SQLEngine which compensates for Postgres's idiosyncrasies.
You do not need to use this package directly; when you connect to a database, the SQLEngine object is automatically re-blessed in to the appropriate subclass.
$sqldb->sql_limit( $limit, $offset, $sql, @params ) : $sql, @params
Adds support for SQL select limit clause.
$sqldb->do_insert_with_sequence( $sequence_name, %sql_clauses ) : $row_count
Implemented using _seq_do_insert_preinc and seq_increment.
$sqldb->seq_increment( $table, $field ) : $new_value
Increments the sequence, and returns the newly allocated value.
$sqldb->dbms_create_column_types () : %column_type_codes
Implemented using Pg's bytea and serial types.
$sqldb->dbms_create_column_text_long_type () : $col_type_str
Implemented using Pg's text type.
$sqldb->recoverable_query_exceptions() : @common_error_messages
Provides a list of error messages which represent common communication failures or other incidental errors.
See DBIx::SQLEngine for the overall interface and developer documentation.
See DBIx::SQLEngine::Docs::ReadMe for general information about this distribution, including installation and license information.
| DBIx-SQLEngine documentation | Contained in the DBIx-SQLEngine distribution. |
######################################################################## package DBIx::SQLEngine::Driver::Pg; use strict; use Carp; ########################################################################
sub sql_limit { my $self = shift; my ( $limit, $offset, $sql, @params ) = @_; # You can't apply "limit" to non-table fetches like "select LAST_INSERT_ID" if ( $sql =~ /\bfrom\b/i and defined $limit or defined $offset) { $sql .= " limit $limit" if $limit; $sql .= " offset $offset" if $offset; } return ($sql, @params); } ########################################################################
# $rows = $self->do_insert_with_sequence( $sequence, %clauses ); sub do_insert_with_sequence { (shift)->_seq_do_insert_preinc( @_ ) } # $current_id = $sqldb->seq_increment( $table, $field ); sub seq_increment { my ($self, $table, $field) = @_; $self->fetch_one_value( sql => "SELECT nextval('${table}_${field}_seq')" ); } ########################################################################
sub dbms_create_column_types { 'sequential' => 'serial', 'binary' => 'bytea', } sub dbms_create_column_text_long_type { 'text' } ########################################################################
sub recoverable_query_exceptions { 'backend closed the channel unexpectedly', 'there is no connection to the backend', 'reconnect to the database system and repeat your query', 'no statement executing', 'fetch without execute', 'field number \d+ is out of range 0\.\.\-1', } ########################################################################
######################################################################## 1;