NAME
Class::DBI::ViewLoader - Load views from database tables as Class::DBI objects
SYNOPSIS
use Class::DBI::ViewLoader;
# set up loader object
$loader = new Class::DBI::ViewLoader (
dsn => 'dbi:Pg:dbname=mydb',
username => 'me',
password => 'mypasswd',
options => {
RaiseError => 1,
AutoCommit => 1
},
namespace => 'MyClass::View',
exclude => qr(^te(?:st|mp)_)i,
include => qr(_foo$),
);
# create classes
@classes = $loader->load_views;
MyClass::View::LiveFoo->retrieve_all()
DESCRIPTION
This class loads views from databases as Class::DBI classes. It follows roughly the same interface employed by Class::DBI::Loader.
This class behaves as a base class for the database-dependent driver classes, which are loaded by Module::Pluggable. Objects are reblessed into the relevant subclass as soon as the driver is discovered, see set_dsn(). Driver classes should always be named Class::DBI::ViewLoader::<driver_name>.
CONSTRUCTOR
new
$obj = $class->new(%args)
Instantiates a new object. The values of %args are passed to the relevant set_* accessors, detailed below. The following 2 statements should be equivalent:
new Class::DBI::ViewLoader ( dsn => $dsn, username => $user );
new Class::DBI::ViewLoader->set_dsn($dsn)->set_username($user);
ACCESSORS
set_dsn
$obj = $obj->set_dsn($dsn_string)
Sets the datasource for the object. This should be in the form understood by DBI e.g. "dbi:Pg:dbname=mydb"
Calling this method will rebless the object into a handler class for the given driver. If no handler is installed, "No handler for driver" will be raised via croak().
get_dsn
$dsn = $obj->get_dsn
Returns the dsn string, as passed in by set_dsn.
set_username
$obj = $obj->set_username($username)
Sets the username to use when connecting to the database.
get_username
$username = $obj->get_username
Returns the username.
set_password
$obj = $obj->set_password
Sets the password to use when connecting to the database.
get_password
$password = $obj->get_password
Returns the password
set_options
$obj = $obj->set_dbi_options(%opts)
Accepts a hash or a hash reference.
Sets the additional configuration options to pass to DBI.
The hash will be copied internally, to prevent against any accidental modification after assignment.
get_options
\%opts = $obj->get_dbi_options
Returns the DBI options hash. The return value should always be a hash reference, even if there are no dbi options set.
The reference returned by this function is live, so modification of it directly affects the object.
set_namespace
$obj = $obj->set_namespace($namespace)
Sets the namespace to load views into.
get_namespace
$namespace = $obj->get_namespace
Returns the target namespace. If not set, returns an empty list.
set_include
$obj = $obj->set_include($regexp)
Sets a regexp that matches the views to load.
Accepts strings or Regexps, croaks if any other reference is passed.
The value is stored as a Regexp, even if a string was passed in.
get_include
$regexp = $obj->get_include
Returns the include regular expression.
Note that this may not be identical to what was passed in.
set_exclude
$obj = $obj->set_exclude($regexp)
Sets a regexp to use to rule out views.
Accepts strings or Regexps, croaks if any other reference is passed.
The value is stored as a Regexp, even if a string was passed in.
get_exclude
Returns the exclude regular expression.
Note that this may not be identical to what was passed in.
load_views
@classes = $obj->load_views
The main method for the class, loads all relevant views from the database and generates classes for those views.
The generated classes will and be read-only, and have a multi-column primary key containing every column. This is because it is unlikely that the view will have a real primary key.
Returns class names for all created classes.
DRIVER METHODS
The following methods are provided by the relevant driver classes. If they are called on a native Class::DBI::ViewLoader object (one without a dsn set), they will cause fatal errors. They are mostly documented here for the benefit of driver writers but they may prove useful for users also.
base_class
$class = $driver->base_class
Returns the name of the base class to be used by generated classes.
get_views
@views = $driver->get_views;
Returns the names of all the views in the database.
get_view_cols
@columnss = $driver->get_view_cols($view);
Returns the names of all the columns in the given view.
DIAGNOSTICS
The following fatal errors are raised by this class:
No handler for driver %s, from dsn %s";
set_dsn couldn't find a driver handler for the given dsn. You may need to install a plugin to handle your database.
No handler loaded
load_views() or some other driver-dependent method was called on an object which hadn't loaded a driver.
%s not overridden
A driver did not override the given method.
Couldn't connect to database
Self-explanatory. The DBI error string is appended to the error message.
Regexp or string required
set_include or set_exclude called with a ref other than 'Regexp'.
Unrecognised arguments in new
new() encountered unsupported arguments. The offending arguments are listed after the error message.
SEE ALSO
DBI, Class::DBI, Class::DBI::Loader
AUTHOR
Matt Lawrence <mattlaw@cpan.org>