From: | Joe Conway <mail(at)joeconway(dot)com> |
---|---|
To: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
Cc: | Hannu Krosing <hannu(at)tm(dot)ee>, "Hackers (PostgreSQL)" <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: SQL99 ARRAY support proposal |
Date: | 2003-03-12 19:41:35 |
Message-ID: | 3E6F8D6F.70108@joeconway.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers pgsql-patches |
Tom Lane wrote:
> But I think I like better the notion of extending my bound-together-
> ANYARRAY-and-ANYELEMENT proposal,
> http://archives.postgresql.org/pgsql-hackers/2003-03/msg00319.php
>
> Suppose that we do that, and then further say that ANYARRAY or
> ANYELEMENT appearing as the return type implies that the return type
> is actually the common element or array type. Then we have such
> useful behaviors as:
>
> array_push(anyarray, anyelement) returns anyarray
> array_pop(anyarray) returns anyelement
> array_subscript(anyarray, int) yields anyelement
> singleton_array(anyelement) yields anyarray
Before I get too far along, I'd like to get some feedback. The attached
patch implements Tom's bound-together-ANYARRAY-and-ANYELEMENT proposal
(and includes ANY as well, per earlier discussion). With it, the
following works:
CREATE OR REPLACE FUNCTION array_push (anyarray, anyelement)
RETURNS anyarray
AS '$libdir/plr','array_push'
LANGUAGE 'C';
regression=# select f1[2] from (select array_push('{1,2}'::integer[],3)
as f1) as t;
f1
----
2
(1 row)
Does it make sense to commit this now, or should it wait for the other
changes described below?
The following are my proposed next phases in array support changes.
Please let me know now if you think any of these won't fly (conceptually):
1) Implement SQL99/200x ARRAY[] changes proposed here:
http://archives.postgresql.org/pgsql-hackers/2003-03/msg00297.php
as modified by
http://archives.postgresql.org/pgsql-hackers/2003-03/msg00315.php
2) Implement the following new builtin functions
array_push(anyarray, anyelement) returns anyarray
array_pop(anyarray) returns anyelement
array_subscript(anyarray, int) yields anyelement
singleton_array(anyelement) returns anyarray
- any reason not to call this one simply "array"?
split(text, text) returns text[]
- split string into array on delimiter
implode(text[], text) returns text
- join array elements into a string using given string delimiter
3) Modify contrib/array functions as needed and move to the backend. Or
possibly write equivalent functions from scratch -- I just noticed
this in contrib/array:
* This software is distributed under the GNU General Public License
* either version 2, or (at your option) any later version.
Is anyone still in contact with Massimo Dal Zotto? Any chance he
would change the license to BSD?
4) Update "User's Guide"->"Data Types"->"Arrays" documentation and
create a new section: "User's Guide"->
"Functions and Operators"->
"Array Functions and Operators"
Thoughts, comments, objections all welcomed.
Thanks,
Joe
Attachment | Content-Type | Size |
---|---|---|
array-gen.3.patch | text/plain | 15.6 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2003-03-12 19:50:20 | Re: SQL99 ARRAY support proposal |
Previous Message | Rod Taylor | 2003-03-12 18:46:47 | Re: Case insensitivity, and option? |
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2003-03-12 19:50:20 | Re: SQL99 ARRAY support proposal |
Previous Message | Neil Conway | 2003-03-12 00:48:58 | restructure libpq docs (WIP) |