aboutsummaryrefslogtreecommitdiff
path: root/src/backend/nodes/readfuncs.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2004-05-08 21:21:18 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2004-05-08 21:21:18 +0000
commitc00b309932b83e7c256a806223078f98d54f6cde (patch)
tree74fa1a0cbdb8d4bb4515167ffaed4964d8c32d05 /src/backend/nodes/readfuncs.c
parent4af3421161ce7847a019ec0799c898586574801f (diff)
downloadpostgresql-c00b309932b83e7c256a806223078f98d54f6cde.tar.gz
postgresql-c00b309932b83e7c256a806223078f98d54f6cde.zip
Alter string format used for integer and OID lists in stored rules.
This simplifies and speeds up the reader by letting it get the representation right the first time, rather than correcting it after-the-fact. Also, after int and OID lists become separate node types per Neil's pending patch, this will let us treat these lists as just plain Nodes instead of requiring separate read/write macros the way we have now.
Diffstat (limited to 'src/backend/nodes/readfuncs.c')
-rw-r--r--src/backend/nodes/readfuncs.c60
1 files changed, 5 insertions, 55 deletions
diff --git a/src/backend/nodes/readfuncs.c b/src/backend/nodes/readfuncs.c
index 0e374599700..ebd3c636c29 100644
--- a/src/backend/nodes/readfuncs.c
+++ b/src/backend/nodes/readfuncs.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/nodes/readfuncs.c,v 1.167 2004/05/06 14:01:33 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/nodes/readfuncs.c,v 1.168 2004/05/08 21:21:18 tgl Exp $
*
* NOTES
* Path and Plan nodes do not have any readfuncs support, because we
@@ -101,15 +101,15 @@
token = pg_strtok(&length); /* skip :fldname */ \
local_node->fldname = nodeRead(NULL, 0)
-/* Read an integer-list field */
+/* Read an integer-list field (XXX combine me with READ_NODE_FIELD) */
#define READ_INTLIST_FIELD(fldname) \
token = pg_strtok(&length); /* skip :fldname */ \
- local_node->fldname = toIntList(nodeRead(NULL, 0))
+ local_node->fldname = nodeRead(NULL, 0)
-/* Read an OID-list field */
+/* Read an OID-list field (XXX combine me with READ_NODE_FIELD) */
#define READ_OIDLIST_FIELD(fldname) \
token = pg_strtok(&length); /* skip :fldname */ \
- local_node->fldname = toOidList(nodeRead(NULL, 0))
+ local_node->fldname = nodeRead(NULL, 0)
/* Routine exit */
#define READ_DONE() \
@@ -135,56 +135,6 @@
static Datum readDatum(bool typbyval);
-/* Convert Value list returned by nodeRead into list of integers */
-static List *
-toIntList(List *list)
-{
- List *l;
-
- foreach(l, list)
- {
- Value *v = (Value *) lfirst(l);
-
- if (!IsA(v, Integer))
- elog(ERROR, "unexpected node type: %d", (int) nodeTag(v));
- lfirsti(l) = intVal(v);
- pfree(v);
- }
- return list;
-}
-
-/* Convert Value list returned by nodeRead into list of OIDs */
-static List *
-toOidList(List *list)
-{
- List *l;
-
- foreach(l, list)
- {
- Value *v = (Value *) lfirst(l);
-
- /*
- * This is a bit tricky because OID is unsigned, and so nodeRead
- * might have concluded the value doesn't fit in an integer. Must
- * cope with T_Float as well.
- */
- if (IsA(v, Integer))
- {
- lfirsto(l) = (Oid) intVal(v);
- pfree(v);
- }
- else if (IsA(v, Float))
- {
- lfirsto(l) = atooid(strVal(v));
- pfree(strVal(v));
- pfree(v);
- }
- else
- elog(ERROR, "unexpected node type: %d", (int) nodeTag(v));
- }
- return list;
-}
-
/*
* _readQuery
*/