The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

DBIx::Otogiri - Core of Otogiri

SYNOPSIS

use Otogiri;
my $db = Otogiri->new(connect_info => ['dbi: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};
}

$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 $is_success = $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.

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)

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