60 #include "utils/fmgroids.h"
78 #define PRETTYINDENT_STD 8
79 #define PRETTYINDENT_JOIN 4
80 #define PRETTYINDENT_VAR 4
82 #define PRETTYINDENT_LIMIT 40
85 #define PRETTYFLAG_PAREN 1
86 #define PRETTYFLAG_INDENT 2
89 #define WRAP_COLUMN_DEFAULT 0
92 #define PRETTY_PAREN(context) ((context)->prettyFlags & PRETTYFLAG_PAREN)
93 #define PRETTY_INDENT(context) ((context)->prettyFlags & PRETTYFLAG_INDENT)
271 #define deparse_columns_fetch(rangetable_index, dpns) \
272 ((deparse_columns *) list_nth((dpns)->rtable_columns, (rangetable_index)-1))
291 static const char *
query_getviewrule =
"SELECT * FROM pg_catalog.pg_rewrite WHERE ev_class = $1 AND rulename = $2";
306 bool forceprefix,
bool showimplicit,
307 int prettyFlags,
int startIndent);
309 int prettyFlags,
int wrapColumn);
315 const Oid *excludeOps,
316 bool attrsOnly,
bool showTblSpc,
323 bool print_table_args,
bool print_defaults);
329 List *parent_namespaces);
361 int prettyFlags,
int wrapColumn);
364 int prettyFlags,
int wrapColumn,
int startIndent);
406 int indentBefore,
int indentAfter,
int indentPlus);
449 bool has_variadic,
bool *use_variadic_p,
455 #define only_marker(rte) ((rte)->inh ? "" : "ONLY ")
513 if (plan_getrulebyoid ==
NULL)
523 plan_getrulebyoid = plan;
533 elog(
ERROR,
"failed to get pg_rewrite tuple for rule %u", ruleoid);
665 if (plan_getviewrule ==
NULL)
676 plan_getviewrule = plan;
688 elog(
ERROR,
"failed to get pg_rewrite tuple for view %u", viewoid);
698 make_viewdef(&buf, ruletup, rulettc, prettyFlags, wrapColumn);
762 elog(
ERROR,
"could not find tuple for trigger %u", trigid);
772 tgname =
NameStr(trigrec->tgname);
774 OidIsValid(trigrec->tgconstraint) ?
"CONSTRAINT " :
"",
784 elog(
ERROR,
"unexpected tgtype value: %d", trigrec->tgtype);
807 if (trigrec->tgattr.dim1 > 0)
812 for (i = 0; i < trigrec->tgattr.dim1; i++)
819 trigrec->tgattr.values[i]);
840 if (!trigrec->tgdeferrable)
843 if (trigrec->tginitdeferred)
875 oldrte->
relid = trigrec->tgrelid;
885 newrte->
relid = trigrec->tgrelid;
894 memset(&dpns, 0,
sizeof(dpns));
921 if (trigrec->tgnargs > 0)
929 elog(
ERROR,
"tgargs is null for trigger %u", trigid);
931 for (i = 0; i < trigrec->tgnargs; i++)
1020 const Oid *excludeOps,
1021 bool attrsOnly,
bool showTblSpc,
1025 bool isConstraint = (excludeOps !=
NULL);
1039 Datum indclassDatum;
1040 Datum indoptionDatum;
1054 elog(
ERROR,
"cache lookup failed for index %u", indexrelid);
1057 indrelid = idxrec->indrelid;
1058 Assert(indexrelid == idxrec->indexrelid);
1081 elog(
ERROR,
"cache lookup failed for relation %u", indexrelid);
1089 elog(
ERROR,
"cache lookup failed for access method %u",
1131 idxrec->indisunique ?
"UNIQUE " :
"",
1144 for (keyno = 0; keyno < idxrec->indnatts; keyno++)
1146 AttrNumber attnum = idxrec->indkey.values[keyno];
1149 Oid keycolcollation;
1162 if (!colno || colno == keyno + 1)
1165 &keycoltype, &keycoltypmod,
1173 if (indexpr_item ==
NULL)
1174 elog(
ERROR,
"too few entries in indexprs list");
1176 indexpr_item =
lnext(indexpr_item);
1180 if (!colno || colno == keyno + 1)
1193 if (!attrsOnly && (!colno || colno == keyno + 1))
1198 indcoll = indcollation->
values[keyno];
1199 if (
OidIsValid(indcoll) && indcoll != keycolcollation)
1225 if (excludeOps !=
NULL)
1377 elog(
ERROR,
"cache lookup failed for constraint %u", constraintId);
1396 switch (conForm->contype)
1411 elog(
ERROR,
"null conkey for constraint %u",
1425 elog(
ERROR,
"null confkey for constraint %u",
1433 switch (conForm->confmatchtype)
1436 string =
" MATCH FULL";
1439 string =
" MATCH PARTIAL";
1445 elog(
ERROR,
"unrecognized confmatchtype: %d",
1446 conForm->confmatchtype);
1453 switch (conForm->confupdtype)
1459 string =
"RESTRICT";
1465 string =
"SET NULL";
1468 string =
"SET DEFAULT";
1471 elog(
ERROR,
"unrecognized confupdtype: %d",
1472 conForm->confupdtype);
1479 switch (conForm->confdeltype)
1485 string =
"RESTRICT";
1491 string =
"SET NULL";
1494 string =
"SET DEFAULT";
1497 elog(
ERROR,
"unrecognized confdeltype: %d",
1498 conForm->confdeltype);
1524 elog(
ERROR,
"null conkey for constraint %u",
1566 elog(
ERROR,
"null conbin for constraint %u",
1602 conForm->connoinherit ?
" NO INHERIT" :
"");
1617 Oid indexOid = conForm->conindid;
1630 elog(
ERROR,
"null conexclop for constraint %u",
1635 &elems,
NULL, &nElems);
1638 for (i = 0; i < nElems; i++)
1653 elog(
ERROR,
"invalid constraint type \"%c\"", conForm->contype);
1657 if (conForm->condeferrable)
1659 if (conForm->condeferred)
1661 if (!conForm->convalidated)
1687 &keys,
NULL, &nKeys);
1689 for (j = 0; j < nKeys; j++)
1737 if (relname ==
NULL)
1762 if (relname ==
NULL)
1831 sprintf(
NameStr(*result),
"unknown (OID=%u)", roleid);
1869 (
errcode(ERRCODE_UNDEFINED_COLUMN),
1870 errmsg(
"column \"%s\" of relation \"%s\" does not exist",
1902 deprec->objsubid == 0 &&
1906 sequenceId = deprec->objid;
1958 elog(
ERROR,
"cache lookup failed for function %u", funcid);
1960 name =
NameStr(proc->proname);
1964 (
errcode(ERRCODE_WRONG_OBJECT_TYPE),
1965 errmsg(
"\"%s\" is an aggregate function", name)));
1986 if (proc->proiswindow)
1988 switch (proc->provolatile)
2000 switch (proc->proparallel)
2012 if (proc->proisstrict)
2014 if (proc->prosecdef)
2016 if (proc->proleakproof)
2025 if (proc->procost != procost)
2028 if (proc->prorows > 0 && proc->prorows != 1000)
2031 if (oldlen != buf.
len)
2045 for (i = 1; i <=
ARR_DIMS(a)[0]; i++)
2060 pos = strchr(configitem,
'=');
2106 while (strstr(prosrc, dq.
data) !=
NULL)
2138 elog(
ERROR,
"cache lookup failed for function %u", funcid);
2164 elog(
ERROR,
"cache lookup failed for function %u", funcid);
2189 elog(
ERROR,
"cache lookup failed for function %u", funcid);
2211 if (proc->proretset)
2225 if (proc->proretset)
2242 bool print_table_args,
bool print_defaults)
2249 int insertorderbyat = -1;
2257 &argtypes, &argnames, &argmodes);
2259 nlackdefaults = numargs;
2260 if (print_defaults && proc->pronargdefaults > 0)
2262 Datum proargdefaults;
2277 nextargdefault =
list_head(argdefaults);
2279 nlackdefaults = proc->pronargs -
list_length(argdefaults);
2292 elog(
ERROR,
"cache lookup failed for aggregate %u",
2296 insertorderbyat = agg->aggnumdirectargs;
2302 for (i = 0; i < numargs; i++)
2304 Oid argtype = argtypes[
i];
2305 char *argname = argnames ? argnames[
i] :
NULL;
2307 const char *modename;
2317 modename =
"INOUT ";
2325 modename =
"VARIADIC ";
2333 elog(
ERROR,
"invalid parameter mode '%c'", argmode);
2344 if (argsprinted == insertorderbyat)
2350 else if (argsprinted)
2354 if (argname && argname[0])
2357 if (print_defaults && isinput && inputargno > nlackdefaults)
2363 nextargdefault =
lnext(nextargdefault);
2371 if (argsprinted == insertorderbyat && i == numargs - 1)
2375 print_defaults =
false;
2406 for (i = 0; i < ntypes; i++)
2437 Datum proargdefaults;
2443 elog(
ERROR,
"cache lookup failed for function %u", funcid);
2446 if (nth_arg < 1 || nth_arg > numargs || !
is_input_argument(nth_arg - 1, argmodes))
2453 for (i = 0; i < nth_arg; i++)
2477 nth_default = nth_inputarg - 1 - (proc->pronargs - proc->pronargdefaults);
2479 if (nth_default < 0 || nth_default >=
list_length(argdefaults))
2484 node =
list_nth(argdefaults, nth_default);
2500 bool forceprefix,
bool showimplicit)
2503 showimplicit, 0, 0);
2527 bool forceprefix,
bool showimplicit,
2528 int prettyFlags,
int startIndent)
2679 memset(&dpns, 0,
sizeof(dpns));
2721 MemSet(&hash_ctl, 0,
sizeof(hash_ctl));
2725 names_hash =
hash_create(
"set_rtable_names names",
2730 foreach(lc, parent_namespaces)
2737 char *oldname = (
char *)
lfirst(lc2);
2739 if (oldname ==
NULL)
2752 foreach(lc, dpns->
rtable)
2765 else if (rte->
alias)
2801 int refnamelen = strlen(refname);
2802 char *modname = (
char *)
palloc(refnamelen + 16);
2815 memcpy(modname, refname, refnamelen);
2816 sprintf(modname + refnamelen,
"_%d", hentry->
counter);
2853 List *parent_namespaces)
3004 elog(
ERROR,
"unrecognized node type: %d",
3064 for (i = 0; i < colinfo->
num_cols; i++)
3068 if (colname ==
NULL)
3072 if (leftattnos[i] > 0)
3075 leftcolinfo->
colnames[leftattnos[
i] - 1] = colname;
3079 if (rightattnos[i] > 0)
3082 rightcolinfo->
colnames[rightattnos[
i] - 1] = colname;
3125 Assert(leftattnos[i] != 0 && rightattnos[i] != 0);
3146 parentUsing =
lappend(parentUsing, colname);
3149 if (leftattnos[i] > 0)
3152 leftcolinfo->
colnames[leftattnos[
i] - 1] = colname;
3156 if (rightattnos[i] > 0)
3159 rightcolinfo->
colnames[rightattnos[
i] - 1] = colname;
3175 elog(
ERROR,
"unrecognized node type: %d",
3191 char **real_colnames;
3211 ncolumns = tupdesc->
natts;
3212 real_colnames = (
char **)
palloc(ncolumns *
sizeof(
char *));
3214 for (i = 0; i < ncolumns; i++)
3216 if (tupdesc->
attrs[i]->attisdropped)
3217 real_colnames[
i] =
NULL;
3229 real_colnames = (
char **)
palloc(ncolumns *
sizeof(
char *));
3241 if (cname[0] ==
'\0')
3243 real_colnames[
i] = cname;
3277 changed_any =
false;
3279 for (i = 0; i < ncolumns; i++)
3281 char *real_colname = real_colnames[
i];
3285 if (real_colname ==
NULL)
3292 if (colname ==
NULL)
3298 colname = real_colname;
3313 if (!changed_any && strcmp(colname, real_colname) != 0)
3390 changed_any =
false;
3423 if (colname ==
NULL)
3429 colname = real_colname;
3438 if (!changed_any && strcmp(colname, real_colname) != 0)
3473 while (i < noldcolumns &&
3499 while (ic < leftcolinfo->num_cols &&
3502 Assert(ic < leftcolinfo->num_cols);
3508 while (i < colinfo->num_cols &&
3511 Assert(i < colinfo->num_cols);
3548 while (ic < rightcolinfo->num_cols &&
3551 Assert(ic < rightcolinfo->num_cols);
3557 while (i < colinfo->num_cols &&
3560 Assert(i < colinfo->num_cols);
3589 #ifdef USE_ASSERT_CHECKING
3590 while (i < colinfo->num_cols && colinfo->
colnames[i] ==
NULL)
3593 Assert(j == nnewcolumns);
3619 for (i = 0; i < colinfo->
num_cols; i++)
3623 if (oldname && strcmp(oldname, colname) == 0)
3635 if (oldname && strcmp(oldname, colname) == 0)
3642 char *oldname = (
char *)
lfirst(lc);
3644 if (strcmp(oldname, colname) == 0)
3651 char *oldname = (
char *)
lfirst(lc);
3653 if (strcmp(oldname, colname) == 0)
3676 int colnamelen = strlen(colname);
3677 char *modname = (
char *)
palloc(colnamelen + 16);
3690 memcpy(modname, colname, colnamelen);
3691 sprintf(modname + colnamelen,
"_%d", i);
3719 n *
sizeof(
char *));
3721 (n - colinfo->
num_cols) *
sizeof(
char *));
3747 elog(
ERROR,
"unrecognized node type in jointree: %d",
3754 elog(
ERROR,
"unrecognized node type in jointree: %d",
3776 if (aliasvar ==
NULL)
3780 else if (
IsA(aliasvar,
Var))
3789 elog(
ERROR,
"unexpected varno %d in JOIN RTE",
3800 elog(
ERROR,
"unrecognized node type in join alias vars: %d",
3827 forboth(lc, leftvars, lc2, rightvars)
3835 elog(
ERROR,
"unexpected varno %d in JOIN USING qual",
3842 elog(
ERROR,
"unexpected varno %d in JOIN USING qual",
3870 foreach(lc, b->
args)
3873 leftvars, rightvars);
3883 elog(
ERROR,
"unexpected unary operator in JOIN/USING qual");
3887 elog(
ERROR,
"unexpected node type in JOIN/USING qual: %d",
3889 *leftvars =
lappend(*leftvars, var);
3892 elog(
ERROR,
"unexpected node type in JOIN/USING qual: %d",
3894 *rightvars =
lappend(*rightvars, var);
3904 elog(
ERROR,
"unexpected node type in JOIN/USING qual: %d",
4067 while ((ancestor_cell =
lnext(ancestor_cell)) !=
NULL)
4138 if (ev_action !=
NULL)
4173 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
4174 errmsg(
"rule \"%s\" has unsupported event type %d",
4175 rulename, ev_type)));
4183 if (ev_qual ==
NULL)
4185 if (strlen(ev_qual) > 0 && strcmp(ev_qual,
"<>") != 0)
4192 if (prettyFlags & PRETTYFLAG_INDENT)
4243 foreach(action, actions)
4278 int prettyFlags,
int wrapColumn)
4295 ev_type = (char)
SPI_getbinval(ruletup, rulettc, fno, &isnull);
4308 if (ev_action !=
NULL)
4319 if (ev_type !=
'1' || !is_instead ||
4329 prettyFlags, wrapColumn, 0);
4346 int prettyFlags,
int wrapColumn,
int startIndent)
4406 elog(
ERROR,
"unrecognized query command type: %d",
4420 bool first_list =
true;
4425 foreach(vtl, values_lists)
4428 bool first_col =
true;
4437 foreach(lc, sublist)
4478 sep =
"WITH RECURSIVE ";
4534 List *save_windowclause;
4535 List *save_windowtlist;
4562 force_colno =
false;
4571 force_colno, context);
4607 elog(
ERROR,
"unrecognized LockClauseStrength %d",
4657 foreach(lc, query->
rtable)
4835 bool last_was_multiline =
false;
4845 foreach(l, targetList)
4863 context->
buf = &targetbuf;
4883 attname =
"?column?";
4892 if (resultDesc && colno <= resultDesc->natts)
4893 colname =
NameStr(resultDesc->
attrs[colno - 1]->attname);
4900 if (attname ==
NULL || strcmp(attname, colname) != 0)
4913 if (targetbuf.
len > 0 && targetbuf.
data[0] ==
'\n')
4916 leading_nl_pos = -1;
4919 if (leading_nl_pos >= 0)
4929 trailing_nl = strrchr(buf->
data,
'\n');
4930 if (trailing_nl ==
NULL)
4931 trailing_nl = buf->
data;
4941 ((strlen(trailing_nl) + targetbuf.
len > context->
wrapColumn) ||
4942 last_was_multiline))
4948 last_was_multiline =
4949 (strchr(targetbuf.
data + leading_nl_pos + 1,
'\n') !=
NULL);
4980 need_paren = (subquery->
cteList ||
5013 if (op->
op == lop->
op && op->
all == lop->
all)
5083 elog(
ERROR,
"unrecognized node type: %d",
5120 else if (!expr ||
IsA(expr,
Var))
5155 bool omit_child_parens =
true;
5192 omit_child_parens =
false;
5218 foreach(l, orderList)
5227 force_colno, context);
5304 bool needspace =
false;
5410 List *strippedexprs;
5419 foreach(l, query->
rtable)
5426 elog(
ERROR,
"too many subquery RTEs in INSERT");
5433 elog(
ERROR,
"too many values RTEs in INSERT");
5437 if (select_rte && values_rte)
5438 elog(
ERROR,
"both subquery and values RTEs in INSERT");
5470 strippedexprs =
NIL;
5500 values_cell =
lnext(values_cell);
5505 strippedexprs =
lappend(strippedexprs,
5520 else if (values_rte)
5525 else if (strippedexprs)
5556 bool save_varprefix;
5678 int remaining_ma_columns;
5691 foreach(l, targetList)
5701 ma_sublinks =
lappend(ma_sublinks, sl);
5708 cur_ma_sublink =
NULL;
5709 remaining_ma_columns = 0;
5713 foreach(l, targetList)
5729 if (next_ma_cell !=
NULL && cur_ma_sublink ==
NULL)
5763 next_ma_cell =
lnext(next_ma_cell);
5767 ((cur_ma_sublink->
subLinkId << 16) | 1));
5791 if (cur_ma_sublink !=
NULL)
5793 if (--remaining_ma_columns > 0)
5796 expr = (
Node *) cur_ma_sublink;
5797 cur_ma_sublink =
NULL;
5884 elog(
ERROR,
"unexpected utility statement type");
5922 elog(
ERROR,
"bogus varlevelsup: %d offset %d",
5969 Assert(netlevelsup == 0);
6001 elog(
ERROR,
"cannot decompile join alias var in plan tree");
6008 if (aliasvar &&
IsA(aliasvar,
Var))
6011 istoplevel, context);
6025 else if (attnum > 0)
6028 Assert(attnum <= colinfo->num_cols);
6029 attname = colinfo->
colnames[attnum - 1];
6230 Assert(fieldno >= 1 && fieldno <= tupleDesc->natts);
6231 return NameStr(tupleDesc->
attrs[fieldno - 1]->attname);
6237 elog(
ERROR,
"bogus varlevelsup: %d offset %d",
6262 Assert(netlevelsup == 0);
6281 Assert(netlevelsup == 0);
6299 Assert(netlevelsup == 0);
6325 expr = (
Node *) var;
6347 elog(
ERROR,
"subquery %s does not have attribute %d",
6391 elog(
ERROR,
"failed to find plan for subquery %s",
6395 elog(
ERROR,
"bogus varattno for subquery var: %d",
6397 Assert(netlevelsup == 0);
6411 elog(
ERROR,
"cannot decompile join alias var in plan tree");
6448 foreach(lc, ctedpns->
ctes)
6461 if (ste ==
NULL || ste->resjunk)
6462 elog(
ERROR,
"subquery %s does not have attribute %d",
6464 expr = (
Node *) ste->expr;
6508 elog(
ERROR,
"failed to find plan for CTE %s",
6512 elog(
ERROR,
"bogus varattno for subquery var: %d",
6514 Assert(netlevelsup == 0);
6538 Assert(fieldno >= 1 && fieldno <= tupleDesc->natts);
6539 return NameStr(tupleDesc->
attrs[fieldno - 1]->attname);
6556 *ancestor_cell_p =
NULL;
6567 bool in_same_plan_level;
6572 in_same_plan_level =
true;
6598 *ancestor_cell_p = lc;
6623 if (paramid == param->
paramid)
6627 *ancestor_cell_p = lc;
6633 in_same_plan_level =
false;
6654 in_same_plan_level =
false;
6688 bool save_varprefix;
6706 need_paren = !(
IsA(expr,
Var) ||
6749 if (strlen(op) == 1)
6834 const char *parentOp;
6837 bool is_lopriparent;
6838 bool is_hipriparent;
6845 is_lopriop = (strchr(
"+-", *op) !=
NULL);
6846 is_hipriop = (strchr(
"*/%", *op) !=
NULL);
6847 if (!(is_lopriop || is_hipriop))
6854 is_lopriparent = (strchr(
"+-", *parentOp) !=
NULL);
6855 is_hipriparent = (strchr(
"*/%", *parentOp) !=
NULL);
6856 if (!(is_lopriparent || is_hipriparent))
6859 if (is_hipriop && is_lopriparent)
6862 if (is_lopriop && is_hipriparent)
6919 type = ((
BoolExpr *) node)->boolop;
6920 parentType = ((
BoolExpr *) parentNode)->boolop;
6976 int indentBefore,
int indentAfter,
int indentPlus)
7009 indentAmount += indentPlus;
7031 while (str->
len > 0 && str->
data[str->
len - 1] ==
' ')
7032 str->
data[--(str->
len)] =
'\0';
7049 bool showimplicit,
Node *parentNode)
7148 context, showimplicit);
7254 expr->
useOr ?
"ANY" :
"ALL");
7386 const char *fieldname;
7554 foreach(temp, caseexpr->
args)
7662 foreach(arg, rowexpr->
args)
7666 if (tupdesc ==
NULL ||
7667 !tupdesc->
attrs[i]->attisdropped)
7676 if (tupdesc !=
NULL)
7678 while (i < tupdesc->natts)
7680 if (!tupdesc->
attrs[i]->attisdropped)
7710 foreach(arg, rcexpr->
largs)
7731 foreach(arg, rcexpr->
rargs)
7757 switch (minmaxexpr->
op)
7774 bool needcomma =
false;
7867 " PRESERVE WHITESPACE");
7870 " STRIP WHITESPACE");
7896 ", STANDALONE YES");
7904 ", STANDALONE NO VALUE");
7944 elog(
ERROR,
"unrecognized nulltesttype: %d",
7980 elog(
ERROR,
"unrecognized booltesttype: %d",
8033 bool save_varprefix;
8051 need_parens =
false;
8083 foreach(l, (
List *) node)
8113 if (node &&
IsA(node,
Var))
8154 elog(
ERROR,
"cache lookup failed for operator %u", opno);
8156 switch (optup->oprkind)
8173 elog(
ERROR,
"bogus oprkind: %d", optup->oprkind);
8203 false, (
Node *) expr);
8216 int32 coercedTypmod;
8222 rettype, coercedTypmod,
8234 (
errcode(ERRCODE_TOO_MANY_ARGUMENTS),
8235 errmsg(
"too many arguments")));
8238 foreach(l, expr->
args)
8255 foreach(l, expr->
args)
8336 foreach(l, aggref->
args)
8346 if (use_variadic && i == nargs)
8377 Aggref *original_aggref =
private;
8380 elog(
ERROR,
"combining Aggref does not point to an Aggref");
8382 aggref = (
Aggref *) node;
8400 (
errcode(ERRCODE_TOO_MANY_ARGUMENTS),
8401 errmsg(
"too many arguments")));
8404 foreach(l, wfunc->
args)
8449 elog(
ERROR,
"could not find window clause for winref %u",
8468 Oid resulttype,
int32 resulttypmod,
8489 ((
Const *) arg)->consttype == resulttype &&
8490 ((
Const *) arg)->consttypmod == -1)
8529 bool needlabel =
false;
8549 &typoutput, &typIsVarlena);
8566 if (extval[0] !=
'-')
8582 if (isdigit((
unsigned char) extval[0]) &&
8583 strcspn(extval,
"eE.") != strlen(extval))
8600 if (strcmp(extval,
"t") == 0)
8646 if (needlabel || showtype > 0)
8688 for (valptr = val; *valptr; valptr++)
8709 char *opname =
NULL;
8772 elog(
ERROR,
"unrecognized testexpr type: %d",
8785 if (strcmp(opname,
"=") == 0)
8807 elog(
ERROR,
"unrecognized sublink type: %d",
8880 context->
buf = &itembuf;
8891 if (itembuf.
len > 0 && itembuf.
data[0] ==
'\n')
8902 trailing_nl = strrchr(buf->
data,
'\n');
8903 if (trailing_nl ==
NULL)
8904 trailing_nl = buf->
data;
8912 if (strlen(trailing_nl) + itembuf.
len > context->
wrapColumn)
9117 if (strcmp(refname, rte->
ctename) != 0)
9143 bool need_paren_on_right;
9187 elog(
ERROR,
"unrecognized join type: %d",
9191 if (need_paren_on_right)
9194 if (need_paren_on_right)
9206 char *colname = (
char *)
lfirst(lc);
9238 elog(
ERROR,
"unrecognized node type: %d",
9359 foreach(l, tablesample->
args)
9395 elog(
ERROR,
"cache lookup failed for opclass %u", opclass);
9402 opcname =
NameStr(opcrec->opcname);
9442 elog(
ERROR,
"argument type %s of FieldStore is not a tuple type",
9500 lowlist_item =
lnext(lowlist_item);
9532 safe = ((ident[0] >=
'a' && ident[0] <=
'z') || ident[0] ==
'_');
9534 for (ptr = ident; *ptr; ptr++)
9538 if ((ch >=
'a' && ch <=
'z') ||
9539 (ch >=
'0' && ch <=
'9') ||
9576 result = (
char *)
palloc(strlen(ident) + nquotes + 2 + 1);
9580 for (ptr = ident; *ptr; ptr++)
9626 elog(
ERROR,
"cache lookup failed for relation %u", relid);
9653 elog(
ERROR,
"cache lookup failed for relation %u", relid);
9655 relname =
NameStr(reltup->relname);
9659 foreach(nslist, namespaces)
9664 foreach(ctlist, dpns->
ctes)
9668 if (strcmp(cte->
ctename, relname) == 0)
9711 elog(
ERROR,
"cache lookup failed for relation %u", relid);
9713 relname =
NameStr(reltup->relname);
9717 elog(
ERROR,
"cache lookup failed for namespace %u",
9718 reltup->relnamespace);
9744 bool has_variadic,
bool *use_variadic_p,
9759 Oid *p_true_typeids;
9760 bool force_qualify =
false;
9764 elog(
ERROR,
"cache lookup failed for function %u", funcid);
9766 proname =
NameStr(procform->proname);
9774 if (strcmp(proname,
"cube") == 0 || strcmp(proname,
"rollup") == 0)
9775 force_qualify =
true;
9797 use_variadic = has_variadic;
9798 *use_variadic_p = use_variadic;
9803 use_variadic =
false;
9815 NIL, argnames, nargs, argtypes,
9816 !use_variadic,
true,
9817 &p_funcid, &p_rettype,
9818 &p_retset, &p_nvargs, &p_vatype,
9819 &p_true_typeids,
NULL);
9866 elog(
ERROR,
"cache lookup failed for operator %u", operid);
9868 oprname =
NameStr(operform->oprname);
9875 switch (operform->oprkind)
9890 elog(
ERROR,
"unrecognized oprkind: %d", operform->oprkind);
9895 if (p_result !=
NULL &&
oprid(p_result) == operid)
9908 if (p_result !=
NULL)
9933 elog(
ERROR,
"cache lookup failed for collation %u", collid);
9935 collname =
NameStr(colltup->collname);
9970 char *result =
NULL;
9977 elog(
ERROR,
"cache lookup failed for relation %u", relid);
9992 &options,
NULL, &noptions);
10006 separator = strchr(option,
'=');
10010 value = separator + 1;
#define list_make2(x1, x2)
int SPI_fnumber(TupleDesc tupdesc, const char *fname)
Value * makeString(char *str)
#define ConstraintOidIndexId
static void decompile_column_index_array(Datum column_index_array, Oid relId, StringInfo buf)
static char * generate_function_name(Oid funcid, int nargs, List *argnames, Oid *argtypes, bool has_variadic, bool *use_variadic_p, ParseExprKind special_exprkind)
#define INDOPTION_NULLS_FIRST
#define PG_GETARG_INT32(n)
#define FKCONSTR_MATCH_SIMPLE
Query * getInsertSelectQuery(Query *parsetree, Query ***subquery_ptr)
#define Anum_pg_depend_refobjid
static char * get_relation_name(Oid relid)
#define CONSTRAINT_FOREIGN
void hash_destroy(HTAB *hashp)
void * stringToNode(char *str)
#define TRIGGER_FOR_DELETE(type)
#define IsA(nodeptr, _type_)
static void get_with_clause(Query *query, deparse_context *context)
#define Anum_pg_depend_refobjsubid
Datum namein(PG_FUNCTION_ARGS)
#define TriggerOidIndexId
static void resolve_special_varno(Node *node, deparse_context *context, void *private, void(*callback)(Node *, deparse_context *, void *))
#define PRETTYINDENT_JOIN
Oid GetDefaultOpClass(Oid type_id, Oid am_id)
#define Anum_pg_depend_refclassid
#define forboth(cell1, list1, cell2, list2)
void getTypeOutputInfo(Oid type, Oid *typOutput, bool *typIsVarlena)
void systable_endscan(SysScanDesc sysscan)
#define PROVOLATILE_IMMUTABLE
#define Anum_pg_constraint_confkey
static char * pg_get_triggerdef_worker(Oid trigid, bool pretty)
#define fastgetattr(tup, attnum, tupleDesc, isnull)
static void get_rule_expr_paren(Node *node, deparse_context *context, bool showimplicit, Node *parentNode)
static const char * get_simple_binary_op_name(OpExpr *expr)
const char * quote_identifier(const char *ident)
TupleDesc lookup_rowtype_tupdesc(Oid type_id, int32 typmod)
static char * make_colname_unique(char *colname, deparse_namespace *dpns, deparse_columns *colinfo)
Snapshot RegisterSnapshot(Snapshot snapshot)
char * get_language_name(Oid langoid, bool missing_ok)
#define PRETTYFLAG_INDENT
static Node * find_param_referent(Param *param, deparse_context *context, deparse_namespace **dpns_p, ListCell **ancestor_cell_p)
#define INTERNALlanguageId
#define RelationGetDescr(relation)
char * get_constraint_name(Oid conoid)
OnConflictExpr * onConflict
#define ObjectIdAttributeNumber
const ScanKeyword * ScanKeywordLookup(const char *text, const ScanKeyword *keywords, int num_keywords)
int32 exprTypmod(const Node *expr)
static void get_rule_orderby(List *orderList, List *targetList, bool force_colno, deparse_context *context)
Datum pg_get_viewdef_name_ext(PG_FUNCTION_ARGS)
#define RangeVarGetRelid(relation, lockmode, missing_ok)
#define FKCONSTR_ACTION_NOACTION
#define Anum_pg_class_reloptions
#define forthree(cell1, list1, cell2, list2, cell3, list3)
char get_rel_relkind(Oid relid)
#define DatumGetObjectId(X)
char * pstrdup(const char *in)
SPIPlanPtr SPI_prepare(const char *src, int nargs, Oid *argtypes)
#define FRAMEOPTION_START_VALUE
#define RelationRelationId
#define DependReferenceIndexId
#define FKCONSTR_ACTION_SETDEFAULT
#define Anum_pg_trigger_tgqual
#define WRAP_COLUMN_DEFAULT
Datum pg_get_indexdef_ext(PG_FUNCTION_ARGS)
static void get_target_list(List *targetList, deparse_context *context, TupleDesc resultDesc)
static Node * get_rule_sortgroupclause(Index ref, List *tlist, bool force_colno, deparse_context *context)
Form_pg_attribute * attrs
int get_func_arg_info(HeapTuple procTup, Oid **p_argtypes, char ***p_argnames, char **p_argmodes)
Datum pg_get_viewdef_ext(PG_FUNCTION_ARGS)
char * pg_get_indexdef_string(Oid indexrelid)
#define Anum_pg_proc_prosrc
const int NumScanKeywords
static const char * query_getrulebyoid
static void set_relation_column_names(deparse_namespace *dpns, RangeTblEntry *rte, deparse_columns *colinfo)
#define Anum_pg_index_indclass
static char * pg_get_indexdef_worker(Oid indexrelid, int colno, const Oid *excludeOps, bool attrsOnly, bool showTblSpc, int prettyFlags)
static char * pg_get_ruledef_worker(Oid ruleoid, int prettyFlags)
char * pg_get_indexdef_columns(Oid indexrelid, bool pretty)
static void get_from_clause(Query *query, const char *prefix, deparse_context *context)
SPITupleTable * SPI_tuptable
List * list_copy(const List *oldlist)
#define CONSTRAINT_EXCLUSION
CoercionForm coercionformat
int errcode(int sqlerrcode)
#define ViewSelectRuleName
bool exprIsLengthCoercion(const Node *expr, int32 *coercedTypmod)
#define TRIGGER_FOR_UPDATE(type)
void relation_close(Relation relation, LOCKMODE lockmode)
#define MemSet(start, val, len)
static void get_insert_query_def(Query *query, deparse_context *context)
static void get_rule_windowclause(Query *query, deparse_context *context)
List * list_concat(List *list1, List *list2)
#define PROPARALLEL_RESTRICTED
#define FRAMEOPTION_BETWEEN
static void pop_ancestor_plan(deparse_namespace *dpns, deparse_namespace *save_dpns)
RangeVar * makeRangeVarFromNameList(List *names)
#define PRETTY_INDENT(context)
static void get_update_query_def(Query *query, deparse_context *context)
#define UNRESERVED_KEYWORD
#define DirectFunctionCall1(func, arg1)
#define PG_GETARG_BOOL(n)
int pg_strcasecmp(const char *s1, const char *s2)
void * hash_search(HTAB *hashp, const void *keyPtr, HASHACTION action, bool *foundPtr)
List * list_copy_tail(const List *oldlist, int nskip)
PlanState * inner_planstate
#define PROARGMODE_VARIADIC
static void set_deparse_planstate(deparse_namespace *dpns, PlanState *ps)
static void get_update_query_targetlist_def(Query *query, List *targetList, deparse_context *context, RangeTblEntry *rte)
#define CONSTRAINT_UNIQUE
#define FRAMEOPTION_START_UNBOUNDED_PRECEDING
static void get_const_expr(Const *constval, deparse_context *context, int showtype)
TypeFuncClass get_expr_result_type(Node *expr, Oid *resultTypeId, TupleDesc *resultTupleDesc)
Snapshot GetTransactionSnapshot(void)
#define OidIsValid(objectId)
#define Anum_pg_constraint_conbin
static void expand_colnames_array_to(deparse_columns *colinfo, int n)
static void identify_join_columns(JoinExpr *j, RangeTblEntry *jrte, deparse_columns *colinfo)
SysScanDesc systable_beginscan(Relation heapRelation, Oid indexId, bool indexOK, Snapshot snapshot, int nkeys, ScanKey key)
LockClauseStrength strength
#define SearchSysCache1(cacheId, key1)
static text * string_to_text(char *str)
char * generate_collation_name(Oid collid)
#define Anum_pg_proc_proconfig
static char * generate_operator_name(Oid operid, Oid arg1, Oid arg2)
static void get_basic_select_query(Query *query, deparse_context *context, TupleDesc resultDesc)
Datum pg_get_triggerdef_ext(PG_FUNCTION_ARGS)
#define PG_GETARG_TEXT_PP(n)
Oid get_rel_tablespace(Oid relid)
static char * generate_relation_name(Oid relid, List *namespaces)
static void get_setop_query(Node *setOp, Query *query, deparse_context *context, TupleDesc resultDesc)
char * SPI_getvalue(HeapTuple tuple, TupleDesc tupdesc, int fnumber)
static char * relname(char const *dir, char const *base)
static void get_oper_expr(OpExpr *expr, deparse_context *context)
#define CONSTRAINT_PRIMARY
FormData_pg_authid * Form_pg_authid
Alias * makeAlias(const char *aliasname, List *colnames)
List * select_rtable_names_for_explain(List *rtable, Bitmapset *rels_used)
#define AGGKIND_IS_ORDERED_SET(kind)
static void get_func_expr(FuncExpr *expr, deparse_context *context, bool showimplicit)
static void make_viewdef(StringInfo buf, HeapTuple ruletup, TupleDesc rulettc, int prettyFlags, int wrapColumn)
static void get_sublink_expr(SubLink *sublink, deparse_context *context)
static text * pg_get_expr_worker(text *expr, Oid relid, const char *relname, int prettyFlags)
#define Anum_pg_proc_probin
static bool has_dangerous_join_using(deparse_namespace *dpns, Node *jtnode)
HeapTuple systable_getnext(SysScanDesc sysscan)
#define TRIGGER_FOR_ROW(type)
Oid get_typ_typrelid(Oid typid)
static void get_tablesample_def(TableSampleClause *tablesample, deparse_context *context)
void pfree(void *pointer)
static void print_function_rettype(StringInfo buf, HeapTuple proctup)
static void convert(const int32 val, char *const buf)
Datum pg_get_functiondef(PG_FUNCTION_ARGS)
void appendStringInfo(StringInfo str, const char *fmt,...)
#define FRAMEOPTION_START_VALUE_FOLLOWING
#define ObjectIdGetDatum(X)
static void get_windowfunc_expr(WindowFunc *wfunc, deparse_context *context)
struct PlanState * planstate
static void set_rtable_names(deparse_namespace *dpns, List *parent_namespaces, Bitmapset *rels_used)
static void get_utility_query_def(Query *query, deparse_context *context)
static void get_parameter(Param *param, deparse_context *context)
#define TRIGGER_FOR_AFTER(type)
#define PROVOLATILE_STABLE
static void get_select_query_def(Query *query, deparse_context *context, TupleDesc resultDesc)
static void simple_quote_literal(StringInfo buf, const char *val)
IndexAmRoutine * GetIndexAmRoutine(Oid amhandler)
Operator left_oper(ParseState *pstate, List *op, Oid arg, bool noError, int location)
Operator right_oper(ParseState *pstate, List *op, Oid arg, bool noError, int location)
int SPI_execute_plan(SPIPlanPtr plan, Datum *Values, const char *Nulls, bool read_only, long tcount)
int pg_mbcliplen(const char *mbstr, int len, int limit)
Datum SPI_getbinval(HeapTuple tuple, TupleDesc tupdesc, int fnumber, bool *isnull)
static void callback(struct sockaddr *addr, struct sockaddr *mask, void *unused)
#define DatumGetByteaP(X)
List * set_deparse_context_planstate(List *dpcontext, Node *planstate, List *ancestors)
static bool is_input_argument(int nth, const char *argmodes)
static SPIPlanPtr plan_getrulebyoid
static char * pg_get_viewdef_worker(Oid viewoid, int prettyFlags, int wrapColumn)
#define outerPlanState(node)
Datum pg_get_viewdef_name(PG_FUNCTION_ARGS)
static void get_rule_expr_toplevel(Node *node, deparse_context *context, bool showimplicit)
void appendStringInfoString(StringInfo str, const char *s)
Datum pg_get_function_arg_default(PG_FUNCTION_ARGS)
static void get_const_collation(Const *constval, deparse_context *context)
char * get_namespace_name(Oid nspid)
void * list_nth(const List *list, int n)
int SPI_keepplan(SPIPlanPtr plan)
const ScanKeyword ScanKeywords[]
#define Anum_pg_proc_proargdefaults
#define PRETTY_PAREN(context)
static const char * query_getviewrule
AttrNumber get_attnum(Oid relid, const char *attname)
void check_stack_depth(void)
static void appendContextKeyword(deparse_context *context, const char *str, int indentBefore, int indentAfter, int indentPlus)
Oid values[FLEXIBLE_ARRAY_MEMBER]
bool heap_attisnull(HeapTuple tup, int attnum)
static void push_child_plan(deparse_namespace *dpns, PlanState *ps, deparse_namespace *save_dpns)
List * deparse_context_for(const char *aliasname, Oid relid)
Datum pg_get_function_result(PG_FUNCTION_ARGS)
#define FRAMEOPTION_END_CURRENT_ROW
#define FRAMEOPTION_START_VALUE_PRECEDING
#define CStringGetDatum(X)
#define deparse_columns_fetch(rangetable_index, dpns)
static void get_rule_windowspec(WindowClause *wc, List *targetList, deparse_context *context)
#define FRAMEOPTION_END_UNBOUNDED_FOLLOWING
static void get_opclass_name(Oid opclass, Oid actual_datatype, StringInfo buf)
static ListCell * list_head(const List *l)
void resetStringInfo(StringInfo str)
static void set_join_column_names(deparse_namespace *dpns, RangeTblEntry *rte, deparse_columns *colinfo)
bool CollationIsVisible(Oid collid)
static void removeStringInfoSpaces(StringInfo str)
void AcquireRewriteLocks(Query *parsetree, bool forExecute, bool forUpdatePushedDown)
FormData_pg_depend * Form_pg_depend
MemoryContext CurrentMemoryContext
#define TRIGGER_FOR_BEFORE(type)
int get_func_trftypes(HeapTuple procTup, Oid **p_trftypes)
#define FRAMEOPTION_START_CURRENT_ROW
static void get_rule_groupingset(GroupingSet *gset, List *targetlist, bool omit_parens, deparse_context *context)
#define ereport(elevel, rest)
#define rt_fetch(rangetable_index, rangetable)
TargetEntry * get_sortgroupref_tle(Index sortref, List *targetList)
static int print_function_arguments(StringInfo buf, HeapTuple proctup, bool print_table_args, bool print_defaults)
Datum array_ref(ArrayType *array, int nSubscripts, int *indx, int arraytyplen, int elmlen, bool elmbyval, char elmalign, bool *isNull)
#define Anum_pg_constraint_conkey
#define PROPARALLEL_UNSAFE
List * textToQualifiedNameList(text *textval)
static void get_coercion_expr(Node *arg, deparse_context *context, Oid resulttype, int32 resulttypmod, Node *parentNode)
#define FKCONSTR_ACTION_CASCADE
#define FRAMEOPTION_NONDEFAULT
void UnregisterSnapshot(Snapshot snapshot)
ParseExprKind special_exprkind
#define PROVOLATILE_VOLATILE
List * lappend(List *list, void *datum)
void appendStringInfoChar(StringInfo str, char ch)
void initStringInfo(StringInfo str)
static char * flatten_reloptions(Oid relid)
static char * pg_get_constraintdef_worker(Oid constraintId, bool fullCommand, int prettyFlags)
char * quote_qualified_identifier(const char *qualifier, const char *ident)
char * get_relid_attribute_name(Oid relid, AttrNumber attnum)
FormData_pg_index * Form_pg_index
Datum pg_get_ruledef_ext(PG_FUNCTION_ARGS)
#define FKCONSTR_MATCH_FULL
Datum pg_get_expr_ext(PG_FUNCTION_ARGS)
#define TextDatumGetCString(d)
CoercionForm coerceformat
void * palloc0(Size size)
Datum pg_get_ruledef(PG_FUNCTION_ARGS)
BoolTestType booltesttype
HTAB * hash_create(const char *tabname, long nelem, HASHCTL *info, int flags)
CoercionForm convertformat
void ReleaseSysCache(HeapTuple tuple)
static SPIPlanPtr plan_getviewrule
static void get_delete_query_def(Query *query, deparse_context *context)
Datum pg_get_viewdef(PG_FUNCTION_ARGS)
Datum SysCacheGetAttr(int cacheId, HeapTuple tup, AttrNumber attributeNumber, bool *isNull)
char * pg_get_constraintdef_command(Oid constraintId)
Relation heap_open(Oid relationId, LOCKMODE lockmode)
bool OpclassIsVisible(Oid opcid)
#define TRIGGER_FOR_TRUNCATE(type)
void appendStringInfoSpaces(StringInfo str, int count)
NullTestType nulltesttype
static const char * get_name_for_var_field(Var *var, int fieldno, int levelsup, deparse_context *context)
FormData_pg_proc * Form_pg_proc
static bool isSimpleNode(Node *node, Node *parentNode, int prettyFlags)
TypeCacheEntry * lookup_type_cache(Oid type_id, int flags)
Oid get_typcollation(Oid typid)
#define PRETTYINDENT_LIMIT
Datum pg_get_serial_sequence(PG_FUNCTION_ARGS)
bool quote_all_identifiers
static void get_agg_combine_expr(Node *node, deparse_context *context, void *private)
static void flatten_join_using_qual(Node *qual, List **leftvars, List **rightvars)
char * get_rte_attribute_name(RangeTblEntry *rte, AttrNumber attnum)
#define Anum_pg_index_indpred
#define PG_RETURN_TEXT_P(x)
List * lcons(void *datum, List *list)
PGDLLIMPORT bool standard_conforming_strings
static void printSubscripts(ArrayRef *aref, deparse_context *context)
static char * deparse_expression_pretty(Node *expr, List *dpcontext, bool forceprefix, bool showimplicit, int prettyFlags, int startIndent)
text * cstring_to_text(const char *s)
FormData_pg_constraint * Form_pg_constraint
static void pop_child_plan(deparse_namespace *dpns, deparse_namespace *save_dpns)
#define HeapTupleIsValid(tuple)
#define FRAMEOPTION_RANGE
#define Assert(condition)
static void get_rule_expr(Node *node, deparse_context *context, bool showimplicit)
#define Anum_pg_trigger_tgargs
#define StrNCpy(dst, src, len)
#define FRAMEOPTION_END_VALUE_FOLLOWING
char * map_xml_name_to_sql_identifier(char *name)
static char * get_variable(Var *var, int levelsup, bool istoplevel, deparse_context *context)
Datum pg_get_function_identity_arguments(PG_FUNCTION_ARGS)
FormData_pg_aggregate * Form_pg_aggregate
#define TriggerRelationId
Datum pg_get_viewdef_wrap(PG_FUNCTION_ARGS)
PlanState * outer_planstate
char * deparse_expression(Node *expr, List *dpcontext, bool forceprefix, bool showimplicit)
#define TRIGGER_FOR_INSERT(type)
Datum pg_get_constraintdef_ext(PG_FUNCTION_ARGS)
void get_atttypetypmodcoll(Oid relid, AttrNumber attnum, Oid *typid, int32 *typmod, Oid *collid)
Oid exprType(const Node *expr)
static Node * processIndirection(Node *node, deparse_context *context, bool printit)
static int list_length(const List *l)
Datum pg_get_indexdef(PG_FUNCTION_ARGS)
Oid exprCollation(const Node *expr)
FormData_pg_trigger * Form_pg_trigger
LockWaitPolicy waitPolicy
Bitmapset * bms_add_member(Bitmapset *a, int x)
int16 values[FLEXIBLE_ARRAY_MEMBER]
#define FRAMEOPTION_END_VALUE_PRECEDING
void * repalloc(void *pointer, Size size)
FormData_pg_operator* Form_pg_operator
FuncDetailCode func_get_detail(List *funcname, List *fargs, List *fargnames, int nargs, Oid *argtypes, bool expand_variadic, bool expand_defaults, Oid *funcid, Oid *rettype, bool *retset, int *nvargs, Oid *vatype, Oid **true_typeids, List **argdefaults)
static void set_deparse_for_query(deparse_namespace *dpns, Query *query, List *parent_namespaces)
#define InvalidAttrNumber
FormData_pg_collation * Form_pg_collation
static void get_query_def(Query *query, StringInfo buf, List *parentnamespace, TupleDesc resultDesc, int prettyFlags, int wrapColumn, int startIndent)
static void get_values_def(List *values_lists, deparse_context *context)
static void set_simple_column_names(deparse_namespace *dpns)
Datum pg_get_function_arguments(PG_FUNCTION_ARGS)
Datum pg_get_expr(PG_FUNCTION_ARGS)
#define DatumGetPointer(X)
CoercionForm coerceformat
#define Anum_pg_index_indcollation
static void get_agg_expr(Aggref *aggref, deparse_context *context, Aggref *original_aggref)
void deconstruct_array(ArrayType *array, Oid elmtype, int elmlen, bool elmbyval, char elmalign, Datum **elemsp, bool **nullsp, int *nelemsp)
static void get_column_alias_list(deparse_columns *colinfo, deparse_context *context)
Datum pg_get_constraintdef(PG_FUNCTION_ARGS)
char * text_to_cstring(const text *t)
FormData_pg_class * Form_pg_class
Datum pg_get_triggerdef(PG_FUNCTION_ARGS)
Oid get_base_element_type(Oid typid)
static char * generate_qualified_relation_name(Oid relid)
static void set_using_names(deparse_namespace *dpns, Node *jtnode, List *parentUsing)
FormData_pg_am * Form_pg_am
char * OidOutputFunctionCall(Oid functionId, Datum val)
static bool colname_is_unique(char *colname, deparse_namespace *dpns, deparse_columns *colinfo)
int errmsg(const char *fmt,...)
#define PG_GETARG_TEXT_P(n)
bool RelationIsVisible(Oid relid)
static void get_special_variable(Node *node, deparse_context *context, void *private)
char * get_tablespace_name(Oid spc_oid)
static void push_ancestor_plan(deparse_namespace *dpns, ListCell *ancestor_cell, deparse_namespace *save_dpns)
void list_free(List *list)
TargetEntry * get_tle_by_resno(List *tlist, AttrNumber resno)
int count_nonjunk_tlist_entries(List *tlist)
void ScanKeyInit(ScanKey entry, AttrNumber attributeNumber, StrategyNumber strategy, RegProcedure procedure, Datum argument)
static void print_function_trftypes(StringInfo buf, HeapTuple proctup)
Relation relation_open(Oid relationId, LOCKMODE lockmode)
#define FKCONSTR_ACTION_RESTRICT
#define SQL_STR_DOUBLE(ch, escape_backslash)
Oid get_constraint_index(Oid constraintId)
static RangeTblEntry * get_simple_values_rte(Query *query)
static void make_ruledef(StringInfo buf, HeapTuple ruletup, TupleDesc rulettc, int prettyFlags)
#define CHECK_FOR_INTERRUPTS()
#define ConstraintRelationId
#define CONSTRAINT_TRIGGER
static void get_from_clause_coldeflist(RangeTblFunction *rtfunc, deparse_columns *colinfo, deparse_context *context)
#define HeapTupleGetOid(tuple)
#define innerPlanState(node)
Operator oper(ParseState *pstate, List *opname, Oid ltypeId, Oid rtypeId, bool noError, int location)
CoercionForm relabelformat
#define ReleaseTupleDesc(tupdesc)
int get_aggregate_argtypes(Aggref *aggref, Oid *inputTypes)
#define FKCONSTR_ACTION_SETNULL
FormData_pg_opclass * Form_pg_opclass
char * get_rel_name(Oid relid)
bool bms_is_member(int x, const Bitmapset *a)
#define GetCTETargetList(cte)
struct TableSampleClause * tablesample
#define FKCONSTR_MATCH_PARTIAL
List * deparse_context_for_plan_rtable(List *rtable, List *rtable_names)
static char * get_rtable_name(int rtindex, deparse_context *context)
#define Anum_pg_constraint_conexclop
#define PG_RETURN_NAME(x)
#define FRAMEOPTION_END_VALUE
#define BTEqualStrategyNumber
#define Anum_pg_index_indoption
static void get_from_clause_item(Node *jtnode, Query *query, deparse_context *context)
#define Anum_pg_index_indexprs
List * list_delete_first(List *list)
Datum pg_get_userbyid(PG_FUNCTION_ARGS)
TupleDesc lookup_rowtype_tupdesc_copy(Oid type_id, int32 typmod)
#define TRIGGER_FOR_INSTEAD(type)
Oid get_opclass_input_type(Oid opclass)
Node * strip_implicit_coercions(Node *node)
#define DatumGetArrayTypeP(X)