自定义数据访问协议实例
自定义数据访问协议实例
下面是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()来模拟一个读取本地文件的简单协议。但实际上,该协议可实现诸如通过网络远程连接到某个进程这样的功能。