Files
openGauss-server/src/include/access/amapi.h
2023-02-27 18:33:17 -08:00

108 lines
3.2 KiB
C

/*-------------------------------------------------------------------------
*
* amapi.h
* API for Postgres index access methods.
*
* Portions Copyright (c) 2020 Huawei Technologies Co.,Ltd.
* Portions Copyright (c) 2015-2016, PostgreSQL Global Development Group
* Portions Copyright (c) 2021, openGauss Contributors
*
* IDENTIFICATION
* src/include/access/amapi.h
*
*-------------------------------------------------------------------------
*/
#ifndef AMAPI_H
#define AMAPI_H
#include "access/genam.h"
struct IndexInfo;
typedef IndexBuildResult *(*ambuild_function) (Relation heapRelation,
Relation indexRelation,
struct IndexInfo *indexInfo);
typedef void (*ambuildempty_function) (Relation indexRelation);
typedef bool (*aminsert_function) (Relation indexRelation,
Datum *values,
const bool *isnull,
ItemPointer heap_tid,
Relation heapRelation,
IndexUniqueCheck checkUniqueo);
typedef IndexBulkDeleteResult *(*ambulkdelete_function) (IndexVacuumInfo *info,
IndexBulkDeleteResult *stats,
IndexBulkDeleteCallback callback,
const void *callback_state);
typedef IndexBulkDeleteResult *(*amvacuumcleanup_function) (IndexVacuumInfo *info,
IndexBulkDeleteResult *stats);
typedef bool (*amcanreturn_function) ();
typedef void (*amcostestimate_function) (struct PlannerInfo *root,
struct IndexPath *path,
double loop_count,
Cost *indexStartupCost,
Cost *indexTotalCost,
Selectivity *indexSelectivity,
double *indexCorrelation);
typedef bytea *(*amoptions_function) (Datum reloptions,
bool validate);
typedef bool (*amvalidate_function) (Oid opclassoid);
typedef IndexScanDesc (*ambeginscan_function) (Relation indexRelation,
int nkeys,
int norderbys);
typedef void (*amrescan_function) (IndexScanDesc scan,
ScanKey keys);
typedef bool (*amgettuple_function) (IndexScanDesc scan,
ScanDirection direction);
typedef int64 (*amgetbitmap_function) (IndexScanDesc scan,
TIDBitmap *tbm);
typedef void (*amendscan_function) (IndexScanDesc scan);
typedef void (*ammarkpos_function) (IndexScanDesc scan);
typedef void (*amrestrpos_function) (IndexScanDesc scan);
typedef IndexBuildResult* (*ammerge_function) (Relation dest_idx_rel, List *src_idx_rel_scans,
List *src_part_merge_offsets);
typedef struct IndexAmRoutine
{
NodeTag type;
ambuild_function ambuild;
ambuildempty_function ambuildempty;
aminsert_function aminsert;
ambulkdelete_function ambulkdelete;
amvacuumcleanup_function amvacuumcleanup;
amcanreturn_function amcanreturn;
amcostestimate_function amcostestimate;
amoptions_function amoptions;
amvalidate_function amvalidate;
ambeginscan_function ambeginscan;
amrescan_function amrescan;
amgettuple_function amgettuple;
amgetbitmap_function amgetbitmap;
amendscan_function amendscan;
ammarkpos_function ammarkpos;
amrestrpos_function amrestrpos;
ammerge_function ammerge;
} IndexAmRoutine;
typedef IndexAmRoutine *AmRoutine;
extern IndexAmRoutine *get_index_amroutine_for_nbtree();
#endif