cube.js 官方有描述关于driver 开发的说明,以下是开发一个简单的cockroachdb 驱动
驱动开发说明
- copy 相关项目,比如mysql 的driver 实现,命名为@cubejs-backend/-driver
- 不能copy changelog.md
- 命名驱动类以及readme.md 信息完善
- 推荐使用纯js 的依赖
- 典型的实现query 以及testConnection 其他的可以通过BaseDriver 类继承
- 如果需要连接池,可以实现
generic-pool
其他语言包可以借鉴 - 确保驱动实现了
release
确保资源的释放 - 使用yarn 进行依赖的管理
- 添加驱动的实现到packages/cubejs-server-core/src/core/DriverDependencies.js
cockroachdb 开发说明
因为cockroachdb支持基于pg 协议的处理,所以可以直接使用pg协议,为了简单代码,我们实现BaseDriver 以及BaseQuery
代码都复用了pg 的
- 代码结构
- pacakge.json
{
"name": "@cubejs-backend/cockroach-driver",
"description": "Cube.js Cockroach database driver",
"author": "Cube Dev, Inc.",
"version": "0.26.38",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.js.git",
"directory": "packages/cubejs-cockroach-driver"
},
"engines": {
"node": ">=10.8.0"
},
"main": "driver/CockroachDriver.js",
"typings": "driver/index.d.ts",
"scripts": {
"lint": "eslint **/*.js"
},
"dependencies": {
"@cubejs-backend/schema-compiler": "^0.26.35",
"@cubejs-backend/query-orchestrator": "^0.26.38",
"@types/pg": "^7.14.5",
"moment": "^2.24.0",
"pg": "^8.2.1"
},
"license": "Apache-2.0",
"devDependencies": {
"eslint": "^6.8.0",
"eslint-config-airbnb-base": "^13.1.0",
"eslint-plugin-import": "^2.16.0",
"eslint-plugin-node": "^5.2.1"
}
}
CockroachDriver.js:
代码直接copy 的pg的就是进行了名称的修改
添加了
static dialectClass() {
return CockroachQuery;
}
CockroachQuery.js copy 了pg 的进行名称的修改
- 添加deps
方便lookup 函数的使用 server-core
DriverDependencies.js
cockroach: '@cubejs-backend/cockroach-driver',
};
代码集成
可以使用yarn 的link 模式进行测试
.env 与其他db driver 是一样的
说明
我以前也写过关于驱动开发的说明,目前官方不太方便的是需要以及注册deps,否则就需要自己实现一个
dialectFactory 还是比较费事的
参考资料
https://github.com/cube-js/cube.js/blob/master/CONTRIBUTING.md
https://www.cnblogs.com/rongfengliang/p/14369653.html