From d544e07a711d609f3fe1c5263f5ef7e0f6a44be0 Mon Sep 17 00:00:00 2001 From: Ryan Staples <42743016+Srayman@users.noreply.github.com> Date: Tue, 15 Nov 2022 10:08:46 -0500 Subject: [PATCH 1/4] change instanceof to isDate --- packages/pg/lib/utils.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/pg/lib/utils.js b/packages/pg/lib/utils.js index d63fe68f1..697d5f950 100644 --- a/packages/pg/lib/utils.js +++ b/packages/pg/lib/utils.js @@ -4,6 +4,8 @@ const crypto = require('crypto') const defaults = require('./defaults') +const util = require('util') + function escapeElement(elementRepresentation) { var escaped = elementRepresentation.replace(/\\/g, '\\\\').replace(/"/g, '\\"') @@ -52,7 +54,7 @@ var prepareValue = function (val, seen) { } return buf.slice(val.byteOffset, val.byteOffset + val.byteLength) // Node.js v4 does not support those Buffer.from params } - if (val instanceof Date) { + if (util.types.isDate(val)) { if (defaults.parseInputDatesAsUTC) { return dateToStringUTC(val) } else { From d3749de203ab8525210176c6f02e4275685d41d3 Mon Sep 17 00:00:00 2001 From: Ryan Staples <42743016+Srayman@users.noreply.github.com> Date: Thu, 24 Nov 2022 12:58:00 -0500 Subject: [PATCH 2/4] use both methods to check for valid Date --- packages/pg/lib/utils.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/pg/lib/utils.js b/packages/pg/lib/utils.js index 697d5f950..ec523aba6 100644 --- a/packages/pg/lib/utils.js +++ b/packages/pg/lib/utils.js @@ -54,7 +54,7 @@ var prepareValue = function (val, seen) { } return buf.slice(val.byteOffset, val.byteOffset + val.byteLength) // Node.js v4 does not support those Buffer.from params } - if (util.types.isDate(val)) { + if (val instanceof Date || util.types.isDate(val)) { if (defaults.parseInputDatesAsUTC) { return dateToStringUTC(val) } else { From 91c696939c92dfa9c36a222e9695314889257597 Mon Sep 17 00:00:00 2001 From: Ryan Staples <42743016+Srayman@users.noreply.github.com> Date: Thu, 24 Nov 2022 13:17:24 -0500 Subject: [PATCH 3/4] add test for PR 2862 --- .../test/integration/gh-issues/2862-tests.js | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 packages/pg/test/integration/gh-issues/2862-tests.js diff --git a/packages/pg/test/integration/gh-issues/2862-tests.js b/packages/pg/test/integration/gh-issues/2862-tests.js new file mode 100644 index 000000000..d04117779 --- /dev/null +++ b/packages/pg/test/integration/gh-issues/2862-tests.js @@ -0,0 +1,27 @@ +'use strict' +var helper = require('./../test-helper') +var assert = require('assert') +var util = require('util') +var vm = require('vm'); + +const suite = new helper.Suite() + +suite.test('Handle date objects as Date', async (done) => { + const date = new Date(); + const dateObj = await vm.runInNewContext('new Date()'); + assert(!(dateObj instanceof Date)) + assert(util.types.isDate(dateObj)) + const client = new helper.pg.Client() + client.connect() + + await client.query('CREATE TEMP TABLE foo(bar TIMESTAMP, bar2 TIMESTAMP)') + await client.query('INSERT INTO foo(bar, bar2) VALUES($1, $2)', [date, dateObj]) + const results = await client.query('SELECT * FROM foo') + const row = results.rows[0] + const dbDate = row.bar + const dbDateObj = row.bar2 + assert.deepEqual(dbDate, date) + assert.deepEqual(dbDateObj, dateObj) + await client.end() + done() +}) From fbd2138ce89f3f4feab9fda6e7910c59d0a95038 Mon Sep 17 00:00:00 2001 From: Ryan Staples <42743016+Srayman@users.noreply.github.com> Date: Fri, 9 Dec 2022 08:56:58 -0500 Subject: [PATCH 4/4] use only isDate(date) in place of instanceof Date --- packages/pg/lib/utils.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/pg/lib/utils.js b/packages/pg/lib/utils.js index ec523aba6..697d5f950 100644 --- a/packages/pg/lib/utils.js +++ b/packages/pg/lib/utils.js @@ -54,7 +54,7 @@ var prepareValue = function (val, seen) { } return buf.slice(val.byteOffset, val.byteOffset + val.byteLength) // Node.js v4 does not support those Buffer.from params } - if (val instanceof Date || util.types.isDate(val)) { + if (util.types.isDate(val)) { if (defaults.parseInputDatesAsUTC) { return dateToStringUTC(val) } else {