execdebug.h
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:11k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. /*-------------------------------------------------------------------------
  2.  *
  3.  * execdebug.h
  4.  *   #defines governing debugging behaviour in the executor
  5.  *
  6.  *
  7.  * Copyright (c) 1994, Regents of the University of California
  8.  *
  9.  * $Id: execdebug.h,v 1.8 1999/02/23 07:39:40 thomas Exp $
  10.  *
  11.  *-------------------------------------------------------------------------
  12.  */
  13. #ifndef EXECDEBUG_H
  14. #define EXECDEBUG_H
  15. #include "access/printtup.h"
  16. /* ----------------------------------------------------------------
  17.  * debugging defines.
  18.  *
  19.  * If you want certain debugging behaviour, then #define
  20.  * the variable to 1. No need to explicitly #undef by default,
  21.  * since we can use -D compiler options to enable features.
  22.  * - thomas 1999-02-20
  23.  * ----------------------------------------------------------------
  24.  */
  25. /* ----------------
  26.  * EXEC_DEBUGSTORETUP is for tuple table debugging - this
  27.  * will print a message every time we call ExecStoreTuple.
  28.  * -cim 3/20/91
  29.  * ----------------
  30. #undef EXEC_DEBUGSTORETUP
  31.  */
  32. /* ----------------
  33.  * EXEC_TUPLECOUNT is a #define which causes the
  34.  * executor keep track of tuple counts.  This might be
  35.  * causing some problems with the decstation stuff so
  36.  * you might want to undefine this if you are doing work
  37.  * on the decs  - cim 10/20/89
  38.  * ----------------
  39. #undef EXEC_TUPLECOUNT
  40.  */
  41. /* ----------------
  42.  * EXEC_SHOWBUFSTATS controls whether or not buffer statistics
  43.  * are shown for each query.  -cim 2/9/89
  44.  * ----------------
  45. #undef EXEC_SHOWBUFSTATS
  46.  */
  47. /* ----------------
  48.  * EXEC_CONTEXTDEBUG turns on the printing of debugging information
  49.  * by CXT_printf() calls regarding which memory context is the
  50.  * CurrentMemoryContext for palloc() calls.
  51.  * ----------------
  52. #undef EXEC_CONTEXTDEBUG
  53.  */
  54. /* ----------------
  55.  * EXEC_RETURNSIZE is a compile flag governing the
  56.  * behaviour of lispFmgr..  See ExecMakeFunctionResult().
  57.  * Undefining this avoids a problem in the system cache.
  58.  *
  59.  * Note: undefining this means that there is incorrect
  60.  *   information in the const nodes corresponding
  61.  *   to function (or operator) results.  The thing is,
  62.  *   99% of the time this is fine because when you do
  63.  *   something like x = emp.sal + 1, you already know
  64.  *   the type and size of x so the fact that + didn't
  65.  *   return the correct size doesn't matter.
  66.  *   With variable length stuff the size is stored in
  67.  *   the first few bytes of the data so again, it's
  68.  *   not likely to matter.
  69.  * ----------------
  70. #undef EXEC_RETURNSIZE
  71.  */
  72. /* ----------------
  73.  * EXEC_UTILSDEBUG is a flag which turns on debugging of the
  74.  * executor utilities by EU_printf() in eutils.c
  75.  * ----------------
  76. #undef EXEC_UTILSDEBUG
  77.  */
  78. /* ----------------
  79.  * EXEC_NESTLOOPDEBUG is a flag which turns on debugging of the
  80.  * nest loop node by NL_printf() and ENL_printf() in nestloop.c
  81.  * ----------------
  82. #undef EXEC_NESTLOOPDEBUG
  83.  */
  84. /* ----------------
  85.  * EXEC_PROCDEBUG is a flag which turns on debugging of
  86.  * ExecProcNode() by PN_printf() in procnode.c
  87.  * ----------------
  88. #undef EXEC_PROCDEBUG
  89.  */
  90. /* ----------------
  91.  * EXEC_EVALDEBUG is a flag which turns on debugging of
  92.  * ExecEval and ExecTargetList() stuff by EV_printf() in qual.c
  93.  * ----------------
  94. #undef EXEC_EVALDEBUG
  95.  */
  96. /* ----------------
  97.  * EXEC_SCANDEBUG is a flag which turns on debugging of
  98.  * the ExecSeqScan() stuff by S_printf() in seqscan.c
  99.  * ----------------
  100. #undef EXEC_SCANDEBUG
  101.  */
  102. /* ----------------
  103.  * EXEC_SORTDEBUG is a flag which turns on debugging of
  104.  * the ExecSort() stuff by SO_printf() in sort.c
  105.  * ----------------
  106. #undef EXEC_SORTDEBUG
  107.  */
  108. /* ----------------
  109.  * EXEC_MERGEJOINDEBUG is a flag which turns on debugging of
  110.  * the ExecMergeJoin() stuff by MJ_printf() in mergejoin.c
  111.  * ----------------
  112. #undef EXEC_MERGEJOINDEBUG
  113.  */
  114. /* ----------------
  115.  * EXEC_MERGEJOINPFREE is a flag which causes merge joins
  116.  * to pfree intermittant tuples (which is the proper thing)
  117.  * Not defining this means we avoid menory management problems
  118.  * at the cost of doing deallocation of stuff only at the
  119.  * end of the transaction
  120.  * ----------------
  121. #undef EXEC_MERGEJOINPFREE
  122.  */
  123. /* ----------------
  124.  * EXEC_DEBUGINTERACTIVE is a flag which enables the
  125.  * user to issue "DEBUG" commands from an interactive
  126.  * backend.
  127.  * ----------------
  128. #undef EXEC_DEBUGINTERACTIVE
  129.  */
  130. /* ----------------
  131.  * EXEC_DEBUGVARIABLEFILE is string, which if defined will
  132.  * be loaded when the executor is initialized.  If this
  133.  * string is not defined then nothing will be loaded..
  134.  *
  135.  * Example:
  136.  *
  137.  * #define EXEC_DEBUGVARIABLEFILE "/a/postgres/cimarron/.pg_debugvars"
  138.  #
  139.  * Note: since these variables are read at execution time,
  140.  * they can't affect the first query.. this hack should be
  141.  * replaced by something better sometime. -cim 11/2/89
  142.  * ----------------
  143. #undef EXEC_DEBUGVARIABLEFILE
  144.  */
  145. /* ----------------------------------------------------------------
  146.  * #defines controlled by above definitions
  147.  *
  148.  * Note: most of these are "incomplete" because I didn't
  149.  *   need the ones not defined.  More should be added
  150.  *   only as necessary -cim 10/26/89
  151.  * ----------------------------------------------------------------
  152.  */
  153. #define T_OR_F(b) (b ? "true" : "false")
  154. #define NULL_OR_TUPLE(slot) (TupIsNull(slot) ? "null" : "a tuple")
  155. /* #define EXEC_TUPLECOUNT - XXX take out for now for executor stubbing -- jolly*/
  156. /* ----------------
  157.  * tuple count debugging defines
  158.  * ----------------
  159.  */
  160. #ifdef EXEC_TUPLECOUNT
  161. extern int NTupleProcessed;
  162. extern int NTupleRetrieved;
  163. extern int NTupleReplaced;
  164. extern int NTupleAppended;
  165. extern int NTupleDeleted;
  166. extern int NIndexTupleProcessed;
  167. extern int NIndexTupleInserted;
  168. #define IncrRetrieved() NTupleRetrieved++
  169. #define IncrAppended() NTupleAppended++
  170. #define IncrDeleted() NTupleDeleted++
  171. #define IncrReplaced() NTupleReplaced++
  172. #define IncrInserted() NTupleInserted++
  173. #define IncrProcessed() NTupleProcessed++
  174. #define IncrIndexProcessed() NIndexTupleProcessed++
  175. #define IncrIndexInserted() NIndexTupleInserted++
  176. #else
  177. /* stop compiler warnings */
  178. #define IncrRetrieved() (void)(0)
  179. #define IncrAppended() (void)(0)
  180. #define IncrDeleted() (void)(0)
  181. #define IncrReplaced() (void)(0)
  182. #define IncrInserted() (void)(0)
  183. #define IncrProcessed() (void)(0)
  184. #define IncrIndexProcessed() (void)(0)
  185. #define IncrIndexInserted() (void)(0)
  186. #endif  /* EXEC_TUPLECOUNT */
  187. /* ----------------
  188.  * memory context debugging defines
  189.  * ----------------
  190.  */
  191. #ifdef EXEC_CONTEXTDEBUG
  192. #define CXT_printf(s) printf(s)
  193. #define CXT1_printf(s, a) printf(s, a)
  194. #else
  195. #define CXT_printf(s)
  196. #define CXT1_printf(s, a)
  197. #endif  /* EXEC_CONTEXTDEBUG */
  198. /* ----------------
  199.  * eutils debugging defines
  200.  * ----------------
  201.  */
  202. #ifdef EXEC_UTILSDEBUG
  203. #define EU_nodeDisplay(l) nodeDisplay(l)
  204. #define EU_printf(s) printf(s)
  205. #define EU1_printf(s, a) printf(s, a)
  206. #define EU2_printf(s, a) printf(s, a, b)
  207. #define EU3_printf(s, a) printf(s, a, b, c)
  208. #define EU4_printf(s, a, b, c, d) printf(s, a, b, c, d)
  209. #else
  210. #define EU_nodeDisplay(l)
  211. #define EU_printf(s)
  212. #define EU1_printf(s, a)
  213. #define EU2_printf(s, a, b)
  214. #define EU3_printf(s, a, b, c)
  215. #define EU4_printf(s, a, b, c, d)
  216. #endif  /* EXEC_UTILSDEBUG */
  217. /* ----------------
  218.  * nest loop debugging defines
  219.  * ----------------
  220.  */
  221. #ifdef EXEC_NESTLOOPDEBUG
  222. #define NL_nodeDisplay(l) nodeDisplay(l)
  223. #define NL_printf(s) printf(s)
  224. #define NL1_printf(s, a) printf(s, a)
  225. #define NL4_printf(s, a, b, c, d) printf(s, a, b, c, d)
  226. #define ENL1_printf(message) printf("ExecNestLoop: %sn", message)
  227. #else
  228. #define NL_nodeDisplay(l)
  229. #define NL_printf(s)
  230. #define NL1_printf(s, a)
  231. #define NL4_printf(s, a, b, c, d)
  232. #define ENL1_printf(message)
  233. #endif  /* EXEC_NESTLOOPDEBUG */
  234. /* ----------------
  235.  * proc node debugging defines
  236.  * ----------------
  237.  */
  238. #ifdef EXEC_PROCDEBUG
  239. #define PN_printf(s) printf(s)
  240. #define PN1_printf(s, p) printf(s, p)
  241. #else
  242. #define PN_printf(s)
  243. #define PN1_printf(s, p)
  244. #endif  /* EXEC_PROCDEBUG */
  245. /* ----------------
  246.  * exec eval / target list debugging defines
  247.  * ----------------
  248.  */
  249. #ifdef EXEC_EVALDEBUG
  250. #define EV_nodeDisplay(l) nodeDisplay(l)
  251. #define EV_printf(s) printf(s)
  252. #define EV1_printf(s, a) printf(s, a)
  253. #define EV5_printf(s, a, b, c, d, e) printf(s, a, b, c, d, e)
  254. #else
  255. #define EV_nodeDisplay(l)
  256. #define EV_printf(s)
  257. #define EV1_printf(s, a)
  258. #define EV5_printf(s, a, b, c, d, e)
  259. #endif  /* EXEC_EVALDEBUG */
  260. /* ----------------
  261.  * scan debugging defines
  262.  * ----------------
  263.  */
  264. #ifdef EXEC_SCANDEBUG
  265. #define S_nodeDisplay(l) nodeDisplay(l)
  266. #define S_printf(s) printf(s)
  267. #define S1_printf(s, p) printf(s, p)
  268. #else
  269. #define S_nodeDisplay(l)
  270. #define S_printf(s)
  271. #define S1_printf(s, p)
  272. #endif  /* EXEC_SCANDEBUG */
  273. /* ----------------
  274.  * sort node debugging defines
  275.  * ----------------
  276.  */
  277. #ifdef EXEC_SORTDEBUG
  278. #define SO_nodeDisplay(l) nodeDisplay(l)
  279. #define SO_printf(s) printf(s)
  280. #define SO1_printf(s, p) printf(s, p)
  281. #else
  282. #define SO_nodeDisplay(l)
  283. #define SO_printf(s)
  284. #define SO1_printf(s, p)
  285. #endif  /* EXEC_SORTDEBUG */
  286. /* ----------------
  287.  * merge join debugging defines
  288.  * ----------------
  289.  */
  290. #ifdef EXEC_MERGEJOINDEBUG
  291. #include "nodes/print.h"
  292. #define MJ_nodeDisplay(l) nodeDisplay(l)
  293. #define MJ_printf(s) printf(s)
  294. #define MJ1_printf(s, p) printf(s, p)
  295. #define MJ2_printf(s, p1, p2) printf(s, p1, p2)
  296. #define MJ_debugtup(tuple, type) debugtup(tuple, type, NULL)
  297. #define MJ_dump(context, state) ExecMergeTupleDump(econtext, state)
  298. #define MJ_DEBUG_QUAL(clause, res) 
  299.   MJ2_printf("  ExecQual(%s, econtext) returns %sn", 
  300.  CppAsString(clause), T_OR_F(res));
  301. #define MJ_DEBUG_MERGE_COMPARE(qual, res) 
  302.   MJ2_printf("  MergeCompare(mergeclauses, %s, ..) returns %sn", 
  303.  CppAsString(qual), T_OR_F(res));
  304. #define MJ_DEBUG_PROC_NODE(slot) 
  305.   MJ2_printf("  %s = ExecProcNode(innerPlan) returns %sn", 
  306.  CppAsString(slot), NULL_OR_TUPLE(slot));
  307. #else
  308. #define MJ_nodeDisplay(l)
  309. #define MJ_printf(s)
  310. #define MJ1_printf(s, p)
  311. #define MJ2_printf(s, p1, p2)
  312. #define MJ_debugtup(tuple, type)
  313. #define MJ_dump(context, state)
  314. #define MJ_DEBUG_QUAL(clause, res)
  315. #define MJ_DEBUG_MERGE_COMPARE(qual, res)
  316. #define MJ_DEBUG_PROC_NODE(slot)
  317. #endif  /* EXEC_MERGEJOINDEBUG */
  318. /* ----------------------------------------------------------------
  319.  * DO NOT DEFINE THESE EVER OR YOU WILL BURN!
  320.  * ----------------------------------------------------------------
  321.  */
  322. /* ----------------
  323.  * NOTYET is placed around any code not yet implemented
  324.  * in the executor.  Only remove these when actually implementing
  325.  * said code.
  326.  * ----------------
  327.  */
  328. #undef NOTYET
  329. extern long NDirectFileRead;
  330. extern long NDirectFileWrite;
  331. #endif  /* ExecDebugIncluded */