Aion-Query
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
lib/Aion/Query.pm view on Meta::CPAN
#my $eq = $j == $#orders? "=": "";
if($j != $i) {
push @opr, "$order_sel[$j] = $next[$j]";
} elsif($j != $#orders) {
push @opr, "$order_sel[$j] $op[$j] $next[$j]";
} else {
push @opr, "$order_sel[$j] $op[$j]= $next[$j]";
}
}
push @whr, join " AND ", @opr;
}
my $where = join "\nOR ", map "$_", @whr;
return $select, "($where)", \@order_sel;
}
# УÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð¸Ð»Ð¸ возвÑаÑÐ°ÐµÑ ÐºÐ»ÑÑ Ð¸Ð· ÑаблиÑÑ settings
sub settings($;$) {
my ($id, $value) = @_;
if(@_ == 1) {
my $v = query_scalar("SELECT value FROM settings WHERE id=:id", id => $id);
return defined($v)? Aion::Format::Json::from_json($v): $v;
}
return remove("settings" => $id) if !defined $value;
store('settings',
id => $id,
value => Aion::Format::Json::to_json($value),
);
}
# возвÑаÑÐ°ÐµÑ Ð·Ð°Ð¿Ð¸ÑÑ Ð¿Ð¾ ÐµÑ pk
sub load_by_id(@) {
my ($tab, $pk, $fields, @options) = @_;
$fields //= "*";
query_row("SELECT $fields FROM $tab WHERE id=:id LIMIT 2", @options, id=>$pk)
}
# ÐÑовеÑÑÐµÑ Ð´ÑÐ°Ð¹Ð²ÐµÑ ÐРна имена
sub _check_drv {
my ($dbh, $drv) = @_;
$dbh->{Driver}{Name} =~ /^($drv)/ain
}
# ÐобавлÑÐµÑ Ð·Ð°Ð¿Ð¸ÑÑ Ð¸ возвÑаÑÐ°ÐµÑ ÐµÑ id
sub insert(@) {
my ($tab, %x) = @_;
if(_check_drv($base, "mysql|mariadb")) {
query "INSERT INTO $tab SET :set", set => \%x;
} else {
stores($tab, [\%x], insert => 1);
}
LAST_INSERT_ID()
}
# ÐбновлÑÐµÑ Ð·Ð°Ð¿Ð¸ÑÑ Ð¿Ð¾ ÐµÑ id
#
# update "tab" => 123, word => 123 -> 6
#
sub update(@) {
my ($tab, $id, %x) = @_;
die "Row $tab.id=$id is not!" if !query "UPDATE $tab SET :set WHERE id=:id", id=>$id, set => \%x;
$id
}
# УдалÑÐµÑ Ð·Ð°Ð¿Ð¸ÑÑ Ð¿Ð¾ ÐµÑ id
#
# remove "tab" => 123 -> 123
#
sub remove(@) {
my ($tab, $id) = @_;
die "Row $tab.id=$id does not exist!" if !query "DELETE FROM $tab WHERE id=:id", id=>$id;
$id
}
# ÐозвÑаÑÐ°ÐµÑ ÐºÐ»ÑÑ Ð¿Ð¾ дÑÑгим полÑм
#
# query_id "tab", word => 123 -> 6
#
sub query_id(@) {
my $tab = shift; my %row = @_;
my $pk = delete($row{'-pk'}) // "id";
my $fields = ref $pk? join(", ", @$pk): $pk;
my $where = join " AND ", map { my $v = $row{$_}; defined($v)? "$_ = ${\ quote($v) }": "$_ is NULL" } sort keys %row;
my $query = "SELECT $fields FROM $tab WHERE $where LIMIT 2";
my $v = query_row($query);
ref $pk? $v: $v->{$pk}
}
# UPSERT: ÑоÑ
ÑанÑÐµÑ Ð´Ð°Ð½Ð½Ñе (update или insert)
#
# stores "tab", [{word=>1}, {word=>2}];
#
sub stores(@);
sub stores(@) {
my ($tab, $rows, %opt) = @_;
my ($ignore, $insert) = delete @opt{qw/ignore insert/};
die "Keys ${\ join('', )}" if keys %opt;
my @keys = sort keys %{+{map %$_, @$rows}};
die "No fields in bean $tab!" if !@keys;
my $fields = join ", ", @keys;
my $values = join ",\n", map { my $row = $_; join "", "(", quote([map $row->{$_}, @keys]), ")" } @$rows;
if($insert) {
my $query = "INSERT INTO $tab ($fields) VALUES $values";
query_do($query);
}
elsif(_check_drv($base, "mysql|mariadb")) {
if($ignore) {
my $query = "INSERT IGNORE INTO $tab ($fields) VALUES $values";
view all matches for this distributionview release on metacpan - search on metacpan
( run in 0.977 second using v1.00-cache-2.02-grep-82fe00e-cpan-b63e86051f13 )