Skip to content

Commit 27611ef

Browse files
committed
Added millisecond, microsecond and nanosecond support to date fns
1 parent c283a82 commit 27611ef

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
@@ -1306,6 +1306,31 @@ describe("ClickHousePrinter", () => {
13061306

13071307
expect(sql).toContain("dateAdd(day, 7, created_at)");
13081308
});
1309+
1310+
it("should output dateDiff with sub-second units as bare keywords", () => {
1311+
const { sql } = printQuery(
1312+
"SELECT dateDiff('millisecond', started_at, completed_at) AS dur FROM task_runs"
1313+
);
1314+
1315+
expect(sql).toContain("dateDiff(millisecond,");
1316+
expect(sql).not.toContain("'millisecond'");
1317+
});
1318+
1319+
it("should output dateDiff with microsecond as bare keyword", () => {
1320+
const { sql } = printQuery(
1321+
"SELECT dateDiff('microsecond', started_at, completed_at) AS dur FROM task_runs"
1322+
);
1323+
1324+
expect(sql).toContain("dateDiff(microsecond,");
1325+
});
1326+
1327+
it("should output dateDiff with nanosecond as bare keyword", () => {
1328+
const { sql } = printQuery(
1329+
"SELECT dateDiff('nanosecond', started_at, completed_at) AS dur FROM task_runs"
1330+
);
1331+
1332+
expect(sql).toContain("dateDiff(nanosecond,");
1333+
});
13091334
});
13101335

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

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2869,6 +2869,9 @@ export class ClickHousePrinter {
28692869
* Valid ClickHouse interval unit keywords used by date functions like dateAdd, dateDiff, etc.
28702870
*/
28712871
private static readonly INTERVAL_UNITS = new Set([
2872+
"nanosecond",
2873+
"microsecond",
2874+
"millisecond",
28722875
"second",
28732876
"minute",
28742877
"hour",

0 commit comments

Comments
 (0)