Re: [BUGS] BUG #4921: ltree @> ltree[] operator shouldn't fail if ltree[] is empty

2010-02-24 Thread Tom Lane
I wrote:
>>> I can see two reasonable ways to address this:
>>> 
>>> * Change the ltree test to reject only ARR_NDIM > 1.
>>> 
>>> * Drop the ARR_NDIM check altogether, and let it search any sort of
>>> array.
>>> 
>>> I'm leaning to #2 myself.  However, there are probably other places with
>>> the same kind of issue, and in some of them it might make more sense to
>>> reject multidimensional arrays.

After looking closer, I see that there are seven different occurrences
of this coding pattern in contrib/ltree.  They all look to be sane for
zero-element arrays but I'm hesitant to decide that they should all
allow multidimensionals.  So I'll go with fix #1 instead.

I don't see any other trouble spots elsewhere.  There are other tests
that require ARR_NDIM() == 1, but they are in contexts that will reject
empty arrays anyway, so I don't feel a need to change them.

regards, tom lane

-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs


Re: [BUGS] BUG #4921: ltree @> ltree[] operator shouldn't fail if ltree[] is empty

2010-02-24 Thread Tom Lane
Bruce Momjian  writes:
> Tom Lane wrote:
>>> I can see two reasonable ways to address this:
>>> 
>>> * Change the ltree test to reject only ARR_NDIM > 1.
>>> 
>>> * Drop the ARR_NDIM check altogether, and let it search any sort of
>>> array.
>>> 
>>> I'm leaning to #2 myself.  However, there are probably other places with
>>> the same kind of issue, and in some of them it might make more sense to
>>> reject multidimensional arrays.
>> 
>> Thoughts?

> Do something.  ;-)  LOL

I'll drop the check then.

regards, tom lane

-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs


Re: [BUGS] BUG #4921: ltree @> ltree[] operator shouldn't fail if ltree[] is empty

2010-02-24 Thread Bruce Momjian
Tom Lane wrote:
> Bruce Momjian  writes:
> > Was this ever addressed?
> 
> No, it doesn't look like the code's been changed.  I was looking for
> some comments about which to do:
> 
> >> I can see two reasonable ways to address this:
> >> 
> >> * Change the ltree test to reject only ARR_NDIM > 1.
> >> 
> >> * Drop the ARR_NDIM check altogether, and let it search any sort of
> >> array.
> >> 
> >> I'm leaning to #2 myself.  However, there are probably other places with
> >> the same kind of issue, and in some of them it might make more sense to
> >> reject multidimensional arrays.
> 
> Thoughts?

Do something.  ;-)  LOL

-- 
  Bruce Momjian  http://momjian.us
  EnterpriseDB http://enterprisedb.com
  PG East:  http://www.enterprisedb.com/community/nav-pg-east-2010.do
  + If your life is a hard drive, Christ can be your backup. +

-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs


Re: [BUGS] BUG #4921: ltree @> ltree[] operator shouldn't fail if ltree[] is empty

2010-02-24 Thread Tom Lane
Bruce Momjian  writes:
> Was this ever addressed?

No, it doesn't look like the code's been changed.  I was looking for
some comments about which to do:

>> I can see two reasonable ways to address this:
>> 
>> * Change the ltree test to reject only ARR_NDIM > 1.
>> 
>> * Drop the ARR_NDIM check altogether, and let it search any sort of
>> array.
>> 
>> I'm leaning to #2 myself.  However, there are probably other places with
>> the same kind of issue, and in some of them it might make more sense to
>> reject multidimensional arrays.

Thoughts?

regards, tom lane

-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs


Re: [BUGS] BUG #4921: ltree @> ltree[] operator shouldn't fail if ltree[] is empty

2010-02-24 Thread Bruce Momjian

Was this ever addressed?

---

Tom Lane wrote:
> "Alan Pinstein"  writes:
> >   ... hierarchy @> ARRAY(select hierarchy from
> > feature where description ilike '%pool%this%') ...
> 
> > EXPECTED BEHAVIOR:
> > - return 0 rows
> 
> > ACTUAL BEHAVIOR:
> > ERROR:  array must be one-dimensional
> > Possibly from:
> > https://projects.commandprompt.com/public/replicator/browser/trunk/contrib/ltree/_ltree_op.c?rev=1905
> >  line 46
> 
> > NOTES:
> > This query worked in 8.1.x and started failing in 8.3.6 (only 2 versions I
> > tested).
> 
> Hmm.  ltree has always had that ARR_NDIM == 1 check.  I think the reason
> the behavior changed is that ARRAY(SELECT ...) used to return a NULL for
> zero rows, and now it returns an empty (zero-dimensional) array.
> 
> I can see two reasonable ways to address this:
> 
> * Change the ltree test to reject only ARR_NDIM > 1.
> 
> * Drop the ARR_NDIM check altogether, and let it search any sort of
> array.
> 
> I'm leaning to #2 myself.  However, there are probably other places with
> the same kind of issue, and in some of them it might make more sense to
> reject multidimensional arrays.
> 
>   regards, tom lane
> 
> -- 
> Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-bugs

-- 
  Bruce Momjian  http://momjian.us
  EnterpriseDB http://enterprisedb.com
  PG East:  http://www.enterprisedb.com/community/nav-pg-east-2010.do
  + If your life is a hard drive, Christ can be your backup. +

-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs


Re: [BUGS] BUG #4921: ltree @> ltree[] operator shouldn't fail if ltree[] is empty

2009-07-15 Thread Alan Pinstein

Yeah, and I don't feel I know enough to answer that.

Thanks for responding! Good luck with your decision.

Regards,

Alan

On Jul 15, 2009, at 11:33 AM, Tom Lane wrote:


Alan Pinstein  writes:

The real solution might be to just convert a 0-dim array into "null"
or equivalent and still assert error if dims >= 2?


That's my alternative #1.  The question is whether there's any real
point in rejecting multi-dimensional arrays here, rather than just
searching all the elements regardless of the array shape.

regards, tom lane



--
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs


Re: [BUGS] BUG #4921: ltree @> ltree[] operator shouldn't fail if ltree[] is empty

2009-07-15 Thread Alan Pinstein
Hmm.  ltree has always had that ARR_NDIM == 1 check.  I think the  
reason
the behavior changed is that ARRAY(SELECT ...) used to return a NULL  
for

zero rows, and now it returns an empty (zero-dimensional) array.


Ah OK that makes sense, especially given the "hack" I used as a  
workaround, which effectively emulates the old behavior.



I can see two reasonable ways to address this:

* Change the ltree test to reject only ARR_NDIM > 1.

* Drop the ARR_NDIM check altogether, and let it search any sort of
array.

I'm leaning to #2 myself.  However, there are probably other places  
with
the same kind of issue, and in some of them it might make more sense  
to

reject multidimensional arrays.


There may be a third option; it seems to me that the assert is there  
more to stop unexpected behavior with arrays of dims of 2 or more.


The real solution might be to just convert a 0-dim array into "null"  
or equivalent and still assert error if dims >= 2?


Alan

--
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs


Re: [BUGS] BUG #4921: ltree @> ltree[] operator shouldn't fail if ltree[] is empty

2009-07-15 Thread Tom Lane
Alan Pinstein  writes:
> The real solution might be to just convert a 0-dim array into "null"  
> or equivalent and still assert error if dims >= 2?

That's my alternative #1.  The question is whether there's any real
point in rejecting multi-dimensional arrays here, rather than just
searching all the elements regardless of the array shape.

regards, tom lane

-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs


Re: [BUGS] BUG #4921: ltree @> ltree[] operator shouldn't fail if ltree[] is empty

2009-07-15 Thread Tom Lane
"Alan Pinstein"  writes:
>   ... hierarchy @> ARRAY(select hierarchy from
> feature where description ilike '%pool%this%') ...

> EXPECTED BEHAVIOR:
> - return 0 rows

> ACTUAL BEHAVIOR:
> ERROR:  array must be one-dimensional
> Possibly from:
> https://projects.commandprompt.com/public/replicator/browser/trunk/contrib/ltree/_ltree_op.c?rev=1905
>  line 46

> NOTES:
> This query worked in 8.1.x and started failing in 8.3.6 (only 2 versions I
> tested).

Hmm.  ltree has always had that ARR_NDIM == 1 check.  I think the reason
the behavior changed is that ARRAY(SELECT ...) used to return a NULL for
zero rows, and now it returns an empty (zero-dimensional) array.

I can see two reasonable ways to address this:

* Change the ltree test to reject only ARR_NDIM > 1.

* Drop the ARR_NDIM check altogether, and let it search any sort of
array.

I'm leaning to #2 myself.  However, there are probably other places with
the same kind of issue, and in some of them it might make more sense to
reject multidimensional arrays.

regards, tom lane

-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs


[BUGS] BUG #4921: ltree @> ltree[] operator shouldn't fail if ltree[] is empty

2009-07-15 Thread Alan Pinstein

The following bug has been logged online:

Bug reference:  4921
Logged by:  Alan Pinstein
Email address:  apinst...@mac.com
PostgreSQL version: 8.3.6
Operating system:   linux/centos 5.3
Description:ltree @> ltree[] operator shouldn't fail if ltree[] is
empty
Details: 

The following query:

select
   
feature_id,hierarchy,description,category,ok_community,ok_property,ok_land,o
k_structure,ok_level,ok_room,
(select count(*) from feature where f.hierarchy =
subpath(hierarchy,0,-1) and ok_property = true) as count
from
feature f
where
ok_property = true and hierarchy @> ARRAY(select hierarchy from
feature where description ilike '%pool%this%') and nlevel(hierarchy) = 1
 order by hierarchy asc

NOTES:
- hierarchy is an ltree in the feature table
- this query finds all root items in tree which contain any nodes whose
description matches "%pool%this%"
- the subquery returns 0 rows (there are no matching items in the error case
being reported)

EXPECTED BEHAVIOR:
- return 0 rows

ACTUAL BEHAVIOR:
ERROR:  array must be one-dimensional
Possibly from:
https://projects.commandprompt.com/public/replicator/browser/trunk/contrib/l
tree/_ltree_op.c?rev=1905 line 46

NOTES:
This query worked in 8.1.x and started failing in 8.3.6 (only 2 versions I
tested).
I was able to hack around the issue with:

... hierarchy @> nullif(ARRAY(select hierarchy from feature where
description ilike '%pool%'),'{}') ...

Thank you very much for ltree, it rocks.

Feel free to contact me if you have further questions.

Alan

-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs