From 6ad698c9285449817839aabf03f9c7d37d9d7865 Mon Sep 17 00:00:00 2001 From: "Thomas G. Lockhart" Date: Thu, 4 Dec 1997 23:20:32 +0000 Subject: [PATCH] Add some printing capability for a few more node types (CreateStmt, IndexStmt, IndexElem, ColumnDef). --- src/backend/nodes/outfuncs.c | 119 ++++++++++++++++++++++++++++++++--- 1 file changed, 112 insertions(+), 7 deletions(-) diff --git a/src/backend/nodes/outfuncs.c b/src/backend/nodes/outfuncs.c index 4d12af6af8..e8ef33d8e6 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.10 1997/09/08 21:44:07 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/nodes/outfuncs.c,v 1.11 1997/12/04 23:20:32 thomas Exp $ * * NOTES * Every (plan) node in POSTGRES has an associated "out" routine which @@ -67,6 +67,70 @@ _outIntList(StringInfo str, List *list) appendStringInfo(str, ")"); } +static void +_outCreateStmt(StringInfo str, CreateStmt *node) +{ + char buf[500]; + + sprintf(buf, "CREATE"); + appendStringInfo(str, buf); + + sprintf(buf, " :relname %s", node->relname); + appendStringInfo(str, buf); + appendStringInfo(str, " :columns"); + _outNode(str, node->tableElts); +} /* _outCreateStmt() */ + +static void +_outIndexStmt(StringInfo str, IndexStmt *node) +{ + char buf[500]; + + sprintf(buf, "INDEX"); + appendStringInfo(str, buf); + + sprintf(buf, " :idxname %s", node->idxname); + appendStringInfo(str, buf); + sprintf(buf, " :relname %s", node->relname); + appendStringInfo(str, buf); + sprintf(buf, " :method %s", node->accessMethod); + appendStringInfo(str, buf); + sprintf(buf, " :unique %s", (node->unique? "y": "n")); + appendStringInfo(str, buf); + appendStringInfo(str, " :columns"); + _outNode(str, node->indexParams); +} /* _outIndexStmt() */ + +static void +_outColumnDef(StringInfo str, ColumnDef *node) +{ + char buf[500]; + + sprintf(buf, "COLUMNDEF"); + appendStringInfo(str, buf); + + sprintf(buf, " :colname %s", node->colname); + appendStringInfo(str, buf); + appendStringInfo(str, " :typename"); + _outNode(str, node->typename); +} /* _outColumnDef() */ + +static void +_outIndexElem(StringInfo str, IndexElem *node) +{ + char buf[500]; + + sprintf(buf, "INDEXELEM"); + appendStringInfo(str, buf); + + sprintf(buf, " :name %s", node->name); + appendStringInfo(str, buf); + sprintf(buf, " :class %s", node->class); + appendStringInfo(str, buf); + appendStringInfo(str, " :tname"); + _outNode(str, node->tname); +} /* _outIndexElem() */ + static void _outQuery(StringInfo str, Query *node) { @@ -77,14 +141,41 @@ _outQuery(StringInfo str, Query *node) sprintf(buf, " :command %d", node->commandType); appendStringInfo(str, buf); - if (node->utilityStmt && - nodeTag(node->utilityStmt) == T_NotifyStmt) - sprintf(buf, " :utility %s", - ((NotifyStmt *) (node->utilityStmt))->relname); + if (node->utilityStmt) + { + switch (nodeTag(node->utilityStmt)) + { + case T_CreateStmt: + sprintf(buf, " :create %s", + ((CreateStmt *) (node->utilityStmt))->relname); + appendStringInfo(str, buf); + _outNode(str, node->utilityStmt); + break; + + case T_IndexStmt: + sprintf(buf, " :index %s on %s", + ((IndexStmt *) (node->utilityStmt))->idxname, + ((IndexStmt *) (node->utilityStmt))->relname); + appendStringInfo(str, buf); + _outNode(str, node->utilityStmt); + break; + + case T_NotifyStmt: + sprintf(buf, " :utility %s", + ((NotifyStmt *) (node->utilityStmt))->relname); + appendStringInfo(str, buf); + break; + + default: + sprintf(buf, " :utility ?"); + appendStringInfo(str, buf); + } + } else + { /* use "" to designate */ - sprintf(buf, " :utility \"\""); - appendStringInfo(str, buf); + appendStringInfo(str, " :utility \"\""); + } sprintf(buf, " :resrel %d", node->resultRelation); appendStringInfo(str, buf); @@ -1527,6 +1618,20 @@ _outNode(StringInfo str, void *obj) appendStringInfo(str, "{"); switch (nodeTag(obj)) { + case T_CreateStmt: + _outCreateStmt(str, obj); + break; + case T_IndexStmt: + _outIndexStmt(str, obj); + break; + + case T_ColumnDef: + _outColumnDef(str, obj); + break; + case T_IndexElem: + _outIndexElem(str, obj); + break; + case T_Query: _outQuery(str, obj); break; -- GitLab