自定义数据访问协议实例

自定义数据访问协议实例

下面是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.cgpextprotocol.so

该协议具有下列性质:

  • 为该协议定义的名称是myprot
  • 该协议具有如下的简单形式:协议名和一个路径,用://分隔。

    myprot:// path

  • 实现了三个函数:
    • myprot_import()是一个读函数
    • myprot_export()是一个写函数
    • myprot_validate_urls()是一个验证函数

    当该协议被在数据库中创建和声明时,CREATE PROTOCOL语句中会引用这些函数。

这个例子的实现gpextprotocal.c使用fopen()fread()来模拟一个读取本地文件的简单协议。但实际上,该协议可实现诸如通过网络远程连接到某个进程这样的功能。