Datum gbt_int4_distance(PG_FUNCTION_ARGS) { GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0); int32 query = PG_GETARG_INT32(1); /* Oid subtype = PG_GETARG_OID(3); */ int32KEY *kkk = (int32KEY *) DatumGetPointer(entry->key); GBT_NUMKEY_R key; key.lower = (GBT_NUMKEY *) &kkk->lower; key.upper = (GBT_NUMKEY *) &kkk->upper; PG_RETURN_FLOAT8( gbt_num_distance(&key, (void *) &query, GIST_LEAF(entry), &tinfo) ); }
datum_t gbt_cash_distance(PG_FUNC_ARGS) { struct gist_entry *entry = (struct gist_entry *) ARG_POINTER(0); Cash query = ARG_CASH(1); /* oid_t subtype = ARG_OID(3); */ cashKEY *kkk = (cashKEY *) D_TO_PTR(entry->key); GBT_NUMKEY_R key; key.lower = (GBT_NUMKEY *) &kkk->lower; key.upper = (GBT_NUMKEY *) &kkk->upper; RET_FLOAT8( gbt_num_distance(&key, (void *) &query, GIST_LEAF(entry), &tinfo) ); }
Datum gbt_ts_distance(PG_FUNCTION_ARGS) { GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0); Timestamp query = PG_GETARG_TIMESTAMP(1); /* Oid subtype = PG_GETARG_OID(3); */ tsKEY *kkk = (tsKEY *) DatumGetPointer(entry->key); GBT_NUMKEY_R key; key.lower = (GBT_NUMKEY *) &kkk->lower; key.upper = (GBT_NUMKEY *) &kkk->upper; PG_RETURN_FLOAT8( gbt_num_distance(&key, (void *) &query, GIST_LEAF(entry), &tinfo, fcinfo->flinfo) ); }
Datum gbt_tstz_distance(PG_FUNCTION_ARGS) { GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0); TimestampTz query = PG_GETARG_TIMESTAMPTZ(1); /* Oid subtype = PG_GETARG_OID(3); */ char *kkk = (char *) DatumGetPointer(entry->key); GBT_NUMKEY_R key; Timestamp qqq; key.lower = (GBT_NUMKEY *) &kkk[0]; key.upper = (GBT_NUMKEY *) &kkk[MAXALIGN(tinfo.size)]; qqq = tstz_to_ts_gmt(query); PG_RETURN_FLOAT8( gbt_num_distance(&key, (void *) &qqq, GIST_LEAF(entry), &tinfo) ); }