8
8
* Portions Copyright (c) 1994, Regents of the University of California
11
* $PostgreSQL: pgsql/src/backend/access/gin/gininsert.c,v 1.20 2009/03/24 22:06:03 tgl Exp $
11
* $PostgreSQL: pgsql/src/backend/access/gin/gininsert.c,v 1.22 2009/06/11 14:48:53 momjian Exp $
12
12
*-------------------------------------------------------------------------
100
100
addItemPointersToTuple(Relation index, GinState *ginstate, GinBtreeStack *stack,
101
101
IndexTuple old, ItemPointerData *items, uint32 nitem, bool isBuild)
103
Datum key = gin_index_getattr(ginstate, old);
104
OffsetNumber attnum = gintuple_get_attrnum(ginstate, old);
105
IndexTuple res = GinFormTuple(ginstate, attnum, key, NULL, nitem + GinGetNPosting(old));
103
Datum key = gin_index_getattr(ginstate, old);
104
OffsetNumber attnum = gintuple_get_attrnum(ginstate, old);
105
IndexTuple res = GinFormTuple(ginstate, attnum, key,
106
NULL, nitem + GinGetNPosting(old));
109
110
/* good, small enough */
110
MergeItemPointers(GinGetPosting(res),
111
GinGetPosting(old), GinGetNPosting(old),
115
GinSetNPosting(res, nitem + GinGetNPosting(old));
113
newnitem = MergeItemPointers(GinGetPosting(res),
114
GinGetPosting(old), GinGetNPosting(old),
116
/* merge might have eliminated some duplicate items */
117
GinShortenTuple(res, newnitem);
235
237
GinBuildState *buildstate = (GinBuildState *) state;
236
238
MemoryContext oldCtx;
239
241
oldCtx = MemoryContextSwitchTo(buildstate->tmpCtx);
241
for(i=0; i<buildstate->ginstate.origTupdesc->natts;i++)
243
buildstate->indtuples += ginHeapTupleBulkInsert(buildstate,
244
(OffsetNumber)(i+1), values[i],
243
for (i = 0; i < buildstate->ginstate.origTupdesc->natts; i++)
245
buildstate->indtuples += ginHeapTupleBulkInsert(buildstate,
246
(OffsetNumber) (i + 1), values[i],
247
249
/* If we've maxed out our available memory, dump everything to the index */
248
250
/* Also dump if the tree seems to be getting too unbalanced */
314
317
rdata.next = NULL;
316
319
recptr = XLogInsert(RM_GIN_ID, XLOG_GIN_CREATE_INDEX, &rdata);
318
321
page = BufferGetPage(RootBuffer);
319
322
PageSetLSN(page, recptr);
320
323
PageSetTLI(page, ThisTimeLineID);
431
434
initGinState(&ginstate, index);
433
if ( GinGetUseFastUpdate(index) )
436
if (GinGetUseFastUpdate(index))
435
GinTupleCollector collector;
438
GinTupleCollector collector;
437
440
memset(&collector, 0, sizeof(GinTupleCollector));
438
for(i=0; i<ginstate.origTupdesc->natts;i++)
441
for (i = 0; i < ginstate.origTupdesc->natts; i++)
440
443
res += ginHeapTupleFastCollect(index, &ginstate, &collector,
441
(OffsetNumber)(i+1), values[i], ht_ctid);
444
(OffsetNumber) (i + 1), values[i], ht_ctid);
443
446
ginHeapTupleFastInsert(index, &ginstate, &collector);
447
for(i=0; i<ginstate.origTupdesc->natts;i++)
449
res += ginHeapTupleInsert(index, &ginstate,
450
(OffsetNumber)(i+1), values[i], ht_ctid);
450
for (i = 0; i < ginstate.origTupdesc->natts; i++)
452
res += ginHeapTupleInsert(index, &ginstate,
453
(OffsetNumber) (i + 1), values[i], ht_ctid);