Datum gbt_ts_penalty(PG_FUNCTION_ARGS) { tsKEY *origentry = (tsKEY *) DatumGetPointer(((GISTENTRY *) PG_GETARG_POINTER(0))->key); tsKEY *newentry = (tsKEY *) DatumGetPointer(((GISTENTRY *) PG_GETARG_POINTER(1))->key); float *result = (float *) PG_GETARG_POINTER(2); double orgdbl[2], newdbl[2]; /* * We are allways using "double" timestamps here. Precision should be good * enough. */ orgdbl[0] = ((double) origentry->lower); orgdbl[1] = ((double) origentry->upper); newdbl[0] = ((double) newentry->lower); newdbl[1] = ((double) newentry->upper); penalty_check_max_float(orgdbl[0]); penalty_check_max_float(orgdbl[1]); penalty_check_max_float(newdbl[0]); penalty_check_max_float(newdbl[1]); penalty_num(result, orgdbl[0], orgdbl[1], newdbl[0], newdbl[1]); PG_RETURN_POINTER(result); }
Datum gbt_oid_penalty(PG_FUNCTION_ARGS) { oidKEY *origentry = (oidKEY *) DatumGetPointer(((GISTENTRY *) PG_GETARG_POINTER(0))->key); oidKEY *newentry = (oidKEY *) DatumGetPointer(((GISTENTRY *) PG_GETARG_POINTER(1))->key); float *result = (float *) PG_GETARG_POINTER(2); penalty_num(result, origentry->lower, origentry->upper, newentry->lower, newentry->upper); PG_RETURN_POINTER(result); }
Datum gbt_int8_penalty(MDB_FUNCTION_ARGS) { int64KEY *origentry = (int64KEY *) DatumGetPointer(((GISTENTRY *) MDB_GETARG_POINTER(0))->key); int64KEY *newentry = (int64KEY *) DatumGetPointer(((GISTENTRY *) MDB_GETARG_POINTER(1))->key); float *result = (float *) MDB_GETARG_POINTER(2); penalty_num(result, origentry->lower, origentry->upper, newentry->lower, newentry->upper); MDB_RETURN_POINTER(result); }
datum_t gbt_cash_penalty(PG_FUNC_ARGS) { cashKEY *origentry = (cashKEY *) D_TO_PTR(((struct gist_entry *) ARG_POINTER(0))->key); cashKEY *newentry = (cashKEY *) D_TO_PTR(((struct gist_entry *) ARG_POINTER(1))->key); float *result = (float *) ARG_POINTER(2); penalty_num(result, origentry->lower, origentry->upper, newentry->lower, newentry->upper); RET_POINTER(result); }
Datum gbt_intv_penalty(PG_FUNCTION_ARGS) { intvKEY *origentry = (intvKEY *) DatumGetPointer(((GISTENTRY *) PG_GETARG_POINTER(0))->key); intvKEY *newentry = (intvKEY *) DatumGetPointer(((GISTENTRY *) PG_GETARG_POINTER(1))->key); float *result = (float *) PG_GETARG_POINTER(2); double iorg[2], inew[2]; iorg[0] = intr2num(&origentry->lower); iorg[1] = intr2num(&origentry->upper); inew[0] = intr2num(&newentry->lower); inew[1] = intr2num(&newentry->upper); penalty_num(result, iorg[0], iorg[1], inew[0], inew[1]); PG_RETURN_POINTER(result); }
Datum gbt_macad_penalty(PG_FUNCTION_ARGS) { macKEY *origentry = (macKEY *) DatumGetPointer(((GISTENTRY *) PG_GETARG_POINTER(0))->key); macKEY *newentry = (macKEY *) DatumGetPointer(((GISTENTRY *) PG_GETARG_POINTER(1))->key); float *result = (float *) PG_GETARG_POINTER(2); uint64 iorg[2], inew[2]; iorg[0] = mac_2_uint64(&origentry->lower); iorg[1] = mac_2_uint64(&origentry->upper); inew[0] = mac_2_uint64(&newentry->lower); inew[1] = mac_2_uint64(&newentry->upper); penalty_num(result, iorg[0], iorg[1], inew[0], inew[1]); PG_RETURN_POINTER(result); }
Datum gbt_uuid_penalty(PG_FUNCTION_ARGS) { uuidKEY *origentry = (uuidKEY *) DatumGetPointer(((GISTENTRY *) PG_GETARG_POINTER(0))->key); uuidKEY *newentry = (uuidKEY *) DatumGetPointer(((GISTENTRY *) PG_GETARG_POINTER(1))->key); float *result = (float *) PG_GETARG_POINTER(2); double olower, oupper, nlower, nupper; olower = uuid_2_double(&origentry->lower); oupper = uuid_2_double(&origentry->upper); nlower = uuid_2_double(&newentry->lower); nupper = uuid_2_double(&newentry->upper); penalty_num(result, olower, oupper, nlower, nupper); PG_RETURN_POINTER(result); }