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>

