@@ -170,7 +170,7 @@ void vertex_index_fetch_reset(struct IndexFetchTableData *data) {
170170 * Release resources and deallocate index fetch.
171171 */
172172void 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 */
256256bool 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,
381381void 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 */
676699bool 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 */
729752bool 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