diff --git a/index.js b/index.js index 791bf28..8115103 100644 --- a/index.js +++ b/index.js @@ -10,7 +10,8 @@ const queries = [ 'pg-promise-native', 'pg', 'pg-native', - 'slonik' + 'slonik', + 'ts-postgres' ] , warmup = 3 , iterations = 10000 diff --git a/package-lock.json b/package-lock.json index 6551db0..eb0d0eb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -215,6 +215,11 @@ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.0.13.tgz", "integrity": "sha512-E1fz2Xs9ltlUp+qbiyx9wmt2n9dRzPsS11Jtdb8D2o+cC7wr9xkkKsVKJuBX0ST+LVS+LhLO+SbLJNtfWcJvXA==" }, + "generic-pool": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.9.0.tgz", + "integrity": "sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g==" + }, "get-stack-trace": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/get-stack-trace/-/get-stack-trace-2.0.3.tgz", @@ -709,6 +714,11 @@ "punycode": "^2.1.0" } }, + "ts-postgres": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ts-postgres/-/ts-postgres-2.0.1.tgz", + "integrity": "sha512-tN8bDZpy82yP0xW9BGRT4cYgRlTy+dKfMeCaf8fcQ6Ddd7RSIczjr8Bsp/vMzs0AjI8FA5RXNjFUa3+UDUDzCA==" + }, "type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", diff --git a/package.json b/package.json index ba185bc..c7ad36e 100644 --- a/package.json +++ b/package.json @@ -9,10 +9,12 @@ "author": "", "license": "ISC", "dependencies": { + "generic-pool": "^3.9.0", "pg": "8.5.1", "pg-native": "3.0.0", "pg-promise": "10.9.2", "postgres": "1.0.2", - "slonik": "23.5.5" + "slonik": "23.5.5", + "ts-postgres": "2.0.1" } } diff --git a/ts-postgres/index.js b/ts-postgres/index.js new file mode 100644 index 0000000..f39506b --- /dev/null +++ b/ts-postgres/index.js @@ -0,0 +1,38 @@ +const { connect } = require('ts-postgres') +const { createPool } = require('generic-pool'); + +const pool = createPool( + { + create: connect, + destroy: client => client.end() + }, + { max: 4 }, +); + +const query = (text, values) => pool.use(async client => client.query(text, values)) + +module.exports = { + queries: { + select: () => query('select 1 as x'), + select_arg: () => query('select $1 as x', [1]), + select_args: () => query(`select + $1::int as int, + $2 as string, + $3::timestamp with time zone as timestamp, + $4 as null, + $5::bool as boolean, + $6::bytea as bytea, + $7::jsonb as json + `, [ + 1337, + 'wat', + new Date().toISOString(), + null, + false, + Buffer.from('awesome'), + [{ some: 'json' }, { array: 'object' }] + ]), + select_where: () => query('select * from pg_catalog.pg_type where typname = $1', ['bool']) + }, + end: () => Promise.all([pool.drain(), pool.clear()]) +}