1 /*-------------------------------------------------------------------------
4 * #defines governing debugging behaviour in the executor
6 * XXX this is all pretty old and crufty. Newer code tends to use elog()
7 * for debug printouts, because that's more flexible than printf().
10 * Portions Copyright (c) 1996-2010, PostgreSQL Global Development Group
11 * Portions Copyright (c) 1994, Regents of the University of California
13 * $PostgreSQL: pgsql/src/include/executor/execdebug.h,v 1.36 2010/01/02 16:58:03 momjian Exp $
15 *-------------------------------------------------------------------------
20 #include "executor/executor.h"
21 #include "nodes/print.h"
23 /* ----------------------------------------------------------------
26 * If you want certain debugging behaviour, then #define
27 * the variable to 1. No need to explicitly #undef by default,
28 * since we can use -D compiler options to enable features.
30 * ----------------------------------------------------------------
34 * EXEC_NESTLOOPDEBUG is a flag which turns on debugging of the
35 * nest loop node by NL_printf() and ENL_printf() in nodeNestloop.c
37 #undef EXEC_NESTLOOPDEBUG
41 * EXEC_EVALDEBUG is a flag which turns on debugging of
42 * ExecEval and ExecTargetList() stuff by EV_printf() in execQual.c
48 * EXEC_SORTDEBUG is a flag which turns on debugging of
49 * the ExecSort() stuff by SO_printf() in nodeSort.c
55 * EXEC_MERGEJOINDEBUG is a flag which turns on debugging of
56 * the ExecMergeJoin() stuff by MJ_printf() in nodeMergejoin.c
58 #undef EXEC_MERGEJOINDEBUG
61 /* ----------------------------------------------------------------
62 * #defines controlled by above definitions
64 * Note: most of these are "incomplete" because I didn't
65 * need the ones not defined. More should be added
66 * only as necessary -cim 10/26/89
67 * ----------------------------------------------------------------
69 #define T_OR_F(b) ((b) ? "true" : "false")
70 #define NULL_OR_TUPLE(slot) (TupIsNull(slot) ? "null" : "a tuple")
73 * nest loop debugging defines
76 #ifdef EXEC_NESTLOOPDEBUG
77 #define NL_nodeDisplay(l) nodeDisplay(l)
78 #define NL_printf(s) printf(s)
79 #define NL1_printf(s, a) printf(s, a)
80 #define ENL1_printf(message) printf("ExecNestLoop: %s\n", message)
82 #define NL_nodeDisplay(l)
84 #define NL1_printf(s, a)
85 #define ENL1_printf(message)
86 #endif /* EXEC_NESTLOOPDEBUG */
89 * exec eval / target list debugging defines
93 #define EV_nodeDisplay(l) nodeDisplay(l)
94 #define EV_printf(s) printf(s)
95 #define EV1_printf(s, a) printf(s, a)
97 #define EV_nodeDisplay(l)
99 #define EV1_printf(s, a)
100 #endif /* EXEC_EVALDEBUG */
103 * sort node debugging defines
106 #ifdef EXEC_SORTDEBUG
107 #define SO_nodeDisplay(l) nodeDisplay(l)
108 #define SO_printf(s) printf(s)
109 #define SO1_printf(s, p) printf(s, p)
111 #define SO_nodeDisplay(l)
113 #define SO1_printf(s, p)
114 #endif /* EXEC_SORTDEBUG */
117 * merge join debugging defines
120 #ifdef EXEC_MERGEJOINDEBUG
122 #define MJ_nodeDisplay(l) nodeDisplay(l)
123 #define MJ_printf(s) printf(s)
124 #define MJ1_printf(s, p) printf(s, p)
125 #define MJ2_printf(s, p1, p2) printf(s, p1, p2)
126 #define MJ_debugtup(slot) debugtup(slot, NULL)
127 #define MJ_dump(state) ExecMergeTupleDump(state)
128 #define MJ_DEBUG_COMPARE(res) \
129 MJ1_printf(" MJCompare() returns %d\n", (res))
130 #define MJ_DEBUG_QUAL(clause, res) \
131 MJ2_printf(" ExecQual(%s, econtext) returns %s\n", \
132 CppAsString(clause), T_OR_F(res))
133 #define MJ_DEBUG_PROC_NODE(slot) \
134 MJ2_printf(" %s = ExecProcNode(...) returns %s\n", \
135 CppAsString(slot), NULL_OR_TUPLE(slot))
138 #define MJ_nodeDisplay(l)
140 #define MJ1_printf(s, p)
141 #define MJ2_printf(s, p1, p2)
142 #define MJ_debugtup(slot)
143 #define MJ_dump(state)
144 #define MJ_DEBUG_COMPARE(res)
145 #define MJ_DEBUG_QUAL(clause, res)
146 #define MJ_DEBUG_PROC_NODE(slot)
147 #endif /* EXEC_MERGEJOINDEBUG */
149 #endif /* ExecDebugIncluded */