*** a/contrib/cube/cube.c --- b/contrib/cube/cube.c *************** *** 73,78 **** PG_FUNCTION_INFO_V1(g_cube_penalty); --- 73,79 ---- PG_FUNCTION_INFO_V1(g_cube_picksplit); PG_FUNCTION_INFO_V1(g_cube_union); PG_FUNCTION_INFO_V1(g_cube_same); + PG_FUNCTION_INFO_V1(g_cube_distance); Datum g_cube_consistent(PG_FUNCTION_ARGS); Datum g_cube_compress(PG_FUNCTION_ARGS); *************** *** 81,86 **** Datum g_cube_penalty(PG_FUNCTION_ARGS); --- 82,88 ---- Datum g_cube_picksplit(PG_FUNCTION_ARGS); Datum g_cube_union(PG_FUNCTION_ARGS); Datum g_cube_same(PG_FUNCTION_ARGS); + Datum g_cube_distance(PG_FUNCTION_ARGS); /* ** B-tree support functions *************** *** 649,654 **** g_cube_same(PG_FUNCTION_ARGS) --- 651,671 ---- } /* + ** Distance method + */ + Datum + g_cube_distance(PG_FUNCTION_ARGS) + { + GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0); + NDBOX *query = PG_GETARG_NDBOX(1); + double distance; + + distance = DatumGetFloat8(DirectFunctionCall2(cube_distance, entry->key, PointerGetDatum(query))); + + PG_RETURN_FLOAT8(distance); + } + + /* ** SUPPORT ROUTINES */ bool