]> granicus.if.org Git - postgis/commitdiff
Initial skeleton on join selectivity estimator.
authorSandro Santilli <strk@keybit.net>
Mon, 13 Dec 2004 14:03:07 +0000 (14:03 +0000)
committerSandro Santilli <strk@keybit.net>
Mon, 13 Dec 2004 14:03:07 +0000 (14:03 +0000)
Current estimators application for box2d && box2d operator.

git-svn-id: http://svn.osgeo.org/postgis/trunk@1138 b70326c6-7e19-0410-871a-916f4a2858ee

lwgeom/lwgeom_estimate.c
lwgeom/lwpostgis.sql.in

index 25364c9d02321939924b633b72eb9b6c2195e4cc..ab380a4de66a5dbd1dbc8cab01351304a8e162e2 100644 (file)
@@ -86,6 +86,11 @@ Datum LWGEOM_estimated_extent(PG_FUNCTION_ARGS);
  */
 #define DEFAULT_GEOMETRY_SEL 0.000005 
 
+/*
+ * Default geometry join selectivity factor
+ */
+#define DEFAULT_GEOMETRY_JOINSEL 0.000005 
+
 #define min(a,b)  ((a) <= (b) ? (a) : (b))
 #define max(a,b)  ((a) >  (b) ? (a) : (b))
 
@@ -1306,6 +1311,18 @@ Datum LWGEOM_gist_sel(PG_FUNCTION_ARGS)
 
 }
 
+// JOIN selectivity in the GiST && operator
+PG_FUNCTION_INFO_V1(LWGEOM_gist_joinsel);
+Datum LWGEOM_gist_joinsel(PG_FUNCTION_ARGS)
+{
+#if DEBUG_GEOMETRY_STATS
+       elog(NOTICE, "LWGEOM_gist_joinsel called (returning %f)",
+               DEFAULT_GEOMETRY_JOINSEL);
+#endif
+       PG_RETURN_FLOAT8(DEFAULT_GEOMETRY_JOINSEL);
+}
+
+
 /*
  * This function is called by the analyze function iff
  * the geometry_analyze() function give it its pointer
@@ -2006,6 +2023,10 @@ Datum LWGEOM_estimated_extent(PG_FUNCTION_ARGS)
 
 /**********************************************************************
  * $Log$
+ * Revision 1.15  2004/12/13 14:03:07  strk
+ * Initial skeleton on join selectivity estimator.
+ * Current estimators application for box2d && box2d operator.
+ *
  * Revision 1.14  2004/12/13 12:25:27  strk
  * Removed obsoleted function and fixed some warnings.
  *
index 604ec5eb488232632fa009155344e72f4bec9635..f92dfa14f446048c86355070d9a8e44756cbbc7f 100644 (file)
@@ -302,53 +302,6 @@ CREATEFUNCTION box2d_intersects(box2d, box2d)
        AS '@MODULE_FILENAME@', 'BOX2D_intersects'
        LANGUAGE 'C' WITH (isstrict,iscachable);
 
-CREATE OPERATOR << (
-   LEFTARG = box2d, RIGHTARG = box2d, PROCEDURE = box2d_left,
-   COMMUTATOR = '>>',
-   RESTRICT = positionsel, JOIN = positionjoinsel
-);
-
-CREATE OPERATOR &< (
-   LEFTARG = box2d, RIGHTARG = box2d, PROCEDURE = box2d_overleft,
-   COMMUTATOR = '&>',
-   RESTRICT = positionsel, JOIN = positionjoinsel
-);
-
-CREATE OPERATOR && (
-   LEFTARG = box2d, RIGHTARG = box2d, PROCEDURE = box2d_overlap,
-   COMMUTATOR = '&&',
-   RESTRICT = areasel, JOIN = positionjoinsel
-);
-
-CREATE OPERATOR &> (
-   LEFTARG = box2d, RIGHTARG = box2d, PROCEDURE = box2d_overright,
-   COMMUTATOR = '&<',
-   RESTRICT = positionsel, JOIN = positionjoinsel
-);
-
-CREATE OPERATOR >> (
-   LEFTARG = box2d, RIGHTARG = box2d, PROCEDURE = box2d_right,
-   COMMUTATOR = '<<',
-   RESTRICT = positionsel, JOIN = positionjoinsel
-);
-
-CREATE OPERATOR ~= (
-   LEFTARG = box2d, RIGHTARG = box2d, PROCEDURE = box2d_same,
-   COMMUTATOR = '~=', 
-   RESTRICT = eqsel, JOIN = eqjoinsel
-);
-
-CREATE OPERATOR @ (
-   LEFTARG = box2d, RIGHTARG = box2d, PROCEDURE = box2d_contained,
-   COMMUTATOR = '~',
-   RESTRICT = contsel, JOIN = contjoinsel
-);
-
-CREATE OPERATOR ~ (
-   LEFTARG = box2d, RIGHTARG = box2d, PROCEDURE = box2d_contain,
-   COMMUTATOR = '@',
-   RESTRICT = contsel, JOIN = contjoinsel
-);
 
 CREATEFUNCTION xmin(box2d)
        RETURNS FLOAT4
@@ -467,6 +420,17 @@ CREATEFUNCTION postgis_gist_sel (internal, oid, internal, int4)
        AS '@MODULE_FILENAME@', 'LWGEOM_gist_sel'
        LANGUAGE 'C';
 
+#if USE_VERSION == 71
+CREATEFUNCTION postgis_gist_joinsel(oid, oid, int2, opaque, smallint)
+#elif USE_VERSION == 72
+CREATEFUNCTION postgis_gist_joinsel(opaque, oid,  opaque, smallint)
+#else
+CREATEFUNCTION postgis_gist_joinsel(internal, oid, internal, smallint)
+#endif
+       RETURNS float8
+       AS '@MODULE_FILENAME@', 'LWGEOM_gist_joinsel'
+       LANGUAGE 'C';
+
 CREATEFUNCTION geometry_overleft(geometry, geometry) 
        RETURNS bool
        AS '@MODULE_FILENAME@', 'LWGEOM_overleft'
@@ -507,6 +471,8 @@ CREATEFUNCTION geometry_same(geometry, geometry)
        AS '@MODULE_FILENAME@', 'LWGEOM_same'
        LANGUAGE 'C' WITH (isstrict,iscachable);
 
+-- GEOMETRY operators
+
 CREATE OPERATOR << (
    LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = geometry_left,
    COMMUTATOR = '>>',
@@ -522,7 +488,7 @@ CREATE OPERATOR &< (
 CREATE OPERATOR && (
    LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = geometry_overlap,
    COMMUTATOR = '&&',
-   RESTRICT = postgis_gist_sel, JOIN = positionjoinsel
+   RESTRICT = postgis_gist_sel, JOIN = postgis_gist_joinsel
 );
 
 CREATE OPERATOR &> (
@@ -555,6 +521,55 @@ CREATE OPERATOR ~ (
    RESTRICT = contsel, JOIN = contjoinsel
 );
 
+-- BOX2D operators
+
+CREATE OPERATOR << (
+   LEFTARG = box2d, RIGHTARG = box2d, PROCEDURE = box2d_left,
+   COMMUTATOR = '>>',
+   RESTRICT = positionsel, JOIN = positionjoinsel
+);
+
+CREATE OPERATOR &< (
+   LEFTARG = box2d, RIGHTARG = box2d, PROCEDURE = box2d_overleft,
+   COMMUTATOR = '&>',
+   RESTRICT = positionsel, JOIN = positionjoinsel
+);
+
+CREATE OPERATOR && (
+   LEFTARG = box2d, RIGHTARG = box2d, PROCEDURE = box2d_overlap,
+   COMMUTATOR = '&&',
+   RESTRICT = postgis_gist_sel, JOIN = postgis_gist_joinsel
+);
+
+CREATE OPERATOR &> (
+   LEFTARG = box2d, RIGHTARG = box2d, PROCEDURE = box2d_overright,
+   COMMUTATOR = '&<',
+   RESTRICT = positionsel, JOIN = positionjoinsel
+);
+
+CREATE OPERATOR >> (
+   LEFTARG = box2d, RIGHTARG = box2d, PROCEDURE = box2d_right,
+   COMMUTATOR = '<<',
+   RESTRICT = positionsel, JOIN = positionjoinsel
+);
+
+CREATE OPERATOR ~= (
+   LEFTARG = box2d, RIGHTARG = box2d, PROCEDURE = box2d_same,
+   COMMUTATOR = '~=', 
+   RESTRICT = eqsel, JOIN = eqjoinsel
+);
+
+CREATE OPERATOR @ (
+   LEFTARG = box2d, RIGHTARG = box2d, PROCEDURE = box2d_contained,
+   COMMUTATOR = '~',
+   RESTRICT = contsel, JOIN = contjoinsel
+);
+
+CREATE OPERATOR ~ (
+   LEFTARG = box2d, RIGHTARG = box2d, PROCEDURE = box2d_contain,
+   COMMUTATOR = '@',
+   RESTRICT = contsel, JOIN = contjoinsel
+);
 
 -- gist support functions