From da62a47155d3799eb82551d870080f8ba92f6a20 Mon Sep 17 00:00:00 2001 From: Nigro Simone Date: Thu, 6 Jun 2024 16:41:55 +0200 Subject: [PATCH 1/7] fix: typo --- packages/pg/lib/result.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/pg/lib/result.js b/packages/pg/lib/result.js index 98018a7d8..f510d2463 100644 --- a/packages/pg/lib/result.js +++ b/packages/pg/lib/result.js @@ -37,7 +37,7 @@ class Result { if (match) { this.command = match[1] if (match[3]) { - // COMMMAND OID ROWS + // COMMAND OID ROWS this.oid = parseInt(match[2], 10) this.rowCount = parseInt(match[3], 10) } else if (match[2]) { From a88c0affa7f5c47daa677f0f88a44afd17440833 Mon Sep 17 00:00:00 2001 From: Nigro Simone Date: Thu, 6 Jun 2024 16:47:01 +0200 Subject: [PATCH 2/7] perf: pre allocate array instead of push item --- packages/pg-native/lib/build-result.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/pg-native/lib/build-result.js b/packages/pg-native/lib/build-result.js index 38408a608..2dd85b8b5 100644 --- a/packages/pg-native/lib/build-result.js +++ b/packages/pg-native/lib/build-result.js @@ -28,9 +28,10 @@ class Result { consumeRows(pq) { const tupleCount = pq.ntuples() + this.rows = new Array(tupleCount); for (var i = 0; i < tupleCount; i++) { const row = this._arrayMode ? this.consumeRowAsArray(pq, i) : this.consumeRowAsObject(pq, i) - this.rows.push(row) + this.rows[i] = row; } } @@ -44,10 +45,10 @@ class Result { } consumeRowAsArray(pq, rowIndex) { - const row = [] + const row = new Array(this.fields.length) for (var j = 0; j < this.fields.length; j++) { const value = this.readValue(pq, rowIndex, j) - row.push(value) + row[j] = value; } return row } From adb6e8c7bc152ceed567ed2c911415acb711e686 Mon Sep 17 00:00:00 2001 From: Nigro Simone Date: Thu, 6 Jun 2024 16:51:09 +0200 Subject: [PATCH 3/7] perf: refractoring missing push --- packages/pg-native/lib/build-result.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/pg-native/lib/build-result.js b/packages/pg-native/lib/build-result.js index 2dd85b8b5..12d44cf9f 100644 --- a/packages/pg-native/lib/build-result.js +++ b/packages/pg-native/lib/build-result.js @@ -18,11 +18,12 @@ class Result { consumeFields(pq) { const nfields = pq.nfields() + this.fields = new Array(nfields); for (var x = 0; x < nfields; x++) { - this.fields.push({ + this.fields[x] = { name: pq.fname(x), dataTypeID: pq.ftype(x), - }) + }; } } From 72c11dd56ed1e0f6aa1e6344a524d3d55c3193a8 Mon Sep 17 00:00:00 2001 From: Nigro Simone Date: Thu, 6 Jun 2024 16:53:55 +0200 Subject: [PATCH 4/7] perf: avoid useless varible declaration --- packages/pg-native/lib/build-result.js | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/packages/pg-native/lib/build-result.js b/packages/pg-native/lib/build-result.js index 12d44cf9f..f05aec1ea 100644 --- a/packages/pg-native/lib/build-result.js +++ b/packages/pg-native/lib/build-result.js @@ -31,16 +31,14 @@ class Result { const tupleCount = pq.ntuples() this.rows = new Array(tupleCount); for (var i = 0; i < tupleCount; i++) { - const row = this._arrayMode ? this.consumeRowAsArray(pq, i) : this.consumeRowAsObject(pq, i) - this.rows[i] = row; + this.rows[i] = this._arrayMode ? this.consumeRowAsArray(pq, i) : this.consumeRowAsObject(pq, i) } } consumeRowAsObject(pq, rowIndex) { const row = {} for (var j = 0; j < this.fields.length; j++) { - const value = this.readValue(pq, rowIndex, j) - row[this.fields[j].name] = value + row[this.fields[j].name] = this.readValue(pq, rowIndex, j) } return row } @@ -48,8 +46,7 @@ class Result { consumeRowAsArray(pq, rowIndex) { const row = new Array(this.fields.length) for (var j = 0; j < this.fields.length; j++) { - const value = this.readValue(pq, rowIndex, j) - row[j] = value; + row[j] = this.readValue(pq, rowIndex, j); } return row } From 58be25550ed680220b3af4888dd01da16ff80e54 Mon Sep 17 00:00:00 2001 From: Nigro Simone Date: Thu, 6 Jun 2024 16:59:42 +0200 Subject: [PATCH 5/7] perf: short control flow --- packages/pg-native/lib/build-result.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/pg-native/lib/build-result.js b/packages/pg-native/lib/build-result.js index f05aec1ea..83ca7558f 100644 --- a/packages/pg-native/lib/build-result.js +++ b/packages/pg-native/lib/build-result.js @@ -53,10 +53,8 @@ class Result { readValue(pq, rowIndex, colIndex) { var rawValue = pq.getvalue(rowIndex, colIndex) - if (rawValue === '') { - if (pq.getisnull(rowIndex, colIndex)) { - return null - } + if (rawValue === '' && pq.getisnull(rowIndex, colIndex)) { + return null } const dataTypeId = this.fields[colIndex].dataTypeID return this._types.getTypeParser(dataTypeId)(rawValue) From 3c686d540c3ff1596427523332f0a80564ef8c35 Mon Sep 17 00:00:00 2001 From: Nigro Simone Date: Sat, 8 Jun 2024 01:53:00 +0200 Subject: [PATCH 6/7] fix: lint --- packages/pg-native/lib/build-result.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/pg-native/lib/build-result.js b/packages/pg-native/lib/build-result.js index 83ca7558f..bc2e194a3 100644 --- a/packages/pg-native/lib/build-result.js +++ b/packages/pg-native/lib/build-result.js @@ -18,18 +18,18 @@ class Result { consumeFields(pq) { const nfields = pq.nfields() - this.fields = new Array(nfields); + this.fields = new Array(nfields) for (var x = 0; x < nfields; x++) { this.fields[x] = { name: pq.fname(x), - dataTypeID: pq.ftype(x), - }; + dataTypeID: pq.ftype(x) + } } } consumeRows(pq) { const tupleCount = pq.ntuples() - this.rows = new Array(tupleCount); + this.rows = new Array(tupleCount) for (var i = 0; i < tupleCount; i++) { this.rows[i] = this._arrayMode ? this.consumeRowAsArray(pq, i) : this.consumeRowAsObject(pq, i) } @@ -46,7 +46,7 @@ class Result { consumeRowAsArray(pq, rowIndex) { const row = new Array(this.fields.length) for (var j = 0; j < this.fields.length; j++) { - row[j] = this.readValue(pq, rowIndex, j); + row[j] = this.readValue(pq, rowIndex, j) } return row } From b597d9258e0bd5d46e62375933fa74e6ba5265a3 Mon Sep 17 00:00:00 2001 From: Nigro Simone Date: Sun, 9 Jun 2024 09:49:54 +0200 Subject: [PATCH 7/7] more precise bench --- packages/pg-native/bench/index.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/pg-native/bench/index.js b/packages/pg-native/bench/index.js index 05dbc949b..88238dc90 100644 --- a/packages/pg-native/bench/index.js +++ b/packages/pg-native/bench/index.js @@ -19,7 +19,7 @@ var warmup = function (fn, cb) { var native = Native() native.connectSync() -var queryText = 'SELECT generate_series(0, 1000)' +var queryText = 'SELECT generate_series(0, 1000) as X, generate_series(0, 1000) as Y, generate_series(0, 1000) as Z' var client = new pg.Client() client.connect(function () { var pure = function (cb) { @@ -36,12 +36,12 @@ client.connect(function () { } var run = function () { - var start = Date.now() + console.time('pure') warmup(pure, function () { - console.log('pure done', Date.now() - start) - start = Date.now() + console.timeEnd('pure') + console.time('native') warmup(nativeQuery, function () { - console.log('native done', Date.now() - start) + console.timeEnd('native') }) }) }