自定义数据访问协议实例
下面是Greenplum数据库自定义数据访问协议的API。例子协议的实现gpextprotocal.c用C语言编写,它展示了如何使用这些API。有关访问一种自定义数据访问协议的信息请见使用自定义协议。
/* ---- 读/写函数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)
/* ------ 验证器函数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()
来模拟一个读取本地文件的简单协议。但实际上,该协议可实现诸如通过网络远程连接到某个进程这样的功能。
上级主题: 装载和卸载数据