NAME
DBIx::PgLink::Adapter - DBI wrapper for DBIx::PgLink suite
SYNOPSIS
use DBIx::PgLink::Adapter;
$db = DBIx::PgLink::Adapter->new();
$db->install_roles(qw/NestedTransaction TraceDBI/);
$db->install_roles('Reconnect');
$db->reconnect_retries(10);
$db->connect("dbi:Pg:host=127.0.0.1;db=postgres", "postgres", "", { RaiseError=>1, AutoCommit=>1 });
$db->do("SET client_min_messages=INFO");
$db->dbh->{'pg_enable_utf8'} = 1;
$st = $db->prepare("SELECT * FROM pg_database");
$st->execute;
@row = $st->fetchrow_array;
See also DBIx::PgLink
DESCRIPTION
Class wraps DBI database handle and provides base for further extending.
Used Moose object system.
Extending
Extending can be made by subclassing for specific data source type and/or by adding roles.
Subclasses of DBIx::PgLink::Adapter may implement missing or broken functionality of DBD driver or underlying driver/database.
Roles (a.k.a. traits or mixins) supply additional functionality and may be composed in any combinations (in theory). Adapter can load role: 1) in compile-time via with clause 2) in run-time via install_role subroutine or via direct meta-class manipulation.
Descendant adapter classes and extra roles can have any name.
DATABASE OBJECT
METHODS
- new(%attr)
 - 
Default constructor.
 - connect($data_source, $user, $password, \%attr)
 - 
Connect to DBI datasource. Returns database handle.
 install_roles- 
Apply roles to current object. Role name can be full package name or just last portion, which defaults to 'DBIx::PgLink::Roles::' namespace.
 - err errstr state set_err func data_sources do last_insert_id selectrow_array selectrow_arrayref selectrow_hashref selectall_arrayref selectall_hashref selectcol_arrayref prepare prepare_cached commit rollback begin_work disconnect ping get_info table_info column_info primary_key_info primary_key foreign_key_info statistics_info tables type_info_all type_info quote quote_identifier
 - 
Methods of DBI database handle. Can be overrided and extended.
All methods that should return statement handle returns instance of <DBIx::PgLink::Adapter::st> class instead.
 is_transaction_active- 
Utility function. Return true if connection is in transaction.
 format_routine_call- 
$sql = $adapter->format_routine_call($catalog, $schema, $routine, $returns_set, \@args);Generate SQL query for routine call.
$returns_setis boolean, pass true if routine returns set.\@argsis array of hashes for routine arguments. For database that supports named arguments each entry must contains 'arg_name' value.Generic implementation use 'SELECT' keyword with positional call syntax (PostgreSQL-compatible).
 
ATTRIBUTES
NOTE: DBI attributes are not imported. Use dbh attribute for direct access.
- connector
 - 
Weak reference to optional parent of DBIx::PgLink::Connector class. Read only.
 - dbh
 - 
Wrapped DBI database handle.
 
STATEMENT OBJECT
Statement object created by prepare database method.
METHODS
- err errstr state set_err trace trace_msg func bind_param bind_param_inout bind_param_array execute execute_array execute_for_fetch fetchrow_arrayref fetchrow_array fetchrow_hashref fetchall_arrayref fetchall_hashref finish rows bind_col bind_columns dump_results
 - 
Methods of DBI statement handle. Can be overrided and extended.
 
ATTRIBUTES
- parent
 - 
Link to Adapter instance. Read only.
 - sth
 - 
Wrapped DBI statement handle. Read only.
 
Why another DBIx wrapper?
I need this features:
1) Cross-database support 2) Easy extending 3) Mixin/trait-like composing of functionality in run time 4) Set of ready pluggable modules. Particular interest in disconnection handling.
- DBIx::SQLEngine with DBIx::AnyDBD
 - 
+ Good cross-database support - Too ORM-ish. Overkill for data access from one relational engine to another RDBMS.
 - DBIx::Roles
 - 
+ Good set of predifined roles - No cross-database support
 
CAVEATS
Class construction is really SLOW. It is a price for extensibility. See Moose::Cookbook::WTF.
SEE ALSO
AUTHOR
Alexey Sharafutdinov <alexey.s.v.br@gmail.com>
COPYRIGHT AND LICENSE
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.8 or, at your option, any later version of Perl 5 you may have available.