openGauss-server/contrib/btree_gist/btree_utils_var.h

66 lines
2.0 KiB
C

/*
* contrib/btree_gist/btree_utils_var.h
*/
#ifndef __BTREE_UTILS_VAR_H__
#define __BTREE_UTILS_VAR_H__
#include "btree_gist.h"
#include "access/gist.h"
#include "mb/pg_wchar.h"
/* Variable length key */
typedef bytea GBT_VARKEY;
/* Better readable key */
typedef struct {
bytea *lower, *upper;
} GBT_VARKEY_R;
/*
* type description
*/
typedef struct {
/* Attribs */
enum gbtree_type t; /* data type */
int32 eml; /* cached pg_database_encoding_max_length (0:
* undefined) */
bool trnc; /* truncate (=compress) key */
/* Methods */
bool (*f_gt)(const void*, const void*, Oid); /* greater than */
bool (*f_ge)(const void*, const void*, Oid); /* greater equal */
bool (*f_eq)(const void*, const void*, Oid); /* equal */
bool (*f_le)(const void*, const void*, Oid); /* less equal */
bool (*f_lt)(const void*, const void*, Oid); /* less than */
int32 (*f_cmp)(const void*, const void*, Oid); /* compare */
GBT_VARKEY* (*f_l2n)(GBT_VARKEY*); /* convert leaf to node */
} gbtree_vinfo;
extern GBT_VARKEY_R gbt_var_key_readable(const GBT_VARKEY* k);
extern GBT_VARKEY* gbt_var_key_copy(const GBT_VARKEY_R* u, bool force_node);
extern GISTENTRY* gbt_var_compress(GISTENTRY* entry, const gbtree_vinfo* tinfo);
extern GBT_VARKEY* gbt_var_union(
const GistEntryVector* entryvec, int32* size, Oid collation, const gbtree_vinfo* tinfo);
extern bool gbt_var_same(Datum d1, Datum d2, Oid collation, const gbtree_vinfo* tinfo);
extern float* gbt_var_penalty(
float* res, const GISTENTRY* o, const GISTENTRY* n, Oid collation, const gbtree_vinfo* tinfo);
extern bool gbt_var_consistent(GBT_VARKEY_R* key, const void* query, StrategyNumber strategy, Oid collation,
bool is_leaf, const gbtree_vinfo* tinfo);
extern GIST_SPLITVEC* gbt_var_picksplit(
const GistEntryVector* entryvec, GIST_SPLITVEC* v, Oid collation, const gbtree_vinfo* tinfo);
extern void gbt_var_bin_union(Datum* u, GBT_VARKEY* e, Oid collation, const gbtree_vinfo* tinfo);
#endif