Re: xpath() subquery for empty array - Mailing list pgsql-general

From Scott Bailey
Subject Re: xpath() subquery for empty array
Date
Msg-id 4A5A4417.10109@comcast.net
Whole thread Raw
In response to Re: xpath() subquery for empty array  (Sam Mason <sam@samason.me.uk>)
Responses Re: xpath() subquery for empty array
List pgsql-general
Sam Mason wrote:
> On Sun, Jul 12, 2009 at 06:41:57PM +0100, Roy Walter wrote:
>> Scott Bailey wrote:
>>> Roy Walter wrote:
>>>> How do I test for an empty array in postgres?
>>> WHERE x != array[]::xml[]
>>>
>>>
>> Thanks Scott but that throws up a syntax error (at the closing bracket
>> of array[]):
>>
>>    ERROR:  syntax error at or near "]"
>>    LINE 3: AS x FROM docs) AS y WHERE x != array[]::xml[]
>
> Even if that syntax was correct it wouldn't work, xml values don't have
> an equality operator defined for them.  I've normally tested the array
> size to figure out when they're empty, something like:
>
>   array_upper($1,1) > 0
>
> However, I've just noticed that this returns NULL rather than zero as
> I was expecting for an empty array (i.e. the literal '{}'). It also
> doesn't seem to do useful things if you're using unusual bounds on your
> array.
>
> Bah, the semantics of arrays in PG always seem over-complicated to me!

This worked on both 8.3 and 8.4

SELECT *
FROM (
   VALUES( '{}'::_xml),('{<root/>}'::_xml)
) sub
WHERE array_upper(column1, 1) > 0Sam Mason <sam@samason.me.uk>


And as Sam noted, array_upper needs to return null if the array is empty
because 0 and -1 can be valid indexes for arrays in postgres.

pgsql-general by date:

Previous
From: Scott Bailey
Date:
Subject: Re: Postgresql databases as a web service
Next
From: Roy Walter
Date:
Subject: Re: xpath() subquery for empty array