NAME

DBIx::Otogiri - Core of Otogiri

SYNOPSIS

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

# or use with DBURL
my $db = Otogiri->new(dburl => 'sqlite://...');

$db->insert(book => {title => 'mybook1', author => 'me', ...});

my $book_id = $db->last_insert_id;
my $row = $db->single(book => {id => $book_id});

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};
}

# If you using perl 5.38 or later, you can use class feature.
class Book {
    field $id :param;
    field $title :param;
    field $author :param;
    field $price :param;
    field $created_at :param;
    field $updated_at :param;

    method title {
        return $title;
    }
};
my $book = $db->row_class('Book')->single(book => {id => 1}); # $book is Book object.
say $book->title; # => say book title.

my $hash = $db->no_row_class->single(book => {id => 1}); # $hash is HASH reference.
say $hash->{title}; # => say book title.

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

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

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

DESCRIPTION

DBIx::Otogiri is core feature class of Otogiri.

ATTRIBUTES

connect_info (required)

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

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

strict (optional, default is 1)

In strict mode, all the expressions must be declared by using blessed references that export as_sql and bind methods like SQL::QueryMaker.

Please see METHODS section of SQL::Maker's documentation.

inflate (optional)

use JSON;
inflate => sub {
    my ($data, $tablename, $db) = @_;
    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().

$db is Otogiri instance, you can use Otogiri's method in inflate logic.

deflate (optional)

use JSON;
deflate => sub {
    my ($data, $tablename, $db) = @_;
    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().

$db is Otogiri instance, you can use Otogiri's method in deflate logic.

METHODS

new

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

Instantiate and connect to db.

Please see ATTRIBUTE section.

insert / fast_insert

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

Insert a data simply.

### receive rows of result in array
my @rows = $db->search($table_name => $conditions_in_hashref [,@options]);

### or we can receive result as iterator object
my $iter = $db->search($table_name => $conditions_in_hashref [,@options]);

while (my $row = $iter->next) {
    ... any logic you want ...
}

printf "rows = %s\n", $iter->fetched_count;

Select from specified table. When you receive result by array, it returns matched rows. Or not, it returns a result as DBIx::Otogiri::Iterator object.

single / fetch

my $row = $db->fetch($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 [, $table_name]);

Select by specified SQL. Then, returns matched rows as array. $table_name is optional and used for inflate parameter.

row_class

class Book {
    field $id :param;
    field $title :param;
    field $author :param;
    field $price :param;
    field $created_at :param;
    field $updated_at :param;

    method title {
        return $title;
    }
};

my $db = $db->row_class($class_name);

Set row class name. If you set row class name, you can receive result as row class object.

no_row_class

my $db = $db->no_row_class;

Unset row class name. If you unset row class name, you can receive result as HASH reference.

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.

last_insert_id

my $id = $db->last_insert_id([@args]);

returns last_insert_id. (mysql_insertid in MySQL or last_insert_rowid in SQLite)

disconnect

disconnect database.

reconnect

reconnect database.

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

DBIx::Otogiri::Iterator