Alzabo
view release on metacpan or search on metacpan
lib/Alzabo/Driver.pm view on Meta::CPAN
It returns a new C<Alzabo::Driver> object of the appropriate subclass.
Throws: L<C<Alzabo::Exception::Eval>|Alzabo::Exceptions>
=head2 tables
Returns a list of strings containing the names of the tables in the
database. See the C<DBI> documentation of the C<DBI-E<gt>tables>
method for more details.
Throws: L<C<Alzabo::Exception::Driver>|Alzabo::Exceptions>
=head2 handle ($optional_dbh)
This method takes one optional parameter, a connected DBI handle. If
this is given, then this handle is the new handle for the driver.
It returns the active database handle.
Throws: L<C<Alzabo::Exception::Params>|Alzabo::Exceptions>
=head2 Data Retrieval methods
Some of these methods return lists of data (the
L<C<rows>|Alzabo::Driver/rows>,
L<C<rows_hashref>|Alzabo::Driver/rows_hashref>, and
L<C<column>|Alzabo::Driver/column> methods). With large result sets,
this can use a lot memory as these lists are created in memory before
being returned to the caller. To avoid this, it may be desirable to
use the functionality provided by the
L<C<Alzabo::DriverStatement>|Alzabo::DriverStatement> class, which
allows you to fetch results one row at a time.
These methods all accept the following parameters:
=over 4
=item * sql => $sql_string
=item * bind => $bind_value or \@bind_values
=item * limit => [ $max, optional $offset ] (optional)
The C<$offset> defaults to 0.
This parameter has no effect for the methods that return only one
row. For the others, it causes the drivers to skip C<$offset> rows
and then return only C<$max> rows. This is useful if the RDBMS being
used does not support C<LIMIT> clauses.
=back
=head2 rows
Returns an array of array references containing the data requested.
=head2 rows_hashref
Returns an array of hash references containing the data requested.
The hash reference keys are the columns being selected. All the key
names are in uppercase.
=head2 one_row
Returns an array or scalar containing the data returned, depending on
context.
=head2 one_row_hash
Returns a hash containing the data requested. The hash keys are the
columns being selected. All the key names are in uppercase.
=head2 column
Returns an array containing the values for the first column of each
row returned.
=head2 do
Use this for non-SELECT SQL statements.
Returns the number of rows affected.
Throws: L<C<Alzabo::Exception::Driver>|Alzabo::Exceptions>
=head2 statement
This methods returns a new
L<C<Alzabo::DriverStatement>|Alzabo::DriverStatement> handle, ready to
return data via the L<C<< Alzabo::DriverStatement->next()
>>|Alzabo::DriverStatement/next> or L<C<<
Alzabo::DriverStatement->next_as_hash()
>>|Alzabo::DriverStatement/next_as_hash> methods.
Throws: L<C<Alzabo::Exception::Driver>|Alzabo::Exceptions>
=head2 rdbms_version
Returns the version string of the database backend currently in use.
The form of this string will vary depending on which driver subclass
is being used.
=head2 quote (@strings)
This methods calls the underlying DBI handles C<quote()> method on the
array of strings provided, and returns the quoted versions.
=head2 quote_identifier (@strings)
This methods calls the underlying DBI handles C<quote_identifier()>
method on the array of strings provided, and returns the quoted
versions.
=head1 Alzabo::DriverStatement
This class is a wrapper around C<DBI>'s statement handles. It finishes
automatically as appropriate so the end user does need not worry about
doing this.
=head2 next
Use this method in a while loop to fetch all the data from a
statement.
Returns an array containing the next row of data for statement or an
empty list if no more data is available.
Throws: L<C<Alzabo::Exception::Driver>|Alzabo::Exceptions>
=head2 next_as_hash
For backwards compatibility, this is also available as C<next_hash()>.
Returns a hash containing the next row of data for statement or an
empty list if no more data is available. All the keys of the hash
will be lowercased.
Throws: L<C<Alzabo::Exception::Driver>|Alzabo::Exceptions>
=head2 all_rows
If the select for which this statement is cursor was for a single
column (or aggregate value), then this method returns an array
containing each B<remaining> value from the database.
Otherwise, it returns an array of array references, each one
containing a returned row from the database.
Throws: L<C<Alzabo::Exception::Driver>|Alzabo::Exceptions>
=head2 all_rows_hash
Returns an array of hashes, each hash representing a single row
returned from the database. The hash keys are all in lowercase.
Throws: L<C<Alzabo::Exception::Driver>|Alzabo::Exceptions>
=head2 execute (@bind_values)
Executes the associated statement handle with the given bound
parameters. If the statement handle is still active (it was
previously executed and has more data left) then its C<finish()>
method will be called first.
Throws: L<C<Alzabo::Exception::Driver>|Alzabo::Exceptions>
=head2 count
Returns the number of rows returned so far.
=head1 Alzabo::Exception::Driver METHODS
In addition to the methods inherited from
L<C<Exception::Class::Base>|Exception::Class::Base>, objects in this
class also contain several methods specific to this subclass.
=head2 sql
Returns the SQL statement in use at the time the error occurred, if
any.
=head2 bind
Returns an array reference contaning the bound parameters for the SQL
statement, if any.
=head1 SUBCLASSING Alzabo::Driver
To create a subclass of C<Alzabo::Driver> for your particular RDBMS is
fairly simple. First of all, there must be a C<DBD::*> driver for it,
as C<Alzabo::Driver> is built on top of C<DBI>.
Here's a sample header to the module using a fictional RDBMS called FooDB:
package Alzabo::Driver::FooDB;
use strict;
use vars qw($VERSION);
use Alzabo::Driver;
use DBI;
( run in 1.054 second using v1.01-cache-2.11-cpan-39bf76dae61 )