Skip to content

Commit a46c62a

Browse files
committed
Added millisecond, microsecond and nanosecond support to date fns
1 parent 8600309 commit a46c62a

File tree

3 files changed

+31
-0
lines changed

3 files changed

+31
-0
lines changed

internal-packages/clickhouse/src/tsqlFunctions.test.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -413,6 +413,9 @@ describe("TSQL Function Smoke Tests", () => {
413413
["dateAdd (keyword unit)", "SELECT dateAdd(day, 7, created_at) AS r FROM task_runs"],
414414
["dateSub (string unit)", "SELECT dateSub('hour', 1, created_at) AS r FROM task_runs"],
415415
["dateDiff (string unit)", "SELECT dateDiff('minute', created_at, updated_at) AS r FROM task_runs"],
416+
["dateDiff (millisecond)", "SELECT dateDiff('millisecond', created_at, updated_at) AS r FROM task_runs"],
417+
["dateDiff (microsecond)", "SELECT dateDiff('microsecond', created_at, updated_at) AS r FROM task_runs"],
418+
["dateDiff (nanosecond)", "SELECT dateDiff('nanosecond', created_at, updated_at) AS r FROM task_runs"],
416419
["dateTrunc (string unit)", "SELECT dateTrunc('month', created_at) AS r FROM task_runs"],
417420
["date_add (string unit)", "SELECT date_add('day', 7, created_at) AS r FROM task_runs"],
418421
["date_sub (string unit)", "SELECT date_sub('hour', 1, created_at) AS r FROM task_runs"],

internal-packages/tsql/src/query/printer.test.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1312,6 +1312,31 @@ describe("ClickHousePrinter", () => {
13121312

13131313
expect(sql).toContain("dateAdd(day, 7, created_at)");
13141314
});
1315+
1316+
it("should output dateDiff with sub-second units as bare keywords", () => {
1317+
const { sql } = printQuery(
1318+
"SELECT dateDiff('millisecond', started_at, completed_at) AS dur FROM task_runs"
1319+
);
1320+
1321+
expect(sql).toContain("dateDiff(millisecond,");
1322+
expect(sql).not.toContain("'millisecond'");
1323+
});
1324+
1325+
it("should output dateDiff with microsecond as bare keyword", () => {
1326+
const { sql } = printQuery(
1327+
"SELECT dateDiff('microsecond', started_at, completed_at) AS dur FROM task_runs"
1328+
);
1329+
1330+
expect(sql).toContain("dateDiff(microsecond,");
1331+
});
1332+
1333+
it("should output dateDiff with nanosecond as bare keyword", () => {
1334+
const { sql } = printQuery(
1335+
"SELECT dateDiff('nanosecond', started_at, completed_at) AS dur FROM task_runs"
1336+
);
1337+
1338+
expect(sql).toContain("dateDiff(nanosecond,");
1339+
});
13151340
});
13161341

13171342
describe("Tenant isolation", () => {

internal-packages/tsql/src/query/printer.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2940,6 +2940,9 @@ export class ClickHousePrinter {
29402940
* Valid ClickHouse interval unit keywords used by date functions like dateAdd, dateDiff, etc.
29412941
*/
29422942
private static readonly INTERVAL_UNITS = new Set([
2943+
"nanosecond",
2944+
"microsecond",
2945+
"millisecond",
29432946
"second",
29442947
"minute",
29452948
"hour",

0 commit comments

Comments
 (0)