mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-29 22:49:41 +03:00 
			
		
		
		
	This should provide some marginal overall savings, since it surely takes many more cycles for the remote server to deal with the NULL columns than it takes for postgres_fdw not to emit them. But really the reason is to keep the emitted queries from looking quite so silly ...
		
			
				
	
	
		
			77 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*-------------------------------------------------------------------------
 | |
|  *
 | |
|  * postgres_fdw.h
 | |
|  *		  Foreign-data wrapper for remote PostgreSQL servers
 | |
|  *
 | |
|  * Portions Copyright (c) 2012-2013, 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/rel.h"
 | |
| 
 | |
| #include "libpq-fe.h"
 | |
| 
 | |
| /* in postgres_fdw.c */
 | |
| extern int	set_transmission_modes(void);
 | |
| extern void reset_transmission_modes(int nestlevel);
 | |
| 
 | |
| /* in connection.c */
 | |
| extern PGconn *GetConnection(ForeignServer *server, 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, bool clear,
 | |
| 				   const char *sql);
 | |
| 
 | |
| /* in option.c */
 | |
| extern int ExtractConnectionOptions(List *defelems,
 | |
| 						 const char **keywords,
 | |
| 						 const char **values);
 | |
| 
 | |
| /* in deparse.c */
 | |
| extern void classifyConditions(PlannerInfo *root,
 | |
| 				   RelOptInfo *baserel,
 | |
| 				   List **remote_conds,
 | |
| 				   List **local_conds);
 | |
| extern bool is_foreign_expr(PlannerInfo *root,
 | |
| 				RelOptInfo *baserel,
 | |
| 				Expr *expr);
 | |
| extern void deparseSelectSql(StringInfo buf,
 | |
| 				 PlannerInfo *root,
 | |
| 				 RelOptInfo *baserel,
 | |
| 				 Bitmapset *attrs_used,
 | |
| 				 List **retrieved_attrs);
 | |
| extern void appendWhereClause(StringInfo buf,
 | |
| 				  PlannerInfo *root,
 | |
| 				  RelOptInfo *baserel,
 | |
| 				  List *exprs,
 | |
| 				  bool is_first,
 | |
| 				  List **params);
 | |
| extern void deparseInsertSql(StringInfo buf, PlannerInfo *root,
 | |
| 				 Index rtindex, Relation rel,
 | |
| 				 List *targetAttrs, 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);
 | |
| 
 | |
| #endif   /* POSTGRES_FDW_H */
 |