From bb2025a9c97a41c6d00eaac240581ada2b983f7c Mon Sep 17 00:00:00 2001 From: Barry Hammen Date: Wed, 25 May 2016 12:10:08 -0400 Subject: [PATCH] Fix sqlite date functions for epoch --- lib/dialect/sqlite.js | 8 +++++++- test/dialects/date-tests.js | 14 ++++++++++---- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/lib/dialect/sqlite.js b/lib/dialect/sqlite.js index d2885c2f..6085ba21 100644 --- a/lib/dialect/sqlite.js +++ b/lib/dialect/sqlite.js @@ -81,7 +81,13 @@ Sqlite.prototype.visitFunctionCall = function (functionCall) { format = "'%H'"; break; } - var txt = 'strftime(' + format + ', ' + (nodes[0] + '') + ')'; + var col = (nodes[0] + ''); + if (_this.config.dateTimeMillis) { + // Convert to a datetime before running the strftime function + // Sqlite unix epoch is in seconds, but javascript is milliseconds. + col = 'datetime(' + col + '/1000, "unixepoch")'; + } + var txt = 'strftime(' + format + ', ' + col + ')'; return txt; } diff --git a/test/dialects/date-tests.js b/test/dialects/date-tests.js index 6eaf9851..5a5fadda 100644 --- a/test/dialects/date-tests.js +++ b/test/dialects/date-tests.js @@ -36,8 +36,11 @@ Harness.test({ string: 'SELECT EXTRACT(MONTH FROM "customer"."metadata") FROM "customer"' }, sqlite: { - text : 'SELECT strftime(\'%m\', "customer"."metadata") FROM "customer"', - string: 'SELECT strftime(\'%m\', "customer"."metadata") FROM "customer"' + text: 'SELECT strftime(\'%m\', datetime("customer"."metadata"/1000, "unixepoch")) FROM "customer"', + string: 'SELECT strftime(\'%m\', datetime("customer"."metadata"/1000, "unixepoch")) FROM "customer"', + config: { + dateTimeMillis: true + } }, mysql: { text : 'SELECT MONTH(`customer`.`metadata`) FROM `customer`', @@ -86,8 +89,11 @@ Harness.test({ string: 'SELECT EXTRACT(HOUR FROM "customer"."metadata") FROM "customer"' }, sqlite: { - text : 'SELECT strftime(\'%H\', "customer"."metadata") FROM "customer"', - string: 'SELECT strftime(\'%H\', "customer"."metadata") FROM "customer"' + text: 'SELECT strftime(\'%H\', datetime("customer"."metadata"/1000, "unixepoch")) FROM "customer"', + string: 'SELECT strftime(\'%H\', datetime("customer"."metadata"/1000, "unixepoch")) FROM "customer"', + config: { + dateTimeMillis: true + } }, mysql: { text : 'SELECT HOUR(`customer`.`metadata`) FROM `customer`',