Aion-Query
view release on metacpan or search on metacpan
lib/Aion/Query.md view on Meta::CPAN
query_scalar "SELECT count(*) FROM author" # -> 2
my @rows = query "SELECT *
FROM author
WHERE 1
if_name>> AND name like :name
",
if_name => Aion::Query::BQ == 0,
name => "P%",
;
\@rows # --> [{id => 1, name => "Pushkin A.S."}, {id => 2, name => "Pushkin A."}]
$Aion::Query::DEBUG[1] # => query: INSERT INTO author (name) VALUES ('Pushkin A.S.')
```
# DESCRIPTION
`Aion::Query` позволÑÐµÑ ÑÑÑоиÑÑ SQL-запÑÐ¾Ñ Ð¸ÑполÑзÑÑ Ð¿ÑоÑÑой меÑ
анизм Ñаблонов.
ÐбÑÑно SQL-запÑоÑÑ ÑÑÑоÑÑÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑÑловий, ÑÑо нагÑÑÐ¶Ð°ÐµÑ ÐºÐ¾Ð´.
ÐÑоÑÐ°Ñ Ð¿Ñоблема â ÑазмеÑение Ñимволов Юникода в однобайÑовÑÑ
кодиÑовкаÑ
, ÑÑо ÑменÑÑÐ°ÐµÑ ÑÐ°Ð·Ð¼ÐµÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
. Ðока пÑоблема ÑеÑена ÑолÑко...
# SUBROUTINES
## query ($query, %params)
ÐÑедоÑÑавлÑÐµÑ SQL-запÑоÑÑ (DCL, DDL, DQL и DML) к СУÐÐ Ñ ÐºÐ²Ð¾ÑиÑованием паÑамеÑÑов.
```perl
query "SELECT * FROM author WHERE name=:name", name => 'Pushkin A.S.' # --> [{id=>1, name=>"Pushkin A.S."}]
```
## LAST_INSERT_ID ()
ÐозвÑаÑÐ°ÐµÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑÐ¾Ñ Ð¿Ð¾Ñледней вÑÑавки.
```perl
query "INSERT INTO author (name) VALUES (:name)", name => "Alice" # -> 1
LAST_INSERT_ID # -> 3
```
## quote ($scalar)
ÐвоÑиÑÑÐµÑ ÑкалÑÑ Ð´Ð»Ñ SQL-запÑоÑа.
```perl
quote undef # => NULL
quote "abc" # => 'abc'
quote 123 # => 123
quote "123" # => '123'
quote(0+"123") # => 123
quote(123 . "") # => '123'
quote 123.0 # => 123.0
quote(0.0+"126") # => 126
quote("127"+0.0) # => 127
quote("128"-0.0) # => 128
quote("129"+1.e-100) # => 129.0
# use for insert formula: SELECT :x as summ â x => \"xyz + 123"
quote \"without quote" # => without quote
# use in: WHERE id in (:x)
quote [1,2,"5"] # => 1, 2, '5'
# use in: INSERT INTO author VALUES :x
quote [[1, 2], [3, "4"]] # => (1, 2), (3, '4')
# use in multiupdate: UPDATE author SET name=CASE id :x ELSE null END
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
quote {name => 'A.S.', id => 12} # => id = 12, name = 'A.S.'
[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` â плаваÑÑее.
```perl
query_prepare "INSERT author SET name IN (:name)", name => ["Alice", 1, 1.0] # => INSERT author SET name IN ('Alice', 1, 1.0)
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
$query # -> $res
```
## query_do ($query)
ÐÑполнÑÐµÑ Ð·Ð°Ð¿ÑÐ¾Ñ Ð¸ возвÑаÑÐ°ÐµÑ ÐµÐ³Ð¾ ÑезÑлÑÑаÑ.
```perl
query_do "SELECT count(*) as n FROM author" # --> [{n=>3}]
( run in 1.004 second using v1.01-cache-2.11-cpan-cd2fffc590a )