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.
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>