cube.js 自定义驱动 static dialectClass 方法说明

实际上官方文档有过描述关于此方法的作用,可以进行自动query 方言的转换处理,同时官方不少插件也使用了此功能
以下做一个简单的说明

作用

  • 主要是对于dbtype 可以方便的找到数据库查询方言
    参考开发
 
export class OceanBaseDriver extends BaseDriver implements DriverInterface {
  /**
   * Returns default concurrency value.
   */
  public static getDefaultConcurrency(): number {
    return 2;
  }
 
  public static dialectClass() {
    return OceanBaseQuery;
  }

一些问题

  • 直接通过dbtype 可以方便的找到query 转换处理(一般是通过环境变量传递的,通过cube.js 的会有问题) CUBEJS_DB_TYPE=oceanbase
  • 对于多租户模式的数据库以及其他模式的推荐还是通过cube.js 定义明确方言处理
    参考
module.exports = {
    dialectFactory: (dataSource) => {
        return OceanBaseQuery
    },
    dbType: ({ dataSource } = {}) => {
       return "oceanbase"
  • 对于基于ts 开发的,建议对于query 以及driver 都导出(或者参考官方的玩法, 入口重新export 了)
    参考如下(ts 模式)
 
import { OceanBaseDriver } from './OceanBaseDriver';
 
import { OceanBaseQuery } from './OceanBaseQuery';
 
export * from "./OceanBaseDriver"
 
export * from "./OceanBaseQuery"
 
export default  OceanBaseDriver
 
export {
    OceanBaseQuery,
    OceanBaseDriver
}

官方手工重新导出模式

const fromExports = require('./dist/src');
const { QuestDriver } = require('./dist/src/QuestDriver');
 
const toExport = QuestDriver;
 
// eslint-disable-next-line no-restricted-syntax
for (const [key, module] of Object.entries(fromExports)) {
  toExport[key] = module;
}
module.exports = toExport;

说明

static dialectClass 是一个比较方便的静态方法,可以简化driver 的开发,但是实际上也是有问题的,对于自己开发的driver 推荐还是都暴露处理,为了
方便也可以提供static dialectClass 实现

参考资料

https://github.com/cube-js/cube.js/blob/master/CONTRIBUTING.md
https://github.com/cube-js/cube.js/blob/cfa4b4780f0b1549544bf26e2fb843d69ccdc981/packages/cubejs-questdb-driver/src/QuestDriver.ts

posted on 2023-03-01 00:00  荣锋亮  阅读(25)  评论(0编辑  收藏  举报

导航