mirror of
https://github.com/postgres/postgres.git
synced 2025-04-21 12:05:57 +03:00
Fix another place broken by new List implementation :-(. Per example
from goranpop@nspoint.net. I think this escaped notice because in simple cases the list is NIL on entry.
This commit is contained in:
parent
84dbd5a8f6
commit
dd29fc2f61
@ -6,7 +6,7 @@
|
|||||||
* Portions Copyright (c) 1996-2004, PostgreSQL Global Development Group
|
* Portions Copyright (c) 1996-2004, PostgreSQL Global Development Group
|
||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* Portions Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $PostgreSQL: pgsql/src/backend/optimizer/geqo/geqo_eval.c,v 1.71 2004/08/29 05:06:43 momjian Exp $
|
* $PostgreSQL: pgsql/src/backend/optimizer/geqo/geqo_eval.c,v 1.72 2004/12/15 21:13:34 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -80,12 +80,17 @@ geqo_eval(Gene *tour, int num_gene, GeqoEvalData *evaldata)
|
|||||||
oldcxt = MemoryContextSwitchTo(mycontext);
|
oldcxt = MemoryContextSwitchTo(mycontext);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* preserve root->join_rel_list, which gimme_tree changes; without
|
* gimme_tree will add entries to root->join_rel_list, which may or may
|
||||||
* this, it'll be pointing at recycled storage after the
|
* not already contain some entries. The newly added entries will be
|
||||||
* MemoryContextDelete below.
|
* recycled by the MemoryContextDelete below, so we must ensure that
|
||||||
|
* the list is restored to its former state before exiting. With the
|
||||||
|
* new List implementation, the easiest way is to make a duplicate list
|
||||||
|
* that gimme_tree can modify.
|
||||||
*/
|
*/
|
||||||
savelist = evaldata->root->join_rel_list;
|
savelist = evaldata->root->join_rel_list;
|
||||||
|
|
||||||
|
evaldata->root->join_rel_list = list_copy(savelist);
|
||||||
|
|
||||||
/* construct the best path for the given combination of relations */
|
/* construct the best path for the given combination of relations */
|
||||||
joinrel = gimme_tree(tour, num_gene, evaldata);
|
joinrel = gimme_tree(tour, num_gene, evaldata);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user