PostgreSQL Source Code git master
btree_bytea.c
Go to the documentation of this file.
1/*
2 * contrib/btree_gist/btree_bytea.c
3 */
4#include "postgres.h"
5
6#include "btree_gist.h"
7#include "btree_utils_var.h"
8#include "utils/fmgrprotos.h"
9
10
11/*
12** Bytea ops
13*/
20
21
22/* define for comparison */
23
24static bool
25gbt_byteagt(const void *a, const void *b, Oid collation, FmgrInfo *flinfo)
26{
30}
31
32static bool
33gbt_byteage(const void *a, const void *b, Oid collation, FmgrInfo *flinfo)
34{
38}
39
40static bool
41gbt_byteaeq(const void *a, const void *b, Oid collation, FmgrInfo *flinfo)
42{
46}
47
48static bool
49gbt_byteale(const void *a, const void *b, Oid collation, FmgrInfo *flinfo)
50{
54}
55
56static bool
57gbt_bytealt(const void *a, const void *b, Oid collation, FmgrInfo *flinfo)
58{
62}
63
64static int32
65gbt_byteacmp(const void *a, const void *b, Oid collation, FmgrInfo *flinfo)
66{
70}
71
72
73static const gbtree_vinfo tinfo =
74{
76 0,
77 true,
84 NULL
85};
86
87
88/**************************************************
89 * Text ops
90 **************************************************/
91
92
95{
97
99}
100
101
102
103Datum
105{
106 GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
107 void *query = DatumGetByteaP(PG_GETARG_DATUM(1));
109
110 /* Oid subtype = PG_GETARG_OID(3); */
111 bool *recheck = (bool *) PG_GETARG_POINTER(4);
112 bool retval;
115
116 /* All cases served by this function are exact */
117 *recheck = false;
118
119 retval = gbt_var_consistent(&r, query, strategy, PG_GET_COLLATION(),
120 GIST_LEAF(entry), &tinfo, fcinfo->flinfo);
121 PG_RETURN_BOOL(retval);
122}
123
124
125
126Datum
128{
130 int32 *size = (int *) PG_GETARG_POINTER(1);
131
133 &tinfo, fcinfo->flinfo));
134}
135
136
137Datum
139{
142
143 gbt_var_picksplit(entryvec, v, PG_GET_COLLATION(),
144 &tinfo, fcinfo->flinfo);
146}
147
148Datum
150{
151 Datum d1 = PG_GETARG_DATUM(0);
152 Datum d2 = PG_GETARG_DATUM(1);
153 bool *result = (bool *) PG_GETARG_POINTER(2);
154
155 *result = gbt_var_same(d1, d2, PG_GET_COLLATION(), &tinfo, fcinfo->flinfo);
156 PG_RETURN_POINTER(result);
157}
158
159
160Datum
162{
165 float *result = (float *) PG_GETARG_POINTER(2);
166
168 &tinfo, fcinfo->flinfo));
169}
static bool gbt_byteagt(const void *a, const void *b, Oid collation, FmgrInfo *flinfo)
Definition: btree_bytea.c:25
static bool gbt_byteage(const void *a, const void *b, Oid collation, FmgrInfo *flinfo)
Definition: btree_bytea.c:33
Datum gbt_bytea_consistent(PG_FUNCTION_ARGS)
Definition: btree_bytea.c:104
Datum gbt_bytea_compress(PG_FUNCTION_ARGS)
Definition: btree_bytea.c:94
Datum gbt_bytea_union(PG_FUNCTION_ARGS)
Definition: btree_bytea.c:127
Datum gbt_bytea_penalty(PG_FUNCTION_ARGS)
Definition: btree_bytea.c:161
static const gbtree_vinfo tinfo
Definition: btree_bytea.c:73
static bool gbt_byteaeq(const void *a, const void *b, Oid collation, FmgrInfo *flinfo)
Definition: btree_bytea.c:41
Datum gbt_bytea_same(PG_FUNCTION_ARGS)
Definition: btree_bytea.c:149
static int32 gbt_byteacmp(const void *a, const void *b, Oid collation, FmgrInfo *flinfo)
Definition: btree_bytea.c:65
PG_FUNCTION_INFO_V1(gbt_bytea_compress)
static bool gbt_byteale(const void *a, const void *b, Oid collation, FmgrInfo *flinfo)
Definition: btree_bytea.c:49
Datum gbt_bytea_picksplit(PG_FUNCTION_ARGS)
Definition: btree_bytea.c:138
static bool gbt_bytealt(const void *a, const void *b, Oid collation, FmgrInfo *flinfo)
Definition: btree_bytea.c:57
@ gbt_t_bytea
Definition: btree_gist.h:33
GBT_VARKEY * gbt_var_union(const GistEntryVector *entryvec, int32 *size, Oid collation, const gbtree_vinfo *tinfo, FmgrInfo *flinfo)
bool gbt_var_consistent(GBT_VARKEY_R *key, const void *query, StrategyNumber strategy, Oid collation, bool is_leaf, const gbtree_vinfo *tinfo, FmgrInfo *flinfo)
GISTENTRY * gbt_var_compress(GISTENTRY *entry, const gbtree_vinfo *tinfo)
GIST_SPLITVEC * gbt_var_picksplit(const GistEntryVector *entryvec, GIST_SPLITVEC *v, Oid collation, const gbtree_vinfo *tinfo, FmgrInfo *flinfo)
GBT_VARKEY_R gbt_var_key_readable(const GBT_VARKEY *k)
float * gbt_var_penalty(float *res, const GISTENTRY *o, const GISTENTRY *n, Oid collation, const gbtree_vinfo *tinfo, FmgrInfo *flinfo)
bool gbt_var_same(Datum d1, Datum d2, Oid collation, const gbtree_vinfo *tinfo, FmgrInfo *flinfo)
int32_t int32
Definition: c.h:484
#define DirectFunctionCall2(func, arg1, arg2)
Definition: fmgr.h:643
#define PG_GETARG_POINTER(n)
Definition: fmgr.h:276
#define PG_GETARG_DATUM(n)
Definition: fmgr.h:268
#define PG_GETARG_UINT16(n)
Definition: fmgr.h:272
#define PG_RETURN_POINTER(x)
Definition: fmgr.h:361
#define PG_GET_COLLATION()
Definition: fmgr.h:198
#define PG_FUNCTION_ARGS
Definition: fmgr.h:193
#define PG_RETURN_BOOL(x)
Definition: fmgr.h:359
#define DatumGetByteaP(X)
Definition: fmgr.h:331
#define GIST_LEAF(entry)
Definition: gist.h:171
int b
Definition: isn.c:69
int a
Definition: isn.c:68
static bool DatumGetBool(Datum X)
Definition: postgres.h:95
static Datum PointerGetDatum(const void *X)
Definition: postgres.h:327
uintptr_t Datum
Definition: postgres.h:69
static Pointer DatumGetPointer(Datum X)
Definition: postgres.h:317
static int32 DatumGetInt32(Datum X)
Definition: postgres.h:207
unsigned int Oid
Definition: postgres_ext.h:32
static pg_noinline void Size size
Definition: slab.c:607
uint16 StrategyNumber
Definition: stratnum.h:22
Definition: fmgr.h:57
Datum key
Definition: gist.h:161
Definition: c.h:644
Datum byteaeq(PG_FUNCTION_ARGS)
Definition: varlena.c:3769
Datum byteagt(PG_FUNCTION_ARGS)
Definition: varlena.c:3873
Datum byteage(PG_FUNCTION_ARGS)
Definition: varlena.c:3893
Datum byteacmp(PG_FUNCTION_ARGS)
Definition: varlena.c:3913
Datum byteale(PG_FUNCTION_ARGS)
Definition: varlena.c:3853
Datum bytealt(PG_FUNCTION_ARGS)
Definition: varlena.c:3833