109#define REL_ALIAS_PREFIX "r"
111#define ADD_REL_QUALIFIER(buf, varno) \
112 appendStringInfo((buf), "%s%d.", REL_ALIAS_PREFIX, (varno))
113#define SUBQUERY_REL_ALIAS_PREFIX "s"
114#define SUBQUERY_COL_ALIAS_PREFIX "c"
136 List **retrieved_attrs);
139 List **retrieved_attrs,
147 List **retrieved_attrs);
206 int *
relno,
int *colno);
208 int *
relno,
int *colno);
234 *remote_conds =
lappend(*remote_conds,
ri);
236 *local_conds =
lappend(*local_conds,
ri);
363 collation = var->varcollid;
369 collation = var->varcollid;
401 switch (
c->consttype)
474 collation =
c->constcollid;
518 if (
sr->refassgnexpr !=
NULL)
545 collation =
sr->refcollid;
592 collation =
fe->funccollid;
635 collation =
oe->opcollid;
694 collation = r->resultcollid;
742 collation =
e->resultcollid;
808 foreach(
lc,
ce->args)
868 collation =
ce->casecollid;
893 collation =
c->collation;
920 collation =
a->array_collid;
980 foreach(
lc,
agg->args)
1003 foreach(
lc,
agg->aggorder)
1045 collation =
agg->aggcollid;
1152 relids =
fpinfo->outerrel->relids;
1240 return fpinfo->grouped_tlist;
1288 bool has_final_sort,
bool has_limit,
bool is_subquery,
1289 List **retrieved_attrs,
List **params_list)
1321 quals =
ofpinfo->remote_conds;
1324 quals = remote_conds;
1413 fpinfo->attrs_used,
false, retrieved_attrs);
1465 List **retrieved_attrs)
1472 *retrieved_attrs =
NIL;
1479 for (
i = 1;
i <= tupdesc->
natts;
i++)
1713 elog(
ERROR,
"unsupported join type %d", jointype);
1734 List **retrieved_attrs,
1741 *retrieved_attrs =
NIL;
1754 *retrieved_attrs =
lappend_int(*retrieved_attrs,
i + 1);
1863 fpinfo->make_outerrel_subquery,
1896 fpinfo->make_innerrel_subquery,
2073 List *retrieved_attrs;
2089 &retrieved_attrs, params_list);
2107 for (
i = 1;
i <= ncols;
i++)
2208 char *orig_query,
List *target_attrs,
2234 foreach(
lc, target_attrs)
2271 List **retrieved_attrs)
2334 List *returningList,
2335 List **retrieved_attrs)
2402 NIL, returningList, retrieved_attrs);
2415 List *returningList,
2416 List **retrieved_attrs)
2424 NIL, returningList, retrieved_attrs);
2447 List *returningList,
2448 List **retrieved_attrs)
2485 rtindex, rel,
false,
2486 NIL, returningList, retrieved_attrs);
2497 List *returningList,
2498 List **retrieved_attrs)
2524 if (returningList !=
NIL)
2534 if (attrs_used !=
NULL)
2538 *retrieved_attrs =
NIL;
2614 List **retrieved_attrs)
2624 *retrieved_attrs =
NIL;
2627 for (
i = 0;
i < tupdesc->
natts;
i++)
2654 *retrieved_attrs =
lappend_int(*retrieved_attrs,
i + 1);
2688 elog(
ERROR,
"unexpected sampling method");
2717 restart_seqs ?
"RESTART" :
"CONTINUE");
2742 else if (varattno < 0)
2764 else if (varattno == 0)
2771 List *retrieved_attrs;
2817 char *colname =
NULL;
2844 if (colname ==
NULL)
2863 const char *nspname =
NULL;
2887 if (nspname ==
NULL)
2988 elog(
ERROR,
"unsupported expression type for deparse: %d",
3084 if (node->constisnull)
3090 node->consttypmod));
3176 node->consttypmod));
3290 Oid rettype = node->funcresulttype;
3342 elog(
ERROR,
"cache lookup failed for operator %u", node->
opno);
3344 oprkind =
form->oprkind;
3517 elog(
ERROR,
"cache lookup failed for operator %u", node->
opno);
3557 node->resulttypmod));
3575 node->resulttypmod));
3585 const char *op =
NULL;
3710 foreach(
lc, node->elements)
3720 if (node->elements ==
NIL)
3753 Assert(!node->aggvariadic);
3860 if (sortop == typentry->
lt_opr)
3862 else if (sortop == typentry->
gt_opr)
3874 elog(
ERROR,
"cache lookup failed for operator %u", sortop);
3993 foreach(
lcell, pathkeys)
4021 elog(
ERROR,
"could not find pathkey item to sort");
4023 em_expr =
em->em_expr;
4055 elog(
ERROR,
"missing operator %d(%u,%u) in opfamily %u",
4056 pathkey->pk_cmptype,
em->em_datatype,
em->em_datatype,
4066 pathkey->pk_nulls_first, context);
4085 if (
root->parse->limitCount)
4090 if (
root->parse->limitOffset)
4113 elog(
ERROR,
"cache lookup failed for function %u", funcid);
4119 const char *schemaname;
4164 else if (!expr ||
IsA(expr,
Var))
4174 return (
Node *) expr;
4213 if (
fpinfo->make_outerrel_subquery)
4230 if (
fpinfo->make_innerrel_subquery)
4247 int *
relno,
int *colno)
4279 elog(
ERROR,
"unexpected expression in subquery output");
Bitmapset * bms_make_singleton(int x)
int bms_next_member(const Bitmapset *a, int prevbit)
void bms_free(Bitmapset *a)
bool bms_is_member(int x, const Bitmapset *a)
Bitmapset * bms_add_member(Bitmapset *a, int x)
BMS_Membership bms_membership(const Bitmapset *a)
#define FORMAT_TYPE_TYPEMOD_GIVEN
#define FORMAT_TYPE_FORCE_QUALIFY
#define Assert(condition)
#define ESCAPE_STRING_SYNTAX
#define SQL_STR_DOUBLE(ch, escape_backslash)
#define OidIsValid(objectId)
bool contain_mutable_functions(Node *clause)
char * defGetString(DefElem *def)
static void deparseArrayCoerceExpr(ArrayCoerceExpr *node, deparse_expr_cxt *context)
static void deparseRangeTblRef(StringInfo buf, PlannerInfo *root, RelOptInfo *foreignrel, bool make_subquery, Index ignore_rel, List **ignore_conds, List **additional_conds, List **params_list)
static void deparseCaseExpr(CaseExpr *node, deparse_expr_cxt *context)
void deparseAnalyzeSizeSql(StringInfo buf, Relation rel)
static void deparseBoolExpr(BoolExpr *node, deparse_expr_cxt *context)
static void appendGroupByClause(List *tlist, deparse_expr_cxt *context)
static void deparseTargetList(StringInfo buf, RangeTblEntry *rte, Index rtindex, Relation rel, bool is_returning, Bitmapset *attrs_used, bool qualify_col, List **retrieved_attrs)
#define SUBQUERY_REL_ALIAS_PREFIX
static void deparseFromExpr(List *quals, deparse_expr_cxt *context)
static Node * deparseSortGroupClause(Index ref, List *tlist, bool force_colno, deparse_expr_cxt *context)
static void deparseLockingClause(deparse_expr_cxt *context)
const char * get_jointype_name(JoinType jointype)
void deparseAnalyzeInfoSql(StringInfo buf, Relation rel)
static void deparseAggref(Aggref *node, deparse_expr_cxt *context)
static void appendOrderBySuffix(Oid sortop, Oid sortcoltype, bool nulls_first, deparse_expr_cxt *context)
void deparseDirectDeleteSql(StringInfo buf, PlannerInfo *root, Index rtindex, Relation rel, RelOptInfo *foreignrel, List *remote_conds, List **params_list, List *returningList, List **retrieved_attrs)
void deparseDirectUpdateSql(StringInfo buf, PlannerInfo *root, Index rtindex, Relation rel, RelOptInfo *foreignrel, List *targetlist, List *targetAttrs, List *remote_conds, List **params_list, List *returningList, List **retrieved_attrs)
static void get_relation_column_alias_ids(Var *node, RelOptInfo *foreignrel, int *relno, int *colno)
static void printRemoteParam(int paramindex, Oid paramtype, int32 paramtypmod, deparse_expr_cxt *context)
static bool is_subquery_var(Var *node, RelOptInfo *foreignrel, int *relno, int *colno)
bool is_foreign_param(PlannerInfo *root, RelOptInfo *baserel, Expr *expr)
static void printRemotePlaceholder(Oid paramtype, int32 paramtypmod, deparse_expr_cxt *context)
static void appendOrderByClause(List *pathkeys, bool has_final_sort, deparse_expr_cxt *context)
static bool foreign_expr_walker(Node *node, foreign_glob_cxt *glob_cxt, foreign_loc_cxt *outer_cxt, foreign_loc_cxt *case_arg_cxt)
static void deparseColumnRef(StringInfo buf, int varno, int varattno, RangeTblEntry *rte, bool qualify_col)
static void deparseRelabelType(RelabelType *node, deparse_expr_cxt *context)
static void deparseNullTest(NullTest *node, deparse_expr_cxt *context)
static void deparseOperatorName(StringInfo buf, Form_pg_operator opform)
static void deparseOpExpr(OpExpr *node, deparse_expr_cxt *context)
static void deparseConst(Const *node, deparse_expr_cxt *context, int showtype)
static bool isPlainForeignVar(Expr *node, deparse_expr_cxt *context)
static void deparseDistinctExpr(DistinctExpr *node, deparse_expr_cxt *context)
void deparseSelectStmtForRel(StringInfo buf, PlannerInfo *root, RelOptInfo *rel, List *tlist, List *remote_conds, List *pathkeys, bool has_final_sort, bool has_limit, bool is_subquery, List **retrieved_attrs, List **params_list)
static void deparseFuncExpr(FuncExpr *node, deparse_expr_cxt *context)
void deparseStringLiteral(StringInfo buf, const char *val)
void rebuildInsertSql(StringInfo buf, Relation rel, char *orig_query, List *target_attrs, int values_end_len, int num_params, int num_rows)
static void deparseArrayExpr(ArrayExpr *node, deparse_expr_cxt *context)
void deparseInsertSql(StringInfo buf, RangeTblEntry *rte, Index rtindex, Relation rel, List *targetAttrs, bool doNothing, List *withCheckOptionList, List *returningList, List **retrieved_attrs, int *values_end_len)
static void deparseReturningList(StringInfo buf, RangeTblEntry *rte, Index rtindex, Relation rel, bool trig_after_row, List *withCheckOptionList, List *returningList, List **retrieved_attrs)
void deparseUpdateSql(StringInfo buf, RangeTblEntry *rte, Index rtindex, Relation rel, List *targetAttrs, List *withCheckOptionList, List *returningList, List **retrieved_attrs)
static void deparseVar(Var *node, deparse_expr_cxt *context)
static void appendFunctionName(Oid funcid, deparse_expr_cxt *context)
static void appendConditions(List *exprs, deparse_expr_cxt *context)
void deparseDeleteSql(StringInfo buf, RangeTblEntry *rte, Index rtindex, Relation rel, List *returningList, List **retrieved_attrs)
void deparseAnalyzeSql(StringInfo buf, Relation rel, PgFdwSamplingMethod sample_method, double sample_frac, List **retrieved_attrs)
static void deparseSubscriptingRef(SubscriptingRef *node, deparse_expr_cxt *context)
static void deparseRelation(StringInfo buf, Relation rel)
static void deparseExplicitTargetList(List *tlist, bool is_returning, List **retrieved_attrs, deparse_expr_cxt *context)
static char * deparse_type_name(Oid type_oid, int32 typemod)
#define ADD_REL_QUALIFIER(buf, varno)
static void appendLimitClause(deparse_expr_cxt *context)
static void deparseExpr(Expr *node, deparse_expr_cxt *context)
bool is_foreign_expr(PlannerInfo *root, RelOptInfo *baserel, Expr *expr)
static void deparseFromExprForRel(StringInfo buf, PlannerInfo *root, RelOptInfo *foreignrel, bool use_alias, Index ignore_rel, List **ignore_conds, List **additional_conds, List **params_list)
#define SUBQUERY_COL_ALIAS_PREFIX
void classifyConditions(PlannerInfo *root, RelOptInfo *baserel, List *input_conds, List **remote_conds, List **local_conds)
static void deparseScalarArrayOpExpr(ScalarArrayOpExpr *node, deparse_expr_cxt *context)
static void appendWhereClause(List *exprs, List *additional_conds, deparse_expr_cxt *context)
void deparseTruncateSql(StringInfo buf, List *rels, DropBehavior behavior, bool restart_seqs)
static void deparseSubqueryTargetList(deparse_expr_cxt *context)
bool is_foreign_pathkey(PlannerInfo *root, RelOptInfo *baserel, PathKey *pathkey)
static void deparseSelectSql(List *tlist, bool is_subquery, List **retrieved_attrs, deparse_expr_cxt *context)
static void deparseParam(Param *node, deparse_expr_cxt *context)
List * build_tlist_to_deparse(RelOptInfo *foreignrel)
static void appendAggOrderBy(List *orderList, List *targetList, deparse_expr_cxt *context)
bool equal(const void *a, const void *b)
char * OidOutputFunctionCall(Oid functionId, Datum val)
ForeignTable * GetForeignTable(Oid relid)
List * GetForeignColumnOptions(Oid relid, AttrNumber attnum)
#define HeapTupleIsValid(tuple)
static void * GETSTRUCT(const HeapTupleData *tuple)
List * lappend(List *list, void *datum)
List * list_concat(List *list1, const List *list2)
List * lappend_int(List *list, int datum)
void list_free(List *list)
void list_free_deep(List *list)
bool type_is_rowtype(Oid typid)
Oid get_opfamily_member_for_cmptype(Oid opfamily, Oid lefttype, Oid righttype, CompareType cmptype)
void getTypeOutputInfo(Oid type, Oid *typOutput, bool *typIsVarlena)
char * get_attname(Oid relid, AttrNumber attnum, bool missing_ok)
char * get_namespace_name(Oid nspid)
void pfree(void *pointer)
Oid exprType(const Node *expr)
bool exprIsLengthCoercion(const Node *expr, int32 *coercedTypmod)
Node * strip_implicit_coercions(Node *node)
#define IsA(nodeptr, _type_)
#define castNode(_type_, nodeptr)
#define PVC_RECURSE_PLACEHOLDERS
#define IS_SIMPLE_REL(rel)
#define planner_rt_fetch(rti, root)
#define IS_UPPER_REL(rel)
#define lfirst_node(type, lc)
static int list_length(const List *l)
#define forboth(cell1, list1, cell2, list2)
static ListCell * list_head(const List *l)
static ListCell * lnext(const List *l, const ListCell *c)
static const struct lconv_member_info table[]
END_CATALOG_STRUCT typedef FormData_pg_operator * Form_pg_operator
END_CATALOG_STRUCT typedef FormData_pg_proc * Form_pg_proc
static char buf[DEFAULT_XLOG_SEG_SIZE]
static Oid DatumGetObjectId(Datum X)
static Datum ObjectIdGetDatum(Oid X)
void reset_transmission_modes(int nestlevel)
int set_transmission_modes(void)
EquivalenceMember * find_em_for_rel_target(PlannerInfo *root, EquivalenceClass *ec, RelOptInfo *rel)
EquivalenceMember * find_em_for_rel(PlannerInfo *root, EquivalenceClass *ec, RelOptInfo *rel)
bool is_shippable(Oid objectId, Oid classId, PgFdwRelationInfo *fpinfo)
bool is_builtin(Oid objectId)
@ ANALYZE_SAMPLE_BERNOULLI
PlanRowMark * get_plan_rowmark(List *rowmarks, Index rtindex)
#define IS_SPECIAL_VARNO(varno)
#define RelationGetRelid(relation)
#define RelationGetDescr(relation)
#define RelationGetRelationName(relation)
#define RelationGetNamespace(relation)
const char * quote_identifier(const char *ident)
void appendStringInfo(StringInfo str, const char *fmt,...)
void appendBinaryStringInfo(StringInfo str, const void *data, int datalen)
void appendStringInfoString(StringInfo str, const char *s)
void appendStringInfoChar(StringInfo str, char ch)
void initStringInfo(StringInfo str)
NullTestType nulltesttype
LockClauseStrength strength
struct PathTarget * reltarget
bool trig_update_after_row
bool trig_insert_after_row
bool trig_delete_after_row
#define FirstLowInvalidHeapAttributeNumber
#define TableOidAttributeNumber
#define SelfItemPointerAttributeNumber
void ReleaseSysCache(HeapTuple tuple)
HeapTuple SearchSysCache1(SysCacheIdentifier cacheId, Datum key1)
void table_close(Relation relation, LOCKMODE lockmode)
Relation table_open(Oid relationId, LOCKMODE lockmode)
TargetEntry * get_sortgroupref_tle(Index sortref, List *targetList)
List * add_to_flat_tlist(List *tlist, List *exprs)
#define FirstNormalObjectId
static FormData_pg_attribute * TupleDescAttr(TupleDesc tupdesc, int i)
static CompactAttribute * TupleDescCompactAttr(TupleDesc tupdesc, int i)
TypeCacheEntry * lookup_type_cache(Oid type_id, int flags)
List * pull_var_clause(Node *node, int flags)
void pull_varattnos(Node *node, Index varno, Bitmapset **varattnos)