VMX::Common::insertall_arrayref()
parent
590c0b48bd
commit
f45d829f1e
|
@ -27,7 +27,7 @@ our @EXPORT = qw(
|
||||||
our @EXPORT_OK = qw(
|
our @EXPORT_OK = qw(
|
||||||
HASHARRAY quotequote min max trim htmlspecialchars strip_tags strip_unsafe_tags
|
HASHARRAY quotequote min max trim htmlspecialchars strip_tags strip_unsafe_tags
|
||||||
file_get_contents dbi_hacks ar1el filemd5 mysql_quote updaterow_hashref
|
file_get_contents dbi_hacks ar1el filemd5 mysql_quote updaterow_hashref
|
||||||
insertall_hashref deleteall_hashref dumper_no_lf str2time callif urandom
|
insertall_arrayref insertall_hashref deleteall_hashref dumper_no_lf str2time callif urandom
|
||||||
normalize_url utf8on rfrom_to mysql2time mysqllocaltime resub requote
|
normalize_url utf8on rfrom_to mysql2time mysqllocaltime resub requote
|
||||||
hashmrg litsplit strip_tagspace timestamp
|
hashmrg litsplit strip_tagspace timestamp
|
||||||
);
|
);
|
||||||
|
@ -337,15 +337,17 @@ sub updaterow_hashref
|
||||||
return 0 unless
|
return 0 unless
|
||||||
$dbh && $table &&
|
$dbh && $table &&
|
||||||
$row && ref($row) eq 'HASH' && %$row &&
|
$row && ref($row) eq 'HASH' && %$row &&
|
||||||
$key && ref($key) eq 'HASH' && %$key;
|
$key && (ref($key) eq 'HASH' && %$key || $key eq '1');
|
||||||
my @f = keys %$row;
|
my @f = keys %$row;
|
||||||
my @k = keys %$key;
|
my @bind = @$row{@f};
|
||||||
my $sql =
|
my $sql = 'UPDATE `'.$table.'` SET '.join(', ', map { "`$_`=?" } @f);
|
||||||
'UPDATE `'.$table.'` SET '.
|
if ($key ne 1)
|
||||||
join(', ', map { "`$_`=?" } @f).
|
{
|
||||||
' WHERE '.join(' AND ', map { "`$_`=?" } @k);
|
my @k = keys %$key;
|
||||||
my @bind = (@$row{@f}, @$key{@k});
|
$sql .= ' WHERE '.join(' AND ', map { "`$_`=?" } @k);
|
||||||
return $dbh->do($sql, {}, @bind);
|
push @bind, @$key{@k};
|
||||||
|
}
|
||||||
|
return $dbh->do($sql, undef, @bind);
|
||||||
}
|
}
|
||||||
|
|
||||||
# Множественный UPDATE - обновить много строк @%$rows,
|
# Множественный UPDATE - обновить много строк @%$rows,
|
||||||
|
@ -358,7 +360,7 @@ sub updateall_hashref
|
||||||
join(",",("(".(join(",", ("?") x scalar(@f))).")") x scalar(@$rows)).
|
join(",",("(".(join(",", ("?") x scalar(@f))).")") x scalar(@$rows)).
|
||||||
" ON DUPLICATE KEY UPDATE ".join(',', map { "`$_`=VALUES(`$_`)" } @f);
|
" ON DUPLICATE KEY UPDATE ".join(',', map { "`$_`=VALUES(`$_`)" } @f);
|
||||||
my @bind = map { @$_{@f} } @$rows;
|
my @bind = map { @$_{@f} } @$rows;
|
||||||
return $dbh->do($sql, {}, @bind);
|
return $dbh->do($sql, undef, @bind);
|
||||||
}
|
}
|
||||||
|
|
||||||
# Удалить все строки, у которых значения полей с названиями ключей %$key
|
# Удалить все строки, у которых значения полей с названиями ключей %$key
|
||||||
|
@ -390,7 +392,7 @@ sub deleteall_hashref
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$sql = "DELETE FROM `$table` WHERE " . join " AND ", @$sql;
|
$sql = "DELETE FROM `$table` WHERE " . join " AND ", @$sql;
|
||||||
return $dbh->do($sql, {}, @bind);
|
return $dbh->do($sql, undef, @bind);
|
||||||
}
|
}
|
||||||
|
|
||||||
# Вставить набор записей $rows = [{},{},{},...] в таблицу $table
|
# Вставить набор записей $rows = [{},{},{},...] в таблицу $table
|
||||||
|
@ -401,7 +403,7 @@ sub insertall_hashref
|
||||||
{
|
{
|
||||||
my ($dbh, $table, $rows, $reselect, $replace) = @_;
|
my ($dbh, $table, $rows, $reselect, $replace) = @_;
|
||||||
return 0 unless
|
return 0 unless
|
||||||
$dbh && $table &&
|
$dbh && $table &&
|
||||||
$rows && ref($rows) eq 'ARRAY' && @$rows;
|
$rows && ref($rows) eq 'ARRAY' && @$rows;
|
||||||
my $conn_id = undef;
|
my $conn_id = undef;
|
||||||
if ($reselect)
|
if ($reselect)
|
||||||
|
@ -415,7 +417,7 @@ sub insertall_hashref
|
||||||
' INTO `'.$table.'` (`'.join('`,`',@f).'`) VALUES '.
|
' INTO `'.$table.'` (`'.join('`,`',@f).'`) VALUES '.
|
||||||
join(',',('('.(join(',', ('?') x scalar(@f))).')') x scalar(@$rows));
|
join(',',('('.(join(',', ('?') x scalar(@f))).')') x scalar(@$rows));
|
||||||
my @bind = map { @$_{@f} } @$rows;
|
my @bind = map { @$_{@f} } @$rows;
|
||||||
my $st = $dbh->do($sql, {}, @bind);
|
my $st = $dbh->do($sql, undef, @bind);
|
||||||
return $st if !$st || !$reselect;
|
return $st if !$st || !$reselect;
|
||||||
if (ref($reselect) eq 'ARRAY')
|
if (ref($reselect) eq 'ARRAY')
|
||||||
{
|
{
|
||||||
|
@ -434,10 +436,34 @@ sub insertall_hashref
|
||||||
$rows->[$i]->{$_} = $resel->[$i]->{$_} for keys %{$resel->[$i]};
|
$rows->[$i]->{$_} = $resel->[$i]->{$_} for keys %{$resel->[$i]};
|
||||||
}
|
}
|
||||||
$sql = "UPDATE `$table` SET `ji`=NULL, `jin`=NULL WHERE `ji`=?";
|
$sql = "UPDATE `$table` SET `ji`=NULL, `jin`=NULL WHERE `ji`=?";
|
||||||
$dbh->do($sql, {}, @bind);
|
$dbh->do($sql, undef, @bind);
|
||||||
return $st;
|
return $st;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# то же, но массив и без reselectов
|
||||||
|
sub insertall_arrayref
|
||||||
|
{
|
||||||
|
my ($dbh, $table, $key, $rows, $replace) = @_;
|
||||||
|
return 0 unless
|
||||||
|
$dbh && $table &&
|
||||||
|
$rows && ref($rows) eq 'ARRAY' && @$rows &&
|
||||||
|
$key && ref($key) eq 'ARRAY' && @$key;
|
||||||
|
my $sql = ($replace ? 'REPLACE' : 'INSERT').
|
||||||
|
' INTO `'.$table.'` (`'.join('`,`', @$key).'`) VALUES ';
|
||||||
|
my $bind;
|
||||||
|
if (ref $rows->[0])
|
||||||
|
{
|
||||||
|
$bind = [ map { @$_ } @$rows ];
|
||||||
|
$sql .= join(',', ('('.(join(',', ('?') x scalar(@$key))).')') x scalar(@$rows));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$bind = $rows;
|
||||||
|
$sql .= join(',', ('('.(join(',', ('?') x scalar(@$key))).')') x int(@$rows/@$key));
|
||||||
|
}
|
||||||
|
return $dbh->do($sql, undef, @$bind);
|
||||||
|
}
|
||||||
|
|
||||||
# вычисление MD5 хеша от файла
|
# вычисление MD5 хеша от файла
|
||||||
sub filemd5
|
sub filemd5
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue