自定义数据访问协议实例

下面是Greenplum数据库自定义数据访问协议的API。例子协议的实现gpextprotocal.c用C语言编写,它展示了如何使用这些API。有关访问一种自定义数据访问协议的信息请见使用一种自定协议

  1. /* ---- Read/Write function API ------*/
  2. CALLED_AS_EXTPROTOCOL(fcinfo)
  3. EXTPROTOCOL_GET_URL(fcinfo)(fcinfo)
  4. EXTPROTOCOL_GET_DATABUF(fcinfo)
  5. EXTPROTOCOL_GET_DATALEN(fcinfo)
  6. EXTPROTOCOL_GET_SCANQUALS(fcinfo)
  7. EXTPROTOCOL_GET_USER_CTX(fcinfo)
  8. EXTPROTOCOL_IS_LAST_CALL(fcinfo)
  9. EXTPROTOCOL_SET_LAST_CALL(fcinfo)
  10. EXTPROTOCOL_SET_USER_CTX(fcinfo, p)
  11. /* ------ Validator function API ------*/
  12. CALLED_AS_EXTPROTOCOL_VALIDATOR(fcinfo)
  13. EXTPROTOCOL_VALIDATOR_GET_URL_LIST(fcinfo)
  14. EXTPROTOCOL_VALIDATOR_GET_NUM_URLS(fcinfo)
  15. EXTPROTOCOL_VALIDATOR_GET_NTH_URL(fcinfo, n)
  16. 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: 装载和卸载数据