PostGIS 3.7.0dev-r@@SVN_REVISION@@
Loading...
Searching...
No Matches

◆ pg_get_nd_stats()

static ND_STATS * pg_get_nd_stats ( const Oid  table_oid,
AttrNumber  att_num,
int  mode,
bool  only_parent 
)
static

Pull the stats object from the PgSQL system catalogs.

Used by the selectivity functions and the debugging functions.

Definition at line 804 of file gserialized_estimate.c.

805{
806 HeapTuple stats_tuple = NULL;
807 ND_STATS *nd_stats;
808
809 /* First pull the stats tuple for the whole tree */
810 if ( ! only_parent )
811 {
812 POSTGIS_DEBUGF(2, "searching whole tree stats for \"%s\"", get_rel_name(table_oid)? get_rel_name(table_oid) : "NULL");
813 stats_tuple = SearchSysCache3(STATRELATTINH, ObjectIdGetDatum(table_oid), Int16GetDatum(att_num), BoolGetDatum(true));
814 if ( stats_tuple )
815 POSTGIS_DEBUGF(2, "found whole tree stats for \"%s\"", get_rel_name(table_oid)? get_rel_name(table_oid) : "NULL");
816 }
817 /* Fall-back to main table stats only, if not found for whole tree or explicitly ignored */
818 if ( only_parent || ! stats_tuple )
819 {
820 POSTGIS_DEBUGF(2, "searching parent table stats for \"%s\"", get_rel_name(table_oid)? get_rel_name(table_oid) : "NULL");
821 stats_tuple = SearchSysCache3(STATRELATTINH, ObjectIdGetDatum(table_oid), Int16GetDatum(att_num), BoolGetDatum(false));
822 if ( stats_tuple )
823 POSTGIS_DEBUGF(2, "found parent table stats for \"%s\"", get_rel_name(table_oid)? get_rel_name(table_oid) : "NULL");
824 }
825 if ( ! stats_tuple )
826 {
827 POSTGIS_DEBUGF(2, "stats for \"%s\" do not exist", get_rel_name(table_oid)? get_rel_name(table_oid) : "NULL");
828 return NULL;
829 }
830
831 nd_stats = pg_nd_stats_from_tuple(stats_tuple, mode);
832 ReleaseSysCache(stats_tuple);
833 if ( ! nd_stats )
834 {
835 POSTGIS_DEBUGF(2,
836 "histogram for attribute %d of table \"%s\" does not exist?",
837 att_num, get_rel_name(table_oid));
838 }
839
840 return nd_stats;
841}
static ND_STATS * pg_nd_stats_from_tuple(HeapTuple stats_tuple, int mode)

References pg_nd_stats_from_tuple().

Referenced by gserialized_joinsel_internal(), and pg_get_nd_stats_by_name().

Here is the call graph for this function:
Here is the caller graph for this function: