NAME
Data::ObjectDriver::Driver::DBD - base class for database drivers
SYNOPSIS
package SomeObject;
use base qw( Data::ObjectDriver::BaseObject );
__PACKAGE__->install_properties({
...
driver => Data::ObjectDriver::Driver::DBI->new(
...
dbd => Data::ObjectDriver::Driver::DBD->new('mysql'),
),
});
DESCRIPTION
Data::ObjectDriver::Driver::DBD is the base class for database drivers. Database drivers handle the peculiarities of specific database servers to provide an abstract API to the object drivers. While database drivers operate on queries and database concepts like the last insert ID and binding attributes for a query, object drivers operate on objects higher level concepts like caching and partitioning.
Database drivers are used with Data::ObjectDriver::Driver::DBI
object drivers. If you are making an object driver that doesn't use DBI
, you do not need a database driver; implement your custom behavior in your Data::ObjectDriver
subclass directly.
USAGE
Data::ObjectDriver::Driver::DBD->new($name)
Creates a new database driver of the given subclass type. That is, new('mysql')
would create a new instance of Data::ObjectDriver::Driver::DBD::mysql
.
$dbd->init_dbh($dbh)
Initializes the given database handle connected to this driver's type of database.
By default, no operation is performed. Override this method if your type of database must do further initialization that other database servers don't need, such as setting an operative time zone.
$dbd->bind_param_attributes($type)
Returns a hashref to pass to the DBI
statement method bind_param
, to describe the SQL type of a column defined as $type
in an object class's column_defs
mapping.
By default, no operation is performed. Override this method if your type of database needs such type hinting for some fields, such as specifying a parameter is a BLOB
.
Note that object classes must define your custom types in their column_defs
mappings for those classes to be compatible with your DBD
. Make sure to document any custom types you implement.
$dbd->db_column_name($datasource, $column)
Returns a decorated column name. For example, if your database requires column names to be prepended with table names, that concatenation would occur in this method.
By default, db_column_name
returns the column name unmodified.
$dbd->fetch_id()
Returns the autogenerated ID of the most recently inserted record, or undef
if this feature is not supported.
By default, fetch_id
returns undef
.
$dbd->map_error_code($code, $msg)
Returns a Data::ObjectDriver::Errors
code for the given database error, or undef
if no equivalent has been defined.
By default, map_error_code
returns undef
for every error.
$dbd->sql_for_unixtime()
Returns the SQL for querying the current UNIX time on the database server, or a UNIX time to use as the remote time.
By default, sql_for_unixtime
returns the value of perl time()
on the local machine.
$dbd->offset_implemented()
Returns true if the database this driver represents supports OFFSET
clauses.
By default, offset_implemented
returns true.
$dbd->can_delete_with_limit()
Returns true if the database this driver represents supports LIMIT
clauses on DELETE
statements.
By default, can_delete_with_limit
returns false.
$dbd->is_case_insensitive()
Returns true if the database this driver represents normally compares string fields case insensitively.
By default, is_case_insensitive
returns false.
$dbd->can_replace()
Returns true or false if the driver can do "REPLACE INTO" only Mysql and SQLite does. By default returns false.
$dbd->sql_class()
Provides the package name of the class responsible for representing SQL queries. This method returns 'Data::ObjectDriver::SQL', but may be overridden to return a package that has a similar interface but produces SQL that is compatible with that DBD driver. The package provided must already be loaded and available for use.
LICENSE
Data::ObjectDriver is free software; you may redistribute it and/or modify it under the same terms as Perl itself.
AUTHOR & COPYRIGHT
Except where otherwise noted, Data::ObjectDriver is Copyright 2005-2006 Six Apart, cpan@sixapart.com. All rights reserved.