mirror of
https://github.com/brianc/node-postgres.git
synced 2025-12-08 20:16:25 +00:00
116 lines
3.1 KiB
JavaScript
116 lines
3.1 KiB
JavaScript
const Client = require('../')
|
|
const assert = require('assert')
|
|
const async = require('async')
|
|
const ok = require('okay')
|
|
|
|
describe('async query', function () {
|
|
before(function (done) {
|
|
this.client = Client()
|
|
this.client.connect(done)
|
|
})
|
|
|
|
after(function (done) {
|
|
this.client.end(done)
|
|
})
|
|
|
|
it('can execute many prepared statements on a client', function (done) {
|
|
async.timesSeries(
|
|
20,
|
|
(i, cb) => {
|
|
this.client.query('SELECT $1::text as name', ['brianc'], cb)
|
|
},
|
|
done
|
|
)
|
|
})
|
|
|
|
it('simple query works', function (done) {
|
|
const runQuery = function (n, done) {
|
|
this.client.query('SELECT NOW() AS the_time', function (err, rows) {
|
|
if (err) return done(err)
|
|
assert.equal(rows[0].the_time.getFullYear(), new Date().getFullYear())
|
|
return done()
|
|
})
|
|
}.bind(this)
|
|
async.timesSeries(3, runQuery, done)
|
|
})
|
|
|
|
it('parameters work', function (done) {
|
|
const runQuery = function (n, done) {
|
|
this.client.query('SELECT $1::text AS name', ['Brian'], done)
|
|
}.bind(this)
|
|
async.timesSeries(3, runQuery, done)
|
|
})
|
|
|
|
it('prepared, named statements work', function (done) {
|
|
const client = this.client
|
|
client.prepare('test', 'SELECT $1::text as name', 1, function (err) {
|
|
if (err) return done(err)
|
|
client.execute(
|
|
'test',
|
|
['Brian'],
|
|
ok(done, function (rows) {
|
|
assert.equal(rows.length, 1)
|
|
assert.equal(rows[0].name, 'Brian')
|
|
client.execute(
|
|
'test',
|
|
['Aaron'],
|
|
ok(done, function (rows) {
|
|
assert.equal(rows.length, 1)
|
|
assert.equal(rows[0].name, 'Aaron')
|
|
done()
|
|
})
|
|
)
|
|
})
|
|
)
|
|
})
|
|
})
|
|
|
|
it('returns error if prepare fails', function (done) {
|
|
this.client.prepare('test', 'SELECT AWWW YEAH', 0, function (err) {
|
|
assert(err, 'Should have returned an error')
|
|
done()
|
|
})
|
|
})
|
|
|
|
it('returns an error if execute fails', function (done) {
|
|
this.client.execute('test', [], function (err) {
|
|
assert(err, 'Should have returned an error')
|
|
done()
|
|
})
|
|
})
|
|
|
|
it('returns an error if there was a query error', function (done) {
|
|
const runErrorQuery = function (n, done) {
|
|
this.client.query('SELECT ALKJSFDSLFKJ', function (err) {
|
|
assert(err instanceof Error, 'Should return an error instance')
|
|
done()
|
|
})
|
|
}.bind(this)
|
|
async.timesSeries(3, runErrorQuery, done)
|
|
})
|
|
|
|
it('is still usable after an error', function (done) {
|
|
const runErrorQuery = (_, cb) => {
|
|
this.client.query('SELECT LKJSDJFLSDKFJ', (err) => {
|
|
assert(err instanceof Error, 'Should return an error instance')
|
|
cb(null, err)
|
|
})
|
|
}
|
|
async.timesSeries(3, runErrorQuery, (err, res) => {
|
|
assert(!err)
|
|
assert.equal(res.length, 3)
|
|
this.client.query('SELECT NOW()', done)
|
|
})
|
|
})
|
|
|
|
it('supports empty query', function (done) {
|
|
this.client.query('', function (err, rows) {
|
|
assert.ifError(err)
|
|
assert(Array.isArray(rows))
|
|
console.log('rows', rows)
|
|
assert(rows.length === 0)
|
|
done()
|
|
})
|
|
})
|
|
})
|