mirror of
https://github.com/simtactics/niotso.git
synced 2025-03-29 06:07:45 +00:00
98 lines
2.9 KiB
C
98 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 */
|