Add code so that when COPY_PARSE_PLAN_TREES is defined, the copy and
authorTom Lane <tgl@sss.pgh.pa.us>
Sat, 17 Feb 2007 19:33:32 +0000 (19:33 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Sat, 17 Feb 2007 19:33:32 +0000 (19:33 +0000)
equal functions are checked for raw parse trees as well as post-analysis
trees.  This was never very important before, but the upcoming plan cache
control module will need to be able to do copyObject() on raw parse trees.

src/backend/tcop/postgres.c

index 9ca8b981ee7bf22b00ce20c8d7c5107d33f3be49..f00897ee6222e0a4c2353638acbd9ccc5d614bbb 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/tcop/postgres.c,v 1.523 2007/02/15 23:23:23 alvherre Exp $
+ *   $PostgreSQL: pgsql/src/backend/tcop/postgres.c,v 1.524 2007/02/17 19:33:32 tgl Exp $
  *
  * NOTES
  *   this is the "main" module of the postgres backend and
@@ -540,6 +540,19 @@ pg_parse_query(const char *query_string)
    if (log_parser_stats)
        ShowUsage("PARSER STATISTICS");
 
+#ifdef COPY_PARSE_PLAN_TREES
+   /* Optional debugging check: pass raw parsetrees through copyObject() */
+   {
+       List       *new_list = (List *) copyObject(raw_parsetree_list);
+
+       /* This checks both copyObject() and the equal() routines... */
+       if (!equal(new_list, raw_parsetree_list))
+           elog(WARNING, "copyObject() failed to produce an equal raw parse tree");
+       else
+           raw_parsetree_list = new_list;
+   }
+#endif
+
    return raw_parsetree_list;
 }