mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-10-02 04:51:17 +02:00
99 lines
2.9 KiB
C
99 lines
2.9 KiB
C
|
/*-------------------------------------------------------------------------
|
||
|
*
|
||
|
* fdwapi.h
|
||
|
* API for foreign-data wrappers
|
||
|
*
|
||
|
* Copyright (c) 2010-2011, PostgreSQL Global Development Group
|
||
|
*
|
||
|
* src/include/foreign/fdwapi.h
|
||
|
*
|
||
|
*-------------------------------------------------------------------------
|
||
|
*/
|
||
|
#ifndef FDWAPI_H
|
||
|
#define FDWAPI_H
|
||
|
|
||
|
#include "nodes/execnodes.h"
|
||
|
#include "nodes/relation.h"
|
||
|
|
||
|
/* To avoid including explain.h here, reference ExplainState thus: */
|
||
|
struct ExplainState;
|
||
|
|
||
|
|
||
|
/*
|
||
|
* FdwPlan is the information returned to the planner by PlanForeignScan.
|
||
|
*/
|
||
|
typedef struct FdwPlan
|
||
|
{
|
||
|
NodeTag type;
|
||
|
|
||
|
/*
|
||
|
* Cost estimation info. The startup_cost is time before retrieving
|
||
|
* the first row, so it should include costs of connecting to the remote
|
||
|
* host, sending over the query, etc. Note that PlanForeignScan also
|
||
|
* ought to set baserel->rows and baserel->width if it can produce any
|
||
|
* usable estimates of those values.
|
||
|
*/
|
||
|
Cost startup_cost; /* cost expended before fetching any tuples */
|
||
|
Cost total_cost; /* total cost (assuming all tuples fetched) */
|
||
|
|
||
|
/*
|
||
|
* FDW private data, which will be available at execution time.
|
||
|
*
|
||
|
* Note that everything in this list must be copiable by copyObject().
|
||
|
* One way to store an arbitrary blob of bytes is to represent it as a
|
||
|
* bytea Const. Usually, though, you'll be better off choosing a
|
||
|
* representation that can be dumped usefully by nodeToString().
|
||
|
*/
|
||
|
List *fdw_private;
|
||
|
} FdwPlan;
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Callback function signatures --- see fdwhandler.sgml for more info.
|
||
|
*/
|
||
|
|
||
|
typedef FdwPlan * (*PlanForeignScan_function) (Oid foreigntableid,
|
||
|
PlannerInfo *root,
|
||
|
RelOptInfo *baserel);
|
||
|
|
||
|
typedef void (*ExplainForeignScan_function) (ForeignScanState *node,
|
||
|
struct ExplainState *es);
|
||
|
|
||
|
typedef void (*BeginForeignScan_function) (ForeignScanState *node,
|
||
|
int eflags);
|
||
|
|
||
|
typedef TupleTableSlot * (*IterateForeignScan_function) (ForeignScanState *node);
|
||
|
|
||
|
typedef void (*ReScanForeignScan_function) (ForeignScanState *node);
|
||
|
|
||
|
typedef void (*EndForeignScan_function) (ForeignScanState *node);
|
||
|
|
||
|
|
||
|
/*
|
||
|
* FdwRoutine is the struct returned by a foreign-data wrapper's handler
|
||
|
* function. It provides pointers to the callback functions needed by the
|
||
|
* planner and executor.
|
||
|
*
|
||
|
* Currently, all functions must be supplied. Later there may be optional
|
||
|
* additions. It's recommended that the handler initialize the struct with
|
||
|
* makeNode(FdwRoutine) so that all fields are set to zero.
|
||
|
*/
|
||
|
typedef struct FdwRoutine
|
||
|
{
|
||
|
NodeTag type;
|
||
|
|
||
|
PlanForeignScan_function PlanForeignScan;
|
||
|
ExplainForeignScan_function ExplainForeignScan;
|
||
|
BeginForeignScan_function BeginForeignScan;
|
||
|
IterateForeignScan_function IterateForeignScan;
|
||
|
ReScanForeignScan_function ReScanForeignScan;
|
||
|
EndForeignScan_function EndForeignScan;
|
||
|
} FdwRoutine;
|
||
|
|
||
|
|
||
|
/* Functions in foreign/foreign.c */
|
||
|
extern FdwRoutine *GetFdwRoutine(Oid fdwhandler);
|
||
|
extern FdwRoutine *GetFdwRoutineByRelId(Oid relid);
|
||
|
|
||
|
#endif /* FDWAPI_H */
|