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

Commitafaa6b9

Browse files
committed
Marginal performance hack: avoid unnecessary work in expression_tree_mutator.
We can just palloc, instead of using makeNode, when we are going tooverwrite the whole node anyway in the FLATCOPY macro. Also, useFLATCOPY instead of copyObject for common node types Var and Const.
1 parent39a333a commitafaa6b9

File tree

1 file changed

+25
-4
lines changed

1 file changed

+25
-4
lines changed

‎src/backend/optimizer/util/clauses.c

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $PostgreSQL: pgsql/src/backend/optimizer/util/clauses.c,v 1.242 2007/04/27 22:05:48 tgl Exp $
11+
* $PostgreSQL: pgsql/src/backend/optimizer/util/clauses.c,v 1.243 2007/04/30 00:14:54 tgl Exp $
1212
*
1313
* HISTORY
1414
* AUTHORDATEMAJOR EVENT
@@ -3770,12 +3770,12 @@ expression_tree_mutator(Node *node,
37703770
*/
37713771

37723772
#defineFLATCOPY(newnode,node,nodetype) \
3773-
( (newnode) =makeNode(nodetype), \
3773+
( (newnode) = (nodetype *) palloc(sizeof(nodetype)), \
37743774
memcpy((newnode), (node), sizeof(nodetype)) )
37753775

37763776
#defineCHECKFLATCOPY(newnode,node,nodetype)\
37773777
( AssertMacro(IsA((node), nodetype)), \
3778-
(newnode) =makeNode(nodetype), \
3778+
(newnode) = (nodetype *) palloc(sizeof(nodetype)), \
37793779
memcpy((newnode), (node), sizeof(nodetype)) )
37803780

37813781
#defineMUTATE(newfield,oldfield,fieldtype) \
@@ -3789,15 +3789,36 @@ expression_tree_mutator(Node *node,
37893789

37903790
switch (nodeTag(node))
37913791
{
3792+
/*
3793+
* Primitive node types with no expression subnodes. Var and Const
3794+
* are frequent enough to deserve special cases, the others we just
3795+
* use copyObject for.
3796+
*/
37923797
caseT_Var:
3798+
{
3799+
Var*var= (Var*)node;
3800+
Var*newnode;
3801+
3802+
FLATCOPY(newnode,var,Var);
3803+
return (Node*)newnode;
3804+
}
3805+
break;
37933806
caseT_Const:
3807+
{
3808+
Const*oldnode= (Const*)node;
3809+
Const*newnode;
3810+
3811+
FLATCOPY(newnode,oldnode,Const);
3812+
/* XXX we don't bother with datumCopy; should we? */
3813+
return (Node*)newnode;
3814+
}
3815+
break;
37943816
caseT_Param:
37953817
caseT_CoerceToDomainValue:
37963818
caseT_CaseTestExpr:
37973819
caseT_SetToDefault:
37983820
caseT_RangeTblRef:
37993821
caseT_OuterJoinInfo:
3800-
/* primitive node types with no expression subnodes */
38013822
return (Node*)copyObject(node);
38023823
caseT_Aggref:
38033824
{

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp