PostgreSQL Source Code  git master
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
fdwapi.h File Reference
#include "access/parallel.h"
#include "nodes/execnodes.h"
#include "nodes/relation.h"
Include dependency graph for fdwapi.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  FdwRoutine
 

Typedefs

typedef void(* GetForeignRelSize_function )(PlannerInfo *root, RelOptInfo *baserel, Oid foreigntableid)
 
typedef void(* GetForeignPaths_function )(PlannerInfo *root, RelOptInfo *baserel, Oid foreigntableid)
 
typedef ForeignScan *(* GetForeignPlan_function )(PlannerInfo *root, RelOptInfo *baserel, Oid foreigntableid, ForeignPath *best_path, List *tlist, List *scan_clauses, Plan *outer_plan)
 
typedef void(* BeginForeignScan_function )(ForeignScanState *node, int eflags)
 
typedef TupleTableSlot *(* IterateForeignScan_function )(ForeignScanState *node)
 
typedef bool(* RecheckForeignScan_function )(ForeignScanState *node, TupleTableSlot *slot)
 
typedef void(* ReScanForeignScan_function )(ForeignScanState *node)
 
typedef void(* EndForeignScan_function )(ForeignScanState *node)
 
typedef void(* GetForeignJoinPaths_function )(PlannerInfo *root, RelOptInfo *joinrel, RelOptInfo *outerrel, RelOptInfo *innerrel, JoinType jointype, JoinPathExtraData *extra)
 
typedef void(* GetForeignUpperPaths_function )(PlannerInfo *root, UpperRelationKind stage, RelOptInfo *input_rel, RelOptInfo *output_rel)
 
typedef void(* AddForeignUpdateTargets_function )(Query *parsetree, RangeTblEntry *target_rte, Relation target_relation)
 
typedef List *(* PlanForeignModify_function )(PlannerInfo *root, ModifyTable *plan, Index resultRelation, int subplan_index)
 
typedef void(* BeginForeignModify_function )(ModifyTableState *mtstate, ResultRelInfo *rinfo, List *fdw_private, int subplan_index, int eflags)
 
typedef TupleTableSlot *(* ExecForeignInsert_function )(EState *estate, ResultRelInfo *rinfo, TupleTableSlot *slot, TupleTableSlot *planSlot)
 
typedef TupleTableSlot *(* ExecForeignUpdate_function )(EState *estate, ResultRelInfo *rinfo, TupleTableSlot *slot, TupleTableSlot *planSlot)
 
typedef TupleTableSlot *(* ExecForeignDelete_function )(EState *estate, ResultRelInfo *rinfo, TupleTableSlot *slot, TupleTableSlot *planSlot)
 
typedef void(* EndForeignModify_function )(EState *estate, ResultRelInfo *rinfo)
 
typedef int(* IsForeignRelUpdatable_function )(Relation rel)
 
typedef bool(* PlanDirectModify_function )(PlannerInfo *root, ModifyTable *plan, Index resultRelation, int subplan_index)
 
typedef void(* BeginDirectModify_function )(ForeignScanState *node, int eflags)
 
typedef TupleTableSlot *(* IterateDirectModify_function )(ForeignScanState *node)
 
typedef void(* EndDirectModify_function )(ForeignScanState *node)
 
typedef RowMarkType(* GetForeignRowMarkType_function )(RangeTblEntry *rte, LockClauseStrength strength)
 
typedef HeapTuple(* RefetchForeignRow_function )(EState *estate, ExecRowMark *erm, Datum rowid, bool *updated)
 
typedef void(* ExplainForeignScan_function )(ForeignScanState *node, struct ExplainState *es)
 
typedef void(* ExplainForeignModify_function )(ModifyTableState *mtstate, ResultRelInfo *rinfo, List *fdw_private, int subplan_index, struct ExplainState *es)
 
typedef void(* ExplainDirectModify_function )(ForeignScanState *node, struct ExplainState *es)
 
typedef int(* AcquireSampleRowsFunc )(Relation relation, int elevel, HeapTuple *rows, int targrows, double *totalrows, double *totaldeadrows)
 
typedef bool(* AnalyzeForeignTable_function )(Relation relation, AcquireSampleRowsFunc *func, BlockNumber *totalpages)
 
typedef List *(* ImportForeignSchema_function )(ImportForeignSchemaStmt *stmt, Oid serverOid)
 
typedef Size(* EstimateDSMForeignScan_function )(ForeignScanState *node, ParallelContext *pcxt)
 
typedef void(* InitializeDSMForeignScan_function )(ForeignScanState *node, ParallelContext *pcxt, void *coordinate)
 
typedef void(* InitializeWorkerForeignScan_function )(ForeignScanState *node, shm_toc *toc, void *coordinate)
 
typedef void(* ShutdownForeignScan_function )(ForeignScanState *node)
 
typedef bool(* IsForeignScanParallelSafe_function )(PlannerInfo *root, RelOptInfo *rel, RangeTblEntry *rte)
 
typedef struct FdwRoutine FdwRoutine
 

Functions

FdwRoutineGetFdwRoutine (Oid fdwhandler)
 
Oid GetForeignServerIdByRelId (Oid relid)
 
FdwRoutineGetFdwRoutineByServerId (Oid serverid)
 
FdwRoutineGetFdwRoutineByRelId (Oid relid)
 
FdwRoutineGetFdwRoutineForRelation (Relation relation, bool makecopy)
 
bool IsImportableForeignTable (const char *tablename, ImportForeignSchemaStmt *stmt)
 
PathGetExistingLocalJoinPath (RelOptInfo *joinrel)
 

Typedef Documentation

typedef int(* AcquireSampleRowsFunc)(Relation relation, int elevel, HeapTuple *rows, int targrows, double *totalrows, double *totaldeadrows)

Definition at line 134 of file fdwapi.h.

typedef void(* AddForeignUpdateTargets_function)(Query *parsetree, RangeTblEntry *target_rte, Relation target_relation)

Definition at line 67 of file fdwapi.h.

typedef bool(* AnalyzeForeignTable_function)(Relation relation, AcquireSampleRowsFunc *func, BlockNumber *totalpages)

Definition at line 139 of file fdwapi.h.

typedef void(* BeginDirectModify_function)(ForeignScanState *node, int eflags)

Definition at line 107 of file fdwapi.h.

typedef void(* BeginForeignModify_function)(ModifyTableState *mtstate, ResultRelInfo *rinfo, List *fdw_private, int subplan_index, int eflags)

Definition at line 76 of file fdwapi.h.

typedef void(* BeginForeignScan_function)(ForeignScanState *node, int eflags)

Definition at line 43 of file fdwapi.h.

typedef void(* EndDirectModify_function)(ForeignScanState *node)

Definition at line 112 of file fdwapi.h.

typedef void(* EndForeignModify_function)(EState *estate, ResultRelInfo *rinfo)

Definition at line 97 of file fdwapi.h.

typedef void(* EndForeignScan_function)(ForeignScanState *node)

Definition at line 53 of file fdwapi.h.

typedef Size(* EstimateDSMForeignScan_function)(ForeignScanState *node, ParallelContext *pcxt)

Definition at line 146 of file fdwapi.h.

typedef TupleTableSlot*(* ExecForeignDelete_function)(EState *estate, ResultRelInfo *rinfo, TupleTableSlot *slot, TupleTableSlot *planSlot)

Definition at line 92 of file fdwapi.h.

typedef TupleTableSlot*(* ExecForeignInsert_function)(EState *estate, ResultRelInfo *rinfo, TupleTableSlot *slot, TupleTableSlot *planSlot)

Definition at line 82 of file fdwapi.h.

typedef TupleTableSlot*(* ExecForeignUpdate_function)(EState *estate, ResultRelInfo *rinfo, TupleTableSlot *slot, TupleTableSlot *planSlot)

Definition at line 87 of file fdwapi.h.

typedef void(* ExplainDirectModify_function)(ForeignScanState *node, struct ExplainState *es)

Definition at line 131 of file fdwapi.h.

typedef void(* ExplainForeignModify_function)(ModifyTableState *mtstate, ResultRelInfo *rinfo, List *fdw_private, int subplan_index, struct ExplainState *es)

Definition at line 125 of file fdwapi.h.

typedef void(* ExplainForeignScan_function)(ForeignScanState *node, struct ExplainState *es)

Definition at line 122 of file fdwapi.h.

typedef void(* GetForeignJoinPaths_function)(PlannerInfo *root, RelOptInfo *joinrel, RelOptInfo *outerrel, RelOptInfo *innerrel, JoinType jointype, JoinPathExtraData *extra)

Definition at line 55 of file fdwapi.h.

typedef void(* GetForeignPaths_function)(PlannerInfo *root, RelOptInfo *baserel, Oid foreigntableid)

Definition at line 31 of file fdwapi.h.

typedef ForeignScan*(* GetForeignPlan_function)(PlannerInfo *root, RelOptInfo *baserel, Oid foreigntableid, ForeignPath *best_path, List *tlist, List *scan_clauses, Plan *outer_plan)

Definition at line 35 of file fdwapi.h.

typedef void(* GetForeignRelSize_function)(PlannerInfo *root, RelOptInfo *baserel, Oid foreigntableid)

Definition at line 27 of file fdwapi.h.

typedef RowMarkType(* GetForeignRowMarkType_function)(RangeTblEntry *rte, LockClauseStrength strength)

Definition at line 114 of file fdwapi.h.

typedef void(* GetForeignUpperPaths_function)(PlannerInfo *root, UpperRelationKind stage, RelOptInfo *input_rel, RelOptInfo *output_rel)

Definition at line 62 of file fdwapi.h.

typedef List*(* ImportForeignSchema_function)(ImportForeignSchemaStmt *stmt, Oid serverOid)

Definition at line 143 of file fdwapi.h.

typedef void(* InitializeDSMForeignScan_function)(ForeignScanState *node, ParallelContext *pcxt, void *coordinate)

Definition at line 148 of file fdwapi.h.

typedef void(* InitializeWorkerForeignScan_function)(ForeignScanState *node, shm_toc *toc, void *coordinate)

Definition at line 151 of file fdwapi.h.

typedef int(* IsForeignRelUpdatable_function)(Relation rel)

Definition at line 100 of file fdwapi.h.

typedef bool(* IsForeignScanParallelSafe_function)(PlannerInfo *root, RelOptInfo *rel, RangeTblEntry *rte)

Definition at line 155 of file fdwapi.h.

typedef TupleTableSlot*(* IterateDirectModify_function)(ForeignScanState *node)

Definition at line 110 of file fdwapi.h.

typedef TupleTableSlot*(* IterateForeignScan_function)(ForeignScanState *node)

Definition at line 46 of file fdwapi.h.

typedef bool(* PlanDirectModify_function)(PlannerInfo *root, ModifyTable *plan, Index resultRelation, int subplan_index)

Definition at line 102 of file fdwapi.h.

typedef List*(* PlanForeignModify_function)(PlannerInfo *root, ModifyTable *plan, Index resultRelation, int subplan_index)

Definition at line 71 of file fdwapi.h.

typedef bool(* RecheckForeignScan_function)(ForeignScanState *node, TupleTableSlot *slot)

Definition at line 48 of file fdwapi.h.

typedef HeapTuple(* RefetchForeignRow_function)(EState *estate, ExecRowMark *erm, Datum rowid, bool *updated)

Definition at line 117 of file fdwapi.h.

typedef void(* ReScanForeignScan_function)(ForeignScanState *node)

Definition at line 51 of file fdwapi.h.

typedef void(* ShutdownForeignScan_function)(ForeignScanState *node)

Definition at line 154 of file fdwapi.h.

Function Documentation

Path* GetExistingLocalJoinPath ( RelOptInfo joinrel)

Definition at line 716 of file foreign.c.

References Assert, ForeignPath::fdw_outerpath, JoinPath::innerjoinpath, IS_JOIN_REL, IsA, lfirst, makeNode, NULL, JoinPath::outerjoinpath, Path::param_info, Path::parent, ForeignPath::path, RelOptInfo::pathlist, Path::pathtype, T_HashJoin, T_MergeJoin, and T_NestLoop.

Referenced by postgresGetForeignJoinPaths().

717 {
718  ListCell *lc;
719 
720  Assert(IS_JOIN_REL(joinrel));
721 
722  foreach(lc, joinrel->pathlist)
723  {
724  Path *path = (Path *) lfirst(lc);
725  JoinPath *joinpath = NULL;
726 
727  /* Skip parameterized paths. */
728  if (path->param_info != NULL)
729  continue;
730 
731  switch (path->pathtype)
732  {
733  case T_HashJoin:
734  {
735  HashPath *hash_path = makeNode(HashPath);
736 
737  memcpy(hash_path, path, sizeof(HashPath));
738  joinpath = (JoinPath *) hash_path;
739  }
740  break;
741 
742  case T_NestLoop:
743  {
744  NestPath *nest_path = makeNode(NestPath);
745 
746  memcpy(nest_path, path, sizeof(NestPath));
747  joinpath = (JoinPath *) nest_path;
748  }
749  break;
750 
751  case T_MergeJoin:
752  {
753  MergePath *merge_path = makeNode(MergePath);
754 
755  memcpy(merge_path, path, sizeof(MergePath));
756  joinpath = (JoinPath *) merge_path;
757  }
758  break;
759 
760  default:
761 
762  /*
763  * Just skip anything else. We don't know if corresponding
764  * plan would build the output row from whole-row references
765  * of base relations and execute the EPQ checks.
766  */
767  break;
768  }
769 
770  /* This path isn't good for us, check next. */
771  if (!joinpath)
772  continue;
773 
774  /*
775  * If either inner or outer path is a ForeignPath corresponding to a
776  * pushed down join, replace it with the fdw_outerpath, so that we
777  * maintain path for EPQ checks built entirely of local join
778  * strategies.
779  */
780  if (IsA(joinpath->outerjoinpath, ForeignPath))
781  {
782  ForeignPath *foreign_path;
783 
784  foreign_path = (ForeignPath *) joinpath->outerjoinpath;
785  if (IS_JOIN_REL(foreign_path->path.parent))
786  joinpath->outerjoinpath = foreign_path->fdw_outerpath;
787  }
788 
789  if (IsA(joinpath->innerjoinpath, ForeignPath))
790  {
791  ForeignPath *foreign_path;
792 
793  foreign_path = (ForeignPath *) joinpath->innerjoinpath;
794  if (IS_JOIN_REL(foreign_path->path.parent))
795  joinpath->innerjoinpath = foreign_path->fdw_outerpath;
796  }
797 
798  return (Path *) joinpath;
799  }
800  return NULL;
801 }
#define IsA(nodeptr, _type_)
Definition: nodes.h:560
Path * fdw_outerpath
Definition: relation.h:1130
Path * innerjoinpath
Definition: relation.h:1296
#define IS_JOIN_REL(rel)
Definition: relation.h:509
ParamPathInfo * param_info
Definition: relation.h:955
NodeTag pathtype
Definition: relation.h:950
RelOptInfo * parent
Definition: relation.h:952
Path * outerjoinpath
Definition: relation.h:1295
#define makeNode(_type_)
Definition: nodes.h:557
#define NULL
Definition: c.h:229
#define Assert(condition)
Definition: c.h:675
#define lfirst(lc)
Definition: pg_list.h:106
List * pathlist
Definition: relation.h:538
Definition: relation.h:946
FdwRoutine* GetFdwRoutine ( Oid  fdwhandler)

Definition at line 287 of file foreign.c.

References DatumGetPointer, elog, ERROR, IsA, NULL, and OidFunctionCall0.

Referenced by GetFdwRoutineByServerId(), and ImportForeignSchema().

288 {
289  Datum datum;
290  FdwRoutine *routine;
291 
292  datum = OidFunctionCall0(fdwhandler);
293  routine = (FdwRoutine *) DatumGetPointer(datum);
294 
295  if (routine == NULL || !IsA(routine, FdwRoutine))
296  elog(ERROR, "foreign-data wrapper handler function %u did not return an FdwRoutine struct",
297  fdwhandler);
298 
299  return routine;
300 }
#define IsA(nodeptr, _type_)
Definition: nodes.h:560
#define ERROR
Definition: elog.h:43
uintptr_t Datum
Definition: postgres.h:372
#define OidFunctionCall0(functionId)
Definition: fmgr.h:620
#define NULL
Definition: c.h:229
#define DatumGetPointer(X)
Definition: postgres.h:555
#define elog
Definition: elog.h:219
FdwRoutine* GetFdwRoutineByRelId ( Oid  relid)

Definition at line 372 of file foreign.c.

References GetFdwRoutineByServerId(), and GetForeignServerIdByRelId().

Referenced by GetFdwRoutineForRelation(), make_modifytable(), and select_rowmark_type().

373 {
374  Oid serverid;
375 
376  /* Get server OID for the foreign table. */
377  serverid = GetForeignServerIdByRelId(relid);
378 
379  /* Now retrieve server's FdwRoutine struct. */
380  return GetFdwRoutineByServerId(serverid);
381 }
FdwRoutine * GetFdwRoutineByServerId(Oid serverid)
Definition: foreign.c:330
unsigned int Oid
Definition: postgres_ext.h:31
Oid GetForeignServerIdByRelId(Oid relid)
Definition: foreign.c:308
FdwRoutine* GetFdwRoutineByServerId ( Oid  serverid)

Definition at line 330 of file foreign.c.

References elog, ereport, errcode(), errmsg(), ERROR, FOREIGNDATAWRAPPEROID, FOREIGNSERVEROID, GetFdwRoutine(), GETSTRUCT, HeapTupleIsValid, NameStr, ObjectIdGetDatum, OidIsValid, ReleaseSysCache(), and SearchSysCache1.

Referenced by ExecInitForeignScan(), and GetFdwRoutineByRelId().

331 {
332  HeapTuple tp;
334  Form_pg_foreign_server serverform;
335  Oid fdwid;
336  Oid fdwhandler;
337 
338  /* Get foreign-data wrapper OID for the server. */
340  if (!HeapTupleIsValid(tp))
341  elog(ERROR, "cache lookup failed for foreign server %u", serverid);
342  serverform = (Form_pg_foreign_server) GETSTRUCT(tp);
343  fdwid = serverform->srvfdw;
344  ReleaseSysCache(tp);
345 
346  /* Get handler function OID for the FDW. */
348  if (!HeapTupleIsValid(tp))
349  elog(ERROR, "cache lookup failed for foreign-data wrapper %u", fdwid);
350  fdwform = (Form_pg_foreign_data_wrapper) GETSTRUCT(tp);
351  fdwhandler = fdwform->fdwhandler;
352 
353  /* Complain if FDW has been set to NO HANDLER. */
354  if (!OidIsValid(fdwhandler))
355  ereport(ERROR,
356  (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
357  errmsg("foreign-data wrapper \"%s\" has no handler",
358  NameStr(fdwform->fdwname))));
359 
360  ReleaseSysCache(tp);
361 
362  /* And finally, call the handler function. */
363  return GetFdwRoutine(fdwhandler);
364 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
int errcode(int sqlerrcode)
Definition: elog.c:575
unsigned int Oid
Definition: postgres_ext.h:31
#define OidIsValid(objectId)
Definition: c.h:538
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:152
FdwRoutine * GetFdwRoutine(Oid fdwhandler)
Definition: foreign.c:287
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
#define ERROR
Definition: elog.h:43
#define ereport(elevel, rest)
Definition: elog.h:122
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1116
FormData_pg_foreign_server * Form_pg_foreign_server
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
FormData_pg_foreign_data_wrapper * Form_pg_foreign_data_wrapper
int errmsg(const char *fmt,...)
Definition: elog.c:797
#define NameStr(name)
Definition: c.h:499
#define elog
Definition: elog.h:219
FdwRoutine* GetFdwRoutineForRelation ( Relation  relation,
bool  makecopy 
)

Definition at line 395 of file foreign.c.

References CacheMemoryContext, GetFdwRoutineByRelId(), MemoryContextAlloc(), NULL, palloc(), RelationData::rd_fdwroutine, and RelationGetRelid.

Referenced by acquire_inherited_sample_rows(), analyze_rel(), CheckValidResultRel(), CheckValidRowMarkRel(), EvalPlanQualFetchRowMarks(), ExecInitForeignScan(), ExecLockRows(), get_relation_info(), InitResultRelInfo(), relation_is_updatable(), and rewriteTargetListUD().

396 {
397  FdwRoutine *fdwroutine;
398  FdwRoutine *cfdwroutine;
399 
400  if (relation->rd_fdwroutine == NULL)
401  {
402  /* Get the info by consulting the catalogs and the FDW code */
403  fdwroutine = GetFdwRoutineByRelId(RelationGetRelid(relation));
404 
405  /* Save the data for later reuse in CacheMemoryContext */
407  sizeof(FdwRoutine));
408  memcpy(cfdwroutine, fdwroutine, sizeof(FdwRoutine));
409  relation->rd_fdwroutine = cfdwroutine;
410 
411  /* Give back the locally palloc'd copy regardless of makecopy */
412  return fdwroutine;
413  }
414 
415  /* We have valid cached data --- does the caller want a copy? */
416  if (makecopy)
417  {
418  fdwroutine = (FdwRoutine *) palloc(sizeof(FdwRoutine));
419  memcpy(fdwroutine, relation->rd_fdwroutine, sizeof(FdwRoutine));
420  return fdwroutine;
421  }
422 
423  /* Only a short-lived reference is needed, so just hand back cached copy */
424  return relation->rd_fdwroutine;
425 }
struct FdwRoutine * rd_fdwroutine
Definition: rel.h:204
FdwRoutine * GetFdwRoutineByRelId(Oid relid)
Definition: foreign.c:372
#define NULL
Definition: c.h:229
void * palloc(Size size)
Definition: mcxt.c:849
void * MemoryContextAlloc(MemoryContext context, Size size)
Definition: mcxt.c:707
#define RelationGetRelid(relation)
Definition: rel.h:417
MemoryContext CacheMemoryContext
Definition: mcxt.c:46
Oid GetForeignServerIdByRelId ( Oid  relid)

Definition at line 308 of file foreign.c.

References elog, ERROR, FOREIGNTABLEREL, GETSTRUCT, HeapTupleIsValid, ObjectIdGetDatum, ReleaseSysCache(), and SearchSysCache1.

Referenced by get_relation_info(), and GetFdwRoutineByRelId().

309 {
310  HeapTuple tp;
311  Form_pg_foreign_table tableform;
312  Oid serverid;
313 
315  if (!HeapTupleIsValid(tp))
316  elog(ERROR, "cache lookup failed for foreign table %u", relid);
317  tableform = (Form_pg_foreign_table) GETSTRUCT(tp);
318  serverid = tableform->ftserver;
319  ReleaseSysCache(tp);
320 
321  return serverid;
322 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:656
unsigned int Oid
Definition: postgres_ext.h:31
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:152
FormData_pg_foreign_table * Form_pg_foreign_table
#define ObjectIdGetDatum(X)
Definition: postgres.h:513
#define ERROR
Definition: elog.h:43
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1116
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
#define elog
Definition: elog.h:219
bool IsImportableForeignTable ( const char *  tablename,
ImportForeignSchemaStmt stmt 
)

Definition at line 435 of file foreign.c.

References FDW_IMPORT_SCHEMA_ALL, FDW_IMPORT_SCHEMA_EXCEPT, FDW_IMPORT_SCHEMA_LIMIT_TO, lfirst, ImportForeignSchemaStmt::list_type, RangeVar::relname, and ImportForeignSchemaStmt::table_list.

Referenced by ImportForeignSchema().

437 {
438  ListCell *lc;
439 
440  switch (stmt->list_type)
441  {
443  return true;
444 
446  foreach(lc, stmt->table_list)
447  {
448  RangeVar *rv = (RangeVar *) lfirst(lc);
449 
450  if (strcmp(tablename, rv->relname) == 0)
451  return true;
452  }
453  return false;
454 
456  foreach(lc, stmt->table_list)
457  {
458  RangeVar *rv = (RangeVar *) lfirst(lc);
459 
460  if (strcmp(tablename, rv->relname) == 0)
461  return false;
462  }
463  return true;
464  }
465  return false; /* shouldn't get here */
466 }
char * relname
Definition: primnodes.h:68
#define lfirst(lc)
Definition: pg_list.h:106
ImportForeignSchemaType list_type
Definition: parsenodes.h:2264