UNPKG

cube-msfabric-driver

Version:

Cube.js MS Fabric Database Driver using msnodesqlv8

61 lines (60 loc) 2.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MSFabricQuery = void 0; const schema_compiler_1 = require("@cubejs-backend/schema-compiler"); class MSFabricQuery extends schema_compiler_1.MssqlQuery { constructor() { super(...arguments); this.paramCount = 0; } buildSqlAndParams(exportAnnotatedSql) { const [sql, params] = super.buildSqlAndParams(exportAnnotatedSql); // Replace @_n style parameters with ? for msnodesqlv8 const transformedSql = sql.replace(/@_\d+/g, "?"); return [transformedSql, params]; } timeGroupedColumn(granularity, dimension) { const dateDimension = `CAST(${dimension} AS DATETIME2(3))`; switch (granularity) { case "value": return `FORMAT(${dateDimension}, 'yyyy-MM-dd''T''HH:mm:ss.fff''Z''')`; case "date": return `FORMAT(${dateDimension}, 'yyyy-MM-dd')`; case "time": return `FORMAT(${dateDimension}, 'HH:mm:ss')`; case "datetime": return `FORMAT(${dateDimension}, 'yyyy-MM-dd''T''HH:mm:ss.fff''Z''')`; case "year": return `FORMAT(DATEADD(YEAR,DATEDIFF(YEAR, 0, ${dateDimension}),0),'yyyy-MM-dd''T''HH:mm:ss.fff''Z''')`; case "quarter": return `FORMAT(DATEADD(QUARTER,DATEDIFF(QUARTER, 0, ${dateDimension}),0),'yyyy-MM-dd''T''HH:mm:ss.fff''Z''')`; case "month": return `FORMAT(${dateDimension}, 'yyyy-MM')`; case "week": return `FORMAT(DATEADD(DAY, -DATEPART(WEEKDAY, ${dateDimension}) + 1, ${dateDimension}), 'yyyy-MM-dd')`; case "day": return `FORMAT(${dateDimension}, 'yyyy-MM-dd')`; case "hour": return `FORMAT(${dateDimension}, 'yyyy-MM-dd''T''HH:00:00')`; case "minute": return `FORMAT(${dateDimension}, 'yyyy-MM-dd''T''HH:mm:00')`; case "second": return `FORMAT(${dateDimension}, 'yyyy-MM-dd''T''HH:mm:ss')`; default: return dimension; // Fallback to the original dimension if no match } } convertTz(field) { return `CAST(FORMAT(${field} AT TIME ZONE 'UTC', 'yyyy-MM-dd''T''HH:mm:ss.fff''Z''') AS VARCHAR(27))`; } castToString(field) { return `CAST(${field} AS NVARCHAR(MAX))`; } dateTimeCast(field) { return `CAST(${field} AS DATETIME2)`; } timeStampCast(value) { return `CAST(${value} AS DATETIME2)`; } } exports.MSFabricQuery = MSFabricQuery;