2301 char *nsp_tbl = NULL;
2302 Oid tbl_oid, idx_oid = 0;
2305 bool only_parent =
false;
2306 int key_type, att_num;
2310 postgis_initialize_cache();
2312 if ( PG_NARGS() == 4 )
2314 nsp = text_to_cstring(PG_GETARG_TEXT_P(0));
2315 tbl = text_to_cstring(PG_GETARG_TEXT_P(1));
2316 col = PG_GETARG_TEXT_P(2);
2317 only_parent = PG_GETARG_BOOL(3);
2318 sz = strlen(nsp) + strlen(tbl) + 6;
2319 nsp_tbl = palloc(sz);
2320 snprintf(nsp_tbl, sz,
"\"%s\".\"%s\"", nsp, tbl);
2321 tbl_oid = DatumGetObjectId(DirectFunctionCall1(regclassin, CStringGetDatum(nsp_tbl)));
2324 else if ( PG_NARGS() == 3 )
2326 nsp = text_to_cstring(PG_GETARG_TEXT_P(0));
2327 tbl = text_to_cstring(PG_GETARG_TEXT_P(1));
2328 col = PG_GETARG_TEXT_P(2);
2329 sz = strlen(nsp) + strlen(tbl) + 6;
2330 nsp_tbl = palloc(sz);
2331 snprintf(nsp_tbl, sz,
"\"%s\".\"%s\"", nsp, tbl);
2332 tbl_oid = DatumGetObjectId(DirectFunctionCall1(regclassin, CStringGetDatum(nsp_tbl)));
2335 else if ( PG_NARGS() == 2 )
2337 tbl = text_to_cstring(PG_GETARG_TEXT_P(0));
2338 col = PG_GETARG_TEXT_P(1);
2339 sz = strlen(tbl) + 3;
2340 nsp_tbl = palloc(sz);
2341 snprintf(nsp_tbl, sz,
"\"%s\"", tbl);
2342 tbl_oid = DatumGetObjectId(DirectFunctionCall1(regclassin, CStringGetDatum(nsp_tbl)));
2347 elog(ERROR,
"estimated_extent() called with wrong number of arguments");
2358 POSTGIS_DEBUGF(2,
"index for \"%s.%s\" exists, reading gbox from there", tbl, text_to_cstring(col));
2359 if ( ! gbox ) PG_RETURN_NULL();
2363 POSTGIS_DEBUGF(2,
"index for \"%s.%s\" does not exist", tbl, text_to_cstring(col));
2372 elog(WARNING,
"stats for \"%s.%s\" do not exist", tbl, text_to_cstring(col));
2377 gbox = palloc(
sizeof(
GBOX));
2388 PG_RETURN_POINTER(gbox);
static ND_STATS * pg_get_nd_stats_by_name(const Oid table_oid, const text *att_text, int mode, bool only_parent)
Pull the stats object from the PgSQL system catalogs.
static GBOX * spatial_index_read_extent(Oid idx_oid, int key_type, int att_num)
static Oid table_get_spatial_index(Oid tbl_oid, text *col, int *key_type, int *att_num)
#define FLAGS_SET_GEODETIC(flags, value)
#define FLAGS_SET_M(flags, value)
#define FLAGS_SET_Z(flags, value)
N-dimensional statistics structure.