1
0
mirror of https://github.com/postgres/postgres.git synced 2025-06-25 01:02:05 +03:00

Convert node test compile-time settings into run-time parameters

This converts

    COPY_PARSE_PLAN_TREES
    WRITE_READ_PARSE_PLAN_TREES
    RAW_EXPRESSION_COVERAGE_TEST

into run-time parameters

    debug_copy_parse_plan_trees
    debug_write_read_parse_plan_trees
    debug_raw_expression_coverage_test

They can be activated for tests using PG_TEST_INITDB_EXTRA_OPTS.

The compile-time symbols are kept for build farm compatibility, but
they now just determine the default value of the run-time settings.

Furthermore, support for these settings is not compiled in at all
unless assertions are enabled, or the new symbol
DEBUG_NODE_TESTS_ENABLED is defined at compile time, or any of the
legacy compile-time setting symbols are defined.  So there is no
run-time overhead in production builds.  (This is similar to the
handling of DISCARD_CACHES_ENABLED.)

Discussion: https://www.postgresql.org/message-id/flat/30747bd8-f51e-4e0c-a310-a6e2c37ec8aa%40eisentraut.org
This commit is contained in:
Peter Eisentraut
2024-08-01 09:37:44 +02:00
parent a67da49e1d
commit a292c98d62
12 changed files with 213 additions and 65 deletions

View File

@ -493,6 +493,12 @@ bool Debug_print_parse = false;
bool Debug_print_rewritten = false;
bool Debug_pretty_print = true;
#ifdef DEBUG_NODE_TESTS_ENABLED
bool Debug_copy_parse_plan_trees;
bool Debug_write_read_parse_plan_trees;
bool Debug_raw_expression_coverage_test;
#endif
bool log_parser_stats = false;
bool log_planner_stats = false;
bool log_executor_stats = false;
@ -1294,6 +1300,59 @@ struct config_bool ConfigureNamesBool[] =
false,
NULL, NULL, NULL
},
#ifdef DEBUG_NODE_TESTS_ENABLED
{
{"debug_copy_parse_plan_trees", PGC_SUSET, DEVELOPER_OPTIONS,
gettext_noop("Set this to force all parse and plan trees to be passed through "
"copyObject(), to facilitate catching errors and omissions in "
"copyObject()."),
NULL,
GUC_NOT_IN_SAMPLE
},
&Debug_copy_parse_plan_trees,
/* support for legacy compile-time setting */
#ifdef COPY_PARSE_PLAN_TREES
true,
#else
false,
#endif
NULL, NULL, NULL
},
{
{"debug_write_read_parse_plan_trees", PGC_SUSET, DEVELOPER_OPTIONS,
gettext_noop("Set this to force all parse and plan trees to be passed through "
"outfuncs.c/readfuncs.c, to facilitate catching errors and omissions in "
"those modules."),
NULL,
GUC_NOT_IN_SAMPLE
},
&Debug_write_read_parse_plan_trees,
/* support for legacy compile-time setting */
#ifdef WRITE_READ_PARSE_PLAN_TREES
true,
#else
false,
#endif
NULL, NULL, NULL
},
{
{"debug_raw_expression_coverage_test", PGC_SUSET, DEVELOPER_OPTIONS,
gettext_noop("Set this to force all raw parse trees for DML statements to be scanned "
"by raw_expression_tree_walker(), to facilitate catching errors and "
"omissions in that function."),
NULL,
GUC_NOT_IN_SAMPLE
},
&Debug_raw_expression_coverage_test,
/* support for legacy compile-time setting */
#ifdef RAW_EXPRESSION_COVERAGE_TEST
true,
#else
false,
#endif
NULL, NULL, NULL
},
#endif /* DEBUG_NODE_TESTS_ENABLED */
{
{"debug_print_parse", PGC_USERSET, LOGGING_WHAT,
gettext_noop("Logs each query's parse tree."),