The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Karas - Yet another O/R Mapper.

SYNOPSIS

    use Karas;

    my $db = Karas->new(connect_info => ['dbi:SQLite::memory:', '', '']);
    $db->dbh->do(q{CREATE TABLE member (id int, name varchar(255) not null)});
    my $member = $db->insert('member' => {
        name => 'John',
    });
    $db->update($member, {
        name => 'Mills',
    });
    $member = $db->refetch($member);

DESCRIPTION

Karas is yet another O/R mapper.

THIS IS A DEVELOPMENT RELEASE. API MAY CHANGE WITHOUT NOTICE.

FEATURES

fork safe connection management
nested, scoped transaction support using DBIx:TransactionManager

METHODS

Constructor

my $db = Karas->new(%args)

Create new instance of Karas.

You can pass following arguments as hash:

connect_info(Required)

connect_info is an arguments for DBI->connect.

query_builder(Optional)

This is a query builder. You need to pass the child class instance of SQL::Maker.

Default value is : Karas::QueryBuilder->new().

Connection

$db->connect([@args])

Connect to Database immediately.

If you pass @args, $db->{connec_info} will upgrade by @args.

$db->reconnect([@args])

Reconnect to Database immediately.

If you pass @args, $db->{connec_info} will upgrade by @args.

$db->dbh()

Get a database handle. If the connection was closed, Karas reconnects automatically.

SQL Operations

my @rows = $db->search($table, $where[, $opt])

Search rows from database. For more details, please see SQL::Maker.

my $count = $db->count($table[, $where])

Count rows by $where.

my ($rows, $pager) = $db->search_with_pager($table, $where[, $opt])

$pager is instance of Data::Page::NoTotalEntries.

my @rows = $db->search_by_sql($sql, $binds[, $table_name]);

Search rows by SQL.

$table_name is optional. Karas finds table name by $sql automatically.

my $row = $db->insert($table, $values);

Insert row to database. And refetch row from database.

$db->fast_insert($table, $values);

Insert row to database.

$db->replace($table, $values);

Replace into row to database.

$db->update($row, \%opts)

Update row object by \%opts.

my $affected_rows = $db->update($table_name, $set, $where)

Update $table_name set $set where $where.

$db->delete($row);

Delete row object from database.

$db->delete($table_name, $where)

Delete $table_name where $where.

$db->refetch($row)

Refetch $row object from database.

$db->bulk_insert($table_name, $rows_data)
    $db->bulk_insert('member', [
        +{ name => 'John', email => 'john@example.com' },
        +{ name => 'Ben',  email => 'ben@example.com' },
    ])

This is a bulk insert method. see SQL::Maker::Plugin::InsertMulti.

Row class map management

$db->get_row_class($table_name);

Clear row class from table name.

Transaction

my $guard = $db->txn_scope();

Start transaction scope with DBIx::TransactionManager. See DBIx::TransactionManager for more details.

Plugins

Karas->load_plugin($name[, $args])

Load plugin and install it. $name is a class name of plugin.

You can use two style of $name. If you want to use plugin under the 'Karas::Plugin::Name' namespace, you just write 'Name' part. If you want to put your plugin on your favorite namespace, you can pass'+My::Own::Plugin' as $name.

$args is a argument for Karas::Plugin::Foo->new($args).

Utilities

$db->last_insert_id()

Get a last_insert_id from $dbh.

ROW CLASS DETECTION

Karas loads row class from your load path. If you are using Karas class directly, Karas does not loads any row class. But if you use it as a parent class like following:

    parent MyDB;
    use parent qw/Karas/;

FAQ

AUTHOR

Tokuhiro Matsuno <tokuhirom AAJKLFJEF@ GMAIL COM>

SEE ALSO

LICENSE

Copyright (C) Tokuhiro Matsuno

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