]> granicus.if.org Git - postgresql/commitdiff
Add some printing capability for a few more node types (CreateStmt,
authorThomas G. Lockhart <lockhart@fourpalms.org>
Thu, 4 Dec 1997 23:20:32 +0000 (23:20 +0000)
committerThomas G. Lockhart <lockhart@fourpalms.org>
Thu, 4 Dec 1997 23:20:32 +0000 (23:20 +0000)
 IndexStmt, IndexElem, ColumnDef).

src/backend/nodes/outfuncs.c

index 4d12af6af89662aa88fe40a3b503c99a6e710819..e8ef33d8e60be2572d1a75a8c820f37a557ac33f 100644 (file)
@@ -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;