自定义数据访问协议实例
下面是Greenplum数据库自定义数据访问协议的API。例子协议的实现gpextprotocal.c用C语言编写,它展示了如何使用这些API。有关访问一种自定义数据访问协议的信息请见使用一种自定协议。
/* ---- Read/Write function API ------*/
CALLED_AS_EXTPROTOCOL(fcinfo)
EXTPROTOCOL_GET_URL(fcinfo)(fcinfo)
EXTPROTOCOL_GET_DATABUF(fcinfo)
EXTPROTOCOL_GET_DATALEN(fcinfo)
EXTPROTOCOL_GET_SCANQUALS(fcinfo)
EXTPROTOCOL_GET_USER_CTX(fcinfo)
EXTPROTOCOL_IS_LAST_CALL(fcinfo)
EXTPROTOCOL_SET_LAST_CALL(fcinfo)
EXTPROTOCOL_SET_USER_CTX(fcinfo, p)
/* ------ Validator function API ------*/
CALLED_AS_EXTPROTOCOL_VALIDATOR(fcinfo)
EXTPROTOCOL_VALIDATOR_GET_URL_LIST(fcinfo)
EXTPROTOCOL_VALIDATOR_GET_NUM_URLS(fcinfo)
EXTPROTOCOL_VALIDATOR_GET_NTH_URL(fcinfo, n)
EXTPROTOCOL_VALIDATOR_GET_DIRECTION(fcinfo)
说明
这个协议对应于使用一种自定协议中描述的例子。源代码文件名称和共享对象名称分别是gpextprotocol.c和gpextprotocol.so。
该协议具有下列性质:
- 为该协议定义的名称是myprot。
该协议具有如下的简单形式:协议名和一个路径,用://分隔。
myprot:// path
实现了三个函数:
- myprot_import() 是一个读函数
- myprot_export() 是一个写函数
- myprot_validate_urls() 是一个验证函数
当该协议被在数据库中创建和声明时,CREATE PROTOCOL语句中会引用这些函数。
这个例子的实现gpextprotocal.c使用fopen()和fread()来模拟一个读取本地文件的简单协议。但实际上,该协议可实现诸如通过网络远程连接到某个进程这样的功能。
Parent topic: 装载和卸载数据