Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit e638196

Browse files
committed
Major planner/optimizer revision: get rid of PathOrder node type,
store all ordering information in pathkeys lists (which are now lists of lists of PathKeyItem nodes, not just lists of lists of vars). This was a big win --- the code is smaller and IMHO more understandable than it was, even though it handles more cases. I believe the node changes will not force an initdb for anyone; planner nodes don't show up in stored rules.
1 parent 08320bf commit e638196

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
static void
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-
int len,
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-
int i,
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
return newnode;
11531116
}
11541117

11551118
/* ----------------
1156-
* CopyNestPathFields
1119+
* CopyJoinPathFields
11571120
*
1158-
* This function copies the fields of the NestPath node. It is used by
1159-
* all the copy functions for classes which inherit from NestPath.
1121+
* This function copies the fields of the JoinPath node. It is used by
1122+
* all the copy functions for classes which inherit from JoinPath.
11601123
* ----------------
11611124
*/
11621125
static void
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
return newnode;
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
return newnode;
12411202
}
12421203

12431204
/* ----------------
1244-
* _copyOrderKey
1205+
* _copyPathKeyItem
12451206
* ----------------
12461207
*/
1247-
static OrderKey *
1248-
_copyOrderKey(OrderKey *from)
1208+
static PathKeyItem *
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-
return newnode;
1260-
}
1261-
1262-
1263-
/* ----------------
1264-
* _copyJoinKey
1265-
* ----------------
1266-
*/
1267-
static JoinKey *
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-
return newnode;
1280-
}
1281-
1282-
/* ----------------
1283-
* _copyMergeOrder
1284-
* ----------------
1285-
*/
1286-
static MergeOrder *
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
return newnode;
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
return newnode;
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-
static void
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-
static JoinMethod *
1348-
_copyJoinMethod(JoinMethod *from)
1349-
{
1350-
JoinMethod *newnode = makeNode(JoinMethod);
1351-
1352-
CopyJoinMethodFields(from, newnode);
1353-
1354-
return newnode;
1355-
}
1356-
1357-
/* ----------------
1358-
* _copyHashInfo
1359-
* ----------------
1360-
*/
1361-
static HashInfo *
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-
return newnode;
1374-
}
1375-
1376-
/* ----------------
1377-
* _copyMergeInfo
1378-
* ----------------
1379-
*/
1380-
static MergeInfo *
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-
return newnode;
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
return newnode;
14151264
}
14161265

@@ -1756,27 +1605,12 @@ copyObject(void *from)
17561605
case T_HashPath:
17571606
retval = _copyHashPath(from);
17581607
break;
1759-
case T_OrderKey:
1760-
retval = _copyOrderKey(from);
1761-
break;
1762-
case T_JoinKey:
1763-
retval = _copyJoinKey(from);
1764-
break;
1765-
case T_MergeOrder:
1766-
retval = _copyMergeOrder(from);
1608+
case T_PathKeyItem:
1609+
retval = _copyPathKeyItem(from);
17671610
break;
17681611
case T_RestrictInfo:
17691612
retval = _copyRestrictInfo(from);
17701613
break;
1771-
case T_JoinMethod:
1772-
retval = _copyJoinMethod(from);
1773-
break;
1774-
case T_HashInfo:
1775-
retval = _copyHashInfo(from);
1776-
break;
1777-
case T_MergeInfo:
1778-
retval = _copyMergeInfo(from);
1779-
break;
17801614
case T_JoinInfo:
17811615
retval = _copyJoinInfo(from);
17821616
break;

0 commit comments

Comments
 (0)