开发一个cockroachdb 的cube.js 驱动

cube.js 官方有描述关于driver 开发的说明,以下是开发一个简单的cockroachdb 驱动

驱动开发说明

  1. copy 相关项目,比如mysql 的driver 实现,命名为@cubejs-backend/-driver
  2. 不能copy changelog.md
  3. 命名驱动类以及readme.md 信息完善
  4. 推荐使用纯js 的依赖
  5. 典型的实现query 以及testConnection 其他的可以通过BaseDriver 类继承
  6. 如果需要连接池,可以实现generic-pool 其他语言包可以借鉴
  7. 确保驱动实现了release 确保资源的释放
  8. 使用yarn 进行依赖的管理
  9. 添加驱动的实现到packages/cubejs-server-core/src/core/DriverDependencies.js

cockroachdb 开发说明

因为cockroachdb支持基于pg 协议的处理,所以可以直接使用pg协议,为了简单代码,我们实现BaseDriver 以及BaseQuery
代码都复用了pg 的

  • 代码结构

开发一个cockroachdb 的cube.js 驱动

 

 

  • 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

开发一个cockroachdb 的cube.js 驱动

上一篇:Mysql备份恢复工具


下一篇:jackJson 使用