diff --git a/src/ivfbuild.c b/src/ivfbuild.c index 6b7d6e9..791cb0b 100644 --- a/src/ivfbuild.c +++ b/src/ivfbuild.c @@ -255,7 +255,7 @@ InsertTuples(Relation index, IvfflatBuildState * buildstate, ForkNumber forkNum) CHECK_FOR_INTERRUPTS(); buf = IvfflatNewBuffer(index, forkNum); - IvfflatInitPage(index, &buf, &page, &state); + IvfflatInitRegisterPage(index, &buf, &page, &state); startPage = BufferGetBlockNumber(buf); @@ -412,7 +412,7 @@ CreateMetaPage(Relation index, int dimensions, int lists, ForkNumber forkNum) IvfflatMetaPage metap; buf = IvfflatNewBuffer(index, forkNum); - IvfflatInitPage(index, &buf, &page, &state); + IvfflatInitRegisterPage(index, &buf, &page, &state); /* Set metapage data */ metap = IvfflatPageGetMeta(page); @@ -445,7 +445,7 @@ CreateListPages(Relation index, VectorArray centers, int dimensions, list = palloc(itemsz); buf = IvfflatNewBuffer(index, forkNum); - IvfflatInitPage(index, &buf, &page, &state); + IvfflatInitRegisterPage(index, &buf, &page, &state); for (i = 0; i < lists; i++) { diff --git a/src/ivfflat.h b/src/ivfflat.h index bce7d42..43a6a87 100644 --- a/src/ivfflat.h +++ b/src/ivfflat.h @@ -208,7 +208,8 @@ void IvfflatUpdateList(Relation index, GenericXLogState *state, ListInfo listIn void IvfflatCommitBuffer(Buffer buf, GenericXLogState *state); void IvfflatAppendPage(Relation index, Buffer *buf, Page *page, GenericXLogState **state, ForkNumber forkNum); Buffer IvfflatNewBuffer(Relation index, ForkNumber forkNum); -void IvfflatInitPage(Relation index, Buffer *buf, Page *page, GenericXLogState **state); +void IvfflatInitPage(Buffer buf, Page page); +void IvfflatInitRegisterPage(Relation index, Buffer *buf, Page *page, GenericXLogState **state); /* Index access methods */ IndexBuildResult *ivfflatbuild(Relation heap, Relation index, IndexInfo *indexInfo); diff --git a/src/ivfinsert.c b/src/ivfinsert.c index 9a0f68c..40e4a0a 100644 --- a/src/ivfinsert.c +++ b/src/ivfinsert.c @@ -107,9 +107,7 @@ InsertTuple(Relation rel, IndexTuple itup, Relation heapRel, Datum *values) IvfflatPageGetOpaque(page)->nextblkno = insertPage; /* Init page */ - PageInit(newpage, BufferGetPageSize(newbuf), sizeof(IvfflatPageOpaqueData)); - IvfflatPageGetOpaque(newpage)->nextblkno = InvalidBlockNumber; - IvfflatPageGetOpaque(newpage)->page_id = IVFFLAT_PAGE_ID; + IvfflatInitPage(newbuf, newpage); /* Commit */ MarkBufferDirty(buf); diff --git a/src/ivfutils.c b/src/ivfutils.c index 4f4ac85..27ff2ac 100644 --- a/src/ivfutils.c +++ b/src/ivfutils.c @@ -107,13 +107,22 @@ IvfflatNewBuffer(Relation index, ForkNumber forkNum) * Init page */ void -IvfflatInitPage(Relation index, Buffer *buf, Page *page, GenericXLogState **state) +IvfflatInitPage(Buffer buf, Page page) +{ + PageInit(page, BufferGetPageSize(buf), sizeof(IvfflatPageOpaqueData)); + IvfflatPageGetOpaque(page)->nextblkno = InvalidBlockNumber; + IvfflatPageGetOpaque(page)->page_id = IVFFLAT_PAGE_ID; +} + +/* + * Init and register page + */ +void +IvfflatInitRegisterPage(Relation index, Buffer *buf, Page *page, GenericXLogState **state) { *state = GenericXLogStart(index); *page = GenericXLogRegisterBuffer(*state, *buf, GENERIC_XLOG_FULL_IMAGE); - PageInit(*page, BufferGetPageSize(*buf), sizeof(IvfflatPageOpaqueData)); - IvfflatPageGetOpaque(*page)->nextblkno = InvalidBlockNumber; - IvfflatPageGetOpaque(*page)->page_id = IVFFLAT_PAGE_ID; + IvfflatInitPage(*buf, *page); } /* @@ -143,9 +152,7 @@ IvfflatAppendPage(Relation index, Buffer *buf, Page *page, GenericXLogState **st IvfflatPageGetOpaque(*page)->nextblkno = BufferGetBlockNumber(newbuf); /* Init new page */ - PageInit(newpage, BufferGetPageSize(newbuf), sizeof(IvfflatPageOpaqueData)); - IvfflatPageGetOpaque(newpage)->nextblkno = InvalidBlockNumber; - IvfflatPageGetOpaque(newpage)->page_id = IVFFLAT_PAGE_ID; + IvfflatInitPage(newbuf, newpage); /* Commit */ MarkBufferDirty(*buf);