MCPcopy Create free account
hub / github.com/apache/cloudberry / get_windowfunc_expr

Function get_windowfunc_expr

src/backend/utils/adt/ruleutils.c:10309–10379  ·  view source on GitHub ↗

* get_windowfunc_expr - Parse back a WindowFunc node */

Source from the content-addressed store, hash-verified

10307 * get_windowfunc_expr - Parse back a WindowFunc node
10308 */
10309static void
10310get_windowfunc_expr(WindowFunc *wfunc, deparse_context *context)
10311{
10312 StringInfo buf = context->buf;
10313 Oid argtypes[FUNC_MAX_ARGS];
10314 int nargs;
10315 List *argnames;
10316 ListCell *l;
10317
10318 if (list_length(wfunc->args) >= FUNC_MAX_ARGS)
10319 ereport(ERROR,
10320 (errcode(ERRCODE_TOO_MANY_ARGUMENTS),
10321 errmsg("too many arguments")));
10322 nargs = 0;
10323 argnames = NIL;
10324 foreach(l, wfunc->args)
10325 {
10326 Node *arg = (Node *) lfirst(l);
10327
10328 if (IsA(arg, NamedArgExpr))
10329 argnames = lappend(argnames, ((NamedArgExpr *) arg)->name);
10330 argtypes[nargs] = exprType(arg);
10331 nargs++;
10332 }
10333
10334 appendStringInfo(buf, "%s(%s",
10335 generate_function_name(wfunc->winfnoid, nargs,
10336 argnames, argtypes,
10337 false, NULL,
10338 context->special_exprkind),
10339 wfunc->windistinct ? "DISTINCT " : "");
10340 /* winstar can be set only in zero-argument aggregates */
10341 if (wfunc->winstar)
10342 appendStringInfoChar(buf, '*');
10343 else
10344 get_rule_expr((Node *) wfunc->args, context, true);
10345
10346 if (wfunc->aggfilter != NULL)
10347 {
10348 appendStringInfoString(buf, ") FILTER (WHERE ");
10349 get_rule_expr((Node *) wfunc->aggfilter, context, false);
10350 }
10351
10352 appendStringInfoString(buf, ") OVER ");
10353
10354 foreach(l, context->windowClause)
10355 {
10356 WindowClause *wc = (WindowClause *) lfirst(l);
10357
10358 if (wc->winref == wfunc->winref)
10359 {
10360 if (wc->name)
10361 appendStringInfoString(buf, quote_identifier(wc->name));
10362 else
10363 get_rule_windowspec(wc, context->windowTList, context);
10364 break;
10365 }
10366 }

Callers 1

get_rule_exprFunction · 0.85

Calls 13

list_lengthFunction · 0.85
lappendFunction · 0.85
exprTypeFunction · 0.85
appendStringInfoFunction · 0.85
generate_function_nameFunction · 0.85
appendStringInfoCharFunction · 0.85
get_rule_exprFunction · 0.85
appendStringInfoStringFunction · 0.85
get_rule_windowspecFunction · 0.85
quote_identifierFunction · 0.70
errcodeFunction · 0.50
errmsgFunction · 0.50

Tested by

no test coverage detected