]> granicus.if.org Git - postgis/commitdiff
Fix up selectivity and operators a little
authorPaul Ramsey <pramsey@cleverelephant.ca>
Wed, 15 Jun 2011 23:59:40 +0000 (23:59 +0000)
committerPaul Ramsey <pramsey@cleverelephant.ca>
Wed, 15 Jun 2011 23:59:40 +0000 (23:59 +0000)
git-svn-id: http://svn.osgeo.org/postgis/trunk@7402 b70326c6-7e19-0410-871a-916f4a2858ee

liblwgeom/g_box.c
liblwgeom/liblwgeom.h
postgis/geography.sql.in.c
postgis/geometry_gist_selectivity.c
postgis/lwgeom_box3d.c
postgis/postgis.sql.in.c

index fe9440a43c493356bff239dbd2ba5f1da7644408..a8aea301c5fa226e1759aa4d177b75c357295e82 100644 (file)
@@ -88,6 +88,23 @@ BOX3D* box3d_from_gbox(const GBOX *gbox)
        return b;       
 }
 
+/* TODO to be removed */
+GBOX* box3d_to_gbox(const BOX3D *b3d)
+{
+       GBOX *b;
+       assert(b3d);
+       
+       b = lwalloc(sizeof(GBOX));
+
+       b->xmin = b3d->xmin;
+       b->xmax = b3d->xmax;
+       b->ymin = b3d->ymin;
+       b->ymax = b3d->ymax;
+       b->zmin = b3d->zmin;
+       b->zmax = b3d->zmax;
+
+       return b;
+}
 
 void gbox_expand(GBOX *g, double d)
 {
index 33c38fd21c28dd2d22b018a47f940daadc113d69..212fb47403a4478b9b95042298c48c0574a466c3 100644 (file)
@@ -1415,6 +1415,7 @@ extern int box3d_union_p(BOX3D *b1, BOX3D *b2, BOX3D *ubox);
 
 
 extern BOX3D* box3d_from_gbox(const GBOX *gbox);
+extern GBOX* box3d_to_gbox(const BOX3D *b3d);
 
 /*
  * Returns a pointer to the BBOX internal to the serialized form.
index d5cd5484a5fdb398b9bb8594eb1ce1010046d37e..29c6a4caa11243e3f6a26d29023dbbb749d0b1dd 100644 (file)
@@ -819,14 +819,14 @@ CREATE OR REPLACE FUNCTION geometry_gist_decompress_nd(internal)
 --     LANGUAGE 'C';
 
 -- Availability: 2.0.0
-CREATE OR REPLACE FUNCTION geometry_overlaps_nd(geography, geography) 
+CREATE OR REPLACE FUNCTION geometry_overlaps_nd(geometry, geometry) 
        RETURNS boolean 
        AS 'MODULE_PATHNAME' ,'gserialized_overlaps'
        LANGUAGE 'C' IMMUTABLE STRICT;
 
 -- Availability: 2.0.0
 CREATE OPERATOR &&& (
-       LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = geometry_overlaps,
+       LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = geometry_overlaps_nd,
        COMMUTATOR = '&&&'
        ,RESTRICT = contsel, JOIN = contjoinsel
 --     ,RESTRICT = geometry_gist_selectivity_nd 
index 1c991e84483765a8f75ee7735f61338278690230..10711b86575c9d5d032b5136feab7b2f5665b15b 100644 (file)
@@ -110,9 +110,9 @@ static float8 estimate_selectivity(GBOX *box, GEOM_STATS *geomstats);
  */
 #define REALLY_DO_JOINSEL 1
 
-Datum geometry_gist_sel(PG_FUNCTION_ARGS);
-Datum geometry_gist_joinsel(PG_FUNCTION_ARGS);
-Datum geometry_analyze(PG_FUNCTION_ARGS);
+Datum geometry_gist_sel_2d(PG_FUNCTION_ARGS);
+Datum geometry_gist_joinsel_2d(PG_FUNCTION_ARGS);
+Datum geometry_analyze_2d(PG_FUNCTION_ARGS);
 Datum geometry_estimated_extent(PG_FUNCTION_ARGS);
 
 
@@ -164,8 +164,8 @@ calculate_column_intersection(GBOX *search_box, GEOM_STATS *geomstats1, GEOM_STA
 * JOIN selectivity in the GiST && operator
 * for all PG versions
 */
-PG_FUNCTION_INFO_V1(geometry_gist_joinsel);
-Datum geometry_gist_joinsel(PG_FUNCTION_ARGS)
+PG_FUNCTION_INFO_V1(geometry_gist_joinsel_2d);
+Datum geometry_gist_joinsel_2d(PG_FUNCTION_ARGS)
 {
        PlannerInfo *root = (PlannerInfo *) PG_GETARG_POINTER(0);
 
@@ -626,8 +626,8 @@ estimate_selectivity(GBOX *box, GEOM_STATS *geomstats)
  * This is the one used for PG version >= 7.5
  *
  */
-PG_FUNCTION_INFO_V1(geometry_gist_sel);
-Datum geometry_gist_sel(PG_FUNCTION_ARGS)
+PG_FUNCTION_INFO_V1(geometry_gist_sel_2d);
+Datum geometry_gist_sel_2d(PG_FUNCTION_ARGS)
 {
        PlannerInfo *root = (PlannerInfo *) PG_GETARG_POINTER(0);
 
@@ -1289,8 +1289,8 @@ compute_geometry_stats(VacAttrStats *stats, AnalyzeAttrFetchFunc fetchfunc,
  * value for now.
  *
  */
-PG_FUNCTION_INFO_V1(geometry_analyze);
-Datum geometry_analyze(PG_FUNCTION_ARGS)
+PG_FUNCTION_INFO_V1(geometry_analyze_2d);
+Datum geometry_analyze_2d(PG_FUNCTION_ARGS)
 {
        VacAttrStats *stats = (VacAttrStats *)PG_GETARG_POINTER(0);
        Form_pg_attribute attr = stats->attr;
index c9a300cf7107cadc45b99a777c85fd51bf14fea5..4dd77316a437c873d9c0945758577fc619c2671e 100644 (file)
@@ -192,7 +192,11 @@ PG_FUNCTION_INFO_V1(BOX3D_to_BOX2DFLOAT4);
 Datum BOX3D_to_BOX2DFLOAT4(PG_FUNCTION_ARGS)
 {
        BOX3D *in = (BOX3D *)PG_GETARG_POINTER(0);
+#ifdef GSERIALIZED_ON
+       BOX2DFLOAT4 *out = box3d_to_gbox(in);
+#else
        BOX2DFLOAT4 *out = box3d_to_box2df(in);
+#endif
        PG_RETURN_POINTER(out);
 }
 
index a4e0d5117531f0ce6968b25c7eb93808ca0a133a..1431224c21ed6d2769f78490c8a2875a3823623f 100644 (file)
@@ -64,7 +64,7 @@ CREATE OR REPLACE FUNCTION geometry_out(geometry)
 CREATE OR REPLACE FUNCTION geometry_analyze(internal)\r
        RETURNS bool\r
 #ifdef GSERIALIZED_ON\r
-       AS 'MODULE_PATHNAME', 'geometry_analyze'\r
+       AS 'MODULE_PATHNAME', 'geometry_analyze_2d'\r
 #else\r
        AS 'MODULE_PATHNAME', 'LWGEOM_analyze'\r
 #endif\r
@@ -526,16 +526,16 @@ CREATE OR REPLACE FUNCTION geometry_gist_decompress_2d(internal)
        LANGUAGE 'C';\r
 \r
 -- Availability: 2.0.0\r
---CREATE OR REPLACE FUNCTION geometry_gist_sel_2d (internal, oid, internal, int4)\r
---     RETURNS float8\r
---     AS 'MODULE_PATHNAME', 'gserialized_gist_sel_2d'\r
---     LANGUAGE 'C';\r
+CREATE OR REPLACE FUNCTION geometry_gist_sel_2d (internal, oid, internal, int4)\r
+       RETURNS float8\r
+       AS 'MODULE_PATHNAME', 'geometry_gist_sel_2d'\r
+       LANGUAGE 'C';\r
 \r
 -- Availability: 2.0.0\r
---CREATE OR REPLACE FUNCTION geometry_gist_joinsel_2d(internal, oid, internal, smallint)\r
---     RETURNS float8\r
---     AS 'MODULE_PATHNAME', 'gserialized_gist_joinsel_2d'\r
---     LANGUAGE 'C';\r
+CREATE OR REPLACE FUNCTION geometry_gist_joinsel_2d(internal, oid, internal, smallint)\r
+       RETURNS float8\r
+       AS 'MODULE_PATHNAME', 'geometry_gist_joinsel_2d'\r
+       LANGUAGE 'C';\r
 \r
 -----------------------------------------------------------------------------\r
 -- GEOMETRY Operators\r
@@ -550,8 +550,8 @@ CREATE OR REPLACE FUNCTION geometry_overlaps(geometry, geometry)
 CREATE OPERATOR && (\r
        LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = geometry_overlaps,\r
        COMMUTATOR = '&&'\r
-       ,RESTRICT = contsel, JOIN = contjoinsel\r
---     ,RESTRICT = geometry_gist_sel_2d, JOIN = geometry_gist_joinsel_2d       \r
+--     ,RESTRICT = contsel, JOIN = contjoinsel\r
+       ,RESTRICT = geometry_gist_sel_2d, JOIN = geometry_gist_joinsel_2d       \r
 );\r
 \r
 -- Availability: 2.0.0\r