提交 6ad698c9 编写于 作者: T Thomas G. Lockhart

Add some printing capability for a few more node types (CreateStmt,

 IndexStmt, IndexElem, ColumnDef).
上级 02958645
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * 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 * NOTES
* Every (plan) node in POSTGRES has an associated "out" routine which * Every (plan) node in POSTGRES has an associated "out" routine which
...@@ -67,6 +67,70 @@ _outIntList(StringInfo str, List *list) ...@@ -67,6 +67,70 @@ _outIntList(StringInfo str, List *list)
appendStringInfo(str, ")"); 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 static void
_outQuery(StringInfo str, Query *node) _outQuery(StringInfo str, Query *node)
{ {
...@@ -77,14 +141,41 @@ _outQuery(StringInfo str, Query *node) ...@@ -77,14 +141,41 @@ _outQuery(StringInfo str, Query *node)
sprintf(buf, " :command %d", node->commandType); sprintf(buf, " :command %d", node->commandType);
appendStringInfo(str, buf); appendStringInfo(str, buf);
if (node->utilityStmt && if (node->utilityStmt)
nodeTag(node->utilityStmt) == T_NotifyStmt) {
sprintf(buf, " :utility %s", switch (nodeTag(node->utilityStmt))
((NotifyStmt *) (node->utilityStmt))->relname); {
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 else
{
/* use "" to designate */ /* use "" to designate */
sprintf(buf, " :utility \"\""); appendStringInfo(str, " :utility \"\"");
appendStringInfo(str, buf); }
sprintf(buf, " :resrel %d", node->resultRelation); sprintf(buf, " :resrel %d", node->resultRelation);
appendStringInfo(str, buf); appendStringInfo(str, buf);
...@@ -1527,6 +1618,20 @@ _outNode(StringInfo str, void *obj) ...@@ -1527,6 +1618,20 @@ _outNode(StringInfo str, void *obj)
appendStringInfo(str, "{"); appendStringInfo(str, "{");
switch (nodeTag(obj)) 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: case T_Query:
_outQuery(str, obj); _outQuery(str, obj);
break; break;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册