Aion-Query
view release on metacpan or search on metacpan
lib/Aion/Query.md view on Meta::CPAN
\%author # --> {"Pushkin A.S." => 1, "Pushkin A." => 2, "Alice" => 3}
```
ÐÑли нÑжен Ñ
ÐµÑ Ð²Ð¸Ð´Ð° иденÑиÑикаÑÐ¾Ñ â ÑÑÑока:
```perl
my %author = query_slice id => {}, "SELECT id, name FROM author";
my $rows = {
1 => {name => "Pushkin A.S.", id => 1},
2 => {name => "Pushkin A.", id => 2},
3 => {name => "Alice", id => 3},
};
\%author # --> $rows
```
ÐÑли Ð¾Ð´Ð½Ð¾Ð¼Ñ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑÑ ÑооÑвеÑÑÑвÑÐµÑ Ð½ÐµÑколÑко ÑÑÑок, Ñо логиÑно ÑобÑаÑÑ Ð¸Ñ
в маÑÑивÑ:
```perl
query "CREATE TABLE book (
id SERIAL PRIMARY KEY,
author_id INT NOT NULL REFERENCES author(id),
title TEXT NOT NULL
)";
stores book => [
{author_id => 1, title => "Mir"},
{author_id => 1, title => "Kiss in night"},
{author_id => 3, title => "Mips as cpu"},
];
my %author = query_slice author_id => ["title"], "SELECT author_id, title FROM book ORDER BY title";
my $rows = {
1 => ["Kiss in night", "Mir"],
3 => ["Mips as cpu"],
};
\%author # --> $rows
```
ÐÑ Ð¸ ÑÑÑоки Ñо вÑеми полÑми:
```perl
my %author = query_slice author_id => [], "SELECT author_id, title FROM book ORDER BY title";
my $rows = {
1 => [
{title => "Kiss in night", author_id => 1},
{title => "Mir", author_id => 1},
],
3 => [
{title => "Mips as cpu", author_id => 3}
],
};
\%author # --> $rows
```
## query_attach ($rows, $attach, $query, %kw)
ÐодÑоединÑÐµÑ Ð² ÑезÑлÑÑÐ°Ñ Ð·Ð°Ð¿ÑоÑа ÑезÑлÑÑÐ°Ñ Ð´ÑÑгого запÑоÑа.
`$attach` ÑодеÑÐ¶Ð¸Ñ ÑÑи клÑÑа ÑеÑез двоеÑоÑие: клÑÑ Ð´Ð»Ñ Ð¿ÑиÑоединÑемÑÑ
даннÑÑ
, ÑÑÐ¾Ð»Ð±ÐµÑ Ð¸Ð· `$rows` и ÑÑÐ¾Ð»Ð±ÐµÑ Ð¸Ð· `$query`. Ðо ÑÑолбÑам пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð¾Ð±ÑедÐ...
ÐозвÑаÑÐ°ÐµÑ ÑÑнкÑÐ¸Ñ Ð¼Ð°ÑÑив Ñ ÑезÑлÑÑаÑом запÑоÑа (`$query`), в коÑоÑÑй можно пÑиаÑÑаÑиÑÑ ÐµÑÑ ÑÑо-Ñо.
```perl
my $authors = query "SELECT id, name FROM author";
my $res = [
{name => "Pushkin A.S.", id => 1},
{name => "Pushkin A.", id => 2},
{name => "Alice", id => 3},
];
$authors # --> $res
my @books = query_attach $authors => "books:id:author_id" => "SELECT author_id, title FROM book ORDER BY title";
my $attaches = [
{name => "Pushkin A.S.", id => 1, books => [
{title => "Kiss in night", author_id => 1},
{title => "Mir", author_id => 1},
]},
{name => "Pushkin A.", id => 2, books => []},
{name => "Alice", id => 3, books => [
{title => "Mips as cpu", author_id => 3},
]},
];
$authors # --> $attaches
my $books = [
{title => "Kiss in night", author_id => 1},
{title => "Mips as cpu", author_id => 3},
{title => "Mir", author_id => 1},
];
\@books # --> $books
```
## query_col ($query, %params)
ÐозвÑаÑÐ°ÐµÑ Ð¾Ð´Ð¸Ð½ ÑÑолбеÑ.
```perl
query_col "SELECT name FROM author ORDER BY name" # --> ["Alice", "Pushkin A.", "Pushkin A.S."]
eval {query_col "SELECT id, name FROM author"}; $@ # ~> Only one column is acceptable!
```
## query_row ($query, %params)
ÐозвÑаÑÐ°ÐµÑ Ð¾Ð´Ð½Ñ ÑÑÑокÑ.
```perl
query_row "SELECT name FROM author WHERE id=2" # --> {name => "Pushkin A."}
my ($id, $name) = query_row "SELECT id, name FROM author WHERE id=2";
$id # -> 2
$name # => Pushkin A.
eval { query_row "SELECT id, name FROM author" }; $@ # ~> A few lines!
```
## query_row_ref ($query, %params)
Ðак `query_row`, но вÑегда возвÑаÑÐ°ÐµÑ ÑкалÑÑ.
```perl
my @x = query_row_ref "SELECT name FROM author WHERE id=2";
\@x # --> [{name => "Pushkin A."}]
eval {query_row_ref "SELECT name FROM author"}; $@ # ~> A few lines!
```
## query_scalar ($query, %params)
ÐозвÑаÑÐ°ÐµÑ Ð¿ÐµÑвое знаÑение. ÐапÑÐ¾Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ возвÑаÑаÑÑ Ð¾Ð´Ð½Ñ ÑÑÑокÑ, инаÑе â вÑбÑаÑÑÐ²Ð°ÐµÑ Ð¸ÑклÑÑение.
```perl
query_scalar "SELECT name FROM author WHERE id=2" # => Pushkin A.
```
## make_query_for_order ($order, $next)
Ð¡Ð¾Ð·Ð´Ð°ÐµÑ ÑÑловие запÑоÑа ÑÑÑаниÑÑ Ð½Ðµ по ÑмеÑениÑ, а по **пагинаÑии кÑÑÑоÑа**.
ÐÐ»Ñ ÑÑого он полÑÑÐ°ÐµÑ `$order` SQL-запÑоÑа и `$next` â ÑÑÑÐ»ÐºÑ Ð½Ð° ÑледÑÑÑÑÑ ÑÑÑаниÑÑ.
```perl
( run in 0.999 second using v1.01-cache-2.11-cpan-e1769b4cff6 )