2010/12/17 Merlin Moncure <mmonc...@gmail.com>

> On Fri, Dec 17, 2010 at 11:38 AM, Tom Lane <t...@sss.pgh.pa.us> wrote:
> > Pavel Stehule <pavel.steh...@gmail.com> writes:
> >> 2010/12/17 Tom Lane <t...@sss.pgh.pa.us>:
> >>> Furthermore, it's underspecified: who's to say how many dimensions of
> >>> the array are supposed to get sliced off?  There's no reasonable place
> >>> to extend this syntax to specify that.  It will also be inconsistent
> >>> for "foreach scalar in array" to iterate element-by-element no matter
> >>> how many dimensions array has, while "foreach array in array" does
> >>> something different from that.
> >
> >> it reduce just one dimension. Now I expect, and I think so it is
> >> correct, so user knows a used dimension. Just doesn't know a data. So
> >> user can to decide and fill correct type. The design strictly remove
> >> any U.I. from design. So using a incorect type is bug.
> >
> > In other words, your proposal is error-prone to use, restricted in what
> > it can do, and incapable of being extended later without breaking
> > things.  If there is some redeeming social value to set against those
> > problems, I'm not seeing it.
> >
> > What I think we should have is
> >
> >        FOREACH scalar-variable IN ARRAY array-expression
> >
> > which iterates element by element regardless of how many dimensions the
> > array has.  Then there should be some other syntax for iterating over
> > slices, and we should give some thought to being able to specify how
> > "deep" the slice is.  I can definitely think of use cases for pulling
> > off either 1 dimension at a time (so you get vectors) or N-1 dimensions
> > at a time, and it's not out of the realm of reason to want intermediate
> > cases.
> >
> > Maybe
> >
> >        FOR_EACH scalar-variable IN ARRAY array-expression
> >
> >        FOR_SLICE array-variable [DEPTH n] IN ARRAY array-expression
> >
> > Or I guess you could use the same leading keyword if you make the depth
> > specification mandatory for the slice case:
> >
> >        FOREACH scalar-variable IN ARRAY array-expression
> >
> >        FOREACH array-variable SLICE n IN ARRAY array-expression
> >
> > That might be a better idea since it avoids the inevitable argument over
> > whether the default slice depth should be 1 dimension or N-1 dimensions.
>
> another way:
>
> FOREACH scalar IN ARRAY arr_exp DIMS in dim_var


> dim_var being int[], or possibly text, of length #dimensions, giving
> per dimesion index.
>
If dim_var contains length it is need to be renamed:
FOREACH scalar IN ARRAY arr_exp SIZES IN sizes_var.


>
> I like this because it would fit well with alternate form of unnest,
> should it ever be written:
>
> create function unnest(anyarray, dims out int[], elem out anyelement)
> returns setof...
>
> SLICE notation is still good though, and it's probably faster since
> you have less work to do in iteration step?  It's certainly easier,
> but very plpgsql specific.
>
> merlin
>
> --
> Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-hackers
>



-- 
// Dmitriy.

Reply via email to