@@ -105,6 +105,7 @@ static char *make_vertex_adjlist_alias(char *var_name) {
105105
106106 return str ;
107107}
108+ #include "bloom.h"
108109
109110TableScanDesc vertex_scan_begin (Relation relation , Snapshot snapshot , int nkeys ,
110111 struct ScanKeyData * key ,
@@ -123,17 +124,40 @@ TableScanDesc vertex_scan_begin(Relation relation, Snapshot snapshot, int nkeys,
123124 Oid oid = get_relname_relid (make_vertex_adjlist_alias (get_rel_name (RelationGetRelid (relation ))), get_rel_namespace (RelationGetRelid (relation )));
124125 Relation rel = RelationIdGetRelation (oid );
125126
126- TableScanDesc * desc = tableam -> scan_begin (rel , snapshot , nkeys , key , parallel_scan , flags );
127- vertex_desc -> desc = palloc (sizeof (TableScanDesc * ) * vertex_desc -> ndesc );
128- vertex_desc -> desc [0 ] = desc ;
127+ vertex_desc -> desc = palloc (sizeof (TableScanDesc * ) * vertex_desc -> ndesc );
128+ vertex_desc -> isIndex = palloc (sizeof (bool ) * vertex_desc -> ndesc );
129+
130+ List * indexoidlist = RelationGetIndexList (relation );
131+ if (list_length (indexoidlist ) == 1 ) {
132+ Oid idx = linitial_oid (indexoidlist );
133+
134+ IndexScanDesc * desc = index_beginscan (rel ,
135+ RelationIdGetRelation (idx ),
136+ snapshot ,
137+ nkeys , 0 );
138+
139+ index_rescan (desc , key , nkeys , NULL , 0 );
140+
141+ vertex_desc -> desc [0 ] = desc ;
142+ vertex_desc -> isIndex [0 ] = true;
143+ } else {
144+
145+ TableScanDesc * desc = tableam -> scan_begin (rel , snapshot , nkeys , key , parallel_scan , flags );
146+
147+ vertex_desc -> desc [0 ] = desc ;
148+ vertex_desc -> isIndex [0 ] = false;
149+ }
129150 return vertex_desc ;
130151}
131152
132153void vertex_scan_end (TableScanDesc sscan ) {
133154 VertexScanDescData * vertex_desc = sscan ;
134155 RelationDecrementReferenceCount ( ((HeapScanDesc )vertex_desc -> desc [0 ])-> rs_base .rs_rd );
135156
136- GetHeapamTableAmRoutine ()-> scan_end (vertex_desc -> desc [0 ]);
157+ if (vertex_desc -> isIndex [0 ])
158+ index_endscan (vertex_desc -> desc [0 ]);
159+ else
160+ GetHeapamTableAmRoutine ()-> scan_end (vertex_desc -> desc [0 ]);
137161}
138162
139163/*
@@ -156,8 +180,12 @@ bool vertex_scan_getnextslot(TableScanDesc sscan, ScanDirection direction,
156180 VertexScanDescData * vertex_desc = sscan ;
157181
158182 TableAmRoutine * tableam = GetHeapamTableAmRoutine ();
159-
160- return tableam -> scan_getnextslot (vertex_desc -> desc [0 ], direction , slot );
183+ if (vertex_desc -> desc [0 ])
184+ return false;
185+ if (vertex_desc -> isIndex [0 ])
186+ return index_getnext_slot (vertex_desc -> desc [0 ], direction , slot );
187+ else
188+ return tableam -> scan_getnextslot (vertex_desc -> desc [0 ], direction , slot );
161189}
162190
163191/* ------------------------------------------------------------------------
@@ -214,7 +242,7 @@ void vertex_parallelscan_reinitialize(Relation rel, ParallelTableScanDesc pscan)
214242 */
215243struct IndexFetchTableData * vertex_index_fetch_begin (Relation rel ) {
216244 ereport (ERROR , (errcode (ERRCODE_FEATURE_NOT_SUPPORTED ),
217- errmsg_internal ("vertex_parallelscan_reinitialize not implemented" )));
245+ errmsg_internal ("vertex_index_fetch_begin not implemented" )));
218246
219247 return NULL ;
220248}
@@ -225,15 +253,15 @@ struct IndexFetchTableData *vertex_index_fetch_begin(Relation rel) {
225253 */
226254void vertex_index_fetch_reset (struct IndexFetchTableData * data ) {
227255 ereport (ERROR , (errcode (ERRCODE_FEATURE_NOT_SUPPORTED ),
228- errmsg_internal ("vertex_parallelscan_reinitialize not implemented" )));
256+ errmsg_internal ("vertex_index_fetch_reset not implemented" )));
229257}
230258
231259/*
232260 * Release resources and deallocate index fetch.
233261 */
234262void vertex_index_fetch_end (struct IndexFetchTableData * data ) {
235263 ereport (ERROR , (errcode (ERRCODE_FEATURE_NOT_SUPPORTED ),
236- errmsg_internal ("vertex_parallelscan_reinitialize not implemented" )));
264+ errmsg_internal ("vertex_index_fetch_end not implemented" )));
237265}
238266
239267/*
@@ -261,7 +289,7 @@ bool vertex_index_fetch_tuple(struct IndexFetchTableData *scan,
261289 TupleTableSlot * slot ,
262290 bool * call_again , bool * all_dead ) {
263291 ereport (ERROR , (errcode (ERRCODE_FEATURE_NOT_SUPPORTED ),
264- errmsg_internal ("vertex_parallelscan_reinitialize not implemented" )));
292+ errmsg_internal ("vertex_index_fetch_tuple not implemented" )));
265293 return false;
266294}
267295
@@ -301,7 +329,7 @@ bool vertex_tuple_fetch_row_version(Relation relation, ItemPointer tid,
301329 */
302330bool vertex_tuple_tid_valid (TableScanDesc scan , ItemPointer tid ) {
303331 ereport (ERROR , (errcode (ERRCODE_FEATURE_NOT_SUPPORTED ),
304- errmsg_internal ("vertex_parallelscan_reinitialize not implemented" )));
332+ errmsg_internal ("vertex_tuple_tid_valid not implemented" )));
305333
306334
307335 return false;
@@ -313,7 +341,7 @@ bool vertex_tuple_tid_valid(TableScanDesc scan, ItemPointer tid) {
313341 */
314342void vertex_tuple_get_latest_tid (TableScanDesc scan , ItemPointer tid ) {
315343 ereport (ERROR , (errcode (ERRCODE_FEATURE_NOT_SUPPORTED ),
316- errmsg_internal ("vertex_parallelscan_reinitialize not implemented" )));
344+ errmsg_internal ("vertex_tuple_get_latest_tid not implemented" )));
317345
318346
319347}
@@ -325,15 +353,15 @@ void vertex_tuple_get_latest_tid(TableScanDesc scan, ItemPointer tid) {
325353bool vertex_tuple_satisfies_snapshot (Relation rel , TupleTableSlot * slot ,
326354 Snapshot snapshot ) {
327355 ereport (ERROR , (errcode (ERRCODE_FEATURE_NOT_SUPPORTED ),
328- errmsg_internal ("vertex_parallelscan_reinitialize not implemented" )));
356+ errmsg_internal ("vertex_tuple_satisfies_snapshot not implemented" )));
329357
330358 return false;
331359}
332360
333361/* see table_index_delete_tuples() */
334362TransactionId vertex_index_delete_tuples (Relation rel , TM_IndexDeleteOp * delstate ) {
335363 ereport (ERROR , (errcode (ERRCODE_FEATURE_NOT_SUPPORTED ),
336- errmsg_internal ("vertex_parallelscan_reinitialize not implemented" )));
364+ errmsg_internal ("vertex_index_delete_tuples not implemented" )));
337365
338366
339367 return InvalidTransactionId ;
@@ -370,14 +398,14 @@ void vertex_tuple_insert_speculative(Relation rel, TupleTableSlot *slot,
370398void vertex_tuple_complete_speculative (Relation rel , TupleTableSlot * slot ,
371399 uint32 specToken , bool succeeded ) {
372400 ereport (ERROR , (errcode (ERRCODE_FEATURE_NOT_SUPPORTED ),
373- errmsg_internal ("vertex_parallelscan_reinitialize not implemented" )));
401+ errmsg_internal ("vertex_tuple_complete_speculative not implemented" )));
374402}
375403
376404/* see table_multi_insert() for reference about parameters */
377405void vertex_multi_insert (Relation rel , TupleTableSlot * * slots , int nslots ,
378406 CommandId cid , int options , struct BulkInsertStateData * bistate ) {
379407 ereport (ERROR , (errcode (ERRCODE_FEATURE_NOT_SUPPORTED ),
380- errmsg_internal ("vertex_parallelscan_reinitialize not implemented" )));
408+ errmsg_internal ("vertex_multi_insert not implemented" )));
381409}
382410
383411/* see table_tuple_delete() for reference about parameters */
@@ -401,7 +429,7 @@ TM_Result vertex_tuple_lock(Relation rel, ItemPointer tid, Snapshot snapshot,
401429 TupleTableSlot * slot , CommandId cid , LockTupleMode mode ,
402430 LockWaitPolicy wait_policy , uint8 flags , TM_FailureData * tmfd ) {
403431 ereport (ERROR , (errcode (ERRCODE_FEATURE_NOT_SUPPORTED ),
404- errmsg_internal ("vertex_parallelscan_reinitialize not implemented" )));
432+ errmsg_internal ("vertex_tuple_lock not implemented" )));
405433 return 0 ;
406434}
407435
@@ -456,7 +484,7 @@ void vertex_relation_nontransactional_truncate(Relation rel) {
456484 */
457485void vertex_relation_copy_data (Relation rel , const RelFileNode * newrnode ) {
458486 ereport (ERROR , (errcode (ERRCODE_FEATURE_NOT_SUPPORTED ),
459- errmsg_internal ("vertex_parallelscan_reinitialize not implemented" )));
487+ errmsg_internal ("vertex_relation_copy_data not implemented" )));
460488
461489
462490
@@ -469,7 +497,7 @@ void vertex_relation_copy_for_cluster(Relation OldTable, Relation NewTable,
469497 MultiXactId * multi_cutoff , double * num_tuples ,
470498 double * tups_vacuumed , double * tups_recently_dead ) {
471499 ereport (ERROR , (errcode (ERRCODE_FEATURE_NOT_SUPPORTED ),
472- errmsg_internal ("vertex_parallelscan_reinitialize not implemented" )));
500+ errmsg_internal ("vertex_relation_copy_for_cluster not implemented" )));
473501}
474502
475503/*
@@ -491,7 +519,7 @@ void vertex_relation_vacuum(Relation rel, struct VacuumParams *params,
491519 BufferAccessStrategy bstrategy ) {
492520
493521 ereport (ERROR , (errcode (ERRCODE_FEATURE_NOT_SUPPORTED ),
494- errmsg_internal ("vertex_parallelscan_reinitialize not implemented" )));
522+ errmsg_internal ("vertex_relation_vacuum not implemented" )));
495523}
496524
497525/*
@@ -514,7 +542,7 @@ void vertex_relation_vacuum(Relation rel, struct VacuumParams *params,
514542bool vertex_scan_analyze_next_block (TableScanDesc scan , BlockNumber blockno ,
515543 BufferAccessStrategy bstrategy ) {
516544 ereport (ERROR , (errcode (ERRCODE_FEATURE_NOT_SUPPORTED ),
517- errmsg_internal ("vertex_parallelscan_reinitialize not implemented" )));
545+ errmsg_internal ("vertex_scan_analyze_next_block not implemented" )));
518546
519547 return false;
520548}
@@ -530,7 +558,7 @@ bool vertex_scan_analyze_next_block(TableScanDesc scan, BlockNumber blockno,
530558bool vertex_scan_analyze_next_tuple (TableScanDesc scan , TransactionId OldestXmin ,
531559 double * liverows , double * deadrows , TupleTableSlot * slot ) {
532560 ereport (ERROR , (errcode (ERRCODE_FEATURE_NOT_SUPPORTED ),
533- errmsg_internal ("vertex_parallelscan_reinitialize not implemented" )));
561+ errmsg_internal ("vertex_scan_analyze_next_tuple not implemented" )));
534562
535563
536564
@@ -543,17 +571,21 @@ double vertex_index_build_range_scan(Relation table_rel, Relation index_rel,
543571 bool anyvisible , bool progress , BlockNumber start_blockno ,
544572 BlockNumber numblocks , IndexBuildCallback callback ,
545573 void * callback_state , TableScanDesc scan ) {
546- ereport (ERROR , (errcode (ERRCODE_FEATURE_NOT_SUPPORTED ),
547- errmsg_internal ("vertex_parallelscan_reinitialize not implemented" )));
548- return 0 ;
574+ Oid oid = get_relname_relid (make_vertex_adjlist_alias (get_rel_name (RelationGetRelid (table_rel ))), get_rel_namespace (RelationGetRelid (table_rel )));
575+
576+ return GetHeapamTableAmRoutine ()-> index_build_range_scan (RelationIdGetRelation (oid ),
577+ index_rel , index_info , allow_sync ,
578+ anyvisible , progress , start_blockno ,
579+ numblocks , callback , callback_state ,
580+ scan );
549581}
550582
551583/* see table_index_validate_scan for reference about parameters */
552584void vertex_index_validate_scan (Relation table_rel , Relation index_rel ,
553585 struct IndexInfo * index_info , Snapshot snapshot ,
554586 struct ValidateIndexState * state ) {
555587 ereport (ERROR , (errcode (ERRCODE_FEATURE_NOT_SUPPORTED ),
556- errmsg_internal ("vertex_parallelscan_reinitialize not implemented" )));
588+ errmsg_internal ("vertex_index_validate_scan not implemented" )));
557589}
558590
559591
@@ -683,7 +715,7 @@ void vertex_relation_estimate_size(Relation rel, int32 *attr_widths,
683715 */
684716bool vertex_scan_bitmap_next_block (TableScanDesc scan , struct TBMIterateResult * tbmres ) {
685717 ereport (ERROR , (errcode (ERRCODE_FEATURE_NOT_SUPPORTED ),
686- errmsg_internal ("vertex_parallelscan_reinitialize not implemented" )));
718+ errmsg_internal ("vertex_scan_bitmap_next_block not implemented" )));
687719
688720 return false;
689721}
@@ -702,7 +734,7 @@ bool vertex_scan_bitmap_next_block(TableScanDesc scan, struct TBMIterateResult *
702734bool vertex_scan_bitmap_next_tuple (TableScanDesc scan , struct TBMIterateResult * tbmres ,
703735 TupleTableSlot * slot ) {
704736 ereport (ERROR , (errcode (ERRCODE_FEATURE_NOT_SUPPORTED ),
705- errmsg_internal ("vertex_parallelscan_reinitialize not implemented" )));
737+ errmsg_internal ("vertex_scan_bitmap_next_tuple not implemented" )));
706738
707739 return false;
708740}
@@ -734,7 +766,7 @@ bool vertex_scan_bitmap_next_tuple(TableScanDesc scan, struct TBMIterateResult *
734766 */
735767bool vertex_scan_sample_next_block (TableScanDesc scan , struct SampleScanState * scanstate ) {
736768 ereport (ERROR , (errcode (ERRCODE_FEATURE_NOT_SUPPORTED ),
737- errmsg_internal ("vertex_parallelscan_reinitialize not implemented" )));
769+ errmsg_internal ("vertex_scan_sample_next_block not implemented" )));
738770
739771 return false;
740772}
@@ -756,7 +788,7 @@ bool vertex_scan_sample_next_tuple(TableScanDesc scan, struct SampleScanState *s
756788 TupleTableSlot * slot ) {
757789
758790 ereport (ERROR , (errcode (ERRCODE_FEATURE_NOT_SUPPORTED ),
759- errmsg_internal ("vertex_parallelscan_reinitialize not implemented" )));
791+ errmsg_internal ("vertex_scan_sample_next_tuple not implemented" )));
760792
761793return false;
762794}
0 commit comments