forked from huawei/openGauss-server
66 lines
2.0 KiB
C
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
|