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

Commite590cee

Browse files
committed
Just about there on de-FastList-ification.
1 parent962a94b commite590cee

File tree

6 files changed

+161
-194
lines changed

6 files changed

+161
-194
lines changed

‎src/backend/optimizer/path/indxpath.c

Lines changed: 33 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
*
1010
*
1111
* IDENTIFICATION
12-
* $PostgreSQL: pgsql/src/backend/optimizer/path/indxpath.c,v 1.160 2004/05/30 23:40:28 neilc Exp $
12+
* $PostgreSQL: pgsql/src/backend/optimizer/path/indxpath.c,v 1.161 2004/06/01 04:47:45 tgl Exp $
1313
*
1414
*-------------------------------------------------------------------------
1515
*/
@@ -237,22 +237,20 @@ create_index_paths(Query *root, RelOptInfo *rel)
237237
staticList*
238238
group_clauses_by_indexkey(RelOptInfo*rel,IndexOptInfo*index)
239239
{
240-
FastListclausegroup_list;
240+
List*clausegroup_list=NIL;
241241
List*restrictinfo_list=rel->baserestrictinfo;
242242
intindexcol=0;
243243
Oid*classes=index->classlist;
244244

245245
if (restrictinfo_list==NIL)
246246
returnNIL;
247247

248-
FastListInit(&clausegroup_list);
249248
do
250249
{
251250
OidcurClass=classes[0];
252-
FastListclausegroup;
251+
List*clausegroup=NIL;
253252
ListCell*l;
254253

255-
FastListInit(&clausegroup);
256254
foreach(l,restrictinfo_list)
257255
{
258256
RestrictInfo*rinfo= (RestrictInfo*)lfirst(l);
@@ -262,24 +260,24 @@ group_clauses_by_indexkey(RelOptInfo *rel, IndexOptInfo *index)
262260
indexcol,
263261
curClass,
264262
rinfo))
265-
FastAppend(&clausegroup,rinfo);
263+
clausegroup=lappend(clausegroup,rinfo);
266264
}
267265

268266
/*
269267
* If no clauses match this key, we're done; we don't want to look
270268
* at keys to its right.
271269
*/
272-
if (FastListValue(&clausegroup)==NIL)
270+
if (clausegroup==NIL)
273271
break;
274272

275-
FastAppend(&clausegroup_list,FastListValue(&clausegroup));
273+
clausegroup_list=lappend(clausegroup_list,clausegroup);
276274

277275
indexcol++;
278276
classes++;
279277

280278
}while (!DoneMatchingIndexKeys(classes));
281279

282-
returnFastListValue(&clausegroup_list);
280+
returnclausegroup_list;
283281
}
284282

285283
/*
@@ -301,21 +299,18 @@ group_clauses_by_indexkey_for_join(Query *root,
301299
Relidsouter_relids,
302300
JoinTypejointype,boolisouterjoin)
303301
{
304-
FastListclausegroup_list;
302+
List*clausegroup_list=NIL;
305303
booljfound= false;
306304
intindexcol=0;
307305
Oid*classes=index->classlist;
308306

309-
FastListInit(&clausegroup_list);
310307
do
311308
{
312309
OidcurClass=classes[0];
313-
FastListclausegroup;
310+
List*clausegroup=NIL;
314311
intnumsources;
315312
ListCell*l;
316313

317-
FastListInit(&clausegroup);
318-
319314
/*
320315
* We can always use plain restriction clauses for the rel. We scan
321316
* these first because we want them first in the clausegroup list
@@ -337,11 +332,11 @@ group_clauses_by_indexkey_for_join(Query *root,
337332
indexcol,
338333
curClass,
339334
rinfo))
340-
FastAppend(&clausegroup,rinfo);
335+
clausegroup=lappend(clausegroup,rinfo);
341336
}
342337

343338
/* found anything in base restrict list? */
344-
numsources= (FastListValue(&clausegroup)!=NIL) ?1 :0;
339+
numsources= (clausegroup!=NIL) ?1 :0;
345340

346341
/* Look for joinclauses that are usable with given outer_relids */
347342
foreach(l,rel->joininfo)
@@ -367,7 +362,7 @@ group_clauses_by_indexkey_for_join(Query *root,
367362
curClass,
368363
rinfo))
369364
{
370-
FastAppend(&clausegroup,rinfo);
365+
clausegroup=lappend(clausegroup,rinfo);
371366
if (!jfoundhere)
372367
{
373368
jfoundhere= true;
@@ -384,22 +379,19 @@ group_clauses_by_indexkey_for_join(Query *root,
384379
*/
385380
if (numsources>1)
386381
{
387-
List*nl;
388-
389-
nl=remove_redundant_join_clauses(root,
390-
FastListValue(&clausegroup),
391-
jointype);
392-
FastListFromList(&clausegroup,nl);
382+
clausegroup=remove_redundant_join_clauses(root,
383+
clausegroup,
384+
jointype);
393385
}
394386

395387
/*
396388
* If no clauses match this key, we're done; we don't want to look
397389
* at keys to its right.
398390
*/
399-
if (FastListValue(&clausegroup)==NIL)
391+
if (clausegroup==NIL)
400392
break;
401393

402-
FastAppend(&clausegroup_list,FastListValue(&clausegroup));
394+
clausegroup_list=lappend(clausegroup_list,clausegroup);
403395

404396
indexcol++;
405397
classes++;
@@ -410,7 +402,7 @@ group_clauses_by_indexkey_for_join(Query *root,
410402
if (!jfound)
411403
returnNIL;
412404

413-
returnFastListValue(&clausegroup_list);
405+
returnclausegroup_list;
414406
}
415407

416408

@@ -438,28 +430,25 @@ group_clauses_by_indexkey_for_or(RelOptInfo *rel,
438430
IndexOptInfo*index,
439431
Expr*orsubclause)
440432
{
441-
FastListclausegroup_list;
433+
List*clausegroup_list=NIL;
442434
boolmatched= false;
443435
intindexcol=0;
444436
Oid*classes=index->classlist;
445437

446-
FastListInit(&clausegroup_list);
447438
do
448439
{
449440
OidcurClass=classes[0];
450-
FastListclausegroup;
441+
List*clausegroup=NIL;
451442
ListCell*item;
452443

453-
FastListInit(&clausegroup);
454-
455444
/* Try to match the OR subclause to the index key */
456445
if (IsA(orsubclause,RestrictInfo))
457446
{
458447
if (match_clause_to_indexcol(rel,index,
459448
indexcol,curClass,
460449
(RestrictInfo*)orsubclause))
461450
{
462-
FastAppend(&clausegroup,orsubclause);
451+
clausegroup=lappend(clausegroup,orsubclause);
463452
matched= true;
464453
}
465454
}
@@ -474,7 +463,7 @@ group_clauses_by_indexkey_for_or(RelOptInfo *rel,
474463
indexcol,curClass,
475464
subsubclause))
476465
{
477-
FastAppend(&clausegroup,subsubclause);
466+
clausegroup=lappend(clausegroup,subsubclause);
478467
matched= true;
479468
}
480469
}
@@ -487,7 +476,7 @@ group_clauses_by_indexkey_for_or(RelOptInfo *rel,
487476
* XXX should we always search the top-level list? Slower but
488477
* could sometimes yield a better plan.
489478
*/
490-
if (FastListValue(&clausegroup)==NIL)
479+
if (clausegroup==NIL)
491480
{
492481
foreach(item,rel->baserestrictinfo)
493482
{
@@ -496,18 +485,18 @@ group_clauses_by_indexkey_for_or(RelOptInfo *rel,
496485
if (match_clause_to_indexcol(rel,index,
497486
indexcol,curClass,
498487
rinfo))
499-
FastAppend(&clausegroup,rinfo);
488+
clausegroup=lappend(clausegroup,rinfo);
500489
}
501490
}
502491

503492
/*
504493
* If still no clauses match this key, we're done; we don't want
505494
* to look at keys to its right.
506495
*/
507-
if (FastListValue(&clausegroup)==NIL)
496+
if (clausegroup==NIL)
508497
break;
509498

510-
FastAppend(&clausegroup_list,FastListValue(&clausegroup));
499+
clausegroup_list=lappend(clausegroup_list,clausegroup);
511500

512501
indexcol++;
513502
classes++;
@@ -517,7 +506,7 @@ group_clauses_by_indexkey_for_or(RelOptInfo *rel,
517506
if (!matched)
518507
returnNIL;
519508

520-
returnFastListValue(&clausegroup_list);
509+
returnclausegroup_list;
521510
}
522511

523512

@@ -2011,14 +2000,13 @@ match_special_index_operator(Expr *clause, Oid opclass,
20112000
List*
20122001
expand_indexqual_conditions(IndexOptInfo*index,List*clausegroups)
20132002
{
2014-
FastListresultquals;
2003+
List*resultquals=NIL;
20152004
ListCell*clausegroup_item;
20162005
Oid*classes=index->classlist;
20172006

20182007
if (clausegroups==NIL)
20192008
returnNIL;
20202009

2021-
FastListInit(&resultquals);
20222010
clausegroup_item=list_head(clausegroups);
20232011
do
20242012
{
@@ -2029,17 +2017,18 @@ expand_indexqual_conditions(IndexOptInfo *index, List *clausegroups)
20292017
{
20302018
RestrictInfo*rinfo= (RestrictInfo*)lfirst(l);
20312019

2032-
FastConc(&resultquals,
2033-
expand_indexqual_condition(rinfo,curClass));
2020+
resultquals=list_concat(resultquals,
2021+
expand_indexqual_condition(rinfo,
2022+
curClass));
20342023
}
20352024

20362025
clausegroup_item=lnext(clausegroup_item);
20372026
classes++;
20382027
}while (clausegroup_item!=NULL&& !DoneMatchingIndexKeys(classes));
20392028

2040-
Assert(clausegroup_item==NULL);/* else more groups than indexkeys... */
2029+
Assert(clausegroup_item==NULL);/* else more groups than indexkeys */
20412030

2042-
returnFastListValue(&resultquals);
2031+
returnresultquals;
20432032
}
20442033

20452034
/*

‎src/backend/optimizer/path/orindxpath.c

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $PostgreSQL: pgsql/src/backend/optimizer/path/orindxpath.c,v 1.59 2004/05/30 23:40:28 neilc Exp $
11+
* $PostgreSQL: pgsql/src/backend/optimizer/path/orindxpath.c,v 1.60 2004/06/01 04:47:45 tgl Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -243,20 +243,14 @@ best_or_subclause_indexes(Query *root,
243243
RelOptInfo*rel,
244244
List*subclauses)
245245
{
246-
FastListinfos;
247-
FastListclauses;
248-
FastListquals;
249-
Costpath_startup_cost;
250-
Costpath_total_cost;
246+
List*infos=NIL;
247+
List*clauses=NIL;
248+
List*quals=NIL;
249+
Costpath_startup_cost=0;
250+
Costpath_total_cost=0;
251251
ListCell*slist;
252252
IndexPath*pathnode;
253253

254-
FastListInit(&infos);
255-
FastListInit(&clauses);
256-
FastListInit(&quals);
257-
path_startup_cost=0;
258-
path_total_cost=0;
259-
260254
/* Gather info for each OR subclause */
261255
foreach(slist,subclauses)
262256
{
@@ -273,9 +267,9 @@ best_or_subclause_indexes(Query *root,
273267
&best_startup_cost,&best_total_cost))
274268
returnNULL;/* failed to match this subclause */
275269

276-
FastAppend(&infos,best_indexinfo);
277-
FastAppend(&clauses,best_indexclauses);
278-
FastAppend(&quals,best_indexquals);
270+
infos=lappend(infos,best_indexinfo);
271+
clauses=lappend(clauses,best_indexclauses);
272+
quals=lappend(quals,best_indexquals);
279273
/*
280274
* Path startup_cost is the startup cost for the first index scan only;
281275
* startup costs for later scans will be paid later on, so they just
@@ -303,9 +297,9 @@ best_or_subclause_indexes(Query *root,
303297
*/
304298
pathnode->path.pathkeys=NIL;
305299

306-
pathnode->indexinfo=FastListValue(&infos);
307-
pathnode->indexclauses=FastListValue(&clauses);
308-
pathnode->indexquals=FastListValue(&quals);
300+
pathnode->indexinfo=infos;
301+
pathnode->indexclauses=clauses;
302+
pathnode->indexquals=quals;
309303

310304
/* It's not an innerjoin path. */
311305
pathnode->isjoininner= false;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp