ext_stats_rename_staenabled.patch
application/octet-stream
Filename: ext_stats_rename_staenabled.patch
Type: application/octet-stream
Part: 0
Patch
Format: unified
| File | + | − |
|---|---|---|
| doc/src/sgml/catalogs.sgml | 4 | 3 |
| src/backend/commands/statscmds.c | 16 | 16 |
| src/backend/statistics/extended_stats.c | 8 | 8 |
| src/backend/utils/adt/ruleutils.c | 21 | 21 |
| src/bin/psql/describe.c | 2 | 2 |
| src/include/catalog/pg_statistic_ext.h | 2 | 2 |
| src/test/regress/expected/stats_ext.out | 11 | 11 |
| src/test/regress/sql/stats_ext.sql | 3 | 3 |
diff --git a/doc/src/sgml/catalogs.sgml b/doc/src/sgml/catalogs.sgml
index 5883673..10ab169 100644
--- a/doc/src/sgml/catalogs.sgml
+++ b/doc/src/sgml/catalogs.sgml
@@ -4321,12 +4321,13 @@
</row>
<row>
- <entry><structfield>staenabled</structfield></entry>
+ <entry><structfield>stakind</structfield></entry>
<entry><type>char[]</type></entry>
<entry></entry>
<entry>
- An array with the modes of the enabled statistic types, encoded as
- <literal>d</literal> for ndistinct coefficients.
+ An array with the an element for each statistic kind set in the statistics.
+ <literal>d</literal> for ndistinct coefficients, <literal>f</literal>
+ for functional dependencies.
</entry>
</row>
diff --git a/src/backend/commands/statscmds.c b/src/backend/commands/statscmds.c
index 46abadc..84f5c3f 100644
--- a/src/backend/commands/statscmds.c
+++ b/src/backend/commands/statscmds.c
@@ -62,12 +62,12 @@ CreateStatistics(CreateStatsStmt *stmt)
Oid relid;
ObjectAddress parentobject,
childobject;
- Datum types[2]; /* one for each possible type of statistics */
- int ntypes;
- ArrayType *staenabled;
+ Datum kinds[2]; /* one for each possible kind of statistics */
+ int nkinds;
+ ArrayType *stakind;
bool build_ndistinct;
bool build_dependencies;
- bool requested_type = false;
+ bool requested_kind = false;
Assert(IsA(stmt, CreateStatsStmt));
@@ -185,7 +185,7 @@ CreateStatistics(CreateStatsStmt *stmt)
stakeys = buildint2vector(attnums, numcols);
/*
- * Parse the statistics options. Currently only statistics types are
+ * Parse the statistics options. Currently only statistics kinds are
* recognized.
*/
build_ndistinct = false;
@@ -197,12 +197,12 @@ CreateStatistics(CreateStatsStmt *stmt)
if (strcmp(opt->defname, "ndistinct") == 0)
{
build_ndistinct = defGetBoolean(opt);
- requested_type = true;
+ requested_kind = true;
}
else if (strcmp(opt->defname, "dependencies") == 0)
{
build_dependencies = defGetBoolean(opt);
- requested_type = true;
+ requested_kind = true;
}
else
ereport(ERROR,
@@ -210,21 +210,21 @@ CreateStatistics(CreateStatsStmt *stmt)
errmsg("unrecognized STATISTICS option \"%s\"",
opt->defname)));
}
- /* If no statistic type was specified, build them all. */
- if (!requested_type)
+ /* If no statistic kind was specified, build them all. */
+ if (!requested_kind)
{
build_ndistinct = true;
build_dependencies = true;
}
- /* construct the char array of enabled statistic types */
- ntypes = 0;
+ /* construct the char array of statistics kinds */
+ nkinds = 0;
if (build_ndistinct)
- types[ntypes++] = CharGetDatum(STATS_EXT_NDISTINCT);
+ kinds[nkinds++] = CharGetDatum(STATS_EXT_NDISTINCT);
if (build_dependencies)
- types[ntypes++] = CharGetDatum(STATS_EXT_DEPENDENCIES);
- Assert(ntypes > 0);
- staenabled = construct_array(types, ntypes, CHAROID, 1, true, 'c');
+ kinds[nkinds++] = CharGetDatum(STATS_EXT_DEPENDENCIES);
+ Assert(nkinds > 0);
+ stakind = construct_array(kinds, nkinds, CHAROID, 1, true, 'c');
/*
* Everything seems fine, so let's build the pg_statistic_ext tuple.
@@ -236,7 +236,7 @@ CreateStatistics(CreateStatsStmt *stmt)
values[Anum_pg_statistic_ext_stanamespace - 1] = ObjectIdGetDatum(namespaceId);
values[Anum_pg_statistic_ext_staowner - 1] = ObjectIdGetDatum(GetUserId());
values[Anum_pg_statistic_ext_stakeys - 1] = PointerGetDatum(stakeys);
- values[Anum_pg_statistic_ext_staenabled - 1] = PointerGetDatum(staenabled);
+ values[Anum_pg_statistic_ext_stakind - 1] = PointerGetDatum(stakind);
/* no statistics build yet */
nulls[Anum_pg_statistic_ext_standistinct - 1] = true;
diff --git a/src/backend/statistics/extended_stats.c b/src/backend/statistics/extended_stats.c
index 4b3aa77..b2bb8d3 100644
--- a/src/backend/statistics/extended_stats.c
+++ b/src/backend/statistics/extended_stats.c
@@ -162,7 +162,7 @@ fetch_statentries_for_relation(Relation pg_statext, Oid relid)
bool isnull;
int i;
ArrayType *arr;
- char *enabled;
+ char *kind;
Form_pg_statistic_ext staForm;
entry = palloc0(sizeof(StatExtEntry));
@@ -174,21 +174,21 @@ fetch_statentries_for_relation(Relation pg_statext, Oid relid)
staForm->stakeys.values[i]);
}
- /* decode the staenabled char array into a list of chars */
+ /* decode the stakind char array into a list of chars */
datum = SysCacheGetAttr(STATEXTOID, htup,
- Anum_pg_statistic_ext_staenabled, &isnull);
+ Anum_pg_statistic_ext_stakind, &isnull);
Assert(!isnull);
arr = DatumGetArrayTypeP(datum);
if (ARR_NDIM(arr) != 1 ||
ARR_HASNULL(arr) ||
ARR_ELEMTYPE(arr) != CHAROID)
- elog(ERROR, "staenabled is not a 1-D char array");
- enabled = (char *) ARR_DATA_PTR(arr);
+ elog(ERROR, "stakind is not a 1-D char array");
+ kind = (char *) ARR_DATA_PTR(arr);
for (i = 0; i < ARR_DIMS(arr)[0]; i++)
{
- Assert((enabled[i] == STATS_EXT_NDISTINCT) ||
- (enabled[i] == STATS_EXT_DEPENDENCIES));
- entry->types = lappend_int(entry->types, (int) enabled[i]);
+ Assert((kind[i] == STATS_EXT_NDISTINCT) ||
+ (kind[i] == STATS_EXT_DEPENDENCIES));
+ entry->types = lappend_int(entry->types, (int) kind[i]);
}
result = lappend(result, entry);
diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c
index 5f11af2..19f3c8f 100644
--- a/src/backend/utils/adt/ruleutils.c
+++ b/src/backend/utils/adt/ruleutils.c
@@ -1453,11 +1453,11 @@ pg_get_statisticsext_worker(Oid statextid, bool missing_ok)
int colno;
char *nsp;
ArrayType *arr;
- char *enabled;
+ char *kind;
Datum datum;
bool isnull;
- bool ndistinct_enabled;
- bool dependencies_enabled;
+ bool has_ndistinct;
+ bool has_dependencies;
int i;
statexttup = SearchSysCache1(STATEXTOID, ObjectIdGetDatum(statextid));
@@ -1479,43 +1479,43 @@ pg_get_statisticsext_worker(Oid statextid, bool missing_ok)
NameStr(statextrec->staname)));
/*
- * Lookup the staenabled column so that we know how to handle the WITH
+ * Lookup the stakind column so that we know how to handle the WITH
* clause.
*/
datum = SysCacheGetAttr(STATEXTOID, statexttup,
- Anum_pg_statistic_ext_staenabled, &isnull);
+ Anum_pg_statistic_ext_stakind, &isnull);
Assert(!isnull);
arr = DatumGetArrayTypeP(datum);
if (ARR_NDIM(arr) != 1 ||
ARR_HASNULL(arr) ||
ARR_ELEMTYPE(arr) != CHAROID)
- elog(ERROR, "staenabled is not a 1-D char array");
- enabled = (char *) ARR_DATA_PTR(arr);
+ elog(ERROR, "stakind is not a 1-D char array");
+ kind = (char *) ARR_DATA_PTR(arr);
- ndistinct_enabled = false;
- dependencies_enabled = false;
+ has_ndistinct = false;
+ has_dependencies = false;
for (i = 0; i < ARR_DIMS(arr)[0]; i++)
{
- if (enabled[i] == STATS_EXT_NDISTINCT)
- ndistinct_enabled = true;
- if (enabled[i] == STATS_EXT_DEPENDENCIES)
- dependencies_enabled = true;
+ if (kind[i] == STATS_EXT_NDISTINCT)
+ has_ndistinct = true;
+ if (kind[i] == STATS_EXT_DEPENDENCIES)
+ has_dependencies = true;
}
/*
- * If any option is disabled, then we'll need to append a WITH clause to
- * show which options are enabled. We omit the WITH clause on purpose
- * when all options are enabled, so a pg_dump/pg_restore will create all
- * statistics types on a newer postgres version, if the statistics had all
- * options enabled on the original version.
+ * If any of the supported statistic kinds were not specified then we'll
+ * need to append a WITH clause to show which ones were specified. We
+ * omit the WITH clause on purpose when all statistic kinds were
+ * specified, so a pg_dump/pg_restore will create all statistic kinds when
+ * performing the restore on a newer PostgreSQL version.
*/
- if (!ndistinct_enabled || !dependencies_enabled)
+ if (!has_ndistinct || !has_dependencies)
{
appendStringInfoString(&buf, " WITH (");
- if (ndistinct_enabled)
+ if (has_ndistinct)
appendStringInfoString(&buf, "ndistinct");
- else if (dependencies_enabled)
+ else if (has_dependencies)
appendStringInfoString(&buf, "dependencies");
appendStringInfoChar(&buf, ')');
diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c
index e7c3d73..86a02fc 100644
--- a/src/bin/psql/describe.c
+++ b/src/bin/psql/describe.c
@@ -2350,8 +2350,8 @@ describeOneTableDetails(const char *schemaname,
" FROM pg_catalog.unnest(stakeys) s(attnum)\n"
" JOIN pg_catalog.pg_attribute a ON (starelid = a.attrelid AND\n"
" a.attnum = s.attnum AND NOT attisdropped)) AS columns,\n"
- " (staenabled @> '{d}') AS ndist_enabled,\n"
- " (staenabled @> '{f}') AS deps_enabled\n"
+ " (stakind @> '{d}') AS has_ndistinct,\n"
+ " (stakind @> '{f}') AS has_funcdeps\n"
"FROM pg_catalog.pg_statistic_ext stat "
"WHERE starelid = '%s'\n"
"ORDER BY 1;",
diff --git a/src/include/catalog/pg_statistic_ext.h b/src/include/catalog/pg_statistic_ext.h
index 0a1cc04..1130c32 100644
--- a/src/include/catalog/pg_statistic_ext.h
+++ b/src/include/catalog/pg_statistic_ext.h
@@ -43,7 +43,7 @@ CATALOG(pg_statistic_ext,3381)
int2vector stakeys; /* array of column keys */
#ifdef CATALOG_VARLEN
- char staenabled[1] BKI_FORCE_NOT_NULL; /* statistic types
+ char stakind[1] BKI_FORCE_NOT_NULL; /* statistic kinds
* requested to build */
pg_ndistinct standistinct; /* ndistinct coefficients (serialized) */
pg_dependencies stadependencies; /* dependencies (serialized) */
@@ -68,7 +68,7 @@ typedef FormData_pg_statistic_ext *Form_pg_statistic_ext;
#define Anum_pg_statistic_ext_stanamespace 3
#define Anum_pg_statistic_ext_staowner 4
#define Anum_pg_statistic_ext_stakeys 5
-#define Anum_pg_statistic_ext_staenabled 6
+#define Anum_pg_statistic_ext_stakind 6
#define Anum_pg_statistic_ext_standistinct 7
#define Anum_pg_statistic_ext_stadependencies 8
diff --git a/src/test/regress/expected/stats_ext.out b/src/test/regress/expected/stats_ext.out
index b43208d..1bfde66 100644
--- a/src/test/regress/expected/stats_ext.out
+++ b/src/test/regress/expected/stats_ext.out
@@ -131,11 +131,11 @@ ERROR: duplicate column name in statistics definition
-- correct command
CREATE STATISTICS s10 ON (a, b, c) FROM ndistinct;
ANALYZE ndistinct;
-SELECT staenabled, standistinct
+SELECT stakind, standistinct
FROM pg_statistic_ext WHERE starelid = 'ndistinct'::regclass;
- staenabled | standistinct
-------------+------------------------------------------------------------------------------------------------
- {d,f} | [{(b 3 4), 301.000000}, {(b 3 6), 301.000000}, {(b 4 6), 301.000000}, {(b 3 4 6), 301.000000}]
+ stakind | standistinct
+---------+------------------------------------------------------------------------------------------------
+ {d,f} | [{(b 3 4), 301.000000}, {(b 3 6), 301.000000}, {(b 4 6), 301.000000}, {(b 3 4 6), 301.000000}]
(1 row)
-- Hash Aggregate, thanks to estimates improved by the statistic
@@ -197,11 +197,11 @@ INSERT INTO ndistinct (a, b, c, filler1)
cash_words(mod(i,33)::int::money)
FROM generate_series(1,10000) s(i);
ANALYZE ndistinct;
-SELECT staenabled, standistinct
+SELECT stakind, standistinct
FROM pg_statistic_ext WHERE starelid = 'ndistinct'::regclass;
- staenabled | standistinct
-------------+----------------------------------------------------------------------------------------------------
- {d,f} | [{(b 3 4), 2550.000000}, {(b 3 6), 800.000000}, {(b 4 6), 1632.000000}, {(b 3 4 6), 10000.000000}]
+ stakind | standistinct
+---------+----------------------------------------------------------------------------------------------------
+ {d,f} | [{(b 3 4), 2550.000000}, {(b 3 6), 800.000000}, {(b 4 6), 1632.000000}, {(b 3 4 6), 10000.000000}]
(1 row)
-- plans using Group Aggregate, thanks to using correct esimates
@@ -257,10 +257,10 @@ EXPLAIN (COSTS off)
(3 rows)
DROP STATISTICS s10;
-SELECT staenabled, standistinct
+SELECT stakind, standistinct
FROM pg_statistic_ext WHERE starelid = 'ndistinct'::regclass;
- staenabled | standistinct
-------------+--------------
+ stakind | standistinct
+---------+--------------
(0 rows)
-- dropping the statistics switches the plans to Hash Aggregate,
diff --git a/src/test/regress/sql/stats_ext.sql b/src/test/regress/sql/stats_ext.sql
index 1b0018d..e12c433 100644
--- a/src/test/regress/sql/stats_ext.sql
+++ b/src/test/regress/sql/stats_ext.sql
@@ -90,7 +90,7 @@ CREATE STATISTICS s10 ON (a, b, c) FROM ndistinct;
ANALYZE ndistinct;
-SELECT staenabled, standistinct
+SELECT stakind, standistinct
FROM pg_statistic_ext WHERE starelid = 'ndistinct'::regclass;
-- Hash Aggregate, thanks to estimates improved by the statistic
@@ -121,7 +121,7 @@ INSERT INTO ndistinct (a, b, c, filler1)
ANALYZE ndistinct;
-SELECT staenabled, standistinct
+SELECT stakind, standistinct
FROM pg_statistic_ext WHERE starelid = 'ndistinct'::regclass;
-- plans using Group Aggregate, thanks to using correct esimates
@@ -142,7 +142,7 @@ EXPLAIN (COSTS off)
DROP STATISTICS s10;
-SELECT staenabled, standistinct
+SELECT stakind, standistinct
FROM pg_statistic_ext WHERE starelid = 'ndistinct'::regclass;
-- dropping the statistics switches the plans to Hash Aggregate,