NAME
    DBIx::Simple::Inject - Injects DBIx::Simple methods into DBI

SYNOPSIS
      use DBI;
      my $dbh = DBI->connect(
          'dbi:SQLite:dbname=:memory:', '', '', {
              RootClass          => 'DBIx::Simple::Inject',
              RaiseError         => 1,
              PrintError         => 0,
              ShowErrorStatement => 1,
          }
      );
  
      # of course can use dbh methods,
      $dbh->do('create table users (id, name)');
  
      # and also can use DBIx::Simple methods!
      my $row = $dbh->query('select * from users where id = ?', 123)->hash;
      my $res = $dbh->insert(users => {
          name => "John",
      });

DESCRIPTION
    DBIx::Simple::Inject is-a DBI::db. This module injects DBIx::Simple
    power into DBI itself. So you can use this module directly or via
    "RootClass".

      use DBIx::Simple::Inject;
      my $dbh = DBIx::Simple::Inject->connect( ... );

    or

      use DBI;
      my $dbh = DBI->connect( ..., {
          RootClass => 'DBIx::Simple::Inject',
      });

    This is useful when you use several modules (like DBIx::Connector) that
    take same as DBI's connect info.

ATTRIBUTE
    private_dbixsimple
        You can set or access DBIx::Simple's property using
        "private_dbixsimple" attribute.

          my $db = DBI->connect(
              'dbi:...',
              'user',
              'pass',
              {
                  RootClass  => 'DBIx::Simple::Inject',
                  RaiseError => 1,
                  private_dbixsimple => {
                      lc_columns      => 0,
                      keep_statements => 20,
                      result_class    => 'MyApp::Result',
                      abstract        => 'SQL::Maker',
                  },
              },
          );

        abstract
            For convenience, "abstract" can take some module names.
            Supported module names are as follows:

              SQL::Abstract
              SQL::Abstract::Limit
              SQL::Maker

            You can also set callback for your own modules as follows.

              my $db = DBI->connect(
                  ...,
                  {
                      RootClass => 'DBIx::Simple::Inject',
                      private_dbixsimple => {
                          abstract => sub {
                              my $dbh = shift;
                              My::SQL::Generator->new(driver => $dbh->{Driver}{Name});
                          },
                      },
                  },
              );

INJECT METHODS
    You can use the following methods from DBIx::Simple in addition to all
    DBI database handle methods.

    "$dbh->query()", "$dbh->select()", "$dbh->insert()", "$dbh->update()",
    "$dbh->delete()", "$dbh->iquery()", "$dbh->error()", "$dbh->begin()"
        Note: Besides these, DBIx::Simple provides "commit()", "rollback()"
        and "func()", etc. DBI database handles already provides these
        methods.

    "$dbh->lc_columns()", "$dbh->keep_statements()", "$dbh->result_class()",
    "$dbh->abstract()"
        These are accessor methods to DBIx::Simple properties.

ANOTHER DBIx ?
    Yes.

    OK I know that DBIx namespace is hodgepodge. Several authors should know
    that DBI itself has a lot of useful features already (like "Callbacks").

    However, if you don't want ORM but want result set object (blessed
    result), I think DBIx::Simple makes great success. The module has nice
    API.

    Some useful CPAN modules (that knows DBI's true power) takes $dbh or
    same arguments as "DBI->connect()". That's why I made this module.

SEE ALSO
    DBIx::Simple, DBI

AUTHOR
    Naoki Tomita <tomita@cpan.org>

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

