30#define BTGIN_GET_BTREE_STRATEGY(strat) ((strat) & 0x0F)
31#define BTGIN_GET_RHS_TYPE_CODE(strat) ((strat) >> 4)
68 const bool *rhs_is_varlena,
79 bool *ptr_partialmatch = (
bool *)
palloc(
sizeof(
bool));
94 if (rhs_is_varlena[rhs_code])
99 *partialmatch = ptr_partialmatch;
100 *ptr_partialmatch =
false;
116 entries[0] = leftmostvalue();
117 *ptr_partialmatch =
true;
121 *ptr_partialmatch =
true;
125 if (cvt_fns && cvt_fns[rhs_code])
127 entries[0] = (*cvt_fns[rhs_code]) (datum);
128 *ptr_partialmatch =
true;
134 elog(
ERROR,
"unrecognized strategy number: %d", strategy);
138 data->strategy = strategy;
139 data->orig_datum = datum;
140 data->entry_datum = entries[0];
141 data->typecmp = cmp_fns[rhs_code];
226 elog(
ERROR,
"unrecognized strategy number: %d",
246#define GIN_SUPPORT(type, leftmostvalue, is_varlena, cvtfns, cmpfns) \
247PG_FUNCTION_INFO_V1(gin_extract_value_##type); \
249gin_extract_value_##type(PG_FUNCTION_ARGS) \
251 return gin_btree_extract_value(fcinfo, is_varlena[0]); \
253PG_FUNCTION_INFO_V1(gin_extract_query_##type); \
255gin_extract_query_##type(PG_FUNCTION_ARGS) \
257 return gin_btree_extract_query(fcinfo, \
258 leftmostvalue, is_varlena, \
261PG_FUNCTION_INFO_V1(gin_compare_prefix_##type); \
263gin_compare_prefix_##type(PG_FUNCTION_ARGS) \
265 return gin_btree_compare_prefix(fcinfo); \
322{
false,
false,
false};
357{
false,
false,
false};
390{
false,
false,
false};
519{
false,
false,
false};
554{
false,
false,
false};
584 v->
zone = -24 * 3600;
628{
false,
false,
false};
807#define NUMERIC_IS_LEFTMOST(x) ((x) == NULL)
860#define ENUM_IS_LEFTMOST(x) ((x) == InvalidOid)
Datum numeric_cmp(PG_FUNCTION_ARGS)
Datum timestamp_cmp_timestamptz(PG_FUNCTION_ARGS)
Datum timestamp_cmp(PG_FUNCTION_ARGS)
TimestampTz timestamp2timestamptz_opt_overflow(Timestamp timestamp, int *overflow)
Datum timestamptz_cmp_timestamp(PG_FUNCTION_ARGS)
Datum interval_cmp(PG_FUNCTION_ARGS)
Timestamp timestamptz2timestamp_opt_overflow(TimestampTz timestamp, int *overflow)
static const PGFunction bytea_cmp_fns[]
static Datum leftmostvalue_oid(void)
static const PGFunction char_cmp_fns[]
static const btree_gin_convert_function int8_cvt_fns[]
static const PGFunction int8_cmp_fns[]
static const btree_gin_convert_function int2_cvt_fns[]
static const PGFunction macaddr_cmp_fns[]
Datum gin_numeric_cmp(PG_FUNCTION_ARGS)
static Datum leftmostvalue_timestamp(void)
static const bool text_rhs_is_varlena[]
static Datum cvt_int2_int8(Datum input)
static const PGFunction varbit_cmp_fns[]
static const bool time_rhs_is_varlena[]
static Datum cvt_int8_int2(Datum input)
static Datum leftmostvalue_int4(void)
static const PGFunction oid_cmp_fns[]
static const bool int4_rhs_is_varlena[]
static const btree_gin_convert_function text_cvt_fns[]
static const bool timestamptz_rhs_is_varlena[]
static Datum leftmostvalue_varbit(void)
static const PGFunction timestamp_cmp_fns[]
static const btree_gin_convert_function timestamptz_cvt_fns[]
static const PGFunction uuid_cmp_fns[]
static const PGFunction interval_cmp_fns[]
static Datum leftmostvalue_float8(void)
static Datum leftmostvalue_time(void)
Datum(* btree_gin_leftmost_function)(void)
static const PGFunction time_cmp_fns[]
#define BTGIN_GET_BTREE_STRATEGY(strat)
static const bool uuid_rhs_is_varlena[]
static Datum leftmostvalue_int2(void)
static const bool name_rhs_is_varlena[]
Datum gin_enum_cmp(PG_FUNCTION_ARGS)
static const PGFunction cidr_cmp_fns[]
static const PGFunction numeric_cmp_fns[]
static const PGFunction float4_cmp_fns[]
static const PGFunction timestamptz_cmp_fns[]
static Datum gin_btree_extract_query(FunctionCallInfo fcinfo, btree_gin_leftmost_function leftmostvalue, const bool *rhs_is_varlena, const btree_gin_convert_function *cvt_fns, const PGFunction *cmp_fns)
#define BTGIN_GET_RHS_TYPE_CODE(strat)
static const bool interval_rhs_is_varlena[]
static const PGFunction name_cmp_fns[]
static const bool bit_rhs_is_varlena[]
static const bool timetz_rhs_is_varlena[]
static const bool float8_rhs_is_varlena[]
PG_MODULE_MAGIC_EXT(.name="btree_gin",.version=PG_VERSION)
static const PGFunction enum_cmp_fns[]
static Datum leftmostvalue_macaddr8(void)
static Datum cvt_int8_int4(Datum input)
static const bool inet_rhs_is_varlena[]
static Datum cvt_timestamptz_timestamp(Datum input)
static const PGFunction date_cmp_fns[]
static Datum leftmostvalue_text(void)
static const bool date_rhs_is_varlena[]
static const PGFunction int2_cmp_fns[]
struct QueryInfo QueryInfo
static const bool oid_rhs_is_varlena[]
static const bool macaddr8_rhs_is_varlena[]
static Datum cvt_date_timestamptz(Datum input)
static Datum leftmostvalue_enum(void)
static Datum leftmostvalue_bool(void)
#define NUMERIC_IS_LEFTMOST(x)
static const btree_gin_convert_function float4_cvt_fns[]
static Datum cvt_timestamp_timestamptz(Datum input)
static Datum leftmostvalue_interval(void)
static const PGFunction bit_cmp_fns[]
static Datum leftmostvalue_float4(void)
static Datum leftmostvalue_name(void)
static const bool float4_rhs_is_varlena[]
static const bool macaddr_rhs_is_varlena[]
static const bool numeric_rhs_is_varlena[]
static Datum leftmostvalue_inet(void)
static const btree_gin_convert_function name_cvt_fns[]
static Datum cvt_text_name(Datum input)
static const btree_gin_convert_function int4_cvt_fns[]
static const btree_gin_convert_function float8_cvt_fns[]
static const bool bool_rhs_is_varlena[]
static Datum cvt_timestamptz_date(Datum input)
static Datum cvt_date_timestamp(Datum input)
static const bool char_rhs_is_varlena[]
Datum(* btree_gin_convert_function)(Datum input)
static Datum cvt_timestamp_date(Datum input)
static const bool cidr_rhs_is_varlena[]
static Datum leftmostvalue_char(void)
static const PGFunction float8_cmp_fns[]
static Datum cvt_int4_int2(Datum input)
static const PGFunction bpchar_cmp_fns[]
static Datum leftmostvalue_uuid(void)
#define GIN_SUPPORT(type, leftmostvalue, is_varlena, cvtfns, cmpfns)
static Datum leftmostvalue_macaddr(void)
Datum gin_btree_consistent(PG_FUNCTION_ARGS)
static Datum leftmostvalue_timetz(void)
#define ENUM_IS_LEFTMOST(x)
static Datum leftmostvalue_money(void)
static const bool int2_rhs_is_varlena[]
static Datum leftmostvalue_numeric(void)
static const PGFunction inet_cmp_fns[]
static const btree_gin_convert_function date_cvt_fns[]
static const PGFunction macaddr8_cmp_fns[]
static Datum cvt_int2_int4(Datum input)
static const bool enum_rhs_is_varlena[]
static const PGFunction money_cmp_fns[]
static Datum gin_btree_compare_prefix(FunctionCallInfo fcinfo)
static const bool timestamp_rhs_is_varlena[]
static Datum gin_btree_extract_value(FunctionCallInfo fcinfo, bool is_varlena)
static Datum leftmostvalue_int8(void)
static Datum cvt_float4_float8(Datum input)
static const PGFunction text_cmp_fns[]
static Datum cvt_name_text(Datum input)
static const bool varbit_rhs_is_varlena[]
static Datum leftmostvalue_date(void)
static const bool bytea_rhs_is_varlena[]
PG_FUNCTION_INFO_V1(gin_btree_consistent)
static const PGFunction bool_cmp_fns[]
static Datum leftmostvalue_bit(void)
static const bool int8_rhs_is_varlena[]
static const PGFunction timetz_cmp_fns[]
static Datum cvt_float8_float4(Datum input)
static const btree_gin_convert_function timestamp_cvt_fns[]
static const bool money_rhs_is_varlena[]
static const bool bpchar_rhs_is_varlena[]
static const PGFunction int4_cmp_fns[]
static Datum cvt_int4_int8(Datum input)
Datum byteacmp(PG_FUNCTION_ARGS)
#define PG_USED_FOR_ASSERTS_ONLY
Datum cash_cmp(PG_FUNCTION_ARGS)
#define INTERVAL_NOBEGIN(i)
DateADT timestamp2date_opt_overflow(Timestamp timestamp, int *overflow)
Datum date_cmp(PG_FUNCTION_ARGS)
Datum time_cmp(PG_FUNCTION_ARGS)
Datum timetz_cmp(PG_FUNCTION_ARGS)
Datum date_cmp_timestamp(PG_FUNCTION_ARGS)
TimestampTz date2timestamptz_opt_overflow(DateADT dateVal, int *overflow)
Datum timestamptz_cmp_date(PG_FUNCTION_ARGS)
Datum date_cmp_timestamptz(PG_FUNCTION_ARGS)
DateADT timestamptz2date_opt_overflow(TimestampTz timestamp, int *overflow)
Timestamp date2timestamp_opt_overflow(DateADT dateVal, int *overflow)
Datum timestamp_cmp_date(PG_FUNCTION_ARGS)
static Datum DateADTGetDatum(DateADT X)
static DateADT DatumGetDateADT(Datum X)
static Datum TimeTzADTPGetDatum(const TimeTzADT *X)
static Datum TimeADTGetDatum(TimeADT X)
Datum enum_cmp(PG_FUNCTION_ARGS)
Datum btfloat4cmp(PG_FUNCTION_ARGS)
Datum btfloat84cmp(PG_FUNCTION_ARGS)
Datum btfloat8cmp(PG_FUNCTION_ARGS)
Datum btfloat48cmp(PG_FUNCTION_ARGS)
static float4 get_float4_infinity(void)
static float8 get_float8_infinity(void)
Datum CallerFInfoFunctionCall2(PGFunction func, FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2)
#define DirectFunctionCall2(func, arg1, arg2)
#define DatumGetTextPP(X)
#define PG_GETARG_POINTER(n)
#define DirectFunctionCall1(func, arg1)
#define PG_GETARG_DATUM(n)
#define PG_GETARG_UINT16(n)
#define PG_DETOAST_DATUM(datum)
#define PG_RETURN_INT32(x)
Datum(* PGFunction)(FunctionCallInfo fcinfo)
#define DirectFunctionCall3(func, arg1, arg2, arg3)
#define PG_RETURN_POINTER(x)
#define PG_GET_COLLATION()
#define PG_RETURN_BOOL(x)
Assert(PointerIsAligned(start, uint64))
Datum macaddr8_cmp(PG_FUNCTION_ARGS)
Datum macaddr_cmp(PG_FUNCTION_ARGS)
int pg_mbcliplen(const char *mbstr, int len, int limit)
void * palloc0(Size size)
Datum btnamecmp(PG_FUNCTION_ARGS)
Datum btint4cmp(PG_FUNCTION_ARGS)
Datum btboolcmp(PG_FUNCTION_ARGS)
Datum btint2cmp(PG_FUNCTION_ARGS)
Datum btint24cmp(PG_FUNCTION_ARGS)
Datum btoidcmp(PG_FUNCTION_ARGS)
Datum btint84cmp(PG_FUNCTION_ARGS)
Datum btcharcmp(PG_FUNCTION_ARGS)
Datum btint82cmp(PG_FUNCTION_ARGS)
Datum btint48cmp(PG_FUNCTION_ARGS)
Datum btint8cmp(PG_FUNCTION_ARGS)
Datum btint42cmp(PG_FUNCTION_ARGS)
Datum btint28cmp(PG_FUNCTION_ARGS)
Datum inet_in(PG_FUNCTION_ARGS)
Datum network_cmp(PG_FUNCTION_ARGS)
struct NumericData * Numeric
static Datum NumericGetDatum(Numeric X)
static Datum Int64GetDatum(int64 X)
static int64 DatumGetInt64(Datum X)
static Datum PointerGetDatum(const void *X)
static Name DatumGetName(Datum X)
static Datum Float4GetDatum(float4 X)
static float4 DatumGetFloat4(Datum X)
static Datum Int16GetDatum(int16 X)
static Datum BoolGetDatum(bool X)
static float8 DatumGetFloat8(Datum X)
static Datum ObjectIdGetDatum(Oid X)
static Datum NameGetDatum(const NameData *X)
static Datum Float8GetDatum(float8 X)
static Datum CStringGetDatum(const char *X)
static Datum Int32GetDatum(int32 X)
static int16 DatumGetInt16(Datum X)
static int32 DatumGetInt32(Datum X)
static Datum CharGetDatum(char X)
static int cmp(const chr *x, const chr *y, size_t len)
#define BTGreaterStrategyNumber
#define BTLessStrategyNumber
#define BTEqualStrategyNumber
#define BTLessEqualStrategyNumber
#define BTGreaterEqualStrategyNumber
static Datum MacaddrPGetDatum(const macaddr *X)
static Datum Macaddr8PGetDatum(const macaddr8 *X)
static Datum TimestampTzGetDatum(TimestampTz X)
static Datum TimestampGetDatum(Timestamp X)
static Datum IntervalPGetDatum(const Interval *X)
static Timestamp DatumGetTimestamp(Datum X)
static TimestampTz DatumGetTimestampTz(Datum X)
Datum uuid_cmp(PG_FUNCTION_ARGS)
static Datum UUIDPGetDatum(const pg_uuid_t *X)
static Size VARSIZE_ANY_EXHDR(const void *PTR)
static char * VARDATA_ANY(const void *PTR)
Datum bitcmp(PG_FUNCTION_ARGS)
Datum bit(PG_FUNCTION_ARGS)
Datum varbit(PG_FUNCTION_ARGS)
Datum bit_in(PG_FUNCTION_ARGS)
Datum varbit_in(PG_FUNCTION_ARGS)
Datum bpchar(PG_FUNCTION_ARGS)
Datum bpcharcmp(PG_FUNCTION_ARGS)
text * cstring_to_text_with_len(const char *s, int len)
text * cstring_to_text(const char *s)
Datum bttextnamecmp(PG_FUNCTION_ARGS)
Datum btnametextcmp(PG_FUNCTION_ARGS)
Datum bttextcmp(PG_FUNCTION_ARGS)