diff options
author | aneporada <[email protected]> | 2024-11-12 20:02:10 +0300 |
---|---|---|
committer | aneporada <[email protected]> | 2024-11-12 20:12:34 +0300 |
commit | 10eb11dab8afe0eae39e5d587d57d4f123f3fa9d (patch) | |
tree | 118f7e40deb9422875a557dab721dfda74450d72 /yql/essentials/sql/v1/builtin.cpp | |
parent | 1620cea68d4380267df949c1a62270c7e961ba89 (diff) |
Merge PR #10831, #11068, #11075, #11152
#11152 - Allow to choose normal or aggreation PG function
#11075 - Handle invalid base
#11068 - Allow more postgis functions
#10831 - Views: if exists / if not exists for DDL
commit_hash:0ebf35e45ac6de147c9000440ca25237db061d2e
Diffstat (limited to 'yql/essentials/sql/v1/builtin.cpp')
-rw-r--r-- | yql/essentials/sql/v1/builtin.cpp | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/yql/essentials/sql/v1/builtin.cpp b/yql/essentials/sql/v1/builtin.cpp index e066cd846d7..e327c2d2ea6 100644 --- a/yql/essentials/sql/v1/builtin.cpp +++ b/yql/essentials/sql/v1/builtin.cpp @@ -3421,8 +3421,31 @@ TNodePtr BuildBuiltinFunc(TContext& ctx, TPosition pos, TString name, const TVec } } else if (ns == "datetime2" && (name == "Parse")) { return BuildUdf(ctx, pos, nameSpace, name, args); - } else if (ns == "pg") { - const bool isAggregateFunc = NYql::NPg::HasAggregation(name, NYql::NPg::EAggKind::Normal); + } else if (ns == "pg" || ns == "pgagg" || ns == "pgproc") { + bool isAggregateFunc = NYql::NPg::HasAggregation(name, NYql::NPg::EAggKind::Normal); + bool isNormalFunc = NYql::NPg::HasProc(name, NYql::NPg::EProcKind::Function); + if (!isAggregateFunc && !isNormalFunc) { + return new TInvalidBuiltin(pos, TStringBuilder() << "Unknown function: " << name); + } + + if (isAggregateFunc && isNormalFunc) { + if (ns == "pg") { + return new TInvalidBuiltin(pos, TStringBuilder() << "Ambigious function: " << name << ", use either PgAgg:: or PgProc:: namespace"); + } else if (ns == "pgagg") { + isNormalFunc = false; + } else { + isAggregateFunc = false; + } + } + + if (isAggregateFunc && ns == "pgproc") { + return new TInvalidBuiltin(pos, TStringBuilder() << "Invalid namespace for aggregation function: " << name << ", use either Pg:: or PgAgg:: namespace"); + } + + if (isNormalFunc && ns == "pgagg") { + return new TInvalidBuiltin(pos, TStringBuilder() << "Invalid namespace for normal function: " << name << ", use either Pg:: or PgProc:: namespace"); + } + if (isAggregateFunc) { if (aggMode == EAggregateMode::Distinct) { return new TInvalidBuiltin(pos, "Distinct is not supported yet for PG aggregation "); @@ -3430,6 +3453,7 @@ TNodePtr BuildBuiltinFunc(TContext& ctx, TPosition pos, TString name, const TVec return BuildAggrFuncFactoryCallback(name, "", EAggrFuncTypeCallback::PG)(pos, args, aggMode, false); } else { + YQL_ENSURE(isNormalFunc); TVector<TNodePtr> pgCallArgs; pgCallArgs.push_back(BuildLiteralRawString(pos, name)); pgCallArgs.insert(pgCallArgs.end(), args.begin(), args.end()); |