cube-msfabric-driver
Version:
Cube.js MS Fabric Database Driver using msnodesqlv8
61 lines (60 loc) • 2.7 kB
JavaScript
;
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;