1 /*-------------------------------------------------------------------------
2  *
3  * execdebug.h
4  *	  #defines governing debugging behaviour in the executor
5  *
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().
8  *
9  *
10  * Portions Copyright (c) 1996-2017, PostgreSQL Global Development Group
11  * Portions Copyright (c) 1994, Regents of the University of California
12  *
13  * src/include/executor/execdebug.h
14  *
15  *-------------------------------------------------------------------------
16  */
17 #ifndef EXECDEBUG_H
18 #define EXECDEBUG_H
19 
20 #include "executor/executor.h"
21 #include "nodes/print.h"
22 
23 /* ----------------------------------------------------------------
24  *		debugging defines.
25  *
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.
29  *		- thomas 1999-02-20
30  * ----------------------------------------------------------------
31  */
32 
33 /* ----------------
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
36  * ----------------
37 #undef EXEC_NESTLOOPDEBUG
38  */
39 
40 /* ----------------
41  *		EXEC_SORTDEBUG is a flag which turns on debugging of
42  *		the ExecSort() stuff by SO_printf() in nodeSort.c
43  * ----------------
44 #undef EXEC_SORTDEBUG
45  */
46 
47 /* ----------------
48  *		EXEC_MERGEJOINDEBUG is a flag which turns on debugging of
49  *		the ExecMergeJoin() stuff by MJ_printf() in nodeMergejoin.c
50  * ----------------
51 #undef EXEC_MERGEJOINDEBUG
52  */
53 
54 /* ----------------------------------------------------------------
55  *		#defines controlled by above definitions
56  *
57  *		Note: most of these are "incomplete" because I didn't
58  *			  need the ones not defined.  More should be added
59  *			  only as necessary -cim 10/26/89
60  * ----------------------------------------------------------------
61  */
62 #define T_OR_F(b)				((b) ? "true" : "false")
63 #define NULL_OR_TUPLE(slot)		(TupIsNull(slot) ? "null" : "a tuple")
64 
65 /* ----------------
66  *		nest loop debugging defines
67  * ----------------
68  */
69 #ifdef EXEC_NESTLOOPDEBUG
70 #define NL_nodeDisplay(l)				nodeDisplay(l)
71 #define NL_printf(s)					printf(s)
72 #define NL1_printf(s, a)				printf(s, a)
73 #define ENL1_printf(message)			printf("ExecNestLoop: %s\n", message)
74 #else
75 #define NL_nodeDisplay(l)
76 #define NL_printf(s)
77 #define NL1_printf(s, a)
78 #define ENL1_printf(message)
79 #endif							/* EXEC_NESTLOOPDEBUG */
80 
81 /* ----------------
82  *		sort node debugging defines
83  * ----------------
84  */
85 #ifdef EXEC_SORTDEBUG
86 #define SO_nodeDisplay(l)				nodeDisplay(l)
87 #define SO_printf(s)					printf(s)
88 #define SO1_printf(s, p)				printf(s, p)
89 #else
90 #define SO_nodeDisplay(l)
91 #define SO_printf(s)
92 #define SO1_printf(s, p)
93 #endif							/* EXEC_SORTDEBUG */
94 
95 /* ----------------
96  *		merge join debugging defines
97  * ----------------
98  */
99 #ifdef EXEC_MERGEJOINDEBUG
100 
101 #define MJ_nodeDisplay(l)				nodeDisplay(l)
102 #define MJ_printf(s)					printf(s)
103 #define MJ1_printf(s, p)				printf(s, p)
104 #define MJ2_printf(s, p1, p2)			printf(s, p1, p2)
105 #define MJ_debugtup(slot)				debugtup(slot, NULL)
106 #define MJ_dump(state)					ExecMergeTupleDump(state)
107 #define MJ_DEBUG_COMPARE(res) \
108   MJ1_printf("  MJCompare() returns %d\n", (res))
109 #define MJ_DEBUG_QUAL(clause, res) \
110   MJ2_printf("  ExecQual(%s, econtext) returns %s\n", \
111 			 CppAsString(clause), T_OR_F(res))
112 #define MJ_DEBUG_PROC_NODE(slot) \
113   MJ2_printf("  %s = ExecProcNode(...) returns %s\n", \
114 			 CppAsString(slot), NULL_OR_TUPLE(slot))
115 #else
116 
117 #define MJ_nodeDisplay(l)
118 #define MJ_printf(s)
119 #define MJ1_printf(s, p)
120 #define MJ2_printf(s, p1, p2)
121 #define MJ_debugtup(slot)
122 #define MJ_dump(state)
123 #define MJ_DEBUG_COMPARE(res)
124 #define MJ_DEBUG_QUAL(clause, res)
125 #define MJ_DEBUG_PROC_NODE(slot)
126 #endif							/* EXEC_MERGEJOINDEBUG */
127 
128 #endif							/* EXECDEBUG_H */
129