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

Commitedf0b5f

Browse files
committed
Get rid of IndexIsUniqueNoCache() kluge by the simple expedient of
passing the index-is-unique flag to index build routines (duh! ...why wasn't it done this way to begin with?). Aside from eliminatingan eyesore, this should save a few milliseconds in btree index creationbecause a full scan of pg_index is not needed any more.
1 parentd03a933 commitedf0b5f

File tree

13 files changed

+89
-160
lines changed

13 files changed

+89
-160
lines changed

‎src/backend/access/gist/gist.c

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
*
77
*
88
* IDENTIFICATION
9-
* $Header: /cvsroot/pgsql/src/backend/access/gist/gist.c,v 1.58 2000/06/15 03:31:53 momjian Exp $
9+
* $Header: /cvsroot/pgsql/src/backend/access/gist/gist.c,v 1.59 2000/06/17 23:41:12 tgl Exp $
1010
*
1111
*-------------------------------------------------------------------------
1212
*/
@@ -67,13 +67,12 @@ gistbuild(PG_FUNCTION_ARGS)
6767
Relationindex= (Relation)PG_GETARG_POINTER(1);
6868
int32natts=PG_GETARG_INT32(2);
6969
AttrNumber*attnum= (AttrNumber*)PG_GETARG_POINTER(3);
70+
FuncIndexInfo*finfo= (FuncIndexInfo*)PG_GETARG_POINTER(4);
71+
PredInfo*predInfo= (PredInfo*)PG_GETARG_POINTER(5);
7072
#ifdefNOT_USED
71-
IndexStrategyistrat= (IndexStrategy)PG_GETARG_POINTER(4);
72-
uint16pcount=PG_GETARG_UINT16(5);
73-
Datum*params= (Datum*)PG_GETARG_POINTER(6);
73+
boolunique=PG_GETARG_BOOL(6);
74+
IndexStrategyistrat= (IndexStrategy)PG_GETARG_POINTER(7);
7475
#endif
75-
FuncIndexInfo*finfo= (FuncIndexInfo*)PG_GETARG_POINTER(7);
76-
PredInfo*predInfo= (PredInfo*)PG_GETARG_POINTER(8);
7776
HeapScanDescscan;
7877
AttrNumberi;
7978
HeapTuplehtup;

‎src/backend/access/hash/hash.c

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/access/hash/hash.c,v 1.39 2000/06/14 05:24:35 tgl Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/access/hash/hash.c,v 1.40 2000/06/17 23:41:13 tgl Exp $
1212
*
1313
* NOTES
1414
* This file contains only the public interface routines.
@@ -43,13 +43,12 @@ hashbuild(PG_FUNCTION_ARGS)
4343
Relationindex= (Relation)PG_GETARG_POINTER(1);
4444
int32natts=PG_GETARG_INT32(2);
4545
AttrNumber*attnum= (AttrNumber*)PG_GETARG_POINTER(3);
46+
FuncIndexInfo*finfo= (FuncIndexInfo*)PG_GETARG_POINTER(4);
47+
PredInfo*predInfo= (PredInfo*)PG_GETARG_POINTER(5);
4648
#ifdefNOT_USED
47-
IndexStrategyistrat= (IndexStrategy)PG_GETARG_POINTER(4);
48-
uint16pcount=PG_GETARG_UINT16(5);
49-
Datum*params= (Datum*)PG_GETARG_POINTER(6);
49+
boolunique=PG_GETARG_BOOL(6);
50+
IndexStrategyistrat= (IndexStrategy)PG_GETARG_POINTER(7);
5051
#endif
51-
FuncIndexInfo*finfo= (FuncIndexInfo*)PG_GETARG_POINTER(7);
52-
PredInfo*predInfo= (PredInfo*)PG_GETARG_POINTER(8);
5352
HeapScanDeschscan;
5453
HeapTuplehtup;
5554
IndexTupleitup;

‎src/backend/access/nbtree/nbtree.c

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
* Portions Copyright (c) 1994, Regents of the University of California
1313
*
1414
* IDENTIFICATION
15-
* $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtree.c,v 1.58 2000/06/15 04:09:36 momjian Exp $
15+
* $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtree.c,v 1.59 2000/06/17 23:41:16 tgl Exp $
1616
*
1717
*-------------------------------------------------------------------------
1818
*/
@@ -47,13 +47,12 @@ btbuild(PG_FUNCTION_ARGS)
4747
Relationindex= (Relation)PG_GETARG_POINTER(1);
4848
int32natts=PG_GETARG_INT32(2);
4949
AttrNumber*attnum= (AttrNumber*)PG_GETARG_POINTER(3);
50+
FuncIndexInfo*finfo= (FuncIndexInfo*)PG_GETARG_POINTER(4);
51+
PredInfo*predInfo= (PredInfo*)PG_GETARG_POINTER(5);
52+
boolunique=PG_GETARG_BOOL(6);
5053
#ifdefNOT_USED
51-
IndexStrategyistrat= (IndexStrategy)PG_GETARG_POINTER(4);
52-
uint16pcount=PG_GETARG_UINT16(5);
53-
Datum*params= (Datum*)PG_GETARG_POINTER(6);
54+
IndexStrategyistrat= (IndexStrategy)PG_GETARG_POINTER(7);
5455
#endif
55-
FuncIndexInfo*finfo= (FuncIndexInfo*)PG_GETARG_POINTER(7);
56-
PredInfo*predInfo= (PredInfo*)PG_GETARG_POINTER(8);
5756
HeapScanDeschscan;
5857
HeapTuplehtup;
5958
IndexTupleitup;
@@ -76,7 +75,6 @@ btbuild(PG_FUNCTION_ARGS)
7675
Node*pred,
7776
*oldPred;
7877
BTSpool*spool=NULL;
79-
boolisunique;
8078
boolusefast;
8179

8280
/* note that this is a new btree */
@@ -98,9 +96,6 @@ btbuild(PG_FUNCTION_ARGS)
9896
ResetUsage();
9997
#endif/* BTREE_BUILD_STATS */
10098

101-
/* see if index is unique */
102-
isunique=IndexIsUniqueNoCache(RelationGetRelid(index));
103-
10499
/* initialize the btree index metadata page (if this is a new index) */
105100
if (oldPred==NULL)
106101
_bt_metapinit(index);
@@ -146,7 +141,7 @@ btbuild(PG_FUNCTION_ARGS)
146141

147142
if (usefast)
148143
{
149-
spool=_bt_spoolinit(index,isunique);
144+
spool=_bt_spoolinit(index,unique);
150145
res= (InsertIndexResult)NULL;
151146
}
152147

@@ -254,7 +249,7 @@ btbuild(PG_FUNCTION_ARGS)
254249
if (usefast)
255250
_bt_spool(btitem,spool);
256251
else
257-
res=_bt_doinsert(index,btitem,isunique,heap);
252+
res=_bt_doinsert(index,btitem,unique,heap);
258253

259254
pfree(btitem);
260255
pfree(itup);

‎src/backend/access/rtree/rtree.c

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/access/rtree/Attic/rtree.c,v 1.49 2000/06/14 05:24:43 tgl Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/access/rtree/Attic/rtree.c,v 1.50 2000/06/17 23:41:22 tgl Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -66,13 +66,12 @@ rtbuild(PG_FUNCTION_ARGS)
6666
Relationindex= (Relation)PG_GETARG_POINTER(1);
6767
int32natts=PG_GETARG_INT32(2);
6868
AttrNumber*attnum= (AttrNumber*)PG_GETARG_POINTER(3);
69+
FuncIndexInfo*finfo= (FuncIndexInfo*)PG_GETARG_POINTER(4);
70+
PredInfo*predInfo= (PredInfo*)PG_GETARG_POINTER(5);
6971
#ifdefNOT_USED
70-
IndexStrategyistrat= (IndexStrategy)PG_GETARG_POINTER(4);
71-
uint16pcount=PG_GETARG_UINT16(5);
72-
Datum*params= (Datum*)PG_GETARG_POINTER(6);
72+
boolunique=PG_GETARG_BOOL(6);
73+
IndexStrategyistrat= (IndexStrategy)PG_GETARG_POINTER(7);
7374
#endif
74-
FuncIndexInfo*finfo= (FuncIndexInfo*)PG_GETARG_POINTER(7);
75-
PredInfo*predInfo= (PredInfo*)PG_GETARG_POINTER(8);
7675
HeapScanDescscan;
7776
AttrNumberi;
7877
HeapTuplehtup;

‎src/backend/bootstrap/bootstrap.c

Lines changed: 11 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
* Portions Copyright (c) 1994, Regents of the University of California
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/bootstrap/bootstrap.c,v 1.85 2000/06/05 07:28:40 tgl Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/bootstrap/bootstrap.c,v 1.86 2000/06/17 23:41:27 tgl Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -161,10 +161,9 @@ typedef struct _IndexList
161161
char*il_ind;
162162
intil_natts;
163163
AttrNumber*il_attnos;
164-
uint16il_nparams;
165-
Datum*il_params;
166164
FuncIndexInfo*il_finfo;
167165
PredInfo*il_predInfo;
166+
boolil_unique;
168167
struct_IndexList*il_next;
169168
}IndexList;
170169

@@ -1071,12 +1070,10 @@ index_register(char *heap,
10711070
char*ind,
10721071
intnatts,
10731072
AttrNumber*attnos,
1074-
uint16nparams,
1075-
Datum*params,
10761073
FuncIndexInfo*finfo,
1077-
PredInfo*predInfo)
1074+
PredInfo*predInfo,
1075+
boolunique)
10781076
{
1079-
Datum*v;
10801077
IndexList*newind;
10811078
intlen;
10821079
MemoryContextoldcxt;
@@ -1103,25 +1100,12 @@ index_register(char *heap,
11031100
len=natts*sizeof(AttrNumber);
11041101

11051102
newind->il_attnos= (AttrNumber*)palloc(len);
1106-
memmove(newind->il_attnos,attnos,len);
1103+
memcpy(newind->il_attnos,attnos,len);
11071104

1108-
if ((newind->il_nparams=nparams)>0)
1109-
{
1110-
v=newind->il_params= (Datum*)palloc(2*nparams*sizeof(Datum));
1111-
nparams *=2;
1112-
while (nparams-->0)
1113-
{
1114-
*v= (Datum)palloc(strlen((char*) (*params))+1);
1115-
strcpy((char*)*v++, (char*)*params++);
1116-
}
1117-
}
1118-
else
1119-
newind->il_params= (Datum*)NULL;
1120-
1121-
if (finfo!= (FuncIndexInfo*)NULL)
1105+
if (PointerIsValid(finfo))
11221106
{
11231107
newind->il_finfo= (FuncIndexInfo*)palloc(sizeof(FuncIndexInfo));
1124-
memmove(newind->il_finfo,finfo,sizeof(FuncIndexInfo));
1108+
memcpy(newind->il_finfo,finfo,sizeof(FuncIndexInfo));
11251109
}
11261110
else
11271111
newind->il_finfo= (FuncIndexInfo*)NULL;
@@ -1135,6 +1119,8 @@ index_register(char *heap,
11351119
else
11361120
newind->il_predInfo=NULL;
11371121

1122+
newind->il_unique=unique;
1123+
11381124
newind->il_next=ILHead;
11391125

11401126
ILHead=newind;
@@ -1155,8 +1141,8 @@ build_indices()
11551141
ind=index_openr(ILHead->il_ind);
11561142
Assert(ind);
11571143
index_build(heap,ind,ILHead->il_natts,ILHead->il_attnos,
1158-
ILHead->il_nparams,ILHead->il_params,ILHead->il_finfo,
1159-
ILHead->il_predInfo);
1144+
ILHead->il_finfo,ILHead->il_predInfo,
1145+
ILHead->il_unique);
11601146

11611147
/*
11621148
* In normal processing mode, index_build would close the heap and

‎src/backend/catalog/heap.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.131 2000/06/15 03:32:01 momjian Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.132 2000/06/17 23:41:31 tgl Exp $
1212
*
1313
*
1414
* INTERFACE ROUTINES
@@ -1112,6 +1112,7 @@ RelationTruncateIndexes(Relation heapRelation)
11121112
AttrNumber*attributeNumberA;
11131113
FuncIndexInfofInfo,
11141114
*funcInfo=NULL;
1115+
boolunique;
11151116
inti,
11161117
numberOfAttributes;
11171118
char*predString;
@@ -1134,6 +1135,7 @@ RelationTruncateIndexes(Relation heapRelation)
11341135
index= (Form_pg_index)GETSTRUCT(indexTuple);
11351136
indexId=index->indexrelid;
11361137
procId=index->indproc;
1138+
unique=index->indisunique;
11371139

11381140
for (i=0;i<INDEX_MAX_KEYS;i++)
11391141
{
@@ -1201,7 +1203,7 @@ RelationTruncateIndexes(Relation heapRelation)
12011203
/* Initialize the index and rebuild */
12021204
InitIndexStrategy(numberOfAttributes,currentIndex,accessMethodId);
12031205
index_build(heapRelation,currentIndex,numberOfAttributes,
1204-
attributeNumberA,0,NULL,funcInfo,predInfo);
1206+
attributeNumberA,funcInfo,predInfo,unique);
12051207

12061208
/*
12071209
* index_build will close both the heap and index relations (but

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp