Thread: BUG #8934: value != ANY (uuid[]) AND expr does not work in all cases

BUG #8934: value != ANY (uuid[]) AND expr does not work in all cases

From
marcusoverheu@gmail.com
Date:
The following bug has been logged on the website:

Bug reference:      8934
Logged by:          Marcus Overheu
Email address:      marcusoverheu@gmail.com
PostgreSQL version: 9.2.4
Operating system:   ubuntu 12.04.3
Description:

if you have a table ala.
 create table uuidtest( aint integer, auuid uuid);

 insert into uuidtest VALUES (1, 'ab15ea27-8768-4cbe-a1fb-02a2a949a34d'),
(1, '1c9e9ce5-d4d8-4a14-9eaf-929f27e09ba2');

then
 select * from uuidtest where auuid = ANY
(ARRAY['1c9e9ce5-d4d8-4a14-9eaf-929f27e09ba2','ab15ea27-8768-4cbe-a1fb-02a2a949a34d']::uuid[])
and aint = 1;
return 2 result
which would mean that if using not in

select * from uuidtest where auuid != ANY
(ARRAY['1c9e9ce5-d4d8-4a14-9eaf-929f27e09ba2','ab15ea27-8768-4cbe-a1fb-02a2a949a34d']::uuid[])
and aint = 1;

would return zero, but it stills returns 2 results.

Re: BUG #8934: value != ANY (uuid[]) AND expr does not work in all cases

From
Alvaro Herrera
Date:
marcusoverheu@gmail.com escribió:

>  insert into uuidtest VALUES (1, 'ab15ea27-8768-4cbe-a1fb-02a2a949a34d'),
> (1, '1c9e9ce5-d4d8-4a14-9eaf-929f27e09ba2');
>
> then
>  select * from uuidtest where auuid = ANY
> (ARRAY['1c9e9ce5-d4d8-4a14-9eaf-929f27e09ba2','ab15ea27-8768-4cbe-a1fb-02a2a949a34d']::uuid[])
> and aint = 1;
> return 2 result
> which would mean that if using not in
>
> select * from uuidtest where auuid != ANY
> (ARRAY['1c9e9ce5-d4d8-4a14-9eaf-929f27e09ba2','ab15ea27-8768-4cbe-a1fb-02a2a949a34d']::uuid[])
> and aint = 1;

Presumably you want auuid != ALL (array[ .. ]) here.  In the first case,
each value is = to the value that it equals to, so both are returned.
In the second case, each value is != to the other value, so both are
returned too.

--
Álvaro Herrera                http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services

Re: BUG #8934: value != ANY (uuid[]) AND expr does not work in all cases

From
Marcus Overheu
Date:
Yeah i noticed a bit too late, i apologize for not reading the
documentation properly.


2014/1/23 Alvaro Herrera <alvherre@2ndquadrant.com>

> marcusoverheu@gmail.com escribi=F3:
>
> >  insert into uuidtest VALUES (1, 'ab15ea27-8768-4cbe-a1fb-02a2a949a34d'=
),
> > (1, '1c9e9ce5-d4d8-4a14-9eaf-929f27e09ba2');
> >
> > then
> >  select * from uuidtest where auuid =3D ANY
> >
> (ARRAY['1c9e9ce5-d4d8-4a14-9eaf-929f27e09ba2','ab15ea27-8768-4cbe-a1fb-02=
a2a949a34d']::uuid[])
> > and aint =3D 1;
> > return 2 result
> > which would mean that if using not in
> >
> > select * from uuidtest where auuid !=3D ANY
> >
> (ARRAY['1c9e9ce5-d4d8-4a14-9eaf-929f27e09ba2','ab15ea27-8768-4cbe-a1fb-02=
a2a949a34d']::uuid[])
> > and aint =3D 1;
>
> Presumably you want auuid !=3D ALL (array[ .. ]) here.  In the first case=
,
> each value is =3D to the value that it equals to, so both are returned.
> In the second case, each value is !=3D to the other value, so both are
> returned too.
>
> --
> =C1lvaro Herrera                http://www.2ndQuadrant.com/
> PostgreSQL Development, 24x7 Support, Training & Services
>