PostgreSQL Source Code git master
Loading...
Searching...
No Matches
btree_numeric.c File Reference
#include "postgres.h"
#include <float.h>
#include "btree_gist.h"
#include "btree_utils_var.h"
#include "utils/builtins.h"
#include "utils/numeric.h"
#include "utils/rel.h"
#include "utils/sortsupport.h"
Include dependency graph for btree_numeric.c:

Go to the source code of this file.

Functions

 PG_FUNCTION_INFO_V1 (gbt_numeric_compress)
 
 PG_FUNCTION_INFO_V1 (gbt_numeric_union)
 
 PG_FUNCTION_INFO_V1 (gbt_numeric_picksplit)
 
 PG_FUNCTION_INFO_V1 (gbt_numeric_consistent)
 
 PG_FUNCTION_INFO_V1 (gbt_numeric_penalty)
 
 PG_FUNCTION_INFO_V1 (gbt_numeric_same)
 
 PG_FUNCTION_INFO_V1 (gbt_numeric_sortsupport)
 
static bool gbt_numeric_gt (const void *a, const void *b, Oid collation, FmgrInfo *flinfo)
 
static bool gbt_numeric_ge (const void *a, const void *b, Oid collation, FmgrInfo *flinfo)
 
static bool gbt_numeric_eq (const void *a, const void *b, Oid collation, FmgrInfo *flinfo)
 
static bool gbt_numeric_le (const void *a, const void *b, Oid collation, FmgrInfo *flinfo)
 
static bool gbt_numeric_lt (const void *a, const void *b, Oid collation, FmgrInfo *flinfo)
 
static int32 gbt_numeric_cmp (const void *a, const void *b, Oid collation, FmgrInfo *flinfo)
 
Datum gbt_numeric_compress (PG_FUNCTION_ARGS)
 
Datum gbt_numeric_consistent (PG_FUNCTION_ARGS)
 
Datum gbt_numeric_union (PG_FUNCTION_ARGS)
 
Datum gbt_numeric_same (PG_FUNCTION_ARGS)
 
Datum gbt_numeric_penalty (PG_FUNCTION_ARGS)
 
Datum gbt_numeric_picksplit (PG_FUNCTION_ARGS)
 
static int gbt_numeric_ssup_cmp (Datum x, Datum y, SortSupport ssup)
 
Datum gbt_numeric_sortsupport (PG_FUNCTION_ARGS)
 

Variables

static const gbtree_vinfo tinfo
 

Function Documentation

◆ gbt_numeric_cmp()

static int32 gbt_numeric_cmp ( const void a,
const void b,
Oid  collation,
FmgrInfo flinfo 
)
static

Definition at line 70 of file btree_numeric.c.

71{
75}
Datum numeric_cmp(PG_FUNCTION_ARGS)
Definition numeric.c:2423
#define DirectFunctionCall2(func, arg1, arg2)
Definition fmgr.h:690
int b
Definition isn.c:74
int a
Definition isn.c:73
static int32 DatumGetInt32(Datum X)
Definition postgres.h:202
#define PointerGetDatum(X)
Definition postgres.h:354

References a, b, DatumGetInt32(), DirectFunctionCall2, numeric_cmp(), and PointerGetDatum.

◆ gbt_numeric_compress()

Datum gbt_numeric_compress ( PG_FUNCTION_ARGS  )

Definition at line 102 of file btree_numeric.c.

103{
104 GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
105
107}
static const gbtree_vinfo tinfo
GISTENTRY * gbt_var_compress(GISTENTRY *entry, const gbtree_vinfo *tinfo)
#define PG_GETARG_POINTER(n)
Definition fmgr.h:277
#define PG_RETURN_POINTER(x)
Definition fmgr.h:363

References gbt_var_compress(), PG_GETARG_POINTER, PG_RETURN_POINTER, and tinfo.

◆ gbt_numeric_consistent()

Datum gbt_numeric_consistent ( PG_FUNCTION_ARGS  )

Definition at line 110 of file btree_numeric.c.

111{
112 GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
113 void *query = DatumGetNumeric(PG_GETARG_DATUM(1));
115#ifdef NOT_USED
116 Oid subtype = PG_GETARG_OID(3);
117#endif
118 bool *recheck = (bool *) PG_GETARG_POINTER(4);
119 bool retval;
122
123 /* All cases served by this function are exact */
124 *recheck = false;
125
126 retval = gbt_var_consistent(&r, query, strategy, PG_GET_COLLATION(),
127 GIST_LEAF(entry), &tinfo, fcinfo->flinfo);
128 PG_RETURN_BOOL(retval);
129}
bool gbt_var_consistent(const GBT_VARKEY_R *key, const void *query, StrategyNumber strategy, Oid collation, bool is_leaf, const gbtree_vinfo *tinfo, FmgrInfo *flinfo)
GBT_VARKEY_R gbt_var_key_readable(const GBT_VARKEY *k)
#define PG_GETARG_OID(n)
Definition fmgr.h:275
#define PG_GETARG_DATUM(n)
Definition fmgr.h:268
#define PG_GETARG_UINT16(n)
Definition fmgr.h:272
#define PG_GET_COLLATION()
Definition fmgr.h:198
#define PG_RETURN_BOOL(x)
Definition fmgr.h:360
#define GIST_LEAF(entry)
Definition gist.h:171
static Numeric DatumGetNumeric(Datum X)
Definition numeric.h:64
static Pointer DatumGetPointer(Datum X)
Definition postgres.h:332
unsigned int Oid
uint16 StrategyNumber
Definition stratnum.h:22
Datum key
Definition gist.h:161
Definition c.h:835

References DatumGetNumeric(), DatumGetPointer(), gbt_var_consistent(), gbt_var_key_readable(), GIST_LEAF, GISTENTRY::key, PG_GET_COLLATION, PG_GETARG_DATUM, PG_GETARG_OID, PG_GETARG_POINTER, PG_GETARG_UINT16, PG_RETURN_BOOL, and tinfo.

◆ gbt_numeric_eq()

static bool gbt_numeric_eq ( const void a,
const void b,
Oid  collation,
FmgrInfo flinfo 
)
static

Definition at line 46 of file btree_numeric.c.

47{
51}
Datum numeric_eq(PG_FUNCTION_ARGS)
Definition numeric.c:2439
static bool DatumGetBool(Datum X)
Definition postgres.h:100

References a, b, DatumGetBool(), DirectFunctionCall2, numeric_eq(), and PointerGetDatum.

◆ gbt_numeric_ge()

static bool gbt_numeric_ge ( const void a,
const void b,
Oid  collation,
FmgrInfo flinfo 
)
static

Definition at line 38 of file btree_numeric.c.

39{
43}
Datum numeric_ge(PG_FUNCTION_ARGS)
Definition numeric.c:2484

References a, b, DatumGetBool(), DirectFunctionCall2, numeric_ge(), and PointerGetDatum.

◆ gbt_numeric_gt()

static bool gbt_numeric_gt ( const void a,
const void b,
Oid  collation,
FmgrInfo flinfo 
)
static

Definition at line 30 of file btree_numeric.c.

31{
35}
Datum numeric_gt(PG_FUNCTION_ARGS)
Definition numeric.c:2469

References a, b, DatumGetBool(), DirectFunctionCall2, numeric_gt(), and PointerGetDatum.

◆ gbt_numeric_le()

static bool gbt_numeric_le ( const void a,
const void b,
Oid  collation,
FmgrInfo flinfo 
)
static

Definition at line 54 of file btree_numeric.c.

55{
59}
Datum numeric_le(PG_FUNCTION_ARGS)
Definition numeric.c:2514

References a, b, DatumGetBool(), DirectFunctionCall2, numeric_le(), and PointerGetDatum.

◆ gbt_numeric_lt()

static bool gbt_numeric_lt ( const void a,
const void b,
Oid  collation,
FmgrInfo flinfo 
)
static

Definition at line 62 of file btree_numeric.c.

63{
67}
Datum numeric_lt(PG_FUNCTION_ARGS)
Definition numeric.c:2499

References a, b, DatumGetBool(), DirectFunctionCall2, numeric_lt(), and PointerGetDatum.

◆ gbt_numeric_penalty()

Datum gbt_numeric_penalty ( PG_FUNCTION_ARGS  )

Definition at line 153 of file btree_numeric.c.

154{
157 float *result = (float *) PG_GETARG_POINTER(2);
158
159 Numeric us,
160 os,
161 ds;
162
165 Datum uni;
167 ok,
168 uk;
169
172 gbt_var_bin_union(&uni, newe, PG_GET_COLLATION(), &tinfo, fcinfo->flinfo);
175
177 PointerGetDatum(uk.upper),
178 PointerGetDatum(uk.lower)));
179
181 PointerGetDatum(ok.upper),
182 PointerGetDatum(ok.lower)));
183
185 NumericGetDatum(us),
186 NumericGetDatum(os)));
187
188 if (numeric_is_nan(us))
189 {
190 if (numeric_is_nan(os))
191 *result = 0.0;
192 else
193 *result = 1.0;
194 }
195 else
196 {
198
199 *result = 0.0;
200
202 {
203 *result += FLT_MIN;
206 NumericGetDatum(us)));
208 }
209 }
210
211 if (*result > 0)
212 *result *= (FLT_MAX / (((GISTENTRY *) PG_GETARG_POINTER(0))->rel->rd_att->natts + 1));
213
215}
Datum numeric_div(PG_FUNCTION_ARGS)
Definition numeric.c:3145
Datum numeric_sub(PG_FUNCTION_ARGS)
Definition numeric.c:2947
Numeric int64_to_numeric(int64 val)
Definition numeric.c:4270
bool numeric_is_nan(Numeric num)
Definition numeric.c:834
Datum numeric_float8_no_overflow(PG_FUNCTION_ARGS)
Definition numeric.c:4617
GBT_VARKEY * gbt_var_key_copy(const GBT_VARKEY_R *u)
void gbt_var_bin_union(Datum *u, GBT_VARKEY *e, Oid collation, const gbtree_vinfo *tinfo, FmgrInfo *flinfo)
float float4
Definition c.h:772
uint32 result
#define DirectFunctionCall1(func, arg1)
Definition fmgr.h:688
static Datum NumericGetDatum(Numeric X)
Definition numeric.h:76
static float8 DatumGetFloat8(Datum X)
Definition postgres.h:498
uint64_t Datum
Definition postgres.h:70
static int fb(int x)

References DatumGetBool(), DatumGetFloat8(), DatumGetNumeric(), DatumGetPointer(), DirectFunctionCall1, DirectFunctionCall2, fb(), gbt_var_bin_union(), gbt_var_key_copy(), gbt_var_key_readable(), int64_to_numeric(), GISTENTRY::key, numeric_div(), numeric_float8_no_overflow(), numeric_gt(), numeric_is_nan(), numeric_sub(), NumericGetDatum(), PG_GET_COLLATION, PG_GETARG_POINTER, PG_RETURN_POINTER, PointerGetDatum, result, and tinfo.

◆ gbt_numeric_picksplit()

Datum gbt_numeric_picksplit ( PG_FUNCTION_ARGS  )

Definition at line 218 of file btree_numeric.c.

219{
222
224 &tinfo, fcinfo->flinfo);
226}
GIST_SPLITVEC * gbt_var_picksplit(const GistEntryVector *entryvec, GIST_SPLITVEC *v, Oid collation, const gbtree_vinfo *tinfo, FmgrInfo *flinfo)

References fb(), gbt_var_picksplit(), PG_GET_COLLATION, PG_GETARG_POINTER, PG_RETURN_POINTER, and tinfo.

◆ gbt_numeric_same()

Datum gbt_numeric_same ( PG_FUNCTION_ARGS  )

Definition at line 142 of file btree_numeric.c.

143{
144 Datum d1 = PG_GETARG_DATUM(0);
145 Datum d2 = PG_GETARG_DATUM(1);
146 bool *result = (bool *) PG_GETARG_POINTER(2);
147
148 *result = gbt_var_same(d1, d2, PG_GET_COLLATION(), &tinfo, fcinfo->flinfo);
150}
bool gbt_var_same(Datum d1, Datum d2, Oid collation, const gbtree_vinfo *tinfo, FmgrInfo *flinfo)

References gbt_var_same(), PG_GET_COLLATION, PG_GETARG_DATUM, PG_GETARG_POINTER, PG_RETURN_POINTER, result, and tinfo.

◆ gbt_numeric_sortsupport()

Datum gbt_numeric_sortsupport ( PG_FUNCTION_ARGS  )

Definition at line 250 of file btree_numeric.c.

251{
253
255 ssup->ssup_extra = NULL;
256
258}
static int gbt_numeric_ssup_cmp(Datum x, Datum y, SortSupport ssup)
struct SortSupportData * SortSupport
Definition execnodes.h:61
#define PG_RETURN_VOID()
Definition fmgr.h:350
int(* comparator)(Datum x, Datum y, SortSupport ssup)

References SortSupportData::comparator, fb(), gbt_numeric_ssup_cmp(), PG_GETARG_POINTER, PG_RETURN_VOID, and SortSupportData::ssup_extra.

◆ gbt_numeric_ssup_cmp()

static int gbt_numeric_ssup_cmp ( Datum  x,
Datum  y,
SortSupport  ssup 
)
static

Definition at line 229 of file btree_numeric.c.

230{
233
237
238 /* for leaf items we expect lower == upper, so only compare lower */
240 PointerGetDatum(arg1.lower),
241 PointerGetDatum(arg2.lower));
242
245
246 return DatumGetInt32(result);
247}
#define GBT_FREE_IF_COPY(ptr1, ptr2)
#define PG_DETOAST_DATUM(datum)
Definition fmgr.h:240
int y
Definition isn.c:76
int x
Definition isn.c:75

References DatumGetInt32(), DirectFunctionCall2, fb(), GBT_FREE_IF_COPY, gbt_var_key_readable(), numeric_cmp(), PG_DETOAST_DATUM, PointerGetDatum, result, x, and y.

Referenced by gbt_numeric_sortsupport().

◆ gbt_numeric_union()

Datum gbt_numeric_union ( PG_FUNCTION_ARGS  )

Definition at line 132 of file btree_numeric.c.

133{
135 int32 *size = (int *) PG_GETARG_POINTER(1);
136
138 &tinfo, fcinfo->flinfo));
139}
GBT_VARKEY * gbt_var_union(const GistEntryVector *entryvec, int32 *size, Oid collation, const gbtree_vinfo *tinfo, FmgrInfo *flinfo)
int32_t int32
Definition c.h:679

References fb(), gbt_var_union(), PG_GET_COLLATION, PG_GETARG_POINTER, PG_RETURN_POINTER, and tinfo.

◆ PG_FUNCTION_INFO_V1() [1/7]

PG_FUNCTION_INFO_V1 ( gbt_numeric_compress  )

◆ PG_FUNCTION_INFO_V1() [2/7]

PG_FUNCTION_INFO_V1 ( gbt_numeric_consistent  )

◆ PG_FUNCTION_INFO_V1() [3/7]

PG_FUNCTION_INFO_V1 ( gbt_numeric_penalty  )

◆ PG_FUNCTION_INFO_V1() [4/7]

PG_FUNCTION_INFO_V1 ( gbt_numeric_picksplit  )

◆ PG_FUNCTION_INFO_V1() [5/7]

PG_FUNCTION_INFO_V1 ( gbt_numeric_same  )

◆ PG_FUNCTION_INFO_V1() [6/7]

PG_FUNCTION_INFO_V1 ( gbt_numeric_sortsupport  )

◆ PG_FUNCTION_INFO_V1() [7/7]

PG_FUNCTION_INFO_V1 ( gbt_numeric_union  )

Variable Documentation

◆ tinfo

const gbtree_vinfo tinfo
static
Initial value:
=
{
false,
}
@ gbt_t_numeric
Definition btree_gist.h:22
static bool gbt_numeric_gt(const void *a, const void *b, Oid collation, FmgrInfo *flinfo)
static int32 gbt_numeric_cmp(const void *a, const void *b, Oid collation, FmgrInfo *flinfo)
static bool gbt_numeric_eq(const void *a, const void *b, Oid collation, FmgrInfo *flinfo)
static bool gbt_numeric_ge(const void *a, const void *b, Oid collation, FmgrInfo *flinfo)
static bool gbt_numeric_lt(const void *a, const void *b, Oid collation, FmgrInfo *flinfo)
static bool gbt_numeric_le(const void *a, const void *b, Oid collation, FmgrInfo *flinfo)

Definition at line 83 of file btree_numeric.c.

84{
86 false, /* no truncation permitted */
93 NULL
94};

Referenced by gbt_numeric_compress(), gbt_numeric_consistent(), gbt_numeric_penalty(), gbt_numeric_picksplit(), gbt_numeric_same(), and gbt_numeric_union().