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

Commite638196

Browse files
committed
Major planner/optimizer revision: get rid of PathOrder node type,
store all ordering information in pathkeys lists (which are now lists oflists of PathKeyItem nodes, not just lists of lists of vars). This wasa big win --- the code is smaller and IMHO more understandable than itwas, even though it handles more cases. I believe the node changes willnot force an initdb for anyone; planner nodes don't show up in storedrules.
1 parent08320bf commite638196

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+1916
-3249
lines changed

‎src/backend/nodes/copyfuncs.c

Lines changed: 26 additions & 192 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.90 1999/08/09 06:20:23 momjian Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.91 1999/08/16 02:17:41 tgl Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -1030,10 +1030,6 @@ _copyRelOptInfo(RelOptInfo *from)
10301030
newnode->indexkeys[len]=0;
10311031
}
10321032

1033-
newnode->relam=from->relam;
1034-
newnode->indproc=from->indproc;
1035-
Node_Copy(from,newnode,indpred);
1036-
10371033
if (from->ordering)
10381034
{
10391035
for (len=0;from->ordering[len]!=0;len++)
@@ -1044,6 +1040,10 @@ _copyRelOptInfo(RelOptInfo *from)
10441040
newnode->ordering[len]=0;
10451041
}
10461042

1043+
newnode->relam=from->relam;
1044+
newnode->indproc=from->indproc;
1045+
Node_Copy(from,newnode,indpred);
1046+
10471047
Node_Copy(from,newnode,restrictinfo);
10481048
Node_Copy(from,newnode,joininfo);
10491049
Node_Copy(from,newnode,innerjoin);
@@ -1061,8 +1061,6 @@ _copyRelOptInfo(RelOptInfo *from)
10611061
staticvoid
10621062
CopyPathFields(Path*from,Path*newnode)
10631063
{
1064-
newnode->pathtype=from->pathtype;
1065-
10661064
/*
10671065
* Modify the next line, since it causes the copying to cycle (i.e.
10681066
* the parent points right back here! -- JMH, 7/7/92. Old version:
@@ -1072,32 +1070,9 @@ CopyPathFields(Path *from, Path *newnode)
10721070

10731071
newnode->path_cost=from->path_cost;
10741072

1075-
newnode->pathorder=makeNode(PathOrder);
1076-
newnode->pathorder->ordtype=from->pathorder->ordtype;
1077-
if (from->pathorder->ordtype==SORTOP_ORDER)
1078-
{
1079-
intlen,
1080-
i;
1081-
Oid*ordering=from->pathorder->ord.sortop;
1082-
1083-
if (ordering)
1084-
{
1085-
for (len=0;ordering[len]!=0;len++)
1086-
;
1087-
newnode->pathorder->ord.sortop= (Oid*)palloc(sizeof(Oid)* (len+1));
1088-
for (i=0;i<len;i++)
1089-
newnode->pathorder->ord.sortop[i]=ordering[i];
1090-
newnode->pathorder->ord.sortop[len]=0;
1091-
}
1092-
}
1093-
else
1094-
Node_Copy(from,newnode,pathorder->ord.merge);
1073+
newnode->pathtype=from->pathtype;
10951074

10961075
Node_Copy(from,newnode,pathkeys);
1097-
1098-
newnode->outerjoincost=from->outerjoincost;
1099-
1100-
newnode->joinid=listCopy(from->joinid);
11011076
}
11021077

11031078
/* ----------------
@@ -1135,32 +1110,20 @@ _copyIndexPath(IndexPath *from)
11351110
*/
11361111
newnode->indexid=listCopy(from->indexid);
11371112
Node_Copy(from,newnode,indexqual);
1138-
1139-
if (from->indexkeys)
1140-
{
1141-
inti,
1142-
len;
1143-
1144-
for (len=0;from->indexkeys[len]!=0;len++)
1145-
;
1146-
newnode->indexkeys= (int*)palloc(sizeof(int)* (len+1));
1147-
for (i=0;i<len;i++)
1148-
newnode->indexkeys[i]=from->indexkeys[i];
1149-
newnode->indexkeys[len]=0;
1150-
}
1113+
newnode->joinrelids=listCopy(from->joinrelids);
11511114

11521115
returnnewnode;
11531116
}
11541117

11551118
/* ----------------
1156-
*CopyNestPathFields
1119+
*CopyJoinPathFields
11571120
*
1158-
*This function copies the fields of theNestPath node. It is used by
1159-
*all the copy functions for classes which inherit fromNestPath.
1121+
*This function copies the fields of theJoinPath node. It is used by
1122+
*all the copy functions for classes which inherit fromJoinPath.
11601123
* ----------------
11611124
*/
11621125
staticvoid
1163-
CopyNestPathFields(NestPath*from,NestPath*newnode)
1126+
CopyJoinPathFields(JoinPath*from,JoinPath*newnode)
11641127
{
11651128
Node_Copy(from,newnode,pathinfo);
11661129
Node_Copy(from,newnode,outerjoinpath);
@@ -1181,7 +1144,7 @@ _copyNestPath(NestPath *from)
11811144
* ----------------
11821145
*/
11831146
CopyPathFields((Path*)from, (Path*)newnode);
1184-
CopyNestPathFields(from,newnode);
1147+
CopyJoinPathFields((JoinPath*)from, (JoinPath*)newnode);
11851148

11861149
returnnewnode;
11871150
}
@@ -1200,7 +1163,7 @@ _copyMergePath(MergePath *from)
12001163
* ----------------
12011164
*/
12021165
CopyPathFields((Path*)from, (Path*)newnode);
1203-
CopyNestPathFields((NestPath*)from, (NestPath*)newnode);
1166+
CopyJoinPathFields((JoinPath*)from, (JoinPath*)newnode);
12041167

12051168
/* ----------------
12061169
*copy the remainder of the node
@@ -1227,76 +1190,32 @@ _copyHashPath(HashPath *from)
12271190
* ----------------
12281191
*/
12291192
CopyPathFields((Path*)from, (Path*)newnode);
1230-
CopyNestPathFields((NestPath*)from, (NestPath*)newnode);
1193+
CopyJoinPathFields((JoinPath*)from, (JoinPath*)newnode);
12311194

12321195
/* ----------------
12331196
*copy remainder of node
12341197
* ----------------
12351198
*/
12361199
Node_Copy(from,newnode,path_hashclauses);
1237-
Node_Copy(from,newnode,outerhashkeys);
1238-
Node_Copy(from,newnode,innerhashkeys);
12391200

12401201
returnnewnode;
12411202
}
12421203

12431204
/* ----------------
1244-
*_copyOrderKey
1205+
*_copyPathKeyItem
12451206
* ----------------
12461207
*/
1247-
staticOrderKey*
1248-
_copyOrderKey(OrderKey*from)
1208+
staticPathKeyItem*
1209+
_copyPathKeyItem(PathKeyItem*from)
12491210
{
1250-
OrderKey*newnode=makeNode(OrderKey);
1211+
PathKeyItem*newnode=makeNode(PathKeyItem);
12511212

12521213
/* ----------------
12531214
*copy remainder of node
12541215
* ----------------
12551216
*/
1256-
newnode->attribute_number=from->attribute_number;
1257-
newnode->array_index=from->array_index;
1258-
1259-
returnnewnode;
1260-
}
1261-
1262-
1263-
/* ----------------
1264-
*_copyJoinKey
1265-
* ----------------
1266-
*/
1267-
staticJoinKey*
1268-
_copyJoinKey(JoinKey*from)
1269-
{
1270-
JoinKey*newnode=makeNode(JoinKey);
1271-
1272-
/* ----------------
1273-
*copy remainder of node
1274-
* ----------------
1275-
*/
1276-
Node_Copy(from,newnode,outer);
1277-
Node_Copy(from,newnode,inner);
1278-
1279-
returnnewnode;
1280-
}
1281-
1282-
/* ----------------
1283-
*_copyMergeOrder
1284-
* ----------------
1285-
*/
1286-
staticMergeOrder*
1287-
_copyMergeOrder(MergeOrder*from)
1288-
{
1289-
MergeOrder*newnode=makeNode(MergeOrder);
1290-
1291-
/* ----------------
1292-
*copy remainder of node
1293-
* ----------------
1294-
*/
1295-
newnode->join_operator=from->join_operator;
1296-
newnode->left_operator=from->left_operator;
1297-
newnode->right_operator=from->right_operator;
1298-
newnode->left_type=from->left_type;
1299-
newnode->right_type=from->right_type;
1217+
Node_Copy(from,newnode,key);
1218+
newnode->sortop=from->sortop;
13001219

13011220
returnnewnode;
13021221
}
@@ -1315,83 +1234,16 @@ _copyRestrictInfo(RestrictInfo *from)
13151234
* ----------------
13161235
*/
13171236
Node_Copy(from,newnode,clause);
1318-
13191237
newnode->selectivity=from->selectivity;
1320-
1321-
Node_Copy(from,newnode,indexids);
1322-
Node_Copy(from,newnode,mergejoinorder);
1238+
Node_Copy(from,newnode,subclauseindices);
1239+
newnode->mergejoinoperator=from->mergejoinoperator;
1240+
newnode->left_sortop=from->left_sortop;
1241+
newnode->right_sortop=from->right_sortop;
13231242
newnode->hashjoinoperator=from->hashjoinoperator;
13241243

13251244
returnnewnode;
13261245
}
13271246

1328-
/* ----------------
1329-
*CopyJoinMethodFields
1330-
*
1331-
*This function copies the fields of the JoinMethod node. It is used by
1332-
*all the copy functions for classes which inherit from JoinMethod.
1333-
* ----------------
1334-
*/
1335-
staticvoid
1336-
CopyJoinMethodFields(JoinMethod*from,JoinMethod*newnode)
1337-
{
1338-
Node_Copy(from,newnode,jmkeys);
1339-
Node_Copy(from,newnode,clauses);
1340-
return;
1341-
}
1342-
1343-
/* ----------------
1344-
*_copyJoinMethod
1345-
* ----------------
1346-
*/
1347-
staticJoinMethod*
1348-
_copyJoinMethod(JoinMethod*from)
1349-
{
1350-
JoinMethod*newnode=makeNode(JoinMethod);
1351-
1352-
CopyJoinMethodFields(from,newnode);
1353-
1354-
returnnewnode;
1355-
}
1356-
1357-
/* ----------------
1358-
*_copyHashInfo
1359-
* ----------------
1360-
*/
1361-
staticHashInfo*
1362-
_copyHashInfo(HashInfo*from)
1363-
{
1364-
HashInfo*newnode=makeNode(HashInfo);
1365-
1366-
/* ----------------
1367-
*copy remainder of node
1368-
* ----------------
1369-
*/
1370-
CopyJoinMethodFields((JoinMethod*)from, (JoinMethod*)newnode);
1371-
newnode->hashop=from->hashop;
1372-
1373-
returnnewnode;
1374-
}
1375-
1376-
/* ----------------
1377-
*_copyMergeInfo
1378-
* ----------------
1379-
*/
1380-
staticMergeInfo*
1381-
_copyMergeInfo(MergeInfo*from)
1382-
{
1383-
MergeInfo*newnode=makeNode(MergeInfo);
1384-
1385-
/* ----------------
1386-
*copy remainder of node
1387-
* ----------------
1388-
*/
1389-
CopyJoinMethodFields((JoinMethod*)from, (JoinMethod*)newnode);
1390-
Node_Copy(from,newnode,m_ordering);
1391-
1392-
returnnewnode;
1393-
}
1394-
13951247
/* ----------------
13961248
*_copyJoinInfo
13971249
* ----------------
@@ -1408,9 +1260,6 @@ _copyJoinInfo(JoinInfo *from)
14081260
newnode->unjoined_relids=listCopy(from->unjoined_relids);
14091261
Node_Copy(from,newnode,jinfo_restrictinfo);
14101262

1411-
newnode->mergejoinable=from->mergejoinable;
1412-
newnode->hashjoinable=from->hashjoinable;
1413-
14141263
returnnewnode;
14151264
}
14161265

@@ -1756,27 +1605,12 @@ copyObject(void *from)
17561605
caseT_HashPath:
17571606
retval=_copyHashPath(from);
17581607
break;
1759-
caseT_OrderKey:
1760-
retval=_copyOrderKey(from);
1761-
break;
1762-
caseT_JoinKey:
1763-
retval=_copyJoinKey(from);
1764-
break;
1765-
caseT_MergeOrder:
1766-
retval=_copyMergeOrder(from);
1608+
caseT_PathKeyItem:
1609+
retval=_copyPathKeyItem(from);
17671610
break;
17681611
caseT_RestrictInfo:
17691612
retval=_copyRestrictInfo(from);
17701613
break;
1771-
caseT_JoinMethod:
1772-
retval=_copyJoinMethod(from);
1773-
break;
1774-
caseT_HashInfo:
1775-
retval=_copyHashInfo(from);
1776-
break;
1777-
caseT_MergeInfo:
1778-
retval=_copyMergeInfo(from);
1779-
break;
17801614
caseT_JoinInfo:
17811615
retval=_copyJoinInfo(from);
17821616
break;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp