Aniki
view release on metacpan or search on metacpan
Preload all result classes.
### `guess_result_class($table_name) : ClassName`
Guesses result class by table name.
### `guess_row_class($table_name) : ClassName`
Guesses row class by table name.
### `new(%args) : Aniki`
Create instance of Aniki.
#### Arguments
- `handler : Aniki::Handler`
Instance of Aniki::Hanlder.
If this argument is given, not required to give `connect_info` for arguments.
- `connect_info : ArrayRef`
Auguments for [DBI](https://metacpan.org/pod/DBI)'s connect method.
- on\_connect\_do : CodeRef|ArrayRef\[Str\]|Str
- on\_disconnect\_do : CodeRef|ArrayRef\[Str\]|Str
Execute SQL or CodeRef when connected/disconnected.
- trace\_query : Bool
Enables to inject a caller information as SQL comment.
SEE ALSO: [DBIx::Handler](https://metacpan.org/pod/DBIx::Handler)
- trace\_ignore\_if : CodeRef
Ignore to inject the SQL comment when trace\_ignore\_if's return value is true.
SEE ALSO: [DBIx::Handler](https://metacpan.org/pod/DBIx::Handler)
- `suppress_row_objects : Bool`
If this option is true, no create row objects.
Aniki's methods returns hash reference instead of row object.
- `suppress_result_objects : Bool`
If this option is true, no create result objects.
Aniki's methods returns array reference instead of result object.
## INSTANCE METHODS
### `select($table_name, \%where, \%opt)`
Execute `SELECT` query by generated SQL, and returns result object.
```perl
my $result = $db->select(foo => { id => 1 }, { limit => 1 });
# stmt: SELECT FROM foo WHERE id = ? LIMIT 1
# bind: [1]
```
#### Options
There are the options of `SELECT` query.
See also [SQL::Maker](https://metacpan.org/pod/SQL::Maker#opt).
And you can use there options:
- `suppress_row_objects : Bool`
If this option is true, no create row objects.
This methods returns hash reference instead of row object.
- `suppress_result_objects : Bool`
If this option is true, no create result objects.
This method returns array reference instead of result object.
- `columns : ArrayRef[Str]`
List for retrieving columns from database.
- `prefetch : ArrayRef|HashRef`
Pre-fetch specified related rows.
See also ["RELATIONSHIP"](#relationship) section.
### `select_named($sql, \%bind, \%opt)`
### `select_by_sql($sql, \@bind, \%opt)`
Execute `SELECT` query by specified SQL, and returns result object.
```perl
my $result = $db->select_by_sql('SELECT FROM foo WHERE id = ? LIMIT 1', [1]);
# stmt: SELECT FROM foo WHERE id = ? LIMIT 1
# bind: [1]
```
#### Options
You can use there options:
- `table_name: Str`
This is table name using row/result class guessing.
- `columns: ArrayRef[Str]`
List for retrieving columns from database.
- `prefetch: ArrayRef|HashRef`
Pre-fetch specified related rows.
See also ["RELATIONSHIP"](#relationship) section.
### `insert($table_name, \%values, \%opt)`
Execute `INSERT INTO` query.
```perl
$db->insert(foo => { bar => 1 });
# stmt: INSERT INTO foo (bar) VALUES (?)
# bind: [1]
```
### `insert_and_fetch_id($table_name, \%values, \%opt)`
Execute `INSERT INTO` query, and returns `last_insert_id`.
```perl
my $id = $db->insert_and_fetch_id(foo => { bar => 1 });
# stmt: INSERT INTO foo (bar) VALUES (?)
# bind: [1]
```
### `insert_and_fetch_row($table_name, \%values, \%opt)`
Execute `INSERT INTO` query, and `SELECT` it, and returns row object.
```perl
my $row = $db->insert_and_fetch_row(foo => { bar => 1 });
# stmt: INSERT INTO foo (bar) VALUES (?)
# bind: [1]
```
### `insert_and_emulate_row($table_name, \%values, \%opt)`
Execute `INSERT INTO` query, and returns row object created by `$row` and schema definition.
```perl
my $row = $db->insert_and_fetch_row(foo => { bar => 1 });
# stmt: INSERT INTO foo (bar) VALUES (?)
# bind: [1]
```
This method is faster than `insert_and_fetch_row`.
#### WARNING
If you use SQL `TRIGGER` or dynamic default value, this method don't return the correct value, maybe.
In this case, you should use `insert_and_fetch_row` instead of this method.
### `insert_on_duplicate($table_name, \%insert, \%update)`
Execute `INSERT ... ON DUPLICATE KEY UPDATE` query for MySQL.
```perl
my $row = $db->insert_on_duplicate(foo => { bar => 1 }, { bar => \'VALUE(bar) + 1' });
# stmt: INSERT INTO foo (bar) VALUES (?) ON DUPLICATE KEY UPDATE bar = VALUE(bar) + 1
# bind: [1]
```
SEE ALSO: [INSERT ... ON DUPLICATE KEY UPDATE Syntax](https://dev.mysql.com/doc/refman/5.6/en/insert-on-duplicate.html)
### `insert_multi($table_name, \@values, \%opts)`
Execute `INSERT INTO ... (...) VALUES (...), (...), ...` query for MySQL.
Insert multiple rows at once.
```perl
my $row = $db->insert_multi(foo => [{ bar => 1 }, { bar => 2 }, { bar => 3 }]);
# stmt: INSERT INTO foo (bar) VALUES (?),(?),(?)
# bind: [1, 2, 3]
```
SEE ALSO: [INSERT Syntax](https://dev.mysql.com/doc/refman/5.6/en/insert.html)
### `update($table_name, \%set, \%where)`
Execute `UPDATE` query, and returns changed rows count.
```perl
my $count = $db->update(foo => { bar => 2 }, { id => 1 });
# stmt: UPDATE foo SET bar = ? WHERE id = ?
# bind: [2, 1]
```
### `update($row, \%set)`
Execute `UPDATE` query, and returns changed rows count.
```perl
my $row = $db->select(foo => { id => 1 }, { limit => 1 })->first;
my $count = $db->update($row => { bar => 2 });
# stmt: UPDATE foo SET bar = ? WHERE id = ?
# bind: [2, 1]
```
### `update_and_fetch_row($row, \%set)`
Execute `UPDATE` query, and `SELECT` it, and returns row object.
```perl
my $row = $db->select(foo => { id => 1 }, { limit => 1 })->first;
my $new_row = $db->update_and_fetch_row($row => { bar => 2 });
# stmt: UPDATE foo SET bar = ? WHERE id = ?
# bind: [2, 1]
```
### `update_and_emulate_row($row, \%set)`
Execute `UPDATE` query, and returns row object created by `$row` and `%set`.
```perl
my $row = $db->select(foo => { id => 1 }, { limit => 1 })->first;
my $new_row = $db->update_and_emulate_row($row => { bar => 2 });
# stmt: UPDATE foo SET bar = ? WHERE id = ?
# bind: [2, 1]
```
This method is faster than `update_and_fetch_row`.
#### WARNING
If you use SQL `TRIGGER` or `AutoCommit`, this method don't return the correct value, maybe.
In this case, you should use `update_and_fetch_row` instead of this method.
### `delete($table_name, \%where)`
Execute `DELETE` query, and returns changed rows count.
```perl
my $count = $db->delete(foo => { id => 1 });
# stmt: DELETE FROM foo WHERE id = ?
# bind: [1]
```
### `delete($row)`
Execute `DELETE` query, and returns changed rows count.
```perl
my $row = $db->select(foo => { id => 1 }, { limit => 1 })->first;
my $count = $db->delete($row);
# stmt: DELETE foo WHERE id = ?
# bind: [1]
```
## ACCESSORS
- `schema : Aniki::Schema`
- `filter : Aniki::Filter`
- `query_builder : Aniki::QueryBuilder`
- `root_row_class : Aniki::Row`
- `root_result_class : Aniki::Result`
- `connect_info : ArrayRef`
- `on_connect_do : CodeRef|ArrayRef[Str]|Str`
- `on_disconnect_do : CodeRef|ArrayRef[Str]|Str`
- `suppress_row_objects : Bool`
- `suppress_result_objects : Bool`
- `dbh : DBI::db`
- `handler : Aniki::Handler`
- `txn_manager : DBIx::TransactionManager`
# CONTRIBUTE
I need to support documentation and reviewing my english.
This module is developed on [Github](http://github.com/karupanerura/Aniki).
# LICENSE
Copyright (C) karupanerura.
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
# CONTRIBUTORS
- watanabe-yocihi
- Pine Mizune
- Syohei YOSHIDA
# AUTHOR
karupanerura <karupa@cpan.org>
( run in 0.750 second using v1.01-cache-2.11-cpan-2398b32b56e )