Re: proposal: FOREACH-IN-ARRAY (probably for 9.2?)
Pavel Stehule <pavel.stehule@gmail.com>
From: Pavel Stehule <pavel.stehule@gmail.com>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Merlin Moncure <mmoncure@gmail.com>, PostgreSQL Hackers <pgsql-hackers@postgresql.org>, Robert Haas <robertmhaas@gmail.com>
Date: 2010-12-17T17:10:17Z
Lists: pgsql-hackers
2010/12/17 Tom Lane <tgl@sss.pgh.pa.us>: > Pavel Stehule <pavel.stehule@gmail.com> writes: >> 2010/12/17 Tom Lane <tgl@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. I am not against > > 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 > I prefer FOREACH keyword. The syntax can be enhanced and I like a talk about it. I am not sure if SLICE is good keyword for this, but I don't know better - hope so native speakers can select well. I could to use maybe "DIMENSIONS" ? Regards Pavel > 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. > > regards, tom lane >