Skip to content

Commit 13380e1

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 47029f7 commit 13380e1

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
@@ -2811,7 +2811,7 @@
28112811
create_sql => 'CREATE STATISTICS dump_test.test_ext_stats_expr
28122812
ON (2 * col1) FROM dump_test.test_fifth_table',
28132813
regexp => qr/^
2814-
\QCREATE STATISTICS dump_test.test_ext_stats_expr ON ((2 * col1)) FROM dump_test.test_fifth_table;\E
2814+
\QCREATE STATISTICS dump_test.test_ext_stats_expr ON (2 * col1) FROM dump_test.test_fifth_table;\E
28152815
/xms,
28162816
like =>
28172817
{ %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
@@ -3004,21 +3004,21 @@ insert into stts_t1 select i,i from generate_series(1,100) i;
30043004
analyze stts_t1;
30053005
set search_path to public, stts_s1, stts_s2, tststats;
30063006
\dX
3007-
List of extended statistics
3008-
Schema | Name | Definition | Ndistinct | Dependencies | MCV
3009-
----------+------------------------+------------------------------------------------------------------------+-----------+--------------+---------
3010-
public | func_deps_stat | ((a * 2)), upper(b), ((c + (1)::numeric)) FROM functional_dependencies | | defined |
3011-
public | mcv_lists_arrays_stats | a, b, c FROM mcv_lists_arrays | | | defined
3012-
public | mcv_lists_bool_stats | a, b, c FROM mcv_lists_bool | | | defined
3013-
public | mcv_lists_stats | a, b, d FROM mcv_lists | | | defined
3014-
public | stts_1 | a, b FROM stts_t1 | defined | |
3015-
public | stts_2 | a, b FROM stts_t1 | defined | defined |
3016-
public | stts_3 | a, b FROM stts_t1 | defined | defined | defined
3017-
public | stts_4 | b, c FROM stts_t2 | defined | defined | defined
3018-
public | stts_hoge | col1, col2, col3 FROM stts_t3 | defined | defined | defined
3019-
stts_s1 | stts_foo | col1, col2 FROM stts_t3 | defined | defined | defined
3020-
stts_s2 | stts_yama | col1, col3 FROM stts_t3 | | defined | defined
3021-
tststats | priv_test_stats | a, b FROM priv_test_tbl | | | defined
3007+
List of extended statistics
3008+
Schema | Name | Definition | Ndistinct | Dependencies | MCV
3009+
----------+------------------------+------------------------------------------------------------------+-----------+--------------+---------
3010+
public | func_deps_stat | (a * 2), upper(b), (c + 1::numeric) FROM functional_dependencies | | defined |
3011+
public | mcv_lists_arrays_stats | a, b, c FROM mcv_lists_arrays | | | defined
3012+
public | mcv_lists_bool_stats | a, b, c FROM mcv_lists_bool | | | defined
3013+
public | mcv_lists_stats | a, b, d FROM mcv_lists | | | defined
3014+
public | stts_1 | a, b FROM stts_t1 | defined | |
3015+
public | stts_2 | a, b FROM stts_t1 | defined | defined |
3016+
public | stts_3 | a, b FROM stts_t1 | defined | defined | defined
3017+
public | stts_4 | b, c FROM stts_t2 | defined | defined | defined
3018+
public | stts_hoge | col1, col2, col3 FROM stts_t3 | defined | defined | defined
3019+
stts_s1 | stts_foo | col1, col2 FROM stts_t3 | defined | defined | defined
3020+
stts_s2 | stts_yama | col1, col3 FROM stts_t3 | | defined | defined
3021+
tststats | priv_test_stats | a, b FROM priv_test_tbl | | | defined
30223022
(12 rows)
30233023

30243024
\dX stts_?
@@ -3039,21 +3039,21 @@ set search_path to public, stts_s1, stts_s2, tststats;
30393039
(1 row)
30403040

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

30593059
\dX+ stts_?
@@ -3082,36 +3082,36 @@ set search_path to public, stts_s1, stts_s2, tststats;
30823082

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

31003100
create role regress_stats_ext nosuperuser;
31013101
set role regress_stats_ext;
31023102
\dX
3103-
List of extended statistics
3104-
Schema | Name | Definition | Ndistinct | Dependencies | MCV
3105-
--------+------------------------+------------------------------------------------------------------------+-----------+--------------+---------
3106-
public | func_deps_stat | ((a * 2)), upper(b), ((c + (1)::numeric)) FROM functional_dependencies | | defined |
3107-
public | mcv_lists_arrays_stats | a, b, c FROM mcv_lists_arrays | | | defined
3108-
public | mcv_lists_bool_stats | a, b, c FROM mcv_lists_bool | | | defined
3109-
public | mcv_lists_stats | a, b, d FROM mcv_lists | | | defined
3110-
public | stts_1 | a, b FROM stts_t1 | defined | |
3111-
public | stts_2 | a, b FROM stts_t1 | defined | defined |
3112-
public | stts_3 | a, b FROM stts_t1 | defined | defined | defined
3113-
public | stts_4 | b, c FROM stts_t2 | defined | defined | defined
3114-
public | stts_hoge | col1, col2, col3 FROM stts_t3 | defined | defined | defined
3103+
List of extended statistics
3104+
Schema | Name | Definition | Ndistinct | Dependencies | MCV
3105+
--------+------------------------+------------------------------------------------------------------+-----------+--------------+---------
3106+
public | func_deps_stat | (a * 2), upper(b), (c + 1::numeric) FROM functional_dependencies | | defined |
3107+
public | mcv_lists_arrays_stats | a, b, c FROM mcv_lists_arrays | | | defined
3108+
public | mcv_lists_bool_stats | a, b, c FROM mcv_lists_bool | | | defined
3109+
public | mcv_lists_stats | a, b, d FROM mcv_lists | | | defined
3110+
public | stts_1 | a, b FROM stts_t1 | defined | |
3111+
public | stts_2 | a, b FROM stts_t1 | defined | defined |
3112+
public | stts_3 | a, b FROM stts_t1 | defined | defined | defined
3113+
public | stts_4 | b, c FROM stts_t2 | defined | defined | defined
3114+
public | stts_hoge | col1, col2, col3 FROM stts_t3 | defined | defined | defined
31153115
(9 rows)
31163116

31173117
reset role;

0 commit comments

Comments
 (0)