Skip to content

Commit 663d7b2

Browse files
committed
Merge branch 'btree-handling' of github.com:CodeMaxx/postgres into btree-handling
2 parents caa9e3d + deb3d1f commit 663d7b2

File tree

2 files changed

+41
-33
lines changed

2 files changed

+41
-33
lines changed

src/backend/access/smerge/smerge.c

Lines changed: 39 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -249,58 +249,66 @@ smergegettuple(IndexScanDesc scan, ScanDirection dir)
249249
// printf("CurrentLevel: %d\n", so->currlevel);
250250
if (so->bt_rel != NULL) {
251251
index_close(so->bt_rel, AccessShareLock);
252-
pfree(so->bt_rel);
252+
// pfree(so->bt_rel);
253253
so->bt_rel = NULL;
254254
}
255255

256-
while ((so->currlevel == -1 || so->currpos >= metadata->levels[so->currlevel]) && so->currlevel < metadata->N) {
256+
while (so->currlevel < metadata->N && (so->currlevel == -1 || so->currpos >= metadata->levels[so->currlevel])) {
257257
so->currpos = 0;
258258
so->currlevel ++;
259259
}
260260

261-
res = (so->currlevel == metadata->N);
262-
263-
if (!res) {
261+
if ((so->currlevel < metadata->N)) {
264262
bt_oid = metadata->tree[so->currlevel][so->currpos];
265263
so->currpos ++;
264+
}
265+
else if (so->currlevel == metadata->N){
266+
if (metadata->root != InvalidOid) {
267+
bt_oid = metadata->root;
268+
so->currlevel ++;
269+
}
270+
else {
271+
res = false;
272+
break;
273+
}
274+
}
275+
else {
276+
res = false;
277+
break;
278+
}
266279

267-
// printf("Opening Btree: %d\n", bt_oid);
268-
so->bt_rel = index_open(bt_oid, AccessShareLock);
269-
so->bt_isd = btbeginscan(so->bt_rel, scan->numberOfKeys, scan->numberOfOrderBys);
280+
// printf("Opening Btree: %d\n", bt_oid);
281+
so->bt_rel = index_open(bt_oid, AccessShareLock);
282+
so->bt_isd = btbeginscan(so->bt_rel, scan->numberOfKeys, scan->numberOfOrderBys);
270283

271-
bt_scan = so->bt_isd;
284+
bt_scan = so->bt_isd;
272285

273-
bt_scan->heapRelation = scan->heapRelation;
274-
bt_scan->xs_snapshot = scan->xs_snapshot;
286+
bt_scan->heapRelation = scan->heapRelation;
287+
bt_scan->xs_snapshot = scan->xs_snapshot;
275288

276-
/* Release any held pin on a heap page */
277-
if (BufferIsValid(bt_scan->xs_cbuf))
278-
{
279-
ReleaseBuffer(bt_scan->xs_cbuf);
280-
bt_scan->xs_cbuf = InvalidBuffer;
281-
}
289+
/* Release any held pin on a heap page */
290+
if (BufferIsValid(bt_scan->xs_cbuf))
291+
{
292+
ReleaseBuffer(bt_scan->xs_cbuf);
293+
bt_scan->xs_cbuf = InvalidBuffer;
294+
}
282295

283-
bt_scan->xs_continue_hot = false;
296+
bt_scan->xs_continue_hot = false;
284297

285-
bt_scan->kill_prior_tuple = false; /* for safety */
298+
bt_scan->kill_prior_tuple = false; /* for safety */
286299

287300

288-
btrescan(so->bt_isd, scan->keyData, scan->numberOfKeys, scan->orderByData, scan->numberOfOrderBys);
301+
btrescan(so->bt_isd, scan->keyData, scan->numberOfKeys, scan->orderByData, scan->numberOfOrderBys);
289302

290-
bt_scan->xs_cbuf = scan->xs_cbuf;
303+
bt_scan->xs_cbuf = scan->xs_cbuf;
291304

292-
res = btgettuple(so->bt_isd, dir);
293-
// printf("btgettuple returns %d\n", res);
305+
res = btgettuple(so->bt_isd, dir);
306+
// printf("btgettuple returns %d\n", res);
294307

295-
scan->xs_ctup = bt_scan->xs_ctup;
308+
scan->xs_ctup = bt_scan->xs_ctup;
296309

297-
scan->xs_itup = bt_scan->xs_itup;
298-
scan->xs_itupdesc = bt_scan->xs_itupdesc;
299-
}
300-
else {
301-
res = false;
302-
break;
303-
}
310+
scan->xs_itup = bt_scan->xs_itup;
311+
scan->xs_itupdesc = bt_scan->xs_itupdesc;
304312
// printf("Debug: btgettuple returns %d\n", res);
305313
}
306314

src/backend/access/smerge/smsort.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -985,15 +985,15 @@ sm_flush(Relation heapRel, SmMetadata* metadata) {
985985
else
986986
_sm_merge_k(&wstate, btspools, metadata->K);
987987

988-
metadata->root = mergeBtreeOid;
989-
990988
for (int j = 0; j < metadata->K; j++) {
991989
_bt_spooldestroy(btspools[j]);
992990
}
993991

994992
if(metadata->root != InvalidOid)
995993
_bt_spooldestroy(btspools[metadata->K]);
996994

995+
metadata->root = mergeBtreeOid;
996+
997997
for(int j = 0; j < metadata->K; j++) {
998998
// Delete level i btrees
999999
// _sm_merge_delete_btree(metadata->tree[i][j]);

0 commit comments

Comments
 (0)