• 开发一个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 的

    • 代码结构

    • 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

  • 相关阅读:
    Vijos Oct.28 NOIP2012模拟赛
    QBXT day3 圆盘自动机 游戏 方块
    QBXT day2 最近点对 最长路径 山峰
    1609: [Usaco2008 Feb]Eating Together麻烦的聚餐
    1617: [Usaco2008 Mar]River Crossing渡河问题
    委托的Lambda表达式
    值转换器IValueConverter
    Silverlight中遇到的一些问题
    匿名方法
    Silverlight中的Binding
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/14457467.html
Copyright © 2020-2023  润新知