Skip to content

Commit 0c23ccc

Browse files
committed
Faster bind function
1 parent 8291b23 commit 0c23ccc

File tree

2 files changed

+45
-42
lines changed

2 files changed

+45
-42
lines changed

packages/pg/bench.js

+31-28
Original file line numberDiff line numberDiff line change
@@ -45,37 +45,40 @@ const run = async () => {
4545
console.log('warmup done')
4646
const seconds = 5
4747

48-
let queries = await bench(client, params, seconds * 1000)
49-
console.log('')
50-
console.log('little queries:', queries)
51-
console.log('qps', queries / seconds)
52-
console.log('on my laptop best so far seen 733 qps')
48+
for (let i = 0; i < 4; i++) {
49+
let queries = await bench(client, params, seconds * 1000)
50+
console.log('')
51+
console.log('little queries:', queries)
52+
console.log('qps', queries / seconds)
53+
console.log('on my laptop best so far seen 733 qps')
5354

54-
console.log('')
55-
queries = await bench(client, seq, seconds * 1000)
56-
console.log('sequence queries:', queries)
57-
console.log('qps', queries / seconds)
58-
console.log('on my laptop best so far seen 1309 qps')
55+
console.log('')
56+
queries = await bench(client, seq, seconds * 1000)
57+
console.log('sequence queries:', queries)
58+
console.log('qps', queries / seconds)
59+
console.log('on my laptop best so far seen 1309 qps')
5960

60-
console.log('')
61-
queries = await bench(client, insert, seconds * 1000)
62-
console.log('insert queries:', queries)
63-
console.log('qps', queries / seconds)
64-
console.log('on my laptop best so far seen 6303 qps')
61+
console.log('')
62+
queries = await bench(client, insert, seconds * 1000)
63+
console.log('insert queries:', queries)
64+
console.log('qps', queries / seconds)
65+
console.log('on my laptop best so far seen 6445 qps')
6566

66-
console.log('')
67-
console.log('Warming up bytea test')
68-
await client.query({
69-
text: 'INSERT INTO buf(name, data) VALUES ($1, $2)',
70-
values: ['test', Buffer.allocUnsafe(104857600)],
71-
})
72-
console.log('bytea warmup done')
73-
const start = Date.now()
74-
const results = await client.query('SELECT * FROM buf')
75-
const time = Date.now() - start
76-
console.log('bytea time:', time, 'ms')
77-
console.log('bytea length:', results.rows[0].data.byteLength, 'bytes')
78-
console.log('on my laptop best so far seen 1107ms and 104857600 bytes')
67+
console.log('')
68+
console.log('Warming up bytea test')
69+
await client.query({
70+
text: 'INSERT INTO buf(name, data) VALUES ($1, $2)',
71+
values: ['test', Buffer.allocUnsafe(104857600)],
72+
})
73+
console.log('bytea warmup done')
74+
const start = Date.now()
75+
const results = await client.query('SELECT * FROM buf')
76+
const time = Date.now() - start
77+
console.log('bytea time:', time, 'ms')
78+
console.log('bytea length:', results.rows[0].data.byteLength, 'bytes')
79+
console.log('on my laptop best so far seen 1107ms and 104857600 bytes')
80+
await new Promise((resolve) => setTimeout(resolve, 250))
81+
}
7982

8083
await client.end()
8184
await client.end()

packages/pg/lib/query.js

+14-14
Original file line numberDiff line numberDiff line change
@@ -191,22 +191,22 @@ class Query extends EventEmitter {
191191
})
192192
}
193193

194-
if (this.values) {
195-
try {
196-
this.values = this.values.map(utils.prepareValue)
197-
} catch (err) {
198-
this.handleError(err, connection)
199-
return
200-
}
194+
// because we're mapping user supplied values to
195+
// postgres wire protocol compatible values it could
196+
// throw an exception, so try/catch this section
197+
try {
198+
connection.bind({
199+
portal: this.portal,
200+
statement: this.name,
201+
values: this.values,
202+
binary: this.binary,
203+
valueMap: utils.prepareValue,
204+
})
205+
} catch (err) {
206+
this.handleError(err, connection)
207+
return
201208
}
202209

203-
connection.bind({
204-
portal: this.portal,
205-
statement: this.name,
206-
values: this.values,
207-
binary: this.binary,
208-
})
209-
210210
connection.describe({
211211
type: 'P',
212212
name: this.portal || '',

0 commit comments

Comments
 (0)