diff --git a/src/common/backend/utils/misc/guc/guc_sql.cpp b/src/common/backend/utils/misc/guc/guc_sql.cpp index 8a989d820..6c2249f11 100755 --- a/src/common/backend/utils/misc/guc/guc_sql.cpp +++ b/src/common/backend/utils/misc/guc/guc_sql.cpp @@ -3693,6 +3693,19 @@ static void assign_behavior_compat_options(const char* newval, void* extra) u_sess->utils_cxt.behavior_compat_flags = result; } +typedef int16 (*getIgnoreKeywordTokenHook)(const char *item); + +static int get_ignore_keyword_token(const char *item) +{ + int token = -1; + if (u_sess->hook_cxt.getIgnoreKeywordTokenHook != NULL) { + token = ((getIgnoreKeywordTokenHook)u_sess->hook_cxt.getIgnoreKeywordTokenHook)(item); + } else { + token = semtc_get_ignore_keyword_token(item); + } + return token; +} + static bool check_disable_keyword_options(char **newval, void **extra, GucSource source) { char *rawstring = NULL; @@ -3714,13 +3727,9 @@ static bool check_disable_keyword_options(char **newval, void **extra, GucSource foreach(cell, elemlist) { const char *item = (const char *)lfirst(cell); - int token = semtc_get_ignore_keyword_token(item); + int token = get_ignore_keyword_token(item); if (token < 0) { - GUC_check_errdetail("invalid disable keyword \"%s\"", item); - MemoryContextSwitchTo(old_context); - pfree(rawstring); - list_free(elemlist); - return false; + ereport(WARNING, (errmsg("invalid disable keyword \"%s\", will be skipped.", item))); } } MemoryContextSwitchTo(old_context); @@ -3747,7 +3756,7 @@ static void assign_disable_keyword_options(const char *newval, void *extra) { const char *item = (const char *)lfirst(cell); - int token = semtc_get_ignore_keyword_token(item); + int token = get_ignore_keyword_token(item); if (token >= 0) { result = lappend_int(result, token); } diff --git a/src/include/knl/knl_session.h b/src/include/knl/knl_session.h index e0782ea9d..3184dcf9e 100644 --- a/src/include/knl/knl_session.h +++ b/src/include/knl/knl_session.h @@ -2938,6 +2938,7 @@ typedef struct knl_u_hook_context { void *groupingplannerHook; void *replaceNullOrNotHook; void *nullsMinimalPolicyHook; + void *getIgnoreKeywordTokenHook; } knl_u_hook_context; typedef struct knl_u_libsw_context { diff --git a/src/test/regress/expected/ignore_keyword_list.out b/src/test/regress/expected/ignore_keyword_list.out index 3445064cf..8e06defea 100755 --- a/src/test/regress/expected/ignore_keyword_list.out +++ b/src/test/regress/expected/ignore_keyword_list.out @@ -12,8 +12,7 @@ select 1 interval; --ok (1 row) set disable_keyword_options = 'intervalxx'; -ERROR: invalid value for parameter "disable_keyword_options": "intervalxx" -DETAIL: invalid disable keyword "intervalxx" +WARNING: invalid disable keyword "intervalxx", will be skipped. set disable_keyword_options = 'interval,interval'; select 1 interval; --ok interval