]> granicus.if.org Git - postgresql/commitdiff
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;
 }