@@ -36,6 +36,7 @@ extern "C" {
3636#include < ydb/library/yql/parser/pg_wrapper/postgresql/src/backend/catalog/pg_type_d.h>
3737#include < ydb/library/yql/parser/pg_catalog/catalog.h>
3838#include < ydb/library/yql/providers/common/provider/yql_provider_names.h>
39+ #include < ydb/library/yql/minikql/mkql_type_builder.h>
3940#include < ydb/library/yql/core/issue/yql_issue.h>
4041#include < ydb/library/yql/core/yql_callable_names.h>
4142#include < ydb/library/yql/parser/pg_catalog/catalog.h>
@@ -5423,15 +5424,30 @@ class TExtensionHandler : public IPGParseEvents {
54235424 }
54245425
54255426 bool hasArgNames = false ;
5426- ui32 defArgsCount = 0 ;
54275427 for (int i = 0 ; i < ListLength (value->parameters ); ++i) {
54285428 auto node = LIST_CAST_NTH (FunctionParameter, value->parameters , i);
54295429 hasArgNames = hasArgNames || (node->name != nullptr );
54305430 if (node->mode == FUNC_PARAM_IN || node->mode == FUNC_PARAM_DEFAULT) {
54315431 if (node->defexpr ) {
5432- ++defArgsCount;
5432+ desc.DefaultArgs .emplace_back ();
5433+ auto & value = desc.DefaultArgs .back ();
5434+ auto expr = node->defexpr ;
5435+ if (NodeTag (expr) == T_TypeCast) {
5436+ expr = CAST_NODE (TypeCast, expr)->arg ;
5437+ }
5438+
5439+ if (NodeTag (expr) != T_A_Const) {
5440+ return false ;
5441+ }
5442+
5443+ auto pgConst = GetValueNType (CAST_NODE (A_Const, expr));
5444+ if (!pgConst) {
5445+ return false ;
5446+ }
5447+
5448+ value = pgConst->value ;
54335449 } else {
5434- Y_ENSURE (!defArgsCount );
5450+ Y_ENSURE (desc. DefaultArgs . empty () );
54355451 }
54365452
54375453 desc.InputArgNames .push_back (node->name ? node->name : " " );
@@ -5470,17 +5486,6 @@ class TExtensionHandler : public IPGParseEvents {
54705486 }
54715487
54725488 Builder.CreateProc (desc);
5473- if (defArgsCount) {
5474- Y_ENSURE (!desc.VariadicType );
5475- for (ui32 i = 0 ; i < defArgsCount; ++i) {
5476- desc.ArgTypes .pop_back ();
5477- if (!desc.InputArgNames .empty ()) {
5478- desc.InputArgNames .pop_back ();
5479- }
5480-
5481- Builder.CreateProc (desc);
5482- }
5483- }
54845489 return true ;
54855490 }
54865491
@@ -5584,6 +5589,8 @@ class TExtensionSqlParser : public NYql::NPg::IExtensionSqlParser {
55845589 for (const auto & sql : sqls) {
55855590 NYql::PGParse (sql, handler);
55865591 }
5592+
5593+ NKikimr::NMiniKQL::RebuildTypeIndex ();
55875594 }
55885595};
55895596
0 commit comments