greenplumn extprotocol 源码
greenplumn extprotocol 代码
文件路径:/src/include/access/extprotocol.h
/*-------------------------------------------------------------------------
*
* extprotocol.h
* Declarations for External Table Protocol functions
*
* Portions Copyright (c) 2010, EMC corporation
* Portions Copyright (c) 2012-Present VMware, Inc. or its affiliates.
*
*
* IDENTIFICATION
* src/include/access/extprotocol.h
*
*-------------------------------------------------------------------------
*/
#ifndef EXTPROTOCOL_H
#define EXTPROTOCOL_H
#include "nodes/nodes.h"
#include "nodes/pg_list.h"
#include "nodes/value.h"
#include "utils/rel.h"
/* ------------------------- I/O function API -----------------------------*/
struct ExternalSelectDescData;
typedef struct ExternalSelectDescData *ExternalSelectDesc;
/*
* ExtProtocolData is the node type that is passed as fmgr "context" info
* when a function is called by the External Table protocol manager.
*/
typedef struct ExtProtocolData
{
NodeTag type; /* see T_ExtProtocolData */
Relation prot_relation;
char *prot_url;
char *prot_databuf;
int prot_maxbytes;
void *prot_user_ctx;
bool prot_last_call;
ExternalSelectDesc desc;
} ExtProtocolData;
typedef ExtProtocolData *ExtProtocol;
#define CALLED_AS_EXTPROTOCOL(fcinfo) \
((fcinfo->context != NULL && IsA((fcinfo)->context, ExtProtocolData)))
#define EXTPROTOCOL_GET_URL(fcinfo) (((ExtProtocolData*) fcinfo->context)->prot_url)
#define EXTPROTOCOL_GET_RELATION(fcinfo) (((ExtProtocolData*) fcinfo->context)->prot_relation)
#define EXTPROTOCOL_GET_DATABUF(fcinfo) (((ExtProtocolData*) fcinfo->context)->prot_databuf)
#define EXTPROTOCOL_GET_DATALEN(fcinfo) (((ExtProtocolData*) fcinfo->context)->prot_maxbytes)
#define EXTPROTOCOL_GET_USER_CTX(fcinfo) (((ExtProtocolData*) fcinfo->context)->prot_user_ctx)
#define EXTPROTOCOL_GET_EXTERNAL_SELECT_DESC(fcinfo) (((ExtProtocolData*) fcinfo->context)->desc)
#define EXTPROTOCOL_IS_LAST_CALL(fcinfo) (((ExtProtocolData*) fcinfo->context)->prot_last_call)
#define EXTPROTOCOL_SET_LAST_CALL(fcinfo) (((ExtProtocolData*) fcinfo->context)->prot_last_call = true)
#define EXTPROTOCOL_SET_USER_CTX(fcinfo, p) \
(((ExtProtocolData*) fcinfo->context)->prot_user_ctx = p)
/* ------------------------- Validator function API -----------------------------*/
typedef enum ValidatorDirection
{
EXT_VALIDATE_READ,
EXT_VALIDATE_WRITE
} ValidatorDirection;
/*
* ExtProtocolValidatorData is the node type that is passed as fmgr "context" info
* when a function is called by the External Table protocol manager.
*/
typedef struct ExtProtocolValidatorData
{
NodeTag type; /* see T_ExtProtocolValidatorData */
List *url_list;
ValidatorDirection direction; /* validating read or write? */
char *errmsg; /* the validation error upon return, if any */
} ExtProtocolValidatorData;
typedef ExtProtocolValidatorData *ExtProtocolValidator;
#define CALLED_AS_EXTPROTOCOL_VALIDATOR(fcinfo) \
((fcinfo->context != NULL && IsA((fcinfo)->context, ExtProtocolValidatorData)))
#define EXTPROTOCOL_VALIDATOR_GET_URL_LIST(fcinfo) (((ExtProtocolValidatorData*) fcinfo->context)->url_list)
#define EXTPROTOCOL_VALIDATOR_GET_NUM_URLS(fcinfo) (list_length(((ExtProtocolValidatorData*) fcinfo->context)->url_list))
#define EXTPROTOCOL_VALIDATOR_GET_NTH_URL(fcinfo, n) (((Value *)(list_nth(EXTPROTOCOL_VALIDATOR_GET_URL_LIST(fcinfo),(n - 1))))->val.str)
#define EXTPROTOCOL_VALIDATOR_GET_DIRECTION(fcinfo) (((ExtProtocolValidatorData*) fcinfo->context)->direction)
#endif /* EXTPROTOCOL_H */
相关信息
相关文章
greenplumn appendonly_compaction 源码
greenplumn appendonly_visimap 源码
0
赞
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦