diff --git a/src/backend/executor/execProcnode.c b/src/backend/executor/execProcnode.c index 3e0723800af40aa2039c1874d95f468c43f1d185..30691b8ab7c7f7599e9ce1a1e064373dba30ab4b 100644 --- a/src/backend/executor/execProcnode.c +++ b/src/backend/executor/execProcnode.c @@ -1852,12 +1852,14 @@ ExecEndNode(PlanState *node) break; } - /* - * if codegen guc is true, then assert if CodegenManager is NULL - */ - AssertImply(codegen, NULL != node->CodegenManager); - CodeGeneratorManagerDestroy(node->CodegenManager); - node->CodegenManager = NULL; + if (codegen) { + /* + * if codegen guc is true, then assert if CodegenManager is NULL + */ + Assert(NULL != node->CodegenManager); + CodeGeneratorManagerDestroy(node->CodegenManager); + node->CodegenManager = NULL; + } estate->currentSliceIdInPlan = origSliceIdInPlan; estate->currentExecutingSliceId = origExecutingSliceId; diff --git a/src/backend/utils/misc/guc_gp.c b/src/backend/utils/misc/guc_gp.c index 63579ad06de27d84e0e5986e636eba849f17d07b..722ce8ad68dc0812a43143345a9d94feff5357fa 100644 --- a/src/backend/utils/misc/guc_gp.c +++ b/src/backend/utils/misc/guc_gp.c @@ -85,6 +85,7 @@ static const char *assign_optimizer_log_failure(const char *newval, static const char *assign_optimizer_minidump(const char *newval, bool doit, GucSource source); static bool assign_optimizer(bool newval, bool doit, GucSource source); +static bool assign_codegen(bool newval, bool doit, GucSource source); static const char *assign_optimizer_cost_model(const char *newval, bool doit, GucSource source); static const char *assign_gp_workfile_caching_loglevel(const char *newval, @@ -3362,7 +3363,7 @@ struct config_bool ConfigureNamesBool_gp[] = #else false, #endif - NULL, NULL + assign_codegen, NULL }, { @@ -3372,7 +3373,7 @@ struct config_bool ConfigureNamesBool_gp[] = GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT }, &codegen, - false, NULL, NULL + false, assign_codegen, NULL }, { @@ -3382,12 +3383,12 @@ struct config_bool ConfigureNamesBool_gp[] = GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE }, &codegen_validate_functions, -#ifdef USE_ASSERT_CHECKING - true, NULL, NULL /* true by default on debug builds. */ +#if defined(USE_ASSERT_CHECKING) && defined(USE_CODEGEN) + true, /* true by default on debug builds. */ #else - false, NULL, NULL + false, #endif - + assign_codegen, NULL }, /* End-of-list marker */ { @@ -5937,6 +5938,19 @@ assign_optimizer(bool newval, bool doit, GucSource source) return true; } +static bool +assign_codegen(bool newval, bool doit, GucSource source) +{ +#ifndef USE_CODEGEN + if (newval) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("Code generation is not supported by this build"))); +#endif + + return true; +} + static bool assign_dispatch_log_stats(bool newval, bool doit, GucSource source) {