diff options
Diffstat (limited to 'src/backend/nodes')
-rw-r--r-- | src/backend/nodes/copyfuncs.c | 25 | ||||
-rw-r--r-- | src/backend/nodes/equalfuncs.c | 17 | ||||
-rw-r--r-- | src/backend/nodes/freefuncs.c | 21 | ||||
-rw-r--r-- | src/backend/nodes/outfuncs.c | 18 | ||||
-rw-r--r-- | src/backend/nodes/readfuncs.c | 33 |
5 files changed, 109 insertions, 5 deletions
diff --git a/src/backend/nodes/copyfuncs.c b/src/backend/nodes/copyfuncs.c index 5bf01e22722..fbef91b35d8 100644 --- a/src/backend/nodes/copyfuncs.c +++ b/src/backend/nodes/copyfuncs.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.106 2000/02/15 20:49:09 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.107 2000/02/20 21:32:05 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -874,6 +874,26 @@ _copySubLink(SubLink *from) } /* ---------------- + * _copyRelabelType + * ---------------- + */ +static RelabelType * +_copyRelabelType(RelabelType *from) +{ + RelabelType *newnode = makeNode(RelabelType); + + /* ---------------- + * copy remainder of node + * ---------------- + */ + Node_Copy(from, newnode, arg); + newnode->resulttype = from->resulttype; + newnode->resulttypmod = from->resulttypmod; + + return newnode; +} + +/* ---------------- * _copyCaseExpr * ---------------- */ @@ -1617,6 +1637,9 @@ copyObject(void *from) case T_SubLink: retval = _copySubLink(from); break; + case T_RelabelType: + retval = _copyRelabelType(from); + break; case T_CaseExpr: retval = _copyCaseExpr(from); break; diff --git a/src/backend/nodes/equalfuncs.c b/src/backend/nodes/equalfuncs.c index fadc282d1ad..b4f5fc6285c 100644 --- a/src/backend/nodes/equalfuncs.c +++ b/src/backend/nodes/equalfuncs.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/nodes/equalfuncs.c,v 1.61 2000/02/15 20:49:09 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/nodes/equalfuncs.c,v 1.62 2000/02/20 21:32:05 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -263,6 +263,18 @@ _equalSubLink(SubLink *a, SubLink *b) } static bool +_equalRelabelType(RelabelType *a, RelabelType *b) +{ + if (!equal(a->arg, b->arg)) + return false; + if (a->resulttype != b->resulttype) + return false; + if (a->resulttypmod != b->resulttypmod) + return false; + return true; +} + +static bool _equalArray(Array *a, Array *b) { if (a->arrayelemtype != b->arrayelemtype) @@ -806,6 +818,9 @@ equal(void *a, void *b) case T_SubLink: retval = _equalSubLink(a, b); break; + case T_RelabelType: + retval = _equalRelabelType(a, b); + break; case T_Func: retval = _equalFunc(a, b); break; diff --git a/src/backend/nodes/freefuncs.c b/src/backend/nodes/freefuncs.c index 8eed80e61ab..daca4a6d96a 100644 --- a/src/backend/nodes/freefuncs.c +++ b/src/backend/nodes/freefuncs.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/nodes/Attic/freefuncs.c,v 1.36 2000/02/15 20:49:09 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/nodes/Attic/freefuncs.c,v 1.37 2000/02/20 21:32:05 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -651,6 +651,22 @@ _freeSubLink(SubLink *node) } /* ---------------- + * _freeRelabelType + * ---------------- + */ +static void +_freeRelabelType(RelabelType *node) +{ + /* ---------------- + * free remainder of node + * ---------------- + */ + freeObject(node->arg); + + pfree(node); +} + +/* ---------------- * _freeCaseExpr * ---------------- */ @@ -1241,6 +1257,9 @@ freeObject(void *node) case T_SubLink: _freeSubLink(node); break; + case T_RelabelType: + _freeRelabelType(node); + break; case T_CaseExpr: _freeCaseExpr(node); break; diff --git a/src/backend/nodes/outfuncs.c b/src/backend/nodes/outfuncs.c index c40ca9ff9cb..db785afab9f 100644 --- a/src/backend/nodes/outfuncs.c +++ b/src/backend/nodes/outfuncs.c @@ -6,7 +6,7 @@ * Portions Copyright (c) 1996-2000, PostgreSQL, Inc * Portions Copyright (c) 1994, Regents of the University of California * - * $Header: /cvsroot/pgsql/src/backend/nodes/outfuncs.c,v 1.108 2000/02/15 20:49:09 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/nodes/outfuncs.c,v 1.109 2000/02/20 21:32:05 tgl Exp $ * * NOTES * Every (plan) node in POSTGRES has an associated "out" routine which @@ -771,6 +771,19 @@ _outSubLink(StringInfo str, SubLink *node) } /* + * RelabelType + */ +static void +_outRelabelType(StringInfo str, RelabelType *node) +{ + appendStringInfo(str, " RELABELTYPE :arg "); + _outNode(str, node->arg); + + appendStringInfo(str, " :resulttype %u :resulttypmod %d ", + node->resulttype, node->resulttypmod); +} + +/* * Array is a subclass of Expr */ static void @@ -1496,6 +1509,9 @@ _outNode(StringInfo str, void *obj) case T_SubLink: _outSubLink(str, obj); break; + case T_RelabelType: + _outRelabelType(str, obj); + break; case T_Array: _outArray(str, obj); break; diff --git a/src/backend/nodes/readfuncs.c b/src/backend/nodes/readfuncs.c index 7d1e0b4cccf..dfbdbef9884 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.84 2000/02/15 20:49:12 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/nodes/readfuncs.c,v 1.85 2000/02/20 21:32:05 tgl Exp $ * * NOTES * Most of the read functions for plan nodes are tested. (In fact, they @@ -1191,6 +1191,35 @@ _readSubLink() return local_node; } +/* ---------------- + * _readRelabelType + * + * RelabelType is a subclass of Node + * ---------------- + */ +static RelabelType * +_readRelabelType() +{ + RelabelType *local_node; + char *token; + int length; + + local_node = makeNode(RelabelType); + + token = lsptok(NULL, &length); /* eat :arg */ + local_node->arg = nodeRead(true); /* now read it */ + + token = lsptok(NULL, &length); /* eat :resulttype */ + token = lsptok(NULL, &length); /* get resulttype */ + local_node->resulttype = (Oid) atol(token); + + token = lsptok(NULL, &length); /* eat :resulttypmod */ + token = lsptok(NULL, &length); /* get resulttypmod */ + local_node->resulttypmod = atoi(token); + + return local_node; +} + /* * Stuff from execnodes.h */ @@ -1820,6 +1849,8 @@ parsePlanString(void) return_value = _readAggref(); else if (length == 7 && strncmp(token, "SUBLINK", length) == 0) return_value = _readSubLink(); + else if (length == 11 && strncmp(token, "RELABELTYPE", length) == 0) + return_value = _readRelabelType(); else if (length == 3 && strncmp(token, "AGG", length) == 0) return_value = _readAgg(); else if (length == 4 && strncmp(token, "HASH", length) == 0) |