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.
search
select / search
### 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.
Note: Since version with auto-disconnect feature, disconnect() is automatically called when the object is destroyed (at program termination or when the object goes out of scope), but only in the process that originally created the connection (fork-safe).
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>