Обсуждение: PostgreSQL arrays and DBD

Поиск
Список
Период
Сортировка

PostgreSQL arrays and DBD

От
"Александр Чешев"
Дата:
<div dir="ltr"><div class="ArwC7c ckChnd" id=":1kp"><div dir="ltr"><span style="font-family: courier
new,monospace;">Hello.</span><brstyle="font-family: courier new,monospace;" /><br style="font-family: courier
new,monospace;"/><span style="font-family: courier new,monospace;">I create a table:</span><br style="font-family:
couriernew,monospace;" /><br style="font-family: courier new,monospace;" /><span style="font-family: courier
new,monospace;">CREATETABLE groups (</span><br style="font-family: courier new,monospace;" /><span style="font-family:
couriernew,monospace;">  group_id serial PRIMARY KEY,</span><br style="font-family: courier new,monospace;" /><span
style="font-family:courier new,monospace;">  name varchar(64) UNIQUE NOT NULL,</span><br style="font-family: courier
new,monospace;"/><span style="font-family: courier new,monospace;">  guests integer[] DEFAULT '{}'</span><br
style="font-family:courier new,monospace;" /><span style="font-family: courier new,monospace;">)</span><br
style="font-family:courier new,monospace;" /><br style="font-family: courier new,monospace;" /><span
style="font-family:courier new,monospace;">I add a new record to the table:</span><br style="font-family: courier
new,monospace;"/><br style="font-family: courier new,monospace;" /><span style="font-family: courier
new,monospace;">INSERTINTO groups (name) VALUES ('My friends');</span><br style="font-family: courier new,monospace;"
/><brstyle="font-family: courier new,monospace;" /><span style="font-family: courier new,monospace;">Now the table
contains1 record:</span><br style="font-family: courier new,monospace;" /><br style="font-family: courier
new,monospace;"/><span style="font-family: courier new,monospace;">| group_id |    name    | guests</span><br
style="font-family:courier new,monospace;" /><span style="font-family: courier
new,monospace;">+----------+------------+--------</span><brstyle="font-family: courier new,monospace;" /><span
style="font-family:courier new,monospace;">|        1 | My friends | {}</span><span style="font-family: courier
new,monospace;"></span><brstyle="font-family: courier new,monospace;" /><br style="font-family: courier new,monospace;"
/><spanstyle="font-family: courier new,monospace;">I read the new record from the table using DBI:</span><br
style="font-family:courier new,monospace;" /><br style="font-family: courier new,monospace;" /><span
style="font-family:courier new,monospace;">my $sth = $dbh->prepare(qq/SELECT * FROM groups/);</span><br
style="font-family:courier new,monospace;" /><span style="font-family: courier
new,monospace;">$sth->execute();</span><brstyle="font-family: courier new,monospace;" /><span style="font-family:
couriernew,monospace;">my (@guests, $group);</span><br style="font-family: courier new,monospace;" /><span
style="font-family:courier new,monospace;">push(@guests, $group) while $group = $sth->fetchrow_hashref(); # Line
4</span><brstyle="font-family: courier new,monospace;" /><span style="font-family: courier new,monospace;">print
$guests[0]->{guests}->[0];# Why ({group_id=>1, name=>'My friends', </span><b style="font-family: courier
new,monospace;">guests=>[0]</b><spanstyle="font-family: courier new,monospace;">}) ?</span><br style="font-family:
couriernew,monospace;" /><br style="font-family: courier new,monospace;" /><span style="font-family: courier
new,monospace;">Outputof the script:</span><br style="font-family: courier new,monospace;" /><br style="font-family:
couriernew,monospace;" /><span style="font-family: courier new,monospace;">Argument "" isn't numeric in null operation
at./guestmanager.pl line 4</span><br style="font-family: courier new,monospace;" /><b style="font-family: courier
new,monospace;">0</b><brstyle="font-family: courier new,monospace;" /><br style="font-family: courier new,monospace;"
/><spanstyle="font-family: courier new,monospace;">DBD should return a reference to an empty array. But DBD returned
thereference to the array containing 1 element (0). How can I have a different result:</span><br style="font-family:
couriernew,monospace;" /><br style="font-family: courier new,monospace;" /><span style="font-family: courier
new,monospace;">({group_id=>1,name=>'My friends', </span><b style="font-family: courier
new,monospace;">guests=>[]</b><spanstyle="font-family: courier new,monospace;">})</span><br style="font-family:
couriernew,monospace;" /><br style="font-family: courier new,monospace;" /><span style="font-family: courier
new,monospace;">PS</span><brstyle="font-family: courier new,monospace;" /><span style="font-family: courier
new,monospace;">Versionof DBD::Pg is 2.9.0 .</span></div></div></div> 

Re: PostgreSQL arrays and DBD

От
Decibel!
Дата:
Don't know the answer, but I'm betting that Dave does :)

On Aug 14, 2008, at 3:31 AM, Александр Чешев wrote:
> I create a table:
>
> CREATE TABLE groups (
>   group_id serial PRIMARY KEY,
>   name varchar(64) UNIQUE NOT NULL,
>   guests integer[] DEFAULT '{}'
> )
>
> I add a new record to the table:
>
> INSERT INTO groups (name) VALUES ('My friends');
>
> Now the table contains 1 record:
>
> | group_id |    name    | guests
> +----------+------------+--------
> |        1 | My friends | {}
>
> I read the new record from the table using DBI:
>
> my $sth = $dbh->prepare(qq/SELECT * FROM groups/);
> $sth->execute();
> my (@guests, $group);
> push(@guests, $group) while $group = $sth->fetchrow_hashref(); #
> Line 4
> print $guests[0]->{guests}->[0]; # Why ({group_id=>1, name=>'My
> friends', guests=>[0]}) ?
>
> Output of the script:
>
> Argument "" isn't numeric in null operation at ./guestmanager.pl
> line 4
> 0
>
> DBD should return a reference to an empty array. But DBD returned
> the reference to the array containing 1 element (0). How can I have
> a different result:
>
> ({group_id=>1, name=>'My friends', guests=>[]})
>
> PS
> Version of DBD::Pg is 2.9.0 .

--
Decibel!, aka Jim C. Nasby, Database Architect  decibel@decibel.org
Give your computer some brain candy! www.distributed.net Team #1828



Re: PostgreSQL arrays and DBD

От
"Greg Sabino Mullane"
Дата:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: RIPEMD160


> DBD should return a reference to an empty array. But DBD returned
> the reference to the array containing 1 element (0). How can I have
> a different result:

This was fixed: version 2.9.2 of DBD::Pg should behave as you expect
with regards to empty integer arrays. This was asked and answered
on the dbi list, but no ccs went to the interfaces list - sorry about that.

http://www.nntp.perl.org/group/perl.dbi.users/2008/08/msg33162.html


- --
Greg Sabino Mullane greg@turnstep.com
End Point Corporation
PGP Key: 0x14964AC8 200808221317
http://biglumber.com/x/web?pk=2529DF6AB8F79407E94445B4BC9B906714964AC8
-----BEGIN PGP SIGNATURE-----

iEYEAREDAAYFAkiu9NAACgkQvJuQZxSWSsiCpQCgnpwjoL8x937IT65cbl14zwb9
S94AnA4YBnjXGec7gnUum0ZSK/hIyHWn
=CXQx
-----END PGP SIGNATURE-----