NAME

Otogiri - A lightweight medicine for using database

SYNOPSIS

use Otogiri;
my $db = Otogiri->new(connect_info => ['dbi:SQLite:...', '', '']);

my $row = $db->insert(book => {title => 'mybook1', author => 'me', ...});
print 'Title: '. $row->{title}. "\n";

my @rows = $db->select(book => {price => {'>=' => 500}});
for my $r (@rows) {
    printf "Title: %s \nPrice: %s yen\n", $r->{title}, $r->{price};
}

$db->update(book => [author => 'oreore'], {author => 'me'});

$db->delete(book => {author => 'me'});

### insert without row-data in response
$db->fast_insert(book => {title => 'someone', ...});

### using transaction
do {
    my $txn = $db->txn_scope;
    $db->insert(book => ...);
    $db->insert(store => ...);
    $txn->commit;
};

DESCRIPTION

Otogiri is one of ORM. A slogan is "Schema-less, Fat-less".

ATTRIBUTE

connect_info (required)

connect_info => [$dsn, $dbuser, $dbpass],

You have to specify dsn, dbuser, and dbpass, to connect to database.

inflate (optional)

use JSON;
inflate => sub {
    my ($data, $tablename) = @_;
    if (defined $data->{json}) {
        $data->{json} = decode_json($data->{json});
    }
    $data->{table} = $tablename;
    $data;
},

You may specify column inflation logic.

Specified code is called internally when called select(), search_by_sql(), and single().

deflate (optional)

use JSON;
deflate => sub {
    my ($data, $tablename) = @_;
    if (defined $data->{json}) {
        $data->{json} = encode_json($data->{json});
    }
    delete $data->{table};
    $data;
},

You may specify column deflation logic.

Specified code is called internally when called insert(), update(), and delete().

METHODS

new

my $db = Otogiri->new( connect_info => [$dsn, $dbuser, $dbpass] );

Instantiate and connect to db.

Please see ATTRIBUTE section.

insert

my $row = $db->insert($table_name => $columns_in_hashref);

Insert data. Then, returns row data.

fast_insert

$db->fast_insert($table_name => $columns_in_hashref);

Insert data simply.

select

my @rows = $db->select($table_name => $conditions_in_hashref [,@options]);

Select from specified table. Then, returns matched rows as array.

single

my $row = $db->single($table_name => $conditions_in_hashref [,@options]);

Select from specified table. Then, returns first of matched rows.

search_by_sql

my @rows = $db->search_by_sql($sql, @bind_vals);

Select by specified SQL. Then, returns matched rows as array.

update

$db->update($table_name => [update_col_1 => $new_value_1, ...], $conditions_in_hashref);

Update rows that matched to $conditions_in_hashref.

delete

$db->delete($table_name => $conditions_in_hashref);

Delete rows that matched to $conditions_in_hashref.

do

$db->do($sql, @bind_vals);

Execute specified SQL.

txn_scope

my $txn = $db->txn_scope;

returns DBIx::TransactionManager::ScopeGuard's instance. See DBIx::TransactionManager to more information.

LICENSE

Copyright (C) ytnobody.

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

AUTHOR

ytnobody <ytnobody@gmail.com>

SEE ALSO

DBIx::Sunny

SQL::Maker