Aion-Query
view release on metacpan or search on metacpan
t/aion/query.t view on Meta::CPAN
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';
#
# ## query_col ($query, %params)
#
# ÐозвÑаÑÐ°ÐµÑ Ð¾Ð´Ð¸Ð½ ÑÑолбеÑ.
#
done_testing; }; subtest 'query_col ($query, %params)' => sub {
::is_deeply scalar do {query_col "SELECT name FROM author ORDER BY name"}, scalar do {["Alice", "Pushkin A.", "Pushkin A.S."]}, 'query_col "SELECT name FROM author ORDER BY name" # --> ["Alice", "Pushkin A.", "Pushkin A.S."]';
::like scalar do {eval {query_col "SELECT id, name FROM author"}; $@}, qr!Only one column is acceptable\!!, 'eval {query_col "SELECT id, name FROM author"}; $@ # ~> Only one column is acceptable!';
#
# ## query_row ($query, %params)
#
# ÐозвÑаÑÐ°ÐµÑ Ð¾Ð´Ð½Ñ ÑÑÑокÑ.
#
done_testing; }; subtest 'query_row ($query, %params)' => sub {
::is_deeply scalar do {query_row "SELECT name FROM author WHERE id=2"}, scalar do {{name => "Pushkin A."}}, '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";
::is scalar do {$id}, scalar do{2}, '$id # -> 2';
::is scalar do {$name}, "Pushkin A.", '$name # => Pushkin A.';
::like scalar do {eval { query_row "SELECT id, name FROM author" }; $@}, qr!A few lines\!!, 'eval { query_row "SELECT id, name FROM author" }; $@ # ~> A few lines!';
#
# ## query_row_ref ($query, %params)
#
# Ðак `query_row`, но вÑегда возвÑаÑÐ°ÐµÑ ÑкалÑÑ.
#
done_testing; }; subtest 'query_row_ref ($query, %params)' => sub {
my @x = query_row_ref "SELECT name FROM author WHERE id=2";
::is_deeply scalar do {\@x}, scalar do {[{name => "Pushkin A."}]}, '\@x # --> [{name => "Pushkin A."}]';
::like scalar do {eval {query_row_ref "SELECT name FROM author"}; $@}, qr!A few lines\!!, 'eval {query_row_ref "SELECT name FROM author"}; $@ # ~> A few lines!';
#
# ## query_scalar ($query, %params)
#
# ÐозвÑаÑÐ°ÐµÑ Ð¿ÐµÑвое знаÑение. ÐапÑÐ¾Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ возвÑаÑаÑÑ Ð¾Ð´Ð½Ñ ÑÑÑокÑ, инаÑе â вÑбÑаÑÑÐ²Ð°ÐµÑ Ð¸ÑклÑÑение.
#
done_testing; }; subtest 'query_scalar ($query, %params)' => sub {
::is scalar do {query_scalar "SELECT name FROM author WHERE id=2"}, "Pushkin A.", 'query_scalar "SELECT name FROM author WHERE id=2" # => Pushkin A.';
#
# ## make_query_for_order ($order, $next)
#
# Ð¡Ð¾Ð·Ð´Ð°ÐµÑ ÑÑловие запÑоÑа ÑÑÑаниÑÑ Ð½Ðµ по ÑмеÑениÑ, а по **пагинаÑии кÑÑÑоÑа**.
#
# ÐÐ»Ñ ÑÑого он полÑÑÐ°ÐµÑ `$order` SQL-запÑоÑа и `$next` â ÑÑÑÐ»ÐºÑ Ð½Ð° ÑледÑÑÑÑÑ ÑÑÑаниÑÑ.
#
done_testing; }; subtest 'make_query_for_order ($order, $next)' => sub {
my ($select, $where, $order_sel) = make_query_for_order "name DESC, id ASC", undef;
::is scalar do {$select}, "name || ',' || id", '$select # => name || \',\' || id';
::is scalar do {$where}, scalar do{1}, '$where # -> 1';
::is scalar do {$order_sel}, scalar do{undef}, '$order_sel # -> undef';
my @rows = query "SELECT $select as next FROM author WHERE $where LIMIT 2";
my $last = pop @rows;
($select, $where, $order_sel) = make_query_for_order "name DESC, id ASC", $last->{next};
::is scalar do {$select}, "name || ',' || id", '$select # => name || \',\' || id';
::is scalar do {$where}, "(name < 'Pushkin A.'\nOR name = 'Pushkin A.' AND id >= '2')", '$where # => (name < \'Pushkin A.\'\nOR name = \'Pushkin A.\' AND id >= \'2\')';
::is_deeply scalar do {$order_sel}, scalar do {[qw/name id/]}, '$order_sel # --> [qw/name id/]';
#
# СмоÑÑиÑе Ñакже:
#
# 1. Article [Paging pages on social networks
# ](https://habr.com/ru/articles/674714/).
# 2. [SQL::SimpleOps->SelectCursor](https://metacpan.org/dist/SQL-SimpleOps/view/lib/SQL/SimpleOps.pod#SelectCursor)
#
# ## settings ($id, $value)
#
# УÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð¸Ð»Ð¸ возвÑаÑÐ°ÐµÑ ÐºÐ»ÑÑ Ð¸Ð· ÑаблиÑÑ `settings`.
#
done_testing; }; subtest 'settings ($id, $value)' => sub {
query "CREATE TABLE settings(
id TEXT PRIMARY KEY,
value TEXT NOT NULL
)";
::is scalar do {settings "x1"}, scalar do{undef}, 'settings "x1" # -> undef';
::is scalar do {settings "x1", 10}, scalar do{1}, 'settings "x1", 10 # -> 1';
::is scalar do {settings "x1"}, scalar do{10}, 'settings "x1" # -> 10';
#
# ## load_by_id ($tab, $pk, $fields, @options)
#
# ÐозвÑаÑÐ°ÐµÑ Ð·Ð°Ð¿Ð¸ÑÑ Ð¿Ð¾ ее иденÑиÑикаÑоÑÑ.
#
done_testing; }; subtest 'load_by_id ($tab, $pk, $fields, @options)' => sub {
::is_deeply scalar do {load_by_id author => 2}, scalar do {{id=>2, name=>"Pushkin A."}}, 'load_by_id author => 2 # --> {id=>2, name=>"Pushkin A."}';
::is_deeply scalar do {load_by_id author => 2, "name as n"}, scalar do {{n=>"Pushkin A."}}, 'load_by_id author => 2, "name as n" # --> {n=>"Pushkin A."}';
::is_deeply scalar do {load_by_id author => 2, "id+:x as n", x => 10}, scalar do {{n=>12}}, 'load_by_id author => 2, "id+:x as n", x => 10 # --> {n=>12}';
#
# ## insert ($tab, %x)
#
# ÐобавлÑÐµÑ Ð·Ð°Ð¿Ð¸ÑÑ Ð¸ возвÑаÑÐ°ÐµÑ ÐµÐµ иденÑиÑикаÑоÑ.
#
done_testing; }; subtest 'insert ($tab, %x)' => sub {
::is scalar do {insert 'author', name => 'Masha'}, scalar do{4}, 'insert \'author\', name => \'Masha\' # -> 4';
#
# ## update ($tab, $id, %params)
#
# ÐбновлÑÐµÑ Ð·Ð°Ð¿Ð¸ÑÑ Ð¿Ð¾ ÐµÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑÑ Ð¸ возвÑаÑÐ°ÐµÑ ÑÑÐ¾Ñ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑ.
#
done_testing; }; subtest 'update ($tab, $id, %params)' => sub {
::is scalar do {update author => 3, name => 'Sasha'}, scalar do{3}, 'update author => 3, name => \'Sasha\' # -> 3';
::like scalar do {eval { update author => 5, name => 'Sasha' }; $@}, qr!Row author.id=5 is not\!!, 'eval { update author => 5, name => \'Sasha\' }; $@ # ~> Row author.id=5 is not!';
#
# ## remove ($tab, $id)
#
# УдалиÑÑ ÑÑÑÐ¾ÐºÑ Ð¸Ð· ÑаблиÑÑ Ð¿Ð¾ ÐµÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑÑ Ð¸ веÑнÑÑÑ ÑÑÐ¾Ñ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑ.
#
done_testing; }; subtest 'remove ($tab, $id)' => sub {
::is scalar do {remove "author", 4}, scalar do{4}, 'remove "author", 4 # -> 4';
::like scalar do {eval { remove author => 4 }; $@}, qr!Row author.id=4 does not exist\!!, 'eval { remove author => 4 }; $@ # ~> Row author.id=4 does not exist!';
( run in 1.274 second using v1.01-cache-2.11-cpan-39bf76dae61 )