Re: join of array - Mailing list pgsql-general

From elein
Subject Re: join of array
Date
Msg-id 20030815102614.E22348@cookie
Whole thread Raw
In response to Re: join of array  (Joe Conway <mail@joeconway.com>)
Responses Re: join of array
List pgsql-general
you said we had:

> We also have
>   ARRAY[1,2] || 3 == '{1,2,3}'
> and
>   ARRAY[[1,2],[3,4]] || ARRAY[5,6] == '{{1,2},{3,4},{5,6}}'
> and
>   ARRAY[[1,2],[3,4]] || ARRAY[[1,2],[3,4]] ==
>                                '{{{1,2},{3,4}},{{1,2},{3,4}}}'
>
> I think the first two still make sense. I guess the third case ought to be:
>   ARRAY[[1,2],[3,4]] || ARRAY[[1,2],[3,4]] ==
>                                '{{1,2},{3,4},{1,2},{3,4}}'

The second case above makes this case wrong.  Or vice versa.
It is dereferencing the right operand in one case and
not in the other.  How exactly do you tell the difference?
The only difference I can tell is the depth of the
left hand array.  This is confusing and unnecessarily complex.

> It makes sense in analogy to
>   ARRAY[1,2] || ARRAY[3,4] == '{1,2,3,4}'
This case should be '{1,2,{3,4}}'.

Unless we have a flattening operator or dereferencing function.
Or a policy of always flattening the right operand one
level (confusing!).

Consistent treatment of the operands is important.  Treating
object (arrays) as they were defined makes the nesting
and usage easier. Not to mention the implementation.

(Good problem :-)

Elein


On Fri, Aug 15, 2003 at 10:06:36AM -0700, Joe Conway wrote:
> elein wrote:
> >> ARRAY[[1,2],[3,4]] || ARRAY[[1,2],[3,4]] ==
> >>                              '{{{1,2},{3,4}},{{1,2},{3,4}}}'
> >>
> >>I think the first two still make sense. I guess the third case ought to
> >>be:
> >> ARRAY[[1,2],[3,4]] || ARRAY[[1,2],[3,4]] ==
> >>                              '{{1,2},{3,4},{1,2},{3,4}}'
> >>?
> >
> >I do not think this is right. I think the current behaviour
> >is right.  You are effectively dereferencing or flattening
> >the second array which changes the definition of the second
> >object.
>
> It makes sense in analogy to
>   ARRAY[1,2] || ARRAY[3,4] == '{1,2,3,4}'
>
> In the case of, e.g. ARRAY[[1,2],[3,4]] || ARRAY[[5,6],[7,8]],
> '{1,2}', '{3,4}', '{5,6}', and '{7,8}' are "elements" of the higher
> level array, just like 1, 2, 3, & 4 are elements of '{1,2,3,4}'
>
> Joe
>

pgsql-general by date:

Previous
From: "Williams, Travis L"
Date:
Subject: Re: New to list, quick question.
Next
From: Franco Bruno Borghesi
Date:
Subject: Re: New to list, quick question.