]> granicus.if.org Git - postgresql/blobdiff - src/backend/nodes/print.c
Make some small planner API cleanups.
[postgresql] / src / backend / nodes / print.c
index c6edfbed8a054d465d55b01c8d35eb4e54a72127..6d6da5299faf0b38e2ab44a72941eadc28c87f71 100644 (file)
@@ -3,12 +3,12 @@
  * print.c
  *       various print routines (used mostly for debugging)
  *
- * Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/nodes/print.c,v 1.85 2007/02/22 22:00:23 tgl Exp $
+ *       src/backend/nodes/print.c
  *
  * HISTORY
  *       AUTHOR                        DATE                    MAJOR EVENT
 #include "postgres.h"
 
 #include "access/printtup.h"
+#include "lib/stringinfo.h"
+#include "nodes/nodeFuncs.h"
 #include "nodes/print.h"
-#include "optimizer/clauses.h"
+#include "nodes/relation.h"
 #include "parser/parsetree.h"
 #include "utils/lsyscache.h"
 
@@ -31,7 +33,7 @@
  *       print contents of Node to stdout
  */
 void
-print(void *obj)
+print(const void *obj)
 {
        char       *s;
        char       *f;
@@ -49,7 +51,7 @@ print(void *obj)
  *       pretty-print contents of Node to stdout
  */
 void
-pprint(void *obj)
+pprint(const void *obj)
 {
        char       *s;
        char       *f;
@@ -67,7 +69,7 @@ pprint(void *obj)
  *       send pretty-printed contents of Node to postmaster log
  */
 void
-elog_node_display(int lev, const char *title, void *obj, bool pretty)
+elog_node_display(int lev, const char *title, const void *obj, bool pretty)
 {
        char       *s;
        char       *f;
@@ -80,7 +82,7 @@ elog_node_display(int lev, const char *title, void *obj, bool pretty)
        pfree(s);
        ereport(lev,
                        (errmsg_internal("%s:", title),
-                        errdetail("%s", f)));
+                        errdetail_internal("%s", f)));
        pfree(f);
 }
 
@@ -249,9 +251,9 @@ pretty_format_node_dump(const char *dump)
  *       print contents of range table
  */
 void
-print_rt(List *rtable)
+print_rt(const List *rtable)
 {
-       ListCell   *l;
+       const ListCell *l;
        int                     i = 1;
 
        printf("resno\trefname  \trelid\tinFromCl\n");
@@ -263,27 +265,39 @@ print_rt(List *rtable)
                switch (rte->rtekind)
                {
                        case RTE_RELATION:
-                               printf("%d\t%s\t%u",
-                                          i, rte->eref->aliasname, rte->relid);
+                               printf("%d\t%s\t%u\t%c",
+                                          i, rte->eref->aliasname, rte->relid, rte->relkind);
                                break;
                        case RTE_SUBQUERY:
                                printf("%d\t%s\t[subquery]",
                                           i, rte->eref->aliasname);
                                break;
+                       case RTE_JOIN:
+                               printf("%d\t%s\t[join]",
+                                          i, rte->eref->aliasname);
+                               break;
                        case RTE_FUNCTION:
                                printf("%d\t%s\t[rangefunction]",
                                           i, rte->eref->aliasname);
                                break;
+                       case RTE_TABLEFUNC:
+                               printf("%d\t%s\t[table function]",
+                                          i, rte->eref->aliasname);
+                               break;
                        case RTE_VALUES:
                                printf("%d\t%s\t[values list]",
                                           i, rte->eref->aliasname);
                                break;
-                       case RTE_JOIN:
-                               printf("%d\t%s\t[join]",
+                       case RTE_CTE:
+                               printf("%d\t%s\t[cte]",
+                                          i, rte->eref->aliasname);
+                               break;
+                       case RTE_NAMEDTUPLESTORE:
+                               printf("%d\t%s\t[tuplestore]",
                                           i, rte->eref->aliasname);
                                break;
-                       case RTE_SPECIAL:
-                               printf("%d\t%s\t[special]",
+                       case RTE_RESULT:
+                               printf("%d\t%s\t[result]",
                                           i, rte->eref->aliasname);
                                break;
                        default:
@@ -304,7 +318,7 @@ print_rt(List *rtable)
  *       print an expression
  */
 void
-print_expr(Node *expr, List *rtable)
+print_expr(const Node *expr, const List *rtable)
 {
        if (expr == NULL)
        {
@@ -314,20 +328,24 @@ print_expr(Node *expr, List *rtable)
 
        if (IsA(expr, Var))
        {
-               Var                *var = (Var *) expr;
+               const Var  *var = (const Var *) expr;
                char       *relname,
                                   *attname;
 
                switch (var->varno)
                {
-                       case INNER:
+                       case INNER_VAR:
                                relname = "INNER";
                                attname = "?";
                                break;
-                       case OUTER:
+                       case OUTER_VAR:
                                relname = "OUTER";
                                attname = "?";
                                break;
+                       case INDEX_VAR:
+                               relname = "INDEX";
+                               attname = "?";
+                               break;
                        default:
                                {
                                        RangeTblEntry *rte;
@@ -344,7 +362,7 @@ print_expr(Node *expr, List *rtable)
        }
        else if (IsA(expr, Const))
        {
-               Const      *c = (Const *) expr;
+               const Const *c = (const Const *) expr;
                Oid                     typoutput;
                bool            typIsVarlena;
                char       *outputstr;
@@ -364,26 +382,26 @@ print_expr(Node *expr, List *rtable)
        }
        else if (IsA(expr, OpExpr))
        {
-               OpExpr     *e = (OpExpr *) expr;
+               const OpExpr *e = (const OpExpr *) expr;
                char       *opname;
 
                opname = get_opname(e->opno);
                if (list_length(e->args) > 1)
                {
-                       print_expr(get_leftop((Expr *) e), rtable);
+                       print_expr(get_leftop((const Expr *) e), rtable);
                        printf(" %s ", ((opname != NULL) ? opname : "(invalid operator)"));
-                       print_expr(get_rightop((Expr *) e), rtable);
+                       print_expr(get_rightop((const Expr *) e), rtable);
                }
                else
                {
                        /* we print prefix and postfix ops the same... */
                        printf("%s ", ((opname != NULL) ? opname : "(invalid operator)"));
-                       print_expr(get_leftop((Expr *) e), rtable);
+                       print_expr(get_leftop((const Expr *) e), rtable);
                }
        }
        else if (IsA(expr, FuncExpr))
        {
-               FuncExpr   *e = (FuncExpr *) expr;
+               const FuncExpr *e = (const FuncExpr *) expr;
                char       *funcname;
                ListCell   *l;
 
@@ -406,14 +424,14 @@ print_expr(Node *expr, List *rtable)
  *       pathkeys list of PathKeys
  */
 void
-print_pathkeys(List *pathkeys, List *rtable)
+print_pathkeys(const List *pathkeys, const List *rtable)
 {
-       ListCell   *i;
+       const ListCell *i;
 
        printf("(");
        foreach(i, pathkeys)
        {
-               PathKey    *pathkey = (PathKey *) lfirst(i);
+               PathKey    *pathkey = (PathKey *) lfirst(i);
                EquivalenceClass *eclass;
                ListCell   *k;
                bool            first = true;
@@ -446,9 +464,9 @@ print_pathkeys(List *pathkeys, List *rtable)
  *       print targetlist in a more legible way.
  */
 void
-print_tl(List *tlist, List *rtable)
+print_tl(const List *tlist, const List *rtable)
 {
-       ListCell   *tl;
+       const ListCell *tl;
 
        printf("(\n");
        foreach(tl, tlist)