summaryrefslogtreecommitdiff
path: root/src/backend/nodes/readfuncs.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/nodes/readfuncs.c')
-rw-r--r--src/backend/nodes/readfuncs.c150
1 files changed, 115 insertions, 35 deletions
diff --git a/src/backend/nodes/readfuncs.c b/src/backend/nodes/readfuncs.c
index c0794123b3e..66dd317f394 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.116 2002/03/12 00:51:39 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/nodes/readfuncs.c,v 1.117 2002/03/21 16:00:42 tgl Exp $
*
* NOTES
* Most of the read functions for plan nodes are tested. (In fact, they
@@ -119,34 +119,19 @@ _readQuery(void)
local_node = makeNode(Query);
- token = pg_strtok(&length); /* skip the :command */
- token = pg_strtok(&length); /* get the commandType */
+ token = pg_strtok(&length); /* skip :command */
+ token = pg_strtok(&length); /* get commandType */
local_node->commandType = atoi(token);
token = pg_strtok(&length); /* skip :utility */
- token = pg_strtok(&length);
- if (length == 0)
- local_node->utilityStmt = NULL;
- else
- {
- /*
- * Hack to make up for lack of readfuncs for utility-stmt nodes
- *
- * we can't get create or index here, can we?
- */
- NotifyStmt *n = makeNode(NotifyStmt);
-
- n->relname = debackslash(token, length);
- local_node->utilityStmt = (Node *) n;
- }
+ local_node->utilityStmt = nodeRead(true);
- token = pg_strtok(&length); /* skip the :resultRelation */
+ token = pg_strtok(&length); /* skip :resultRelation */
token = pg_strtok(&length); /* get the resultRelation */
local_node->resultRelation = atoi(token);
token = pg_strtok(&length); /* skip :into */
- token = pg_strtok(&length); /* get into */
- local_node->into = nullable_string(token, length);
+ local_node->into = nodeRead(true);
token = pg_strtok(&length); /* skip :isPortal */
token = pg_strtok(&length); /* get isPortal */
@@ -156,10 +141,6 @@ _readQuery(void)
token = pg_strtok(&length); /* get isBinary */
local_node->isBinary = strtobool(token);
- token = pg_strtok(&length); /* skip :isTemp */
- token = pg_strtok(&length); /* get isTemp */
- local_node->isTemp = strtobool(token);
-
token = pg_strtok(&length); /* skip the :hasAggs */
token = pg_strtok(&length); /* get hasAggs */
local_node->hasAggs = strtobool(token);
@@ -211,6 +192,25 @@ _readQuery(void)
}
/* ----------------
+ * _readNotifyStmt
+ * ----------------
+ */
+static NotifyStmt *
+_readNotifyStmt(void)
+{
+ NotifyStmt *local_node;
+ char *token;
+ int length;
+
+ local_node = makeNode(NotifyStmt);
+
+ token = pg_strtok(&length); /* skip :relation */
+ local_node->relation = nodeRead(true);
+
+ return local_node;
+}
+
+/* ----------------
* _readSortClause
* ----------------
*/
@@ -1394,21 +1394,93 @@ _readTargetEntry(void)
return local_node;
}
-static Attr *
-_readAttr(void)
+static RangeVar *
+_readRangeVar(void)
{
- Attr *local_node;
+ RangeVar *local_node;
char *token;
int length;
- local_node = makeNode(Attr);
+ local_node = makeNode(RangeVar);
- token = pg_strtok(&length); /* eat :relname */
+ local_node->catalogname = NULL; /* not currently saved in output format */
+
+ token = pg_strtok(&length); /* eat :relation */
+ token = pg_strtok(&length); /* get schemaname */
+ local_node->schemaname = nullable_string(token, length);
+
+ token = pg_strtok(&length); /* eat "." */
token = pg_strtok(&length); /* get relname */
- local_node->relname = debackslash(token, length);
+ local_node->relname = nullable_string(token, length);
+
+ token = pg_strtok(&length); /* eat :inhopt */
+ token = pg_strtok(&length); /* get inhopt */
+ local_node->inhOpt = (InhOption) atoi(token);
+
+ token = pg_strtok(&length); /* eat :istemp */
+ token = pg_strtok(&length); /* get istemp */
+ local_node->istemp = strtobool(token);
+
+ token = pg_strtok(&length); /* eat :alias */
+ local_node->alias = nodeRead(true); /* now read it */
+
+ return local_node;
+}
+
+static ColumnRef *
+_readColumnRef(void)
+{
+ ColumnRef *local_node;
+ char *token;
+ int length;
+
+ local_node = makeNode(ColumnRef);
+
+ token = pg_strtok(&length); /* eat :fields */
+ local_node->fields = nodeRead(true); /* now read it */
+
+ token = pg_strtok(&length); /* eat :indirection */
+ local_node->indirection = nodeRead(true); /* now read it */
+
+ return local_node;
+}
+
+static ExprFieldSelect *
+_readExprFieldSelect(void)
+{
+ ExprFieldSelect *local_node;
+ char *token;
+ int length;
+
+ local_node = makeNode(ExprFieldSelect);
+
+ token = pg_strtok(&length); /* eat :arg */
+ local_node->arg = nodeRead(true); /* now read it */
+
+ token = pg_strtok(&length); /* eat :fields */
+ local_node->fields = nodeRead(true); /* now read it */
+
+ token = pg_strtok(&length); /* eat :indirection */
+ local_node->indirection = nodeRead(true); /* now read it */
+
+ return local_node;
+}
+
+static Alias *
+_readAlias(void)
+{
+ Alias *local_node;
+ char *token;
+ int length;
+
+ local_node = makeNode(Alias);
+
+ token = pg_strtok(&length); /* eat :aliasname */
+ token = pg_strtok(&length); /* get aliasname */
+ local_node->aliasname = debackslash(token, length);
- token = pg_strtok(&length); /* eat :attrs */
- local_node->attrs = nodeRead(true); /* now read it */
+ token = pg_strtok(&length); /* eat :colnames */
+ local_node->colnames = nodeRead(true); /* now read it */
return local_node;
}
@@ -1994,8 +2066,6 @@ parsePlanString(void)
return_value = _readArrayRef();
else if (length == 3 && strncmp(token, "VAR", length) == 0)
return_value = _readVar();
- else if (length == 4 && strncmp(token, "ATTR", length) == 0)
- return_value = _readAttr();
else if (length == 5 && strncmp(token, "CONST", length) == 0)
return_value = _readConst();
else if (length == 4 && strncmp(token, "FUNC", length) == 0)
@@ -2006,6 +2076,14 @@ parsePlanString(void)
return_value = _readParam();
else if (length == 11 && strncmp(token, "TARGETENTRY", length) == 0)
return_value = _readTargetEntry();
+ else if (length == 8 && strncmp(token, "RANGEVAR", length) == 0)
+ return_value = _readRangeVar();
+ else if (length == 9 && strncmp(token, "COLUMNREF", length) == 0)
+ return_value = _readColumnRef();
+ else if (length == 15 && strncmp(token, "EXPRFIELDSELECT", length) == 0)
+ return_value = _readExprFieldSelect();
+ else if (length == 5 && strncmp(token, "ALIAS", length) == 0)
+ return_value = _readAlias();
else if (length == 3 && strncmp(token, "RTE", length) == 0)
return_value = _readRangeTblEntry();
else if (length == 4 && strncmp(token, "PATH", length) == 0)
@@ -2032,6 +2110,8 @@ parsePlanString(void)
return_value = _readIter();
else if (length == 5 && strncmp(token, "QUERY", length) == 0)
return_value = _readQuery();
+ else if (length == 6 && strncmp(token, "NOTIFY", length) == 0)
+ return_value = _readNotifyStmt();
else if (length == 10 && strncmp(token, "SORTCLAUSE", length) == 0)
return_value = _readSortClause();
else if (length == 11 && strncmp(token, "GROUPCLAUSE", length) == 0)