diff --git a/ydb/library/yql/sql/pg/pg_sql.cpp b/ydb/library/yql/sql/pg/pg_sql.cpp index 7c63697c1cc8..630efe1afb72 100644 --- a/ydb/library/yql/sql/pg/pg_sql.cpp +++ b/ydb/library/yql/sql/pg/pg_sql.cpp @@ -5420,10 +5420,17 @@ class TExtensionHandler : public IPGParseEvents { } bool hasArgNames = false; + ui32 defArgsCount = 0; for (int i = 0; i < ListLength(value->parameters); ++i) { auto node = LIST_CAST_NTH(FunctionParameter, value->parameters, i); hasArgNames = hasArgNames || (node->name != nullptr); if (node->mode == FUNC_PARAM_IN || node->mode == FUNC_PARAM_DEFAULT) { + if (node->defexpr) { + ++defArgsCount; + } else { + Y_ENSURE(!defArgsCount); + } + desc.InputArgNames.push_back(node->name ? node->name : ""); } else if (node->mode == FUNC_PARAM_OUT) { desc.OutputArgNames.push_back(node->name ? node->name : ""); @@ -5460,6 +5467,17 @@ class TExtensionHandler : public IPGParseEvents { } Builder.CreateProc(desc); + if (defArgsCount) { + Y_ENSURE(!desc.VariadicType); + for (ui32 i = 0; i < defArgsCount; ++i) { + desc.ArgTypes.pop_back(); + if (!desc.InputArgNames.empty()) { + desc.InputArgNames.pop_back(); + } + + Builder.CreateProc(desc); + } + } return true; } diff --git a/ydb/library/yql/tests/common/test_framework/yqlrun.py b/ydb/library/yql/tests/common/test_framework/yqlrun.py index 4ca5ffb9e221..cee2876ae077 100644 --- a/ydb/library/yql/tests/common/test_framework/yqlrun.py +++ b/ydb/library/yql/tests/common/test_framework/yqlrun.py @@ -124,6 +124,7 @@ def res_file_path(name): 'PYTHON_COVERAGE_PREFIX', 'NLG_COVERAGE_FILENAME', 'YQL_EXPORT_PG_FUNCTIONS_DIR', + 'YQL_ALLOW_ALL_PG_FUNCTIONS', ]: if var in os.environ: env[var] = os.environ[var] @@ -266,6 +267,7 @@ def res_file_path(name): 'PYTHON_COVERAGE_PREFIX', 'NLG_COVERAGE_FILENAME', 'YQL_EXPORT_PG_FUNCTIONS_DIR', + 'YQL_ALLOW_ALL_PG_FUNCTIONS', ]: if var in os.environ: env[var] = os.environ[var]