Aion-Query
view release on metacpan or search on metacpan
Revision history for Perl extension Aion::Query
0.0.6 2024-07-07T12:38:14Z
- query_attach add empty array to attach row if not exists result to it
0.0.5 2024-07-07T12:32:27Z
- query_attach returns array or array_ref with it query results
0.0.4 2024-07-06T17:18:44Z
- add subroutine query_attach
- writes test-cases for subroutine query_slice
- requires license GPL_3 in cpanfile
0.0.3 2023-11-30T15:23:52Z
- add query param-masks :^x, :~x, and :.x for set typed value
- add x*>> :_ in query_prepare. This is inline map
0.0.2 2023-11-01T10:55:12Z
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
{one line to give the program's name and a brief idea of what it does.}
Copyright (C) {year} {name of author}
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
{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
```
i18n/Aion/Query.ru-en.po view on Meta::CPAN
msgid "ÐÑли нÑжен Ñ
ÐµÑ Ð²Ð¸Ð´Ð° иденÑиÑикаÑÐ¾Ñ â ÑÑÑока:"
msgstr "If you need a hash of the form identifier - string:"
msgid "ÐÑли Ð¾Ð´Ð½Ð¾Ð¼Ñ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑÑ ÑооÑвеÑÑÑвÑÐµÑ Ð½ÐµÑколÑко ÑÑÑок, Ñо логиÑно ÑобÑаÑÑ Ð¸Ñ
в маÑÑивÑ:"
msgstr "If several lines correspond to one identifier, then it is logical to collect them into arrays:"
msgid "ÐÑ Ð¸ ÑÑÑоки Ñо вÑеми полÑми:"
msgstr "Well, the lines with all the fields:"
msgid "## query_attach ($rows, $attach, $query, %kw)"
msgstr "## query_attach ($rows, $attach, $query, %kw)"
msgid "ÐодÑоединÑÐµÑ Ð² ÑезÑлÑÑÐ°Ñ Ð·Ð°Ð¿ÑоÑа ÑезÑлÑÑÐ°Ñ Ð´ÑÑгого запÑоÑа."
msgstr "Includes the result of another query into the result of a query."
msgid "`$attach` ÑодеÑÐ¶Ð¸Ñ ÑÑи клÑÑа ÑеÑез двоеÑоÑие: клÑÑ Ð´Ð»Ñ Ð¿ÑиÑоединÑемÑÑ
даннÑÑ
, ÑÑÐ¾Ð»Ð±ÐµÑ Ð¸Ð· `$rows` и ÑÑÐ¾Ð»Ð±ÐµÑ Ð¸Ð· `$query`. Ðо ÑÑолбÑам пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð¾Ð±...
msgstr "`$attach` contains three keys separated by a colon: the key for the data to be attached, a column from `$rows` and a column from `$query`. Rows are merged across columns."
msgid "ÐозвÑаÑÐ°ÐµÑ ÑÑнкÑÐ¸Ñ Ð¼Ð°ÑÑив Ñ ÑезÑлÑÑаÑом запÑоÑа (`$query`), в коÑоÑÑй можно пÑиаÑÑаÑиÑÑ ÐµÑÑ ÑÑо-Ñо."
msgstr "The function returns an array with the result of the query (`$query`), into which you can attach something else."
msgid "## query_col ($query, %params)"
msgstr "## query_col ($query, %params)"
msgid "ÐозвÑаÑÐ°ÐµÑ Ð¾Ð´Ð¸Ð½ ÑÑолбеÑ."
msgstr "Returns one column."
msgid "## query_row ($query, %params)"
msgstr "## query_row ($query, %params)"
lib/Aion/Query.md view on Meta::CPAN
{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
```
lib/Aion/Query.pm view on Meta::CPAN
else {
map { $_->{$key} => $_->{$val} } @$rows
}
}
# ÐодÑоединиÑÑ Ð² ÑезÑлÑÑÐ°Ñ Ð·Ð°Ð¿ÑоÑа ÑезÑлÑÑÐ°Ñ Ð´ÑÑгого запÑоÑа
#
# $authors = query "SELECT id, name FROM author";
# # $authors as [{id => 1, name => "..."}, ...];
#
# query_attach $authors => 'books:id:author_id' => "SELECT author_id, title FROM book"
#
sub query_attach {
my ($rows, $attach, $query, %kw) = @_;
($attach, my $key1, my $key2) = split /:/, $attach;
my %row1 = map { $_->{$attach} = []; ($_->{$key1} => $_) } @$rows;
my $rows2 = query $query, %kw;
for my $row2 (@$rows2) {
my $id = $row2->{$key2} // die "Not $key2 in query!";
my $row1 = $row1{$id} // die "Not $key1=$id in main rows!";
push @{$row1->{$attach}}, $row2;
}
wantarray? @$rows2: $rows2
}
# ÐÑбÑаÑÑ Ð¾Ð´Ð¸Ð½ колÑмн
#
# query_col "SELECT id FROM word WHERE word in (1,2,3)" -> [1,2,3]
#
sub query_col(@);
lib/Aion/Query.pm view on Meta::CPAN
{title => "Kiss in night", author_id => 1},
{title => "Mir", author_id => 1},
],
3 => [
{title => "Mips as cpu", author_id => 3}
],
};
\%author # --> $rows
=head2 query_attach ($rows, $attach, $query, %kw)
Includes the result of another query into the result of a query.
C<$attach> contains three keys separated by a colon: the key for the data to be attached, a column from C<$rows> and a column from C<$query>. Rows are merged across columns.
The function returns an array with the result of the query (C<$query>), into which you can attach something else.
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
=head2 query_col ($query, %params)
t/aion/query.t view on Meta::CPAN
{title => "Mir", author_id => 1},
],
3 => [
{title => "Mips as cpu", author_id => 3}
],
};
::is_deeply scalar do {\%author}, scalar do {$rows}, '\%author # --> $rows';
#
# ## query_attach ($rows, $attach, $query, %kw)
#
# ÐодÑоединÑÐµÑ Ð² ÑезÑлÑÑÐ°Ñ Ð·Ð°Ð¿ÑоÑа ÑезÑлÑÑÐ°Ñ Ð´ÑÑгого запÑоÑа.
#
# `$attach` ÑодеÑÐ¶Ð¸Ñ ÑÑи клÑÑа ÑеÑез двоеÑоÑие: клÑÑ Ð´Ð»Ñ Ð¿ÑиÑоединÑемÑÑ
даннÑÑ
, ÑÑÐ¾Ð»Ð±ÐµÑ Ð¸Ð· `$rows` и ÑÑÐ¾Ð»Ð±ÐµÑ Ð¸Ð· `$query`. Ðо ÑÑолбÑам пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð¾Ð±ÑеÐ...
#
# ÐозвÑаÑÐ°ÐµÑ ÑÑнкÑÐ¸Ñ Ð¼Ð°ÑÑив Ñ ÑезÑлÑÑаÑом запÑоÑа (`$query`), в коÑоÑÑй можно пÑиаÑÑаÑиÑÑ ÐµÑÑ ÑÑо-Ñо.
#
done_testing; }; subtest 'query_attach ($rows, $attach, $query, %kw)' => sub {
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},
];
::is_deeply scalar do {$authors}, scalar do {$res}, '$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},
]},
];
::is_deeply scalar do {$authors}, scalar do {$attaches}, '$authors # --> $attaches';
my $books = [
{title => "Kiss in night", author_id => 1},
{title => "Mips as cpu", author_id => 3},
{title => "Mir", author_id => 1},
];
::is_deeply scalar do {\@books}, scalar do {$books}, '\@books # --> $books';
#
( run in 0.777 second using v1.01-cache-2.11-cpan-e1769b4cff6 )