Shared HASHARRAY constant instead of {Slice=>{}}

databind
vitalif 2009-03-12 23:25:03 +00:00 committed by Vitaliy Filippov
parent c1efa68b98
commit 6a5b93ecd0
1 changed files with 13 additions and 4 deletions

View File

@ -3,9 +3,11 @@
package VMX::Common; package VMX::Common;
use utf8;
use strict; use strict;
use locale; use locale;
use utf8; use constant HASHARRAY => {Slice=>{}};
use Encode; use Encode;
use URI::Escape qw(!uri_escape); use URI::Escape qw(!uri_escape);
use Carp; use Carp;
@ -19,8 +21,9 @@ use I18N::Langinfo qw(langinfo CODESET);
require Exporter; require Exporter;
our @EXPORT = qw(HASHARRAY);
our @EXPORT_OK = qw( our @EXPORT_OK = qw(
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_hashref deleteall_hashref dumper_no_lf str2time callif urandom
normalize_url utf8on mysql2time mysqllocaltime normalize_url utf8on mysql2time mysqllocaltime
@ -42,6 +45,7 @@ sub import
my @args = @_; my @args = @_;
my $dbi_hacks = 0; my $dbi_hacks = 0;
my $uri_escape_hacks = 0; my $uri_escape_hacks = 0;
my $hasharray = 1;
foreach (@args) foreach (@args)
{ {
if ($_ eq 'dbi_hacks') if ($_ eq 'dbi_hacks')
@ -54,7 +58,12 @@ sub import
$_ = '!uri_escape_hacks'; $_ = '!uri_escape_hacks';
$uri_escape_hacks = 1; $uri_escape_hacks = 1;
} }
elsif ($_ eq '!HASHARRAY')
{
$hasharray = 0;
}
} }
push @args, 'HASHARRAY' if $hasharray;
if ($dbi_hacks) if ($dbi_hacks)
{ {
*DBI::_::st::fetchall_hashref = *VMX::Common::fetchall_hashref; *DBI::_::st::fetchall_hashref = *VMX::Common::fetchall_hashref;
@ -164,7 +173,7 @@ sub file_get_contents
} }
# изменённый вариант функции DBI::_::st::fetchall_hashref # изменённый вариант функции DBI::_::st::fetchall_hashref
# первая вещь - аналог fetchall_arrayref({Slice=>{}}), т.е. просто возвращает # первая вещь - аналог fetchall_arrayref(HASHARRAY), т.е. просто возвращает
# массив хешей при передаче в качестве $key_field ссылки на пустой массив или undef. # массив хешей при передаче в качестве $key_field ссылки на пустой массив или undef.
# вторая вещь - о которой все мы, пользователи MySQL, давно мечтали - возможность # вторая вещь - о которой все мы, пользователи MySQL, давно мечтали - возможность
# сделать SELECT t1.*, t2.*, t3.* и при этом успешно разделить поля таблиц, # сделать SELECT t1.*, t2.*, t3.* и при этом успешно разделить поля таблиц,
@ -389,7 +398,7 @@ sub insertall_hashref
# осуществляем reselect данных # осуществляем reselect данных
$sql = "SELECT $reselect FROM `$table` WHERE `ji`=? ORDER BY `jin` ASC"; $sql = "SELECT $reselect FROM `$table` WHERE `ji`=? ORDER BY `jin` ASC";
@bind = ($conn_id); @bind = ($conn_id);
my $resel = $dbh->selectall_arrayref($sql, {Slice=>{}}, @bind) || []; my $resel = $dbh->selectall_arrayref($sql, HASHARRAY, @bind) || [];
for (my $i = 0; $i < @$resel; $i++) for (my $i = 0; $i < @$resel; $i++)
{ {
$rows->[$i]->{$_} = $resel->[$i]->{$_} for keys %{$resel->[$i]}; $rows->[$i]->{$_} = $resel->[$i]->{$_} for keys %{$resel->[$i]};