Skip to content

Commit 4d1816e

Browse files
committed
Don't print extra parens around expressions in extended stats
The code printing expressions for extended statistics doubled the parens, producing results like ((a+1)), which is unnecessary and not consistent with how we print expressions elsewhere. Fixed by tweaking the code to produce just a single set of parens. Reported by Mark Dilger, fix by me. Backpatch to 14, where support for extended statistics on expressions was added. Reported-by: Mark Dilger Discussion: https://postgr.es/m/20210122040101.GF27167%40telsasoft.com
1 parent 3eda9fc commit 4d1816e

File tree

4 files changed

+60
-60
lines changed

4 files changed

+60
-60
lines changed

src/backend/utils/adt/ruleutils.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1712,7 +1712,7 @@ pg_get_statisticsobj_worker(Oid statextid, bool columns_only, bool missing_ok)
17121712
{
17131713
Node *expr = (Node *) lfirst(lc);
17141714
char *str;
1715-
int prettyFlags = PRETTYFLAG_INDENT;
1715+
int prettyFlags = PRETTYFLAG_PAREN;
17161716

17171717
str = deparse_expression_pretty(expr, context, false, false,
17181718
prettyFlags, 0);

src/bin/pg_dump/t/002_pg_dump.pl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2756,7 +2756,7 @@
27562756
create_sql => 'CREATE STATISTICS dump_test.test_ext_stats_expr
27572757
ON (2 * col1) FROM dump_test.test_fifth_table',
27582758
regexp => qr/^
2759-
\QCREATE STATISTICS dump_test.test_ext_stats_expr ON ((2 * col1)) FROM dump_test.test_fifth_table;\E
2759+
\QCREATE STATISTICS dump_test.test_ext_stats_expr ON (2 * col1) FROM dump_test.test_fifth_table;\E
27602760
/xms,
27612761
like =>
27622762
{ %full_runs, %dump_test_schema_runs, section_post_data => 1, },

src/test/regress/expected/create_table_like.out

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -417,7 +417,7 @@ Check constraints:
417417
"ctlt1_a_check" CHECK (length(a) > 2)
418418
Statistics objects:
419419
"public.ctlt_all_a_b_stat" ON a, b FROM ctlt_all
420-
"public.ctlt_all_expr_stat" ON ((a || b)) FROM ctlt_all
420+
"public.ctlt_all_expr_stat" ON (a || b) FROM ctlt_all
421421

422422
SELECT c.relname, objsubid, description FROM pg_description, pg_index i, pg_class c WHERE classoid = 'pg_class'::regclass AND objoid = i.indexrelid AND c.oid = i.indexrelid AND i.indrelid = 'ctlt_all'::regclass ORDER BY c.relname, objsubid;
423423
relname | objsubid | description
@@ -457,7 +457,7 @@ Check constraints:
457457
"ctlt1_a_check" CHECK (length(a) > 2)
458458
Statistics objects:
459459
"public.pg_attrdef_a_b_stat" ON a, b FROM public.pg_attrdef
460-
"public.pg_attrdef_expr_stat" ON ((a || b)) FROM public.pg_attrdef
460+
"public.pg_attrdef_expr_stat" ON (a || b) FROM public.pg_attrdef
461461

462462
DROP TABLE public.pg_attrdef;
463463
-- Check that LIKE isn't confused when new table masks the old, either
@@ -479,7 +479,7 @@ Check constraints:
479479
"ctlt1_a_check" CHECK (length(a) > 2)
480480
Statistics objects:
481481
"ctl_schema.ctlt1_a_b_stat" ON a, b FROM ctlt1
482-
"ctl_schema.ctlt1_expr_stat" ON ((a || b)) FROM ctlt1
482+
"ctl_schema.ctlt1_expr_stat" ON (a || b) FROM ctlt1
483483

484484
ROLLBACK;
485485
DROP TABLE ctlt1, ctlt2, ctlt3, ctlt4, ctlt12_storage, ctlt12_comments, ctlt1_inh, ctlt13_inh, ctlt13_like, ctlt_all, ctla, ctlb CASCADE;

src/test/regress/expected/stats_ext.out

Lines changed: 55 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -3000,21 +3000,21 @@ insert into stts_t1 select i,i from generate_series(1,100) i;
30003000
analyze stts_t1;
30013001
set search_path to public, stts_s1, stts_s2, tststats;
30023002
\dX
3003-
List of extended statistics
3004-
Schema | Name | Definition | Ndistinct | Dependencies | MCV
3005-
----------+------------------------+------------------------------------------------------------------------+-----------+--------------+---------
3006-
public | func_deps_stat | ((a * 2)), upper(b), ((c + (1)::numeric)) FROM functional_dependencies | | defined |
3007-
public | mcv_lists_arrays_stats | a, b, c FROM mcv_lists_arrays | | | defined
3008-
public | mcv_lists_bool_stats | a, b, c FROM mcv_lists_bool | | | defined
3009-
public | mcv_lists_stats | a, b, d FROM mcv_lists | | | defined
3010-
public | stts_1 | a, b FROM stts_t1 | defined | |
3011-
public | stts_2 | a, b FROM stts_t1 | defined | defined |
3012-
public | stts_3 | a, b FROM stts_t1 | defined | defined | defined
3013-
public | stts_4 | b, c FROM stts_t2 | defined | defined | defined
3014-
public | stts_hoge | col1, col2, col3 FROM stts_t3 | defined | defined | defined
3015-
stts_s1 | stts_foo | col1, col2 FROM stts_t3 | defined | defined | defined
3016-
stts_s2 | stts_yama | col1, col3 FROM stts_t3 | | defined | defined
3017-
tststats | priv_test_stats | a, b FROM priv_test_tbl | | | defined
3003+
List of extended statistics
3004+
Schema | Name | Definition | Ndistinct | Dependencies | MCV
3005+
----------+------------------------+------------------------------------------------------------------+-----------+--------------+---------
3006+
public | func_deps_stat | (a * 2), upper(b), (c + 1::numeric) FROM functional_dependencies | | defined |
3007+
public | mcv_lists_arrays_stats | a, b, c FROM mcv_lists_arrays | | | defined
3008+
public | mcv_lists_bool_stats | a, b, c FROM mcv_lists_bool | | | defined
3009+
public | mcv_lists_stats | a, b, d FROM mcv_lists | | | defined
3010+
public | stts_1 | a, b FROM stts_t1 | defined | |
3011+
public | stts_2 | a, b FROM stts_t1 | defined | defined |
3012+
public | stts_3 | a, b FROM stts_t1 | defined | defined | defined
3013+
public | stts_4 | b, c FROM stts_t2 | defined | defined | defined
3014+
public | stts_hoge | col1, col2, col3 FROM stts_t3 | defined | defined | defined
3015+
stts_s1 | stts_foo | col1, col2 FROM stts_t3 | defined | defined | defined
3016+
stts_s2 | stts_yama | col1, col3 FROM stts_t3 | | defined | defined
3017+
tststats | priv_test_stats | a, b FROM priv_test_tbl | | | defined
30183018
(12 rows)
30193019

30203020
\dX stts_?
@@ -3035,21 +3035,21 @@ set search_path to public, stts_s1, stts_s2, tststats;
30353035
(1 row)
30363036

30373037
\dX+
3038-
List of extended statistics
3039-
Schema | Name | Definition | Ndistinct | Dependencies | MCV
3040-
----------+------------------------+------------------------------------------------------------------------+-----------+--------------+---------
3041-
public | func_deps_stat | ((a * 2)), upper(b), ((c + (1)::numeric)) FROM functional_dependencies | | defined |
3042-
public | mcv_lists_arrays_stats | a, b, c FROM mcv_lists_arrays | | | defined
3043-
public | mcv_lists_bool_stats | a, b, c FROM mcv_lists_bool | | | defined
3044-
public | mcv_lists_stats | a, b, d FROM mcv_lists | | | defined
3045-
public | stts_1 | a, b FROM stts_t1 | defined | |
3046-
public | stts_2 | a, b FROM stts_t1 | defined | defined |
3047-
public | stts_3 | a, b FROM stts_t1 | defined | defined | defined
3048-
public | stts_4 | b, c FROM stts_t2 | defined | defined | defined
3049-
public | stts_hoge | col1, col2, col3 FROM stts_t3 | defined | defined | defined
3050-
stts_s1 | stts_foo | col1, col2 FROM stts_t3 | defined | defined | defined
3051-
stts_s2 | stts_yama | col1, col3 FROM stts_t3 | | defined | defined
3052-
tststats | priv_test_stats | a, b FROM priv_test_tbl | | | defined
3038+
List of extended statistics
3039+
Schema | Name | Definition | Ndistinct | Dependencies | MCV
3040+
----------+------------------------+------------------------------------------------------------------+-----------+--------------+---------
3041+
public | func_deps_stat | (a * 2), upper(b), (c + 1::numeric) FROM functional_dependencies | | defined |
3042+
public | mcv_lists_arrays_stats | a, b, c FROM mcv_lists_arrays | | | defined
3043+
public | mcv_lists_bool_stats | a, b, c FROM mcv_lists_bool | | | defined
3044+
public | mcv_lists_stats | a, b, d FROM mcv_lists | | | defined
3045+
public | stts_1 | a, b FROM stts_t1 | defined | |
3046+
public | stts_2 | a, b FROM stts_t1 | defined | defined |
3047+
public | stts_3 | a, b FROM stts_t1 | defined | defined | defined
3048+
public | stts_4 | b, c FROM stts_t2 | defined | defined | defined
3049+
public | stts_hoge | col1, col2, col3 FROM stts_t3 | defined | defined | defined
3050+
stts_s1 | stts_foo | col1, col2 FROM stts_t3 | defined | defined | defined
3051+
stts_s2 | stts_yama | col1, col3 FROM stts_t3 | | defined | defined
3052+
tststats | priv_test_stats | a, b FROM priv_test_tbl | | | defined
30533053
(12 rows)
30543054

30553055
\dX+ stts_?
@@ -3078,36 +3078,36 @@ set search_path to public, stts_s1, stts_s2, tststats;
30783078

30793079
set search_path to public, stts_s1;
30803080
\dX
3081-
List of extended statistics
3082-
Schema | Name | Definition | Ndistinct | Dependencies | MCV
3083-
---------+------------------------+------------------------------------------------------------------------+-----------+--------------+---------
3084-
public | func_deps_stat | ((a * 2)), upper(b), ((c + (1)::numeric)) FROM functional_dependencies | | defined |
3085-
public | mcv_lists_arrays_stats | a, b, c FROM mcv_lists_arrays | | | defined
3086-
public | mcv_lists_bool_stats | a, b, c FROM mcv_lists_bool | | | defined
3087-
public | mcv_lists_stats | a, b, d FROM mcv_lists | | | defined
3088-
public | stts_1 | a, b FROM stts_t1 | defined | |
3089-
public | stts_2 | a, b FROM stts_t1 | defined | defined |
3090-
public | stts_3 | a, b FROM stts_t1 | defined | defined | defined
3091-
public | stts_4 | b, c FROM stts_t2 | defined | defined | defined
3092-
public | stts_hoge | col1, col2, col3 FROM stts_t3 | defined | defined | defined
3093-
stts_s1 | stts_foo | col1, col2 FROM stts_t3 | defined | defined | defined
3081+
List of extended statistics
3082+
Schema | Name | Definition | Ndistinct | Dependencies | MCV
3083+
---------+------------------------+------------------------------------------------------------------+-----------+--------------+---------
3084+
public | func_deps_stat | (a * 2), upper(b), (c + 1::numeric) FROM functional_dependencies | | defined |
3085+
public | mcv_lists_arrays_stats | a, b, c FROM mcv_lists_arrays | | | defined
3086+
public | mcv_lists_bool_stats | a, b, c FROM mcv_lists_bool | | | defined
3087+
public | mcv_lists_stats | a, b, d FROM mcv_lists | | | defined
3088+
public | stts_1 | a, b FROM stts_t1 | defined | |
3089+
public | stts_2 | a, b FROM stts_t1 | defined | defined |
3090+
public | stts_3 | a, b FROM stts_t1 | defined | defined | defined
3091+
public | stts_4 | b, c FROM stts_t2 | defined | defined | defined
3092+
public | stts_hoge | col1, col2, col3 FROM stts_t3 | defined | defined | defined
3093+
stts_s1 | stts_foo | col1, col2 FROM stts_t3 | defined | defined | defined
30943094
(10 rows)
30953095

30963096
create role regress_stats_ext nosuperuser;
30973097
set role regress_stats_ext;
30983098
\dX
3099-
List of extended statistics
3100-
Schema | Name | Definition | Ndistinct | Dependencies | MCV
3101-
--------+------------------------+------------------------------------------------------------------------+-----------+--------------+---------
3102-
public | func_deps_stat | ((a * 2)), upper(b), ((c + (1)::numeric)) FROM functional_dependencies | | defined |
3103-
public | mcv_lists_arrays_stats | a, b, c FROM mcv_lists_arrays | | | defined
3104-
public | mcv_lists_bool_stats | a, b, c FROM mcv_lists_bool | | | defined
3105-
public | mcv_lists_stats | a, b, d FROM mcv_lists | | | defined
3106-
public | stts_1 | a, b FROM stts_t1 | defined | |
3107-
public | stts_2 | a, b FROM stts_t1 | defined | defined |
3108-
public | stts_3 | a, b FROM stts_t1 | defined | defined | defined
3109-
public | stts_4 | b, c FROM stts_t2 | defined | defined | defined
3110-
public | stts_hoge | col1, col2, col3 FROM stts_t3 | defined | defined | defined
3099+
List of extended statistics
3100+
Schema | Name | Definition | Ndistinct | Dependencies | MCV
3101+
--------+------------------------+------------------------------------------------------------------+-----------+--------------+---------
3102+
public | func_deps_stat | (a * 2), upper(b), (c + 1::numeric) FROM functional_dependencies | | defined |
3103+
public | mcv_lists_arrays_stats | a, b, c FROM mcv_lists_arrays | | | defined
3104+
public | mcv_lists_bool_stats | a, b, c FROM mcv_lists_bool | | | defined
3105+
public | mcv_lists_stats | a, b, d FROM mcv_lists | | | defined
3106+
public | stts_1 | a, b FROM stts_t1 | defined | |
3107+
public | stts_2 | a, b FROM stts_t1 | defined | defined |
3108+
public | stts_3 | a, b FROM stts_t1 | defined | defined | defined
3109+
public | stts_4 | b, c FROM stts_t2 | defined | defined | defined
3110+
public | stts_hoge | col1, col2, col3 FROM stts_t3 | defined | defined | defined
31113111
(9 rows)
31123112

31133113
reset role;

0 commit comments

Comments
 (0)