Update btree_gist for CIDR/INET changes --- there's really no need to
have a separate set of CIDR code here, either.
This commit is contained in:
parent
3125321934
commit
97ec950186
|
@ -1126,21 +1126,11 @@ RETURNS bool
|
||||||
AS 'MODULE_PATHNAME'
|
AS 'MODULE_PATHNAME'
|
||||||
LANGUAGE 'C';
|
LANGUAGE 'C';
|
||||||
|
|
||||||
CREATE FUNCTION gbt_cidr_consistent(internal,cidr,int2)
|
|
||||||
RETURNS bool
|
|
||||||
AS 'MODULE_PATHNAME'
|
|
||||||
LANGUAGE 'C';
|
|
||||||
|
|
||||||
CREATE FUNCTION gbt_inet_compress(internal)
|
CREATE FUNCTION gbt_inet_compress(internal)
|
||||||
RETURNS internal
|
RETURNS internal
|
||||||
AS 'MODULE_PATHNAME'
|
AS 'MODULE_PATHNAME'
|
||||||
LANGUAGE 'C';
|
LANGUAGE 'C';
|
||||||
|
|
||||||
CREATE FUNCTION gbt_cidr_compress(internal)
|
|
||||||
RETURNS internal
|
|
||||||
AS 'MODULE_PATHNAME'
|
|
||||||
LANGUAGE 'C';
|
|
||||||
|
|
||||||
CREATE FUNCTION gbt_inet_penalty(internal,internal,internal)
|
CREATE FUNCTION gbt_inet_penalty(internal,internal,internal)
|
||||||
RETURNS internal
|
RETURNS internal
|
||||||
AS 'MODULE_PATHNAME'
|
AS 'MODULE_PATHNAME'
|
||||||
|
@ -1183,12 +1173,12 @@ AS
|
||||||
CREATE OPERATOR CLASS gist_cidr_ops
|
CREATE OPERATOR CLASS gist_cidr_ops
|
||||||
DEFAULT FOR TYPE cidr USING gist
|
DEFAULT FOR TYPE cidr USING gist
|
||||||
AS
|
AS
|
||||||
OPERATOR 1 < RECHECK ,
|
OPERATOR 1 < (inet, inet) RECHECK ,
|
||||||
OPERATOR 2 <= RECHECK ,
|
OPERATOR 2 <= (inet, inet) RECHECK ,
|
||||||
OPERATOR 3 = RECHECK ,
|
OPERATOR 3 = (inet, inet) RECHECK ,
|
||||||
OPERATOR 4 >= RECHECK ,
|
OPERATOR 4 >= (inet, inet) RECHECK ,
|
||||||
OPERATOR 5 > RECHECK ,
|
OPERATOR 5 > (inet, inet) RECHECK ,
|
||||||
FUNCTION 1 gbt_cidr_consistent (internal, cidr, int2),
|
FUNCTION 1 gbt_inet_consistent (internal, inet, int2),
|
||||||
FUNCTION 2 gbt_inet_union (bytea, internal),
|
FUNCTION 2 gbt_inet_union (bytea, internal),
|
||||||
FUNCTION 3 gbt_inet_compress (internal),
|
FUNCTION 3 gbt_inet_compress (internal),
|
||||||
FUNCTION 4 gbt_decompress (internal),
|
FUNCTION 4 gbt_decompress (internal),
|
||||||
|
|
|
@ -14,20 +14,16 @@ typedef struct inetkey
|
||||||
** inet ops
|
** inet ops
|
||||||
*/
|
*/
|
||||||
PG_FUNCTION_INFO_V1(gbt_inet_compress);
|
PG_FUNCTION_INFO_V1(gbt_inet_compress);
|
||||||
PG_FUNCTION_INFO_V1(gbt_cidr_compress);
|
|
||||||
PG_FUNCTION_INFO_V1(gbt_inet_union);
|
PG_FUNCTION_INFO_V1(gbt_inet_union);
|
||||||
PG_FUNCTION_INFO_V1(gbt_inet_picksplit);
|
PG_FUNCTION_INFO_V1(gbt_inet_picksplit);
|
||||||
PG_FUNCTION_INFO_V1(gbt_inet_consistent);
|
PG_FUNCTION_INFO_V1(gbt_inet_consistent);
|
||||||
PG_FUNCTION_INFO_V1(gbt_cidr_consistent);
|
|
||||||
PG_FUNCTION_INFO_V1(gbt_inet_penalty);
|
PG_FUNCTION_INFO_V1(gbt_inet_penalty);
|
||||||
PG_FUNCTION_INFO_V1(gbt_inet_same);
|
PG_FUNCTION_INFO_V1(gbt_inet_same);
|
||||||
|
|
||||||
Datum gbt_inet_compress(PG_FUNCTION_ARGS);
|
Datum gbt_inet_compress(PG_FUNCTION_ARGS);
|
||||||
Datum gbt_cidr_compress(PG_FUNCTION_ARGS);
|
|
||||||
Datum gbt_inet_union(PG_FUNCTION_ARGS);
|
Datum gbt_inet_union(PG_FUNCTION_ARGS);
|
||||||
Datum gbt_inet_picksplit(PG_FUNCTION_ARGS);
|
Datum gbt_inet_picksplit(PG_FUNCTION_ARGS);
|
||||||
Datum gbt_inet_consistent(PG_FUNCTION_ARGS);
|
Datum gbt_inet_consistent(PG_FUNCTION_ARGS);
|
||||||
Datum gbt_cidr_consistent(PG_FUNCTION_ARGS);
|
|
||||||
Datum gbt_inet_penalty(PG_FUNCTION_ARGS);
|
Datum gbt_inet_penalty(PG_FUNCTION_ARGS);
|
||||||
Datum gbt_inet_same(PG_FUNCTION_ARGS);
|
Datum gbt_inet_same(PG_FUNCTION_ARGS);
|
||||||
|
|
||||||
|
@ -89,17 +85,18 @@ static const gbtree_ninfo tinfo =
|
||||||
**************************************************/
|
**************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
Datum
|
||||||
static GISTENTRY *
|
gbt_inet_compress(PG_FUNCTION_ARGS)
|
||||||
gbt_inet_compress_inetrnal(GISTENTRY *retval, GISTENTRY *entry, Oid typid)
|
|
||||||
{
|
{
|
||||||
|
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
|
||||||
|
GISTENTRY *retval;
|
||||||
|
|
||||||
if (entry->leafkey)
|
if (entry->leafkey)
|
||||||
{
|
{
|
||||||
inetKEY *r = (inetKEY *) palloc(sizeof(inetKEY));
|
inetKEY *r = (inetKEY *) palloc(sizeof(inetKEY));
|
||||||
|
|
||||||
retval = palloc(sizeof(GISTENTRY));
|
retval = palloc(sizeof(GISTENTRY));
|
||||||
r->lower = convert_network_to_scalar(entry->key, typid);
|
r->lower = convert_network_to_scalar(entry->key, INETOID);
|
||||||
r->upper = r->lower;
|
r->upper = r->lower;
|
||||||
gistentryinit(*retval, PointerGetDatum(r),
|
gistentryinit(*retval, PointerGetDatum(r),
|
||||||
entry->rel, entry->page,
|
entry->rel, entry->page,
|
||||||
|
@ -108,46 +105,7 @@ gbt_inet_compress_inetrnal(GISTENTRY *retval, GISTENTRY *entry, Oid typid)
|
||||||
else
|
else
|
||||||
retval = entry;
|
retval = entry;
|
||||||
|
|
||||||
return (retval);
|
PG_RETURN_POINTER(retval);
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Datum
|
|
||||||
gbt_inet_compress(PG_FUNCTION_ARGS)
|
|
||||||
{
|
|
||||||
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
|
|
||||||
GISTENTRY *retval = NULL;
|
|
||||||
|
|
||||||
PG_RETURN_POINTER(gbt_inet_compress_inetrnal(retval, entry, INETOID));
|
|
||||||
}
|
|
||||||
|
|
||||||
Datum
|
|
||||||
gbt_cidr_compress(PG_FUNCTION_ARGS)
|
|
||||||
{
|
|
||||||
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
|
|
||||||
GISTENTRY *retval = NULL;
|
|
||||||
|
|
||||||
PG_RETURN_POINTER(gbt_inet_compress_inetrnal(retval, entry, CIDROID));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static bool
|
|
||||||
gbt_inet_consistent_internal(
|
|
||||||
const GISTENTRY *entry,
|
|
||||||
const double *query,
|
|
||||||
const StrategyNumber *strategy
|
|
||||||
)
|
|
||||||
{
|
|
||||||
inetKEY *kkk = (inetKEY *) DatumGetPointer(entry->key);
|
|
||||||
GBT_NUMKEY_R key;
|
|
||||||
|
|
||||||
key.lower = (GBT_NUMKEY *) & kkk->lower;
|
|
||||||
key.upper = (GBT_NUMKEY *) & kkk->upper;
|
|
||||||
|
|
||||||
return (
|
|
||||||
gbt_num_consistent(&key, (void *) query, strategy, GIST_LEAF(entry), &tinfo)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -157,22 +115,14 @@ gbt_inet_consistent(PG_FUNCTION_ARGS)
|
||||||
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
|
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
|
||||||
double query = convert_network_to_scalar(PG_GETARG_DATUM(1), INETOID);
|
double query = convert_network_to_scalar(PG_GETARG_DATUM(1), INETOID);
|
||||||
StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
|
StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
|
||||||
|
inetKEY *kkk = (inetKEY *) DatumGetPointer(entry->key);
|
||||||
|
GBT_NUMKEY_R key;
|
||||||
|
|
||||||
PG_RETURN_BOOL(
|
key.lower = (GBT_NUMKEY *) & kkk->lower;
|
||||||
gbt_inet_consistent_internal(entry, &query, &strategy)
|
key.upper = (GBT_NUMKEY *) & kkk->upper;
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
Datum
|
PG_RETURN_BOOL(gbt_num_consistent(&key, (void *) &query,
|
||||||
gbt_cidr_consistent(PG_FUNCTION_ARGS)
|
&strategy, GIST_LEAF(entry), &tinfo));
|
||||||
{
|
|
||||||
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
|
|
||||||
double query = convert_network_to_scalar(PG_GETARG_DATUM(1), CIDROID);
|
|
||||||
StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
|
|
||||||
|
|
||||||
PG_RETURN_BOOL(
|
|
||||||
gbt_inet_consistent_internal(entry, &query, &strategy)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue