NAME

NetSDS::DBI - DBI wrapper for NetSDS

SYNOPSIS

use NetSDS::DBI;

$dbh = NetSDS::DBI->new(
	dsn    => 'dbi:Pg:dbname=test;host=127.0.0.1;port=5432',
	login  => 'user',
	passwd => 'topsecret',
);

print $db->call("select md5(?)", 'zuka')->fetchrow_hashref->{md5};

DESCRIPTION

NetSDS::DBI module provides wrapper around DBI module.

CLASS API

new(%params) - class constructor
    $dbh = NetSDS::DBI->new(
		dsn    => 'dbi:Pg:dbname=test;host=127.0.0.1;port=5432',
		login  => 'user',
		passwd => 'topsecret',
	);
dbh() - DBI connection handler accessor

Returns: DBI object

This method provides accessor to DBI object and for low level access to database specific methods.

Example (access to specific method):

my $quoted = $db->dbh->quote_identifier(undef, 'auth', 'services');
# $quoted contains "auth"."services" now
call($sql, @bind_params) - prepare and execute SQL query

Method call() implements the following functionality:

* check connection to DBMS and restore it
* prepare chached SQL statement
* execute statement with bind parameters

Parameters:

* SQL query with placeholders
* bind parameters

Return:

* statement handler from DBI 

Example:

$sth = $dbh->call("select * from users");
while (my $row = $sth->fetchrow_hashref()) {
	print $row->{username};
}
fetch_call($sql, @params) - call and fetch result

Paramters: SQL query, parameters

Returns: arrayref of records as hashrefs

Example:

# SQL DDL script:
# create table users (
# 	id serial,
# 	login varchar(32),
# 	passwd varchar(32)
# );

# Now we fetch all data to perl structure
my $table_data = $db->fetch_call("select * from users");

# Process this data
foreach my $user (@{$table_data}) {
	print "User ID: " . $user->{id};
	print "Login: " . $user->{login};
}
begin() - start transaction
commit() - commit transaction
rollback() - rollback transaction
quote() - quote SQL string

Example:

# Encode $str to use in queries
my $str = "some crazy' string; with (dangerous characters";
$str = $db->quote($str);

INTERNAL METHODS

_add_sets() - add initial SQL query

Example:

$obj->_add_sets("set search_path to myscheme");
$obj->_add_sets("set client_encoding to 'UTF-8'");
_add_attrs() - add DBI handler attributes
$self->_add_attrs(AutoCommit => 1);
_check_connection() - ping and reconnect

Internal method checking connection and implement reconnect

_connect() - connect to DBMS

Internal method starting connection to DBMS

EXAMPLES

samples/testdb.pl

SEE ALSO

DBI, DBD::Pg

TODO

1. Make module less PostgreSQL specific.

AUTHOR

Michael Bochkaryov <misha@rattler.kiev.ua>

LICENSE

Copyright (C) 2008-2009 Net Style Ltd.

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA