Aion-Query
view release on metacpan or search on metacpan
t/aion/query.t view on Meta::CPAN
#
# # DESCRIPTION
#
# `Aion::Query` позволÑÐµÑ ÑÑÑоиÑÑ SQL-запÑÐ¾Ñ Ð¸ÑполÑзÑÑ Ð¿ÑоÑÑой меÑ
анизм Ñаблонов.
#
# ÐбÑÑно SQL-запÑоÑÑ ÑÑÑоÑÑÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑÑловий, ÑÑо нагÑÑÐ¶Ð°ÐµÑ ÐºÐ¾Ð´.
#
# ÐÑоÑÐ°Ñ Ð¿Ñоблема â ÑазмеÑение Ñимволов Юникода в однобайÑовÑÑ
кодиÑовкаÑ
, ÑÑо ÑменÑÑÐ°ÐµÑ ÑÐ°Ð·Ð¼ÐµÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
. Ðока пÑоблема ÑеÑена ÑолÑк...
#
# # SUBROUTINES
#
# ## query ($query, %params)
#
# ÐÑедоÑÑавлÑÐµÑ SQL-запÑоÑÑ (DCL, DDL, DQL и DML) к СУÐÐ Ñ ÐºÐ²Ð¾ÑиÑованием паÑамеÑÑов.
#
done_testing; }; subtest 'query ($query, %params)' => sub {
::is_deeply scalar do {query "SELECT * FROM author WHERE name=:name", name => 'Pushkin A.S.'}, scalar do {[{id=>1, name=>"Pushkin A.S."}]}, 'query "SELECT * FROM author WHERE name=:name", name => \'Pushkin A.S.\' # --> [{id=>1, name=>"Pushkin A.S."}]...
#
# ## LAST_INSERT_ID ()
#
# ÐозвÑаÑÐ°ÐµÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑÐ¾Ñ Ð¿Ð¾Ñледней вÑÑавки.
#
done_testing; }; subtest 'LAST_INSERT_ID ()' => sub {
::is scalar do {query "INSERT INTO author (name) VALUES (:name)", name => "Alice"}, scalar do{1}, 'query "INSERT INTO author (name) VALUES (:name)", name => "Alice" # -> 1';
::is scalar do {LAST_INSERT_ID}, scalar do{3}, 'LAST_INSERT_ID # -> 3';
#
# ## quote ($scalar)
#
# ÐвоÑиÑÑÐµÑ ÑкалÑÑ Ð´Ð»Ñ SQL-запÑоÑа.
#
done_testing; }; subtest 'quote ($scalar)' => sub {
::is scalar do {quote undef}, "NULL", 'quote undef # => NULL';
::is scalar do {quote "abc"}, "'abc'", 'quote "abc" # => \'abc\'';
::is scalar do {quote 123}, "123", 'quote 123 # => 123';
::is scalar do {quote "123"}, "'123'", 'quote "123" # => \'123\'';
::is scalar do {quote(0+"123")}, "123", 'quote(0+"123") # => 123';
::is scalar do {quote(123 . "")}, "'123'", 'quote(123 . "") # => \'123\'';
::is scalar do {quote 123.0}, "123.0", 'quote 123.0 # => 123.0';
::is scalar do {quote(0.0+"126")}, "126", 'quote(0.0+"126") # => 126';
::is scalar do {quote("127"+0.0)}, "127", 'quote("127"+0.0) # => 127';
::is scalar do {quote("128"-0.0)}, "128", 'quote("128"-0.0) # => 128';
::is scalar do {quote("129"+1.e-100)}, "129.0", 'quote("129"+1.e-100) # => 129.0';
# use for insert formula: SELECT :x as summ â x => \"xyz + 123"
::is scalar do {quote \"without quote"}, "without quote", 'quote \"without quote" # => without quote';
# use in: WHERE id in (:x)
::is scalar do {quote [1,2,"5"]}, "1, 2, '5'", 'quote [1,2,"5"] # => 1, 2, \'5\'';
# use in: INSERT INTO author VALUES :x
::is scalar do {quote [[1, 2], [3, "4"]]}, "(1, 2), (3, '4')", 'quote [[1, 2], [3, "4"]] # => (1, 2), (3, \'4\')';
# use in multiupdate: UPDATE author SET name=CASE id :x ELSE null END
::is scalar do {quote \[2=>'Pushkin A.', 1=>'Pushkin A.S.']}, "WHEN 2 THEN 'Pushkin A.' WHEN 1 THEN 'Pushkin A.S.'", 'quote \[2=>\'Pushkin A.\', 1=>\'Pushkin A.S.\'] # => WHEN 2 THEN \'Pushkin A.\' WHEN 1 THEN \'Pushkin A.S.\'';
# use for UPDATE SET :x or INSERT SET :x
::is scalar do {quote {name => 'A.S.', id => 12}}, "id = 12, name = 'A.S.'", 'quote {name => \'A.S.\', id => 12} # => id = 12, name = \'A.S.\'';
::is_deeply scalar do {[map quote, -6, "-6", 1.5, "1.5"]}, scalar do {[-6, "'-6'", 1.5, "'1.5'"]}, '[map quote, -6, "-6", 1.5, "1.5"] # --> [-6, "\'-6\'", 1.5, "\'1.5\'"]';
#
# ## query_prepare ($query, %param)
#
# ÐаменÑÐµÑ Ð¿Ð°ÑамеÑÑÑ (`%param`) в запÑоÑе (`$query`) и возвÑаÑÐ°ÐµÑ ÐµÐ³Ð¾. ÐаÑамеÑÑÑ Ð·Ð°ÐºÐ»ÑÑаÑÑÑÑ Ð² кавÑÑки ÑеÑез подпÑогÑÐ°Ð¼Ð¼Ñ `quote`.
#
# ÐаÑамеÑÑÑ Ð²Ð¸Ð´Ð° `:x` бÑдÑÑ ÐºÐ²Ð¾ÑиÑоваÑÑÑÑ Ñ ÑÑÑÑом Ñлагов ÑкалÑÑа, коÑоÑÑе ÑкажÑÑ, ÑÑо в нÑм наÑ
одиÑÑÑ: ÑÑÑока, Ñелое или ÑиÑло Ñ Ð¿Ð»Ð°Ð²Ð°ÑÑей Ð...
#
# ЧÑÐ¾Ð±Ñ Ñвно ÑказаÑÑ Ñип ÑкалÑÑа иÑполÑзÑйÑе пÑеÑикÑÑ: `:^x` â Ñелое, `:.x` â ÑÑÑока, `:~x` â плаваÑÑее.
#
done_testing; }; subtest 'query_prepare ($query, %param)' => sub {
::is scalar do {query_prepare "INSERT author SET name IN (:name)", name => ["Alice", 1, 1.0]}, "INSERT author SET name IN ('Alice', 1, 1.0)", 'query_prepare "INSERT author SET name IN (:name)", name => ["Alice", 1, 1.0] # => INSERT author SET name I...
::is scalar do {query_prepare ":x :^x :.x :~x", x => "10"}, "'10' 10 10.0 '10'", 'query_prepare ":x :^x :.x :~x", x => "10" # => \'10\' 10 10.0 \'10\'';
my $query = query_prepare "SELECT *
FROM author
words*>> JOIN word:_
WHERE 1
name>> AND name like :name
",
name => "%Alice%",
words => [1, 2, 3],
;
my $res = << 'END';
SELECT *
FROM author
JOIN word1
JOIN word2
JOIN word3
WHERE 1
AND name like '%Alice%'
END
::is scalar do {$query}, scalar do{$res}, '$query # -> $res';
#
# ## query_do ($query)
#
# ÐÑполнÑÐµÑ Ð·Ð°Ð¿ÑÐ¾Ñ Ð¸ возвÑаÑÐ°ÐµÑ ÐµÐ³Ð¾ ÑезÑлÑÑаÑ.
#
done_testing; }; subtest 'query_do ($query)' => sub {
::is_deeply scalar do {query_do "SELECT count(*) as n FROM author"}, scalar do {[{n=>3}]}, 'query_do "SELECT count(*) as n FROM author" # --> [{n=>3}]';
::is_deeply scalar do {query_do "SELECT id FROM author WHERE id=2"}, scalar do {[{id=>2}]}, 'query_do "SELECT id FROM author WHERE id=2" # --> [{id=>2}]';
#
# ## query_ref ($query, %kw)
#
# Ðак `query`, но вÑегда возвÑаÑÐ°ÐµÑ ÑкалÑÑ.
#
done_testing; }; subtest 'query_ref ($query, %kw)' => sub {
my @res = query_ref "SELECT id FROM author WHERE id=:id", id => 2;
::is_deeply scalar do {\@res}, scalar do {[[ {id=>2} ]]}, '\@res # --> [[ {id=>2} ]]';
#
# ## query_sth ($query, %kw)
#
# Ðак `query`, но возвÑаÑÐ°ÐµÑ `$sth`.
( run in 0.651 second using v1.01-cache-2.11-cpan-e1769b4cff6 )