NAME
    CHI::Driver::DBI - Use DBI for cache storage

SYNOPSIS
     use CHI;

     # Supply a DBI handle
     #
     my $cache = CHI->new( driver => 'DBI', dbh => DBI->connect(...) );

     # or a DBIx::Connector
     #
     my $cache = CHI->new( driver => 'DBI', dbh => DBIx::Connector->new(...) );

     # or code that generates a DBI handle
     #
     my $cache = CHI->new( driver => 'DBI', dbh => sub { ...; return $dbh } );

DESCRIPTION
    This driver uses a database table to store the cache. The newest
    versions of MySQL and SQLite work are known to work. Other RDBMSes
    should work.

    Why cache things in a database? Isn't the database what people are
    trying to avoid with caches? This is often true, but a simple primary
    key lookup is extremely fast in many databases and this provides a
    shared cache that can be used when less reliable storage like memcached
    is not appropriate. Also, the speed of simple lookups on MySQL when
    accessed over a local socket is very hard to beat. DBI is fast.

ATTRIBUTES
    namespace
        The namespace you pass in will be appended to the `table_prefix' and
        used as a table name. That means that if you don't specify a
        namespace or table_prefix the cache will be stored in a table called
        `chi_Default'.

    table_prefix
        This is the prefix that is used when building a table name. If you
        want to just use the namespace as a literal table name, set this to
        undef. Defaults to `chi_'.

    dbh The main, or rw, DBI handle used to communicate with the db. If a
        dbh_ro handle is defined then this handle will only be used for
        writing.

        You may pass this handle, and dbh_ro below, in one of three forms:

        *   a regular DBI handle

        *   a DBIx::Connector object

        *   a code reference that will be called each time and is expected
            to return a DBI handle, e.g.

                sub { My::Rose::DB->new->dbh }

        The last two options are valuable if your CHI object is going to
        live for enough time that a single DBI handle might time out, etc.

    dbh_ro
        The optional DBI handle used for read-only operations. This is to
        support master/slave RDBMS setups.

    sql_strings
        Hashref of SQL strings to use in the different cache operations. The
        strings are built depending on the RDBMS that dbh is attached to.

METHODS
    BUILD
        Standard issue Moose BUILD method. Used to build the sql_strings. If
        the parameter `create_table' to `new()' was set to true, it will
        attempt to create the db table. For Mysql and SQLite the statement
        is "create if not exists..." so it's generally harmless.

    fetch
    store
    remove
    clear
    get_keys
    get_namespaces
        Not supported at this time.

Authors
    Original version by Justin DeVuyst and Perrin Harkins. Currently
    maintained by Jonathan Swartz.

COPYRIGHT & LICENSE
    Copyright (C) Justin DeVuyst

    This program is free software; you can redistribute it and/or modify it
    under the same terms as Perl itself.