Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitef3386a

Browse files
committed
Fix performance problem in fireRIRonSubselect: with nested subqueries,
fireRIRonSubselect was invoked twice at each subselect, leading to anexponential amount of wasted effort.
1 parent117fa25 commitef3386a

File tree

1 file changed

+6
-12
lines changed

1 file changed

+6
-12
lines changed

‎src/backend/rewrite/rewriteHandler.c

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteHandler.c,v 1.67 2000/01/27 18:11:37 tgl Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteHandler.c,v 1.68 2000/03/12 18:57:05 tgl Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -958,10 +958,6 @@ fireRIRonSubselect(Node *node, void *context)
958958
return false;
959959
if (IsA(node,SubLink))
960960
{
961-
/*
962-
* Standard expression_tree_walker will not recurse into subselect,
963-
* but here we must do so.
964-
*/
965961
SubLink*sub= (SubLink*)node;
966962
Query*qry;
967963

@@ -971,14 +967,12 @@ fireRIRonSubselect(Node *node, void *context)
971967
/* Do what we came for */
972968
qry=fireRIRrules((Query*) (sub->subselect));
973969
sub->subselect= (Node*)qry;
974-
/* Must recurse to handle any sub-subselects! */
975-
if (fireRIRonSubselect((Node*)qry,context))
976-
return true;
970+
/* Need not recurse into subselect, because fireRIRrules did it */
977971
return false;
978972
}
979973
if (IsA(node,Query))
980974
{
981-
/* Reach hereafter recursing down into subselect above... */
975+
/* Reach herewhen called from fireRIRrules */
982976
Query*qry= (Query*)node;
983977

984978
if (fireRIRonSubselect((Node*) (qry->targetList),context))
@@ -1107,12 +1101,12 @@ fireRIRrules(Query *parsetree)
11071101
heap_close(rel,AccessShareLock);
11081102
}
11091103

1110-
if (parsetree->hasSubLinks)
1111-
fireRIRonSubselect((Node*)parsetree,NULL);
1112-
11131104
if (parsetree->hasAggs)
11141105
parsetree->qual=modifyAggrefQual(parsetree->qual,parsetree);
11151106

1107+
if (parsetree->hasSubLinks)
1108+
fireRIRonSubselect((Node*)parsetree,NULL);
1109+
11161110
returnparsetree;
11171111
}
11181112

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp