From 47ecc2c46abcfafbcf158ddcfb77e678a96a3859 Mon Sep 17 00:00:00 2001 From: francesco Date: Tue, 4 Feb 2025 18:00:50 +0100 Subject: [PATCH 1/3] perf(pg-native): pre-shaped result rows Porting on pg-native https://github.com/brianc/node-postgres/issues/3042 --- packages/pg-native/lib/build-result.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/pg-native/lib/build-result.js b/packages/pg-native/lib/build-result.js index c43e1ba3e..02e365ce9 100644 --- a/packages/pg-native/lib/build-result.js +++ b/packages/pg-native/lib/build-result.js @@ -9,6 +9,7 @@ class Result { this.rowCount = undefined this.fields = [] this.rows = [] + this._prebuiltEmptyResultObject = null } consumeCommand(pq) { @@ -19,12 +20,16 @@ class Result { consumeFields(pq) { const nfields = pq.nfields() this.fields = new Array(nfields) + var row = {} for (var x = 0; x < nfields; x++) { + var name = pq.fname(x); + row[name] = null this.fields[x] = { - name: pq.fname(x), + name: name, dataTypeID: pq.ftype(x), } } + this._prebuiltEmptyResultObject = { ...row } } consumeRows(pq) { @@ -36,7 +41,7 @@ class Result { } consumeRowAsObject(pq, rowIndex) { - const row = {} + const row = { ...this._prebuiltEmptyResultObject } for (var j = 0; j < this.fields.length; j++) { row[this.fields[j].name] = this.readValue(pq, rowIndex, j) } From 5fd01a17516e5fe553ccc5a410bdac969aeced94 Mon Sep 17 00:00:00 2001 From: francesco Date: Wed, 5 Feb 2025 16:07:55 +0100 Subject: [PATCH 2/3] fix: lint --- packages/pg-native/lib/build-result.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/pg-native/lib/build-result.js b/packages/pg-native/lib/build-result.js index 02e365ce9..074f76593 100644 --- a/packages/pg-native/lib/build-result.js +++ b/packages/pg-native/lib/build-result.js @@ -22,7 +22,7 @@ class Result { this.fields = new Array(nfields) var row = {} for (var x = 0; x < nfields; x++) { - var name = pq.fname(x); + var name = pq.fname(x) row[name] = null this.fields[x] = { name: name, From c44173a3b5792e311c59be4b056ad76e0ba61925 Mon Sep 17 00:00:00 2001 From: francesco Date: Tue, 11 Feb 2025 16:34:01 +0100 Subject: [PATCH 3/3] perf(pg-native): avoid useless spread --- packages/pg-native/lib/build-result.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/pg-native/lib/build-result.js b/packages/pg-native/lib/build-result.js index 074f76593..7257b5895 100644 --- a/packages/pg-native/lib/build-result.js +++ b/packages/pg-native/lib/build-result.js @@ -20,16 +20,15 @@ class Result { consumeFields(pq) { const nfields = pq.nfields() this.fields = new Array(nfields) - var row = {} + this._prebuiltEmptyResultObject = {} for (var x = 0; x < nfields; x++) { var name = pq.fname(x) - row[name] = null + this._prebuiltEmptyResultObject[name] = null this.fields[x] = { name: name, dataTypeID: pq.ftype(x), } } - this._prebuiltEmptyResultObject = { ...row } } consumeRows(pq) {