Skip to content
Snippets Groups Projects
Select Git revision
  • benchmark-tools
  • postgres-lambda
  • master default
  • REL9_4_25
  • REL9_5_20
  • REL9_6_16
  • REL_10_11
  • REL_11_6
  • REL_12_1
  • REL_12_0
  • REL_12_RC1
  • REL_12_BETA4
  • REL9_4_24
  • REL9_5_19
  • REL9_6_15
  • REL_10_10
  • REL_11_5
  • REL_12_BETA3
  • REL9_4_23
  • REL9_5_18
  • REL9_6_14
  • REL_10_9
  • REL_11_4
23 results

postgres_fdw.h

Blame
  • postgres_fdw.h 3.68 KiB
    /*-------------------------------------------------------------------------
     *
     * postgres_fdw.h
     *		  Foreign-data wrapper for remote PostgreSQL servers
     *
     * Portions Copyright (c) 2012-2016, PostgreSQL Global Development Group
     *
     * IDENTIFICATION
     *		  contrib/postgres_fdw/postgres_fdw.h
     *
     *-------------------------------------------------------------------------
     */
    #ifndef POSTGRES_FDW_H
    #define POSTGRES_FDW_H
    
    #include "foreign/foreign.h"
    #include "lib/stringinfo.h"
    #include "nodes/relation.h"
    #include "utils/relcache.h"
    
    #include "libpq-fe.h"
    
    /*
     * FDW-specific planner information kept in RelOptInfo.fdw_private for a
     * foreign table.  This information is collected by postgresGetForeignRelSize.
     */
    typedef struct PgFdwRelationInfo
    {
    	/* baserestrictinfo clauses, broken down into safe and unsafe subsets. */
    	List	   *remote_conds;
    	List	   *local_conds;
    
    	/* Bitmap of attr numbers we need to fetch from the remote server. */
    	Bitmapset  *attrs_used;
    
    	/* Cost and selectivity of local_conds. */
    	QualCost	local_conds_cost;
    	Selectivity local_conds_sel;
    
    	/* Estimated size and cost for a scan with baserestrictinfo quals. */
    	double		rows;
    	int			width;
    	Cost		startup_cost;
    	Cost		total_cost;
    
    	/* Options extracted from catalogs. */
    	bool		use_remote_estimate;
    	Cost		fdw_startup_cost;
    	Cost		fdw_tuple_cost;
    	List	   *shippable_extensions;	/* OIDs of whitelisted extensions */
    
    	/* Cached catalog information. */
    	ForeignTable *table;
    	ForeignServer *server;
    	UserMapping *user;			/* only set in use_remote_estimate mode */
    
    	int			fetch_size;      /* fetch size for this remote table */
    } PgFdwRelationInfo;
    
    /* in postgres_fdw.c */
    extern int	set_transmission_modes(void);
    extern void reset_transmission_modes(int nestlevel);
    
    /* in connection.c */
    extern PGconn *GetConnection(UserMapping *user, bool will_prep_stmt);
    extern void ReleaseConnection(PGconn *conn);
    extern unsigned int GetCursorNumber(PGconn *conn);
    extern unsigned int GetPrepStmtNumber(PGconn *conn);
    extern void pgfdw_report_error(int elevel, PGresult *res, PGconn *conn,
    				   bool clear, const char *sql);
    
    /* in option.c */
    extern int ExtractConnectionOptions(List *defelems,
    						 const char **keywords,
    						 const char **values);
    extern List *ExtractExtensionList(const char *extensionsString,
    					 bool warnOnMissing);
    
    /* in deparse.c */
    extern void classifyConditions(PlannerInfo *root,
    				   RelOptInfo *baserel,
    				   List *input_conds,
    				   List **remote_conds,
    				   List **local_conds);
    extern bool is_foreign_expr(PlannerInfo *root,
    				RelOptInfo *baserel,
    				Expr *expr);
    extern void deparseInsertSql(StringInfo buf, PlannerInfo *root,
    				 Index rtindex, Relation rel,
    				 List *targetAttrs, bool doNothing, List *returningList,
    				 List **retrieved_attrs);
    extern void deparseUpdateSql(StringInfo buf, PlannerInfo *root,
    				 Index rtindex, Relation rel,
    				 List *targetAttrs, List *returningList,
    				 List **retrieved_attrs);
    extern void deparseDeleteSql(StringInfo buf, PlannerInfo *root,
    				 Index rtindex, Relation rel,
    				 List *returningList,
    				 List **retrieved_attrs);
    extern void deparseAnalyzeSizeSql(StringInfo buf, Relation rel);
    extern void deparseAnalyzeSql(StringInfo buf, Relation rel,
    				  List **retrieved_attrs);
    extern void deparseStringLiteral(StringInfo buf, const char *val);
    extern Expr *find_em_expr_for_rel(EquivalenceClass *ec, RelOptInfo *rel);
    extern void deparseSelectStmtForRel(StringInfo buf, PlannerInfo *root,
    					 RelOptInfo *baserel, List *remote_conds, List *pathkeys,
    						List **retrieved_attrs, List **params_list);
    
    /* in shippable.c */
    extern bool is_builtin(Oid objectId);
    extern bool is_shippable(Oid objectId, Oid classId, PgFdwRelationInfo *fpinfo);
    
    #endif   /* POSTGRES_FDW_H */