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