@ -1464,26 +1464,12 @@ gist_point_distance(PG_FUNCTION_ARGS)
PG_RETURN_FLOAT8 ( distance ) ;
}
/*
* The inexact GiST distance method for geometric types that store bounding
* boxes .
*
* Compute lossy distance from point to index entries . The result is inexact
* because index entries are bounding boxes , not the exact shapes of the
* indexed geometric types . We use distance from point to MBR of index entry .
* This is a lower bound estimate of distance from point to indexed geometric
* type .
*/
static float8
gist_bbox_distance ( GISTENTRY * entry , Datum query ,
StrategyNumber strategy , bool * recheck )
gist_bbox_distance ( GISTENTRY * entry , Datum query , StrategyNumber strategy )
{
float8 distance ;
StrategyNumber strategyGroup = strategy / GeoStrategyNumberOffset ;
/* Bounding box distance is always inexact. */
* recheck = true ;
switch ( strategyGroup )
{
case PointStrategyNumberGroup :
@ -1499,6 +1485,32 @@ gist_bbox_distance(GISTENTRY *entry, Datum query,
return distance ;
}
Datum
gist_box_distance ( PG_FUNCTION_ARGS )
{
GISTENTRY * entry = ( GISTENTRY * ) PG_GETARG_POINTER ( 0 ) ;
Datum query = PG_GETARG_DATUM ( 1 ) ;
StrategyNumber strategy = ( StrategyNumber ) PG_GETARG_UINT16 ( 2 ) ;
/* Oid subtype = PG_GETARG_OID(3); */
/* bool *recheck = (bool *) PG_GETARG_POINTER(4); */
float8 distance ;
distance = gist_bbox_distance ( entry , query , strategy ) ;
PG_RETURN_FLOAT8 ( distance ) ;
}
/*
* The inexact GiST distance methods for geometric types that store bounding
* boxes .
*
* Compute lossy distance from point to index entries . The result is inexact
* because index entries are bounding boxes , not the exact shapes of the
* indexed geometric types . We use distance from point to MBR of index entry .
* This is a lower bound estimate of distance from point to indexed geometric
* type .
*/
Datum
gist_circle_distance ( PG_FUNCTION_ARGS )
{
@ -1510,7 +1522,8 @@ gist_circle_distance(PG_FUNCTION_ARGS)
bool * recheck = ( bool * ) PG_GETARG_POINTER ( 4 ) ;
float8 distance ;
distance = gist_bbox_distance ( entry , query , strategy , recheck ) ;
distance = gist_bbox_distance ( entry , query , strategy ) ;
* recheck = true ;
PG_RETURN_FLOAT8 ( distance ) ;
}
@ -1526,7 +1539,8 @@ gist_poly_distance(PG_FUNCTION_ARGS)
bool * recheck = ( bool * ) PG_GETARG_POINTER ( 4 ) ;
float8 distance ;
distance = gist_bbox_distance ( entry , query , strategy , recheck ) ;
distance = gist_bbox_distance ( entry , query , strategy ) ;
* recheck = true ;
PG_RETURN_FLOAT8 ( distance ) ;
}