@@ -3422,15 +3422,39 @@ TNodePtr BuildBuiltinFunc(TContext& ctx, TPosition pos, TString name, const TVec
34223422 }
34233423 } else if (ns == " datetime2" && (name == " Parse" )) {
34243424 return BuildUdf (ctx, pos, nameSpace, name, args);
3425- } else if (ns == " pg" ) {
3426- const bool isAggregateFunc = NYql::NPg::HasAggregation (name, NYql::NPg::EAggKind::Normal);
3425+ } else if (ns == " pg" || ns == " pgagg" || ns == " pgproc" ) {
3426+ bool isAggregateFunc = NYql::NPg::HasAggregation (name, NYql::NPg::EAggKind::Normal);
3427+ bool isNormalFunc = NYql::NPg::HasProc (name, NYql::NPg::EProcKind::Function);
3428+ if (!isAggregateFunc && !isNormalFunc) {
3429+ return new TInvalidBuiltin (pos, TStringBuilder () << " Unknown function: " << name);
3430+ }
3431+
3432+ if (isAggregateFunc && isNormalFunc) {
3433+ if (ns == " pg" ) {
3434+ return new TInvalidBuiltin (pos, TStringBuilder () << " Ambigious function: " << name << " , use either PgAgg:: or PgProc:: namespace" );
3435+ } else if (ns == " pgagg" ) {
3436+ isNormalFunc = false ;
3437+ } else {
3438+ isAggregateFunc = false ;
3439+ }
3440+ }
3441+
3442+ if (isAggregateFunc && ns == " pgproc" ) {
3443+ return new TInvalidBuiltin (pos, TStringBuilder () << " Invalid namespace for aggregation function: " << name << " , use either Pg:: or PgAgg:: namespace" );
3444+ }
3445+
3446+ if (isNormalFunc && ns == " pgagg" ) {
3447+ return new TInvalidBuiltin (pos, TStringBuilder () << " Invalid namespace for normal function: " << name << " , use either Pg:: or PgProc:: namespace" );
3448+ }
3449+
34273450 if (isAggregateFunc) {
34283451 if (aggMode == EAggregateMode::Distinct) {
34293452 return new TInvalidBuiltin (pos, " Distinct is not supported yet for PG aggregation " );
34303453 }
34313454
34323455 return BuildAggrFuncFactoryCallback (name, " " , EAggrFuncTypeCallback::PG)(pos, args, aggMode, false );
34333456 } else {
3457+ YQL_ENSURE (isNormalFunc);
34343458 TVector<TNodePtr> pgCallArgs;
34353459 pgCallArgs.push_back (BuildLiteralRawString (pos, name));
34363460 pgCallArgs.insert (pgCallArgs.end (), args.begin (), args.end ());
0 commit comments