PostgreSQL Source Code  git master
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
geo_selfuncs.c
Go to the documentation of this file.
1 /*-------------------------------------------------------------------------
2  *
3  * geo_selfuncs.c
4  * Selectivity routines registered in the operator catalog in the
5  * "oprrest" and "oprjoin" attributes.
6  *
7  * Portions Copyright (c) 1996-2017, PostgreSQL Global Development Group
8  * Portions Copyright (c) 1994, Regents of the University of California
9  *
10  *
11  * IDENTIFICATION
12  * src/backend/utils/adt/geo_selfuncs.c
13  *
14  * XXX These are totally bogus. Perhaps someone will make them do
15  * something reasonable, someday.
16  *
17  *-------------------------------------------------------------------------
18  */
19 #include "postgres.h"
20 
21 #include "utils/builtins.h"
22 #include "utils/geo_decls.h"
23 
24 
25 /*
26  * Selectivity functions for geometric operators. These are bogus -- unless
27  * we know the actual key distribution in the index, we can't make a good
28  * prediction of the selectivity of these operators.
29  *
30  * Note: the values used here may look unreasonably small. Perhaps they
31  * are. For now, we want to make sure that the optimizer will make use
32  * of a geometric index if one is available, so the selectivity had better
33  * be fairly small.
34  *
35  * In general, GiST needs to search multiple subtrees in order to guarantee
36  * that all occurrences of the same key have been found. Because of this,
37  * the estimated cost for scanning the index ought to be higher than the
38  * output selectivity would indicate. gistcostestimate(), over in selfuncs.c,
39  * ought to be adjusted accordingly --- but until we can generate somewhat
40  * realistic numbers here, it hardly matters...
41  */
42 
43 
44 /*
45  * Selectivity for operators that depend on area, such as "overlap".
46  */
47 
48 Datum
50 {
51  PG_RETURN_FLOAT8(0.005);
52 }
53 
54 Datum
56 {
57  PG_RETURN_FLOAT8(0.005);
58 }
59 
60 /*
61  * positionsel
62  *
63  * How likely is a box to be strictly left of (right of, above, below)
64  * a given box?
65  */
66 
67 Datum
69 {
70  PG_RETURN_FLOAT8(0.1);
71 }
72 
73 Datum
75 {
76  PG_RETURN_FLOAT8(0.1);
77 }
78 
79 /*
80  * contsel -- How likely is a box to contain (be contained by) a given box?
81  *
82  * This is a tighter constraint than "overlap", so produce a smaller
83  * estimate than areasel does.
84  */
85 
86 Datum
88 {
89  PG_RETURN_FLOAT8(0.001);
90 }
91 
92 Datum
94 {
95  PG_RETURN_FLOAT8(0.001);
96 }
Datum contsel(PG_FUNCTION_ARGS)
Definition: geo_selfuncs.c:87
#define PG_RETURN_FLOAT8(x)
Definition: fmgr.h:310
Datum areasel(PG_FUNCTION_ARGS)
Definition: geo_selfuncs.c:49
Datum contjoinsel(PG_FUNCTION_ARGS)
Definition: geo_selfuncs.c:93
uintptr_t Datum
Definition: postgres.h:374
Datum positionjoinsel(PG_FUNCTION_ARGS)
Definition: geo_selfuncs.c:74
Datum areajoinsel(PG_FUNCTION_ARGS)
Definition: geo_selfuncs.c:55
Datum positionsel(PG_FUNCTION_ARGS)
Definition: geo_selfuncs.c:68
#define PG_FUNCTION_ARGS
Definition: fmgr.h:150