Skip to content

Commit c6d48e5

Browse files
committed
Implement first version of vertex_relation_set_new_filenode
Add the first version as this is the first version in the table am api that will get called when creating a table, for now just use the heap code where we force the persistence to be permanent and for it to be a table
1 parent a63e3fa commit c6d48e5

File tree

1 file changed

+49
-26
lines changed

1 file changed

+49
-26
lines changed

src/backend/access/vertex_heap/vertex_heapam_handler.c

Lines changed: 49 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ void vertex_index_fetch_reset(struct IndexFetchTableData *data) {
170170
* Release resources and deallocate index fetch.
171171
*/
172172
void vertex_index_fetch_end(struct IndexFetchTableData *data) {
173-
ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
173+
ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
174174
errmsg_internal("vertex_parallelscan_reinitialize not implemented")));
175175

176176

@@ -204,7 +204,7 @@ bool vertex_index_fetch_tuple(struct IndexFetchTableData *scan,
204204
errmsg_internal("vertex_parallelscan_reinitialize not implemented")));
205205

206206

207-
return false;
207+
return false;
208208
}
209209

210210

@@ -224,7 +224,7 @@ bool vertex_tuple_fetch_row_version(Relation rel, ItemPointer tid,
224224
errmsg_internal("vertex_parallelscan_reinitialize not implemented")));
225225

226226

227-
return false;
227+
return false;
228228
}
229229

230230
/*
@@ -235,7 +235,7 @@ bool vertex_tuple_tid_valid(TableScanDesc scan, ItemPointer tid) {
235235
errmsg_internal("vertex_parallelscan_reinitialize not implemented")));
236236

237237

238-
return false;
238+
return false;
239239
}
240240

241241
/*
@@ -255,7 +255,7 @@ void vertex_tuple_get_latest_tid(TableScanDesc scan, ItemPointer tid) {
255255
*/
256256
bool vertex_tuple_satisfies_snapshot(Relation rel, TupleTableSlot *slot,
257257
Snapshot snapshot) {
258-
ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
258+
ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
259259
errmsg_internal("vertex_parallelscan_reinitialize not implemented")));
260260

261261
return false;
@@ -267,7 +267,7 @@ TransactionId vertex_index_delete_tuples(Relation rel, TM_IndexDeleteOp *delstat
267267
errmsg_internal("vertex_parallelscan_reinitialize not implemented")));
268268

269269

270-
return NULL;
270+
return NULL;
271271
}
272272

273273
/* ------------------------------------------------------------------------
@@ -327,7 +327,7 @@ TM_Result vertex_tuple_delete(Relation rel, ItemPointer tid, CommandId cid,
327327

328328

329329

330-
return 0;
330+
return 0;
331331
}
332332

333333
/* see table_tuple_update() for reference about parameters */
@@ -336,7 +336,7 @@ TM_Result vertex_tuple_update(Relation rel, ItemPointer otid, TupleTableSlot *sl
336336
bool wait, TM_FailureData *tmfd, LockTupleMode *lockmode,
337337
bool *update_indexes) {
338338

339-
ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
339+
ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
340340
errmsg_internal("vertex_parallelscan_reinitialize not implemented")));
341341

342342

@@ -352,7 +352,7 @@ TM_Result vertex_tuple_lock(Relation rel, ItemPointer tid, Snapshot snapshot,
352352

353353

354354

355-
return 0;
355+
return 0;
356356
}
357357

358358

@@ -381,8 +381,33 @@ TM_Result vertex_tuple_lock(Relation rel, ItemPointer tid, Snapshot snapshot,
381381
void vertex_relation_set_new_filenode(Relation rel, const RelFileNode *newrnode,
382382
char persistence, TransactionId *freezeXid,
383383
MultiXactId *minmulti) {
384-
ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
385-
errmsg_internal("vertex_relation_set_new_filenode not implemented")));
384+
385+
SMgrRelation srel;
386+
387+
if(persistence != RELPERSISTENCE_PERMANENT || rel->rd_rel->relkind != RELKIND_RELATION)
388+
ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
389+
errmsg_internal("vertex am can only work on permenant tables")));
390+
391+
/*
392+
* Initialize to the minimum XID that could put tuples in the table. We
393+
* know that no xacts older than RecentXmin are still running, so that
394+
* will do.
395+
*/
396+
*freezeXid = RecentXmin;
397+
398+
/*
399+
* Similarly, initialize the minimum Multixact to the first value that
400+
* could possibly be stored in tuples in the table. Running transactions
401+
* could reuse values from their local cache, so we are careful to
402+
* consider all currently running multis.
403+
*
404+
* XXX this could be refined further, but is it worth the hassle?
405+
*/
406+
*minmulti = GetOldestMultiXactId();
407+
408+
srel = RelationCreateStorage(*newrnode, persistence);
409+
410+
smgrclose(srel);
386411
}
387412

388413
/*
@@ -475,9 +500,7 @@ bool vertex_scan_analyze_next_block(TableScanDesc scan, BlockNumber blockno,
475500
ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
476501
errmsg_internal("vertex_parallelscan_reinitialize not implemented")));
477502

478-
479-
480-
return false;
503+
return false;
481504
}
482505

483506
/*
@@ -495,7 +518,7 @@ bool vertex_scan_analyze_next_tuple(TableScanDesc scan, TransactionId OldestXmin
495518

496519

497520

498-
return false;
521+
return false;
499522
}
500523

501524
/* see table_index_build_range_scan for reference about parameters */
@@ -510,7 +533,7 @@ double vertex_index_build_range_scan(Relation table_rel, Relation index_rel,
510533

511534

512535

513-
return 0;
536+
return 0;
514537
}
515538

516539
/* see table_index_validate_scan for reference about parameters */
@@ -544,7 +567,7 @@ uint64 vertex_relation_size(Relation rel, ForkNumber forkNumber) {
544567

545568

546569

547-
return 0;
570+
return 0;
548571
}
549572

550573

@@ -561,7 +584,7 @@ bool vertex_relation_needs_toast_table(Relation rel) {
561584

562585

563586

564-
return false;
587+
return false;
565588
}
566589

567590
/*
@@ -575,7 +598,7 @@ Oid vertex_relation_toast_am(Relation rel) {
575598

576599

577600

578-
return InvalidOid;
601+
return InvalidOid;
579602
}
580603

581604
/*
@@ -659,7 +682,7 @@ bool vertex_scan_bitmap_next_block(TableScanDesc scan, struct TBMIterateResult *
659682
ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
660683
errmsg_internal("vertex_parallelscan_reinitialize not implemented")));
661684

662-
return false;
685+
return false;
663686
}
664687

665688
/*
@@ -674,11 +697,11 @@ bool vertex_scan_bitmap_next_block(TableScanDesc scan, struct TBMIterateResult *
674697
* scan_bitmap_next_tuple need to exist, or neither.
675698
*/
676699
bool vertex_scan_bitmap_next_tuple(TableScanDesc scan, struct TBMIterateResult *tbmres,
677-
TupleTableSlot *slot) {
700+
TupleTableSlot *slot) {
678701
ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
679702
errmsg_internal("vertex_parallelscan_reinitialize not implemented")));
680703

681-
return false;
704+
return false;
682705
}
683706

684707
/*
@@ -710,7 +733,7 @@ bool vertex_scan_sample_next_block(TableScanDesc scan, struct SampleScanState *s
710733
ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
711734
errmsg_internal("vertex_parallelscan_reinitialize not implemented")));
712735

713-
return false;
736+
return false;
714737
}
715738

716739
/*
@@ -727,12 +750,12 @@ bool vertex_scan_sample_next_block(TableScanDesc scan, struct SampleScanState *s
727750
* assumption somehow.
728751
*/
729752
bool vertex_scan_sample_next_tuple(TableScanDesc scan, struct SampleScanState *scanstate,
730-
TupleTableSlot *slot) {
731-
753+
TupleTableSlot *slot) {
754+
732755
ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
733756
errmsg_internal("vertex_parallelscan_reinitialize not implemented")));
734757

735-
return false;
758+
return false;
736759
}
737760

738761
/* ------------------------------------------------------------------------

0 commit comments

Comments
 (0)