1066{
1067 GISTENTRY *entry = (GISTENTRY*) PG_GETARG_POINTER(0);
1068 BOX2DF query_box;
1069 BOX2DF *entry_box;
1070 StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
1072 bool *recheck = (bool *) PG_GETARG_POINTER(4);
1073
1074 POSTGIS_DEBUG(4, "[GIST] 'distance' function called");
1075
1076
1077
1078 if ( strategy != 13 && strategy != 14 ) {
1079 elog(ERROR, "unrecognized strategy number: %d", strategy);
1080 PG_RETURN_FLOAT8(FLT_MAX);
1081 }
1082
1083
1085 {
1086 POSTGIS_DEBUG(4, "[GIST] null query_gbox_index!");
1087 PG_RETURN_FLOAT8(FLT_MAX);
1088 }
1089
1090
1091 entry_box = (BOX2DF*)DatumGetPointer(entry->key);
1092
1093
1094 if ( strategy == 14 )
1095 {
1097 }
1098
1099 else if ( strategy == 13 )
1100 {
1101
1102
1103
1105
1106 if (GIST_LEAF(entry))
1107 *recheck = true;
1108 }
1109 else
1110 {
1111 elog(ERROR, "%s: reached unreachable code", __func__);
1112 PG_RETURN_NULL();
1113 }
1114
1116}
static double box2df_distance(const BOX2DF *a, const BOX2DF *b)
Calculate the box->box distance.
int gserialized_datum_get_box2df_p(Datum gsdatum, BOX2DF *box2df)
Peak into a GSERIALIZED datum to find the bounding box.
static double distance(double x1, double y1, double x2, double y2)