summaryrefslogtreecommitdiff
path: root/src/backend/nodes
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/nodes')
-rw-r--r--src/backend/nodes/outfuncs.c4
-rw-r--r--src/backend/nodes/readfuncs.c50
2 files changed, 51 insertions, 3 deletions
diff --git a/src/backend/nodes/outfuncs.c b/src/backend/nodes/outfuncs.c
index 2cbec8e615..d5965f73ec 100644
--- a/src/backend/nodes/outfuncs.c
+++ b/src/backend/nodes/outfuncs.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/nodes/outfuncs.c,v 1.49 1998/12/04 15:33:33 thomas Exp $
+ * $Header: /cvsroot/pgsql/src/backend/nodes/outfuncs.c,v 1.50 1998/12/14 00:01:47 thomas Exp $
*
* NOTES
* Every (plan) node in POSTGRES has an associated "out" routine which
@@ -1702,7 +1702,7 @@ _outCaseWhen(StringInfo str, CaseWhen *node)
{
char buf[500];
- sprintf(buf, " :when ");
+ sprintf(buf, " WHEN ");
appendStringInfo(str, buf);
_outNode(str, node->expr);
sprintf(buf, " :then ");
diff --git a/src/backend/nodes/readfuncs.c b/src/backend/nodes/readfuncs.c
index c915ed6ed7..a6650efecf 100644
--- a/src/backend/nodes/readfuncs.c
+++ b/src/backend/nodes/readfuncs.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/nodes/readfuncs.c,v 1.39 1998/11/22 10:48:40 vadim Exp $
+ * $Header: /cvsroot/pgsql/src/backend/nodes/readfuncs.c,v 1.40 1998/12/14 00:01:47 thomas Exp $
*
* NOTES
* Most of the read functions for plan nodes are tested. (In fact, they
@@ -787,6 +787,50 @@ _readExpr()
}
/* ----------------
+ * _readCaseExpr
+ *
+ * CaseExpr is a subclass of Node
+ * ----------------
+ */
+static CaseExpr *
+_readCaseExpr()
+{
+ CaseExpr *local_node;
+ char *token;
+ int length;
+
+ local_node = makeNode(CaseExpr);
+
+ local_node->args = nodeRead(true);
+ token = lsptok(NULL, &length); /* eat :default */
+ local_node->defresult = nodeRead(true);
+
+ return local_node;
+}
+
+/* ----------------
+ * _readCaseWhen
+ *
+ * CaseWhen is a subclass of Node
+ * ----------------
+ */
+static CaseWhen *
+_readCaseWhen()
+{
+ CaseWhen *local_node;
+ char *token;
+ int length;
+
+ local_node = makeNode(CaseWhen);
+
+ local_node->expr = nodeRead(true);
+ token = lsptok(NULL, &length); /* eat :then */
+ local_node->result = nodeRead(true);
+
+ return local_node;
+}
+
+/* ----------------
* _readVar
*
* Var is a subclass of Expr
@@ -2037,6 +2081,10 @@ parsePlanString(void)
return_value = _readSortClause();
else if (!strncmp(token, "GROUPCLAUSE", length))
return_value = _readGroupClause();
+ else if (!strncmp(token, "CASE", length))
+ return_value = _readCaseExpr();
+ else if (!strncmp(token, "WHEN", length))
+ return_value = _readCaseWhen();
else
elog(ERROR, "badly formatted planstring \"%.10s\"...\n", token);