diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2002-08-26 17:54:02 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2002-08-26 17:54:02 +0000 |
commit | 5cabcfccce4b8b826c9b30828f3012b7926a6946 (patch) | |
tree | 3e14c0710a45b4195734dd3189eb89eac4969073 /src/backend/nodes/readfuncs.c | |
parent | 8009c275925dda90f1275ba70f5c2a63abaa520b (diff) | |
download | postgresql-5cabcfccce4b8b826c9b30828f3012b7926a6946.tar.gz postgresql-5cabcfccce4b8b826c9b30828f3012b7926a6946.zip |
Modify array operations to include array's element type OID in the
array header, and to compute sizing and alignment of array elements
the same way normal tuple access operations do --- viz, using the
tupmacs.h macros att_addlength and att_align. This makes the world
safe for arrays of cstrings or intervals, and should make it much
easier to write array-type-polymorphic functions; as examples see
the cleanups of array_out and contrib/array_iterator. By Joe Conway
and Tom Lane.
Diffstat (limited to 'src/backend/nodes/readfuncs.c')
-rw-r--r-- | src/backend/nodes/readfuncs.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/src/backend/nodes/readfuncs.c b/src/backend/nodes/readfuncs.c index fbf959931e3..b54a70159c8 100644 --- a/src/backend/nodes/readfuncs.c +++ b/src/backend/nodes/readfuncs.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/nodes/readfuncs.c,v 1.128 2002/08/10 20:44:48 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/nodes/readfuncs.c,v 1.129 2002/08/26 17:53:58 tgl Exp $ * * NOTES * Most of the read functions for plan nodes are tested. (In fact, they @@ -992,9 +992,9 @@ _readArrayRef(void) local_node = makeNode(ArrayRef); - token = pg_strtok(&length); /* eat :refelemtype */ - token = pg_strtok(&length); /* get refelemtype */ - local_node->refelemtype = atooid(token); + token = pg_strtok(&length); /* eat :refrestype */ + token = pg_strtok(&length); /* get refrestype */ + local_node->refrestype = atooid(token); token = pg_strtok(&length); /* eat :refattrlength */ token = pg_strtok(&length); /* get refattrlength */ @@ -1008,10 +1008,14 @@ _readArrayRef(void) token = pg_strtok(&length); /* get refelembyval */ local_node->refelembyval = strtobool(token); - token = pg_strtok(&length); /* eat :refupperindex */ + token = pg_strtok(&length); /* eat :refelemalign */ + token = pg_strtok(&length); /* get refelemalign */ + local_node->refelemalign = token[0]; + + token = pg_strtok(&length); /* eat :refupperindexpr */ local_node->refupperindexpr = nodeRead(true); - token = pg_strtok(&length); /* eat :reflowerindex */ + token = pg_strtok(&length); /* eat :reflowerindexpr */ local_node->reflowerindexpr = nodeRead(true); token = pg_strtok(&length); /* eat :refexpr */ |