mirror of
https://github.com/brianc/node-postgres.git
synced 2025-12-08 20:16:25 +00:00
Replace all usages of var with let / const - eslint auto applied (#3444)
This commit is contained in:
parent
7a009381e6
commit
9e7a5d97cf
@ -16,7 +16,9 @@
|
||||
"@typescript-eslint/no-unused-vars": ["error", {
|
||||
"args": "none"
|
||||
}],
|
||||
"no-unused-vars": "off"
|
||||
"no-unused-vars": "off",
|
||||
"no-var": "error",
|
||||
"prefer-const": "error"
|
||||
},
|
||||
"overrides": [
|
||||
{
|
||||
|
||||
@ -1,14 +1,14 @@
|
||||
'use strict'
|
||||
|
||||
var chai = require('chai')
|
||||
var expect = chai.expect
|
||||
const chai = require('chai')
|
||||
const expect = chai.expect
|
||||
chai.should()
|
||||
|
||||
var parse = require('../').parse
|
||||
const parse = require('../').parse
|
||||
|
||||
describe('parse', function () {
|
||||
it('using connection string in client constructor', function () {
|
||||
var subject = parse('postgres://brian:pw@boom:381/lala')
|
||||
const subject = parse('postgres://brian:pw@boom:381/lala')
|
||||
subject.user.should.equal('brian')
|
||||
subject.password.should.equal('pw')
|
||||
subject.host.should.equal('boom')
|
||||
@ -17,42 +17,42 @@ describe('parse', function () {
|
||||
})
|
||||
|
||||
it('escape spaces if present', function () {
|
||||
var subject = parse('postgres://localhost/post gres')
|
||||
const subject = parse('postgres://localhost/post gres')
|
||||
subject.database.should.equal('post gres')
|
||||
})
|
||||
|
||||
it('do not double escape spaces', function () {
|
||||
var subject = parse('postgres://localhost/post%20gres')
|
||||
const subject = parse('postgres://localhost/post%20gres')
|
||||
subject.database.should.equal('post gres')
|
||||
})
|
||||
|
||||
it('initializing with unix domain socket', function () {
|
||||
var subject = parse('/var/run/')
|
||||
const subject = parse('/var/run/')
|
||||
subject.host.should.equal('/var/run/')
|
||||
})
|
||||
|
||||
it('initializing with unix domain socket and a specific database, the simple way', function () {
|
||||
var subject = parse('/var/run/ mydb')
|
||||
const subject = parse('/var/run/ mydb')
|
||||
subject.host.should.equal('/var/run/')
|
||||
subject.database.should.equal('mydb')
|
||||
})
|
||||
|
||||
it('initializing with unix domain socket, the health way', function () {
|
||||
var subject = parse('socket:/some path/?db=my[db]&encoding=utf8')
|
||||
const subject = parse('socket:/some path/?db=my[db]&encoding=utf8')
|
||||
subject.host.should.equal('/some path/')
|
||||
subject.database.should.equal('my[db]', 'must to be escaped and unescaped trough "my%5Bdb%5D"')
|
||||
subject.client_encoding.should.equal('utf8')
|
||||
})
|
||||
|
||||
it('initializing with unix domain socket, the escaped health way', function () {
|
||||
var subject = parse('socket:/some%20path/?db=my%2Bdb&encoding=utf8')
|
||||
const subject = parse('socket:/some%20path/?db=my%2Bdb&encoding=utf8')
|
||||
subject.host.should.equal('/some path/')
|
||||
subject.database.should.equal('my+db')
|
||||
subject.client_encoding.should.equal('utf8')
|
||||
})
|
||||
|
||||
it('initializing with unix domain socket, username and password', function () {
|
||||
var subject = parse('socket://brian:pw@/var/run/?db=mydb')
|
||||
const subject = parse('socket://brian:pw@/var/run/?db=mydb')
|
||||
subject.user.should.equal('brian')
|
||||
subject.password.should.equal('pw')
|
||||
subject.host.should.equal('/var/run/')
|
||||
@ -60,14 +60,14 @@ describe('parse', function () {
|
||||
})
|
||||
|
||||
it('password contains < and/or > characters', function () {
|
||||
var sourceConfig = {
|
||||
const sourceConfig = {
|
||||
user: 'brian',
|
||||
password: 'hello<ther>e',
|
||||
host: 'localhost',
|
||||
port: 5432,
|
||||
database: 'postgres',
|
||||
}
|
||||
var connectionString =
|
||||
const connectionString =
|
||||
'postgres://' +
|
||||
sourceConfig.user +
|
||||
':' +
|
||||
@ -78,19 +78,19 @@ describe('parse', function () {
|
||||
sourceConfig.port +
|
||||
'/' +
|
||||
sourceConfig.database
|
||||
var subject = parse(connectionString)
|
||||
const subject = parse(connectionString)
|
||||
subject.password.should.equal(sourceConfig.password)
|
||||
})
|
||||
|
||||
it('password contains colons', function () {
|
||||
var sourceConfig = {
|
||||
const sourceConfig = {
|
||||
user: 'brian',
|
||||
password: 'hello:pass:world',
|
||||
host: 'localhost',
|
||||
port: 5432,
|
||||
database: 'postgres',
|
||||
}
|
||||
var connectionString =
|
||||
const connectionString =
|
||||
'postgres://' +
|
||||
sourceConfig.user +
|
||||
':' +
|
||||
@ -101,21 +101,21 @@ describe('parse', function () {
|
||||
sourceConfig.port +
|
||||
'/' +
|
||||
sourceConfig.database
|
||||
var subject = parse(connectionString)
|
||||
const subject = parse(connectionString)
|
||||
subject.password.should.equal(sourceConfig.password)
|
||||
})
|
||||
|
||||
it('username or password contains weird characters', function () {
|
||||
var strang = 'pg://my f%irst name:is&%awesome!@localhost:9000'
|
||||
var subject = parse(strang)
|
||||
const strang = 'pg://my f%irst name:is&%awesome!@localhost:9000'
|
||||
const subject = parse(strang)
|
||||
subject.user.should.equal('my f%irst name')
|
||||
subject.password.should.equal('is&%awesome!')
|
||||
subject.host.should.equal('localhost')
|
||||
})
|
||||
|
||||
it('url is properly encoded', function () {
|
||||
var encoded = 'pg://bi%25na%25%25ry%20:s%40f%23@localhost/%20u%2520rl'
|
||||
var subject = parse(encoded)
|
||||
const encoded = 'pg://bi%25na%25%25ry%20:s%40f%23@localhost/%20u%2520rl'
|
||||
const subject = parse(encoded)
|
||||
subject.user.should.equal('bi%na%%ry ')
|
||||
subject.password.should.equal('s@f#')
|
||||
subject.host.should.equal('localhost')
|
||||
@ -123,24 +123,24 @@ describe('parse', function () {
|
||||
})
|
||||
|
||||
it('relative url sets database', function () {
|
||||
var relative = 'different_db_on_default_host'
|
||||
var subject = parse(relative)
|
||||
const relative = 'different_db_on_default_host'
|
||||
const subject = parse(relative)
|
||||
subject.database.should.equal('different_db_on_default_host')
|
||||
})
|
||||
|
||||
it('no pathname returns null database', function () {
|
||||
var subject = parse('pg://myhost')
|
||||
const subject = parse('pg://myhost')
|
||||
;(subject.database === null).should.equal(true)
|
||||
})
|
||||
|
||||
it('pathname of "/" returns null database', function () {
|
||||
var subject = parse('pg://myhost/')
|
||||
const subject = parse('pg://myhost/')
|
||||
subject.host.should.equal('myhost')
|
||||
;(subject.database === null).should.equal(true)
|
||||
})
|
||||
|
||||
it('configuration parameter host', function () {
|
||||
var subject = parse('pg://user:pass@/dbname?host=/unix/socket')
|
||||
const subject = parse('pg://user:pass@/dbname?host=/unix/socket')
|
||||
subject.user.should.equal('user')
|
||||
subject.password.should.equal('pass')
|
||||
subject.host.should.equal('/unix/socket')
|
||||
@ -148,13 +148,13 @@ describe('parse', function () {
|
||||
})
|
||||
|
||||
it('configuration parameter host overrides url host', function () {
|
||||
var subject = parse('pg://user:pass@localhost/dbname?host=/unix/socket')
|
||||
const subject = parse('pg://user:pass@localhost/dbname?host=/unix/socket')
|
||||
subject.database.should.equal('dbname')
|
||||
subject.host.should.equal('/unix/socket')
|
||||
})
|
||||
|
||||
it('url with encoded socket', function () {
|
||||
var subject = parse('pg://user:pass@%2Funix%2Fsocket/dbname')
|
||||
const subject = parse('pg://user:pass@%2Funix%2Fsocket/dbname')
|
||||
subject.user.should.equal('user')
|
||||
subject.password.should.equal('pass')
|
||||
subject.host.should.equal('/unix/socket')
|
||||
@ -162,7 +162,7 @@ describe('parse', function () {
|
||||
})
|
||||
|
||||
it('url with real host and an encoded db name', function () {
|
||||
var subject = parse('pg://user:pass@localhost/%2Fdbname')
|
||||
const subject = parse('pg://user:pass@localhost/%2Fdbname')
|
||||
subject.user.should.equal('user')
|
||||
subject.password.should.equal('pass')
|
||||
subject.host.should.equal('localhost')
|
||||
@ -170,7 +170,7 @@ describe('parse', function () {
|
||||
})
|
||||
|
||||
it('configuration parameter host treats encoded host as part of the db name', function () {
|
||||
var subject = parse('pg://user:pass@%2Funix%2Fsocket/dbname?host=localhost')
|
||||
const subject = parse('pg://user:pass@%2Funix%2Fsocket/dbname?host=localhost')
|
||||
subject.user.should.equal('user')
|
||||
subject.password.should.equal('pass')
|
||||
subject.host.should.equal('localhost')
|
||||
@ -178,258 +178,258 @@ describe('parse', function () {
|
||||
})
|
||||
|
||||
it('configuration parameter application_name', function () {
|
||||
var connectionString = 'pg:///?application_name=TheApp'
|
||||
var subject = parse(connectionString)
|
||||
const connectionString = 'pg:///?application_name=TheApp'
|
||||
const subject = parse(connectionString)
|
||||
subject.application_name.should.equal('TheApp')
|
||||
})
|
||||
|
||||
it('configuration parameter fallback_application_name', function () {
|
||||
var connectionString = 'pg:///?fallback_application_name=TheAppFallback'
|
||||
var subject = parse(connectionString)
|
||||
const connectionString = 'pg:///?fallback_application_name=TheAppFallback'
|
||||
const subject = parse(connectionString)
|
||||
subject.fallback_application_name.should.equal('TheAppFallback')
|
||||
})
|
||||
|
||||
it('configuration parameter options', function () {
|
||||
var connectionString = 'pg:///?options=-c geqo=off'
|
||||
var subject = parse(connectionString)
|
||||
const connectionString = 'pg:///?options=-c geqo=off'
|
||||
const subject = parse(connectionString)
|
||||
subject.options.should.equal('-c geqo=off')
|
||||
})
|
||||
|
||||
it('configuration parameter ssl=true', function () {
|
||||
var connectionString = 'pg:///?ssl=true'
|
||||
var subject = parse(connectionString)
|
||||
const connectionString = 'pg:///?ssl=true'
|
||||
const subject = parse(connectionString)
|
||||
subject.ssl.should.equal(true)
|
||||
})
|
||||
|
||||
it('configuration parameter ssl=1', function () {
|
||||
var connectionString = 'pg:///?ssl=1'
|
||||
var subject = parse(connectionString)
|
||||
const connectionString = 'pg:///?ssl=1'
|
||||
const subject = parse(connectionString)
|
||||
subject.ssl.should.equal(true)
|
||||
})
|
||||
|
||||
it('configuration parameter ssl=0', function () {
|
||||
var connectionString = 'pg:///?ssl=0'
|
||||
var subject = parse(connectionString)
|
||||
const connectionString = 'pg:///?ssl=0'
|
||||
const subject = parse(connectionString)
|
||||
subject.ssl.should.equal(false)
|
||||
})
|
||||
|
||||
it('set ssl', function () {
|
||||
var subject = parse('pg://myhost/db?ssl=1')
|
||||
const subject = parse('pg://myhost/db?ssl=1')
|
||||
subject.ssl.should.equal(true)
|
||||
})
|
||||
|
||||
it('configuration parameter sslcert=/path/to/cert', function () {
|
||||
var connectionString = 'pg:///?sslcert=' + __dirname + '/example.cert'
|
||||
var subject = parse(connectionString)
|
||||
const connectionString = 'pg:///?sslcert=' + __dirname + '/example.cert'
|
||||
const subject = parse(connectionString)
|
||||
subject.ssl.should.eql({
|
||||
cert: 'example cert\n',
|
||||
})
|
||||
})
|
||||
|
||||
it('configuration parameter sslkey=/path/to/key', function () {
|
||||
var connectionString = 'pg:///?sslkey=' + __dirname + '/example.key'
|
||||
var subject = parse(connectionString)
|
||||
const connectionString = 'pg:///?sslkey=' + __dirname + '/example.key'
|
||||
const subject = parse(connectionString)
|
||||
subject.ssl.should.eql({
|
||||
key: 'example key\n',
|
||||
})
|
||||
})
|
||||
|
||||
it('configuration parameter sslrootcert=/path/to/ca', function () {
|
||||
var connectionString = 'pg:///?sslrootcert=' + __dirname + '/example.ca'
|
||||
var subject = parse(connectionString)
|
||||
const connectionString = 'pg:///?sslrootcert=' + __dirname + '/example.ca'
|
||||
const subject = parse(connectionString)
|
||||
subject.ssl.should.eql({
|
||||
ca: 'example ca\n',
|
||||
})
|
||||
})
|
||||
|
||||
it('configuration parameter sslmode=no-verify', function () {
|
||||
var connectionString = 'pg:///?sslmode=no-verify'
|
||||
var subject = parse(connectionString)
|
||||
const connectionString = 'pg:///?sslmode=no-verify'
|
||||
const subject = parse(connectionString)
|
||||
subject.ssl.should.eql({
|
||||
rejectUnauthorized: false,
|
||||
})
|
||||
})
|
||||
|
||||
it('configuration parameter sslmode=disable', function () {
|
||||
var connectionString = 'pg:///?sslmode=disable'
|
||||
var subject = parse(connectionString)
|
||||
const connectionString = 'pg:///?sslmode=disable'
|
||||
const subject = parse(connectionString)
|
||||
subject.ssl.should.eql(false)
|
||||
})
|
||||
|
||||
it('configuration parameter sslmode=prefer', function () {
|
||||
var connectionString = 'pg:///?sslmode=prefer'
|
||||
var subject = parse(connectionString)
|
||||
const connectionString = 'pg:///?sslmode=prefer'
|
||||
const subject = parse(connectionString)
|
||||
subject.ssl.should.eql({})
|
||||
})
|
||||
|
||||
it('configuration parameter sslmode=require', function () {
|
||||
var connectionString = 'pg:///?sslmode=require'
|
||||
var subject = parse(connectionString)
|
||||
const connectionString = 'pg:///?sslmode=require'
|
||||
const subject = parse(connectionString)
|
||||
subject.ssl.should.eql({})
|
||||
})
|
||||
|
||||
it('configuration parameter sslmode=verify-ca', function () {
|
||||
var connectionString = 'pg:///?sslmode=verify-ca'
|
||||
var subject = parse(connectionString)
|
||||
const connectionString = 'pg:///?sslmode=verify-ca'
|
||||
const subject = parse(connectionString)
|
||||
subject.ssl.should.eql({})
|
||||
})
|
||||
|
||||
it('configuration parameter sslmode=verify-full', function () {
|
||||
var connectionString = 'pg:///?sslmode=verify-full'
|
||||
var subject = parse(connectionString)
|
||||
const connectionString = 'pg:///?sslmode=verify-full'
|
||||
const subject = parse(connectionString)
|
||||
subject.ssl.should.eql({})
|
||||
})
|
||||
|
||||
it('configuration parameter ssl=true and sslmode=require still work with sslrootcert=/path/to/ca', function () {
|
||||
var connectionString = 'pg:///?ssl=true&sslrootcert=' + __dirname + '/example.ca&sslmode=require'
|
||||
var subject = parse(connectionString)
|
||||
const connectionString = 'pg:///?ssl=true&sslrootcert=' + __dirname + '/example.ca&sslmode=require'
|
||||
const subject = parse(connectionString)
|
||||
subject.ssl.should.eql({
|
||||
ca: 'example ca\n',
|
||||
})
|
||||
})
|
||||
|
||||
it('configuration parameter sslmode=disable with uselibpqcompat query param', function () {
|
||||
var connectionString = 'pg:///?sslmode=disable&uselibpqcompat=true'
|
||||
var subject = parse(connectionString)
|
||||
const connectionString = 'pg:///?sslmode=disable&uselibpqcompat=true'
|
||||
const subject = parse(connectionString)
|
||||
subject.ssl.should.eql(false)
|
||||
})
|
||||
|
||||
it('configuration parameter sslmode=prefer with uselibpqcompat query param', function () {
|
||||
var connectionString = 'pg:///?sslmode=prefer&uselibpqcompat=true'
|
||||
var subject = parse(connectionString)
|
||||
const connectionString = 'pg:///?sslmode=prefer&uselibpqcompat=true'
|
||||
const subject = parse(connectionString)
|
||||
subject.ssl.should.eql({
|
||||
rejectUnauthorized: false,
|
||||
})
|
||||
})
|
||||
|
||||
it('configuration parameter sslmode=require with uselibpqcompat query param', function () {
|
||||
var connectionString = 'pg:///?sslmode=require&uselibpqcompat=true'
|
||||
var subject = parse(connectionString)
|
||||
const connectionString = 'pg:///?sslmode=require&uselibpqcompat=true'
|
||||
const subject = parse(connectionString)
|
||||
subject.ssl.should.eql({
|
||||
rejectUnauthorized: false,
|
||||
})
|
||||
})
|
||||
|
||||
it('configuration parameter sslmode=verify-ca with uselibpqcompat query param', function () {
|
||||
var connectionString = 'pg:///?sslmode=verify-ca&uselibpqcompat=true'
|
||||
const connectionString = 'pg:///?sslmode=verify-ca&uselibpqcompat=true'
|
||||
expect(function () {
|
||||
parse(connectionString)
|
||||
}).to.throw()
|
||||
})
|
||||
|
||||
it('configuration parameter sslmode=verify-ca and sslrootcert with uselibpqcompat query param', function () {
|
||||
var connectionString = 'pg:///?sslmode=verify-ca&uselibpqcompat=true&sslrootcert=' + __dirname + '/example.ca'
|
||||
var subject = parse(connectionString)
|
||||
const connectionString = 'pg:///?sslmode=verify-ca&uselibpqcompat=true&sslrootcert=' + __dirname + '/example.ca'
|
||||
const subject = parse(connectionString)
|
||||
subject.ssl.should.have.property('checkServerIdentity').that.is.a('function')
|
||||
expect(subject.ssl.checkServerIdentity()).be.undefined
|
||||
})
|
||||
|
||||
it('configuration parameter sslmode=verify-full with uselibpqcompat query param', function () {
|
||||
var connectionString = 'pg:///?sslmode=verify-full&uselibpqcompat=true'
|
||||
var subject = parse(connectionString)
|
||||
const connectionString = 'pg:///?sslmode=verify-full&uselibpqcompat=true'
|
||||
const subject = parse(connectionString)
|
||||
subject.ssl.should.eql({})
|
||||
})
|
||||
|
||||
it('configuration parameter ssl=true and sslmode=require still work with sslrootcert=/path/to/ca with uselibpqcompat query param', function () {
|
||||
var connectionString =
|
||||
const connectionString =
|
||||
'pg:///?ssl=true&sslrootcert=' + __dirname + '/example.ca&sslmode=require&uselibpqcompat=true'
|
||||
var subject = parse(connectionString)
|
||||
const subject = parse(connectionString)
|
||||
subject.ssl.should.have.property('ca', 'example ca\n')
|
||||
subject.ssl.should.have.property('checkServerIdentity').that.is.a('function')
|
||||
expect(subject.ssl.checkServerIdentity()).be.undefined
|
||||
})
|
||||
|
||||
it('configuration parameter sslmode=disable with useLibpqCompat option', function () {
|
||||
var connectionString = 'pg:///?sslmode=disable'
|
||||
var subject = parse(connectionString, { useLibpqCompat: true })
|
||||
const connectionString = 'pg:///?sslmode=disable'
|
||||
const subject = parse(connectionString, { useLibpqCompat: true })
|
||||
subject.ssl.should.eql(false)
|
||||
})
|
||||
|
||||
it('configuration parameter sslmode=prefer with useLibpqCompat option', function () {
|
||||
var connectionString = 'pg:///?sslmode=prefer'
|
||||
var subject = parse(connectionString, { useLibpqCompat: true })
|
||||
const connectionString = 'pg:///?sslmode=prefer'
|
||||
const subject = parse(connectionString, { useLibpqCompat: true })
|
||||
subject.ssl.should.eql({
|
||||
rejectUnauthorized: false,
|
||||
})
|
||||
})
|
||||
|
||||
it('configuration parameter sslmode=require with useLibpqCompat option', function () {
|
||||
var connectionString = 'pg:///?sslmode=require'
|
||||
var subject = parse(connectionString, { useLibpqCompat: true })
|
||||
const connectionString = 'pg:///?sslmode=require'
|
||||
const subject = parse(connectionString, { useLibpqCompat: true })
|
||||
subject.ssl.should.eql({
|
||||
rejectUnauthorized: false,
|
||||
})
|
||||
})
|
||||
|
||||
it('configuration parameter sslmode=verify-ca with useLibpqCompat option', function () {
|
||||
var connectionString = 'pg:///?sslmode=verify-ca'
|
||||
const connectionString = 'pg:///?sslmode=verify-ca'
|
||||
expect(function () {
|
||||
parse(connectionString, { useLibpqCompat: true })
|
||||
}).to.throw()
|
||||
})
|
||||
|
||||
it('configuration parameter sslmode=verify-ca and sslrootcert with useLibpqCompat option', function () {
|
||||
var connectionString = 'pg:///?sslmode=verify-ca&sslrootcert=' + __dirname + '/example.ca'
|
||||
var subject = parse(connectionString, { useLibpqCompat: true })
|
||||
const connectionString = 'pg:///?sslmode=verify-ca&sslrootcert=' + __dirname + '/example.ca'
|
||||
const subject = parse(connectionString, { useLibpqCompat: true })
|
||||
subject.ssl.should.have.property('checkServerIdentity').that.is.a('function')
|
||||
expect(subject.ssl.checkServerIdentity()).be.undefined
|
||||
})
|
||||
|
||||
it('configuration parameter sslmode=verify-full with useLibpqCompat option', function () {
|
||||
var connectionString = 'pg:///?sslmode=verify-full'
|
||||
var subject = parse(connectionString, { useLibpqCompat: true })
|
||||
const connectionString = 'pg:///?sslmode=verify-full'
|
||||
const subject = parse(connectionString, { useLibpqCompat: true })
|
||||
subject.ssl.should.eql({})
|
||||
})
|
||||
|
||||
it('configuration parameter ssl=true and sslmode=require still work with sslrootcert=/path/to/ca with useLibpqCompat option', function () {
|
||||
var connectionString = 'pg:///?ssl=true&sslrootcert=' + __dirname + '/example.ca&sslmode=require'
|
||||
var subject = parse(connectionString, { useLibpqCompat: true })
|
||||
const connectionString = 'pg:///?ssl=true&sslrootcert=' + __dirname + '/example.ca&sslmode=require'
|
||||
const subject = parse(connectionString, { useLibpqCompat: true })
|
||||
subject.ssl.should.have.property('ca', 'example ca\n')
|
||||
subject.ssl.should.have.property('checkServerIdentity').that.is.a('function')
|
||||
expect(subject.ssl.checkServerIdentity()).be.undefined
|
||||
})
|
||||
|
||||
it('does not allow sslcompat query parameter and useLibpqCompat option at the same time', function () {
|
||||
var connectionString = 'pg:///?uselibpqcompat=true'
|
||||
const connectionString = 'pg:///?uselibpqcompat=true'
|
||||
expect(function () {
|
||||
parse(connectionString, { useLibpqCompat: true })
|
||||
}).to.throw()
|
||||
})
|
||||
|
||||
it('allow other params like max, ...', function () {
|
||||
var subject = parse('pg://myhost/db?max=18&min=4')
|
||||
const subject = parse('pg://myhost/db?max=18&min=4')
|
||||
subject.max.should.equal('18')
|
||||
subject.min.should.equal('4')
|
||||
})
|
||||
|
||||
it('configuration parameter keepalives', function () {
|
||||
var connectionString = 'pg:///?keepalives=1'
|
||||
var subject = parse(connectionString)
|
||||
const connectionString = 'pg:///?keepalives=1'
|
||||
const subject = parse(connectionString)
|
||||
subject.keepalives.should.equal('1')
|
||||
})
|
||||
|
||||
it('unknown configuration parameter is passed into client', function () {
|
||||
var connectionString = 'pg:///?ThereIsNoSuchPostgresParameter=1234'
|
||||
var subject = parse(connectionString)
|
||||
const connectionString = 'pg:///?ThereIsNoSuchPostgresParameter=1234'
|
||||
const subject = parse(connectionString)
|
||||
subject.ThereIsNoSuchPostgresParameter.should.equal('1234')
|
||||
})
|
||||
|
||||
it('do not override a config field with value from query string', function () {
|
||||
var subject = parse('socket:/some path/?db=my[db]&encoding=utf8&client_encoding=bogus')
|
||||
const subject = parse('socket:/some path/?db=my[db]&encoding=utf8&client_encoding=bogus')
|
||||
subject.host.should.equal('/some path/')
|
||||
subject.database.should.equal('my[db]', 'must to be escaped and unescaped through "my%5Bdb%5D"')
|
||||
subject.client_encoding.should.equal('utf8')
|
||||
})
|
||||
|
||||
it('return last value of repeated parameter', function () {
|
||||
var connectionString = 'pg:///?keepalives=1&keepalives=0'
|
||||
var subject = parse(connectionString)
|
||||
const connectionString = 'pg:///?keepalives=1&keepalives=0'
|
||||
const subject = parse(connectionString)
|
||||
subject.keepalives.should.equal('0')
|
||||
})
|
||||
|
||||
it('use the port specified in the query parameters', function () {
|
||||
var connectionString = 'postgres:///?host=localhost&port=1234'
|
||||
var subject = parse(connectionString)
|
||||
const connectionString = 'postgres:///?host=localhost&port=1234'
|
||||
const subject = parse(connectionString)
|
||||
subject.port.should.equal('1234')
|
||||
})
|
||||
})
|
||||
|
||||
@ -1,10 +1,10 @@
|
||||
var pg = require('pg').native
|
||||
var Native = require('../')
|
||||
const pg = require('pg').native
|
||||
const Native = require('../')
|
||||
|
||||
var warmup = function (fn, cb) {
|
||||
var count = 0
|
||||
var max = 10
|
||||
var run = function (err) {
|
||||
const warmup = function (fn, cb) {
|
||||
let count = 0
|
||||
const max = 10
|
||||
const run = function (err) {
|
||||
if (err) return cb(err)
|
||||
|
||||
if (max >= count++) {
|
||||
@ -16,26 +16,26 @@ var warmup = function (fn, cb) {
|
||||
run()
|
||||
}
|
||||
|
||||
var native = Native()
|
||||
const native = Native()
|
||||
native.connectSync()
|
||||
|
||||
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()
|
||||
const queryText = 'SELECT generate_series(0, 1000) as X, generate_series(0, 1000) as Y, generate_series(0, 1000) as Z'
|
||||
const client = new pg.Client()
|
||||
client.connect(function () {
|
||||
var pure = function (cb) {
|
||||
const pure = function (cb) {
|
||||
client.query(queryText, function (err) {
|
||||
if (err) throw err
|
||||
cb(err)
|
||||
})
|
||||
}
|
||||
var nativeQuery = function (cb) {
|
||||
const nativeQuery = function (cb) {
|
||||
native.query(queryText, function (err) {
|
||||
if (err) throw err
|
||||
cb(err)
|
||||
})
|
||||
}
|
||||
|
||||
var run = function () {
|
||||
const run = function () {
|
||||
console.time('pure')
|
||||
warmup(pure, function () {
|
||||
console.timeEnd('pure')
|
||||
|
||||
@ -1,29 +1,29 @@
|
||||
var Client = require('../')
|
||||
var async = require('async')
|
||||
const Client = require('../')
|
||||
const async = require('async')
|
||||
|
||||
var loop = function () {
|
||||
var client = new Client()
|
||||
const loop = function () {
|
||||
const client = new Client()
|
||||
|
||||
var connect = function (cb) {
|
||||
const connect = function (cb) {
|
||||
client.connect(cb)
|
||||
}
|
||||
|
||||
var simpleQuery = function (cb) {
|
||||
const simpleQuery = function (cb) {
|
||||
client.query('SELECT NOW()', cb)
|
||||
}
|
||||
|
||||
var paramsQuery = function (cb) {
|
||||
const paramsQuery = function (cb) {
|
||||
client.query('SELECT $1::text as name', ['Brian'], cb)
|
||||
}
|
||||
|
||||
var prepared = function (cb) {
|
||||
const prepared = function (cb) {
|
||||
client.prepare('test', 'SELECT $1::text as name', 1, function (err) {
|
||||
if (err) return cb(err)
|
||||
client.execute('test', ['Brian'], cb)
|
||||
})
|
||||
}
|
||||
|
||||
var sync = function (cb) {
|
||||
const sync = function (cb) {
|
||||
client.querySync('SELECT NOW()')
|
||||
client.querySync('SELECT $1::text as name', ['Brian'])
|
||||
client.prepareSync('boom', 'SELECT $1::text as name', 1)
|
||||
@ -31,13 +31,13 @@ var loop = function () {
|
||||
setImmediate(cb)
|
||||
}
|
||||
|
||||
var end = function (cb) {
|
||||
const end = function (cb) {
|
||||
client.end(cb)
|
||||
}
|
||||
|
||||
var ops = [connect, simpleQuery, paramsQuery, prepared, sync, end]
|
||||
const ops = [connect, simpleQuery, paramsQuery, prepared, sync, end]
|
||||
|
||||
var start = Date.now()
|
||||
const start = Date.now()
|
||||
async.series(ops, function (err) {
|
||||
if (err) throw err
|
||||
console.log(Date.now() - start)
|
||||
|
||||
@ -1,12 +1,12 @@
|
||||
var Libpq = require('libpq')
|
||||
var EventEmitter = require('events').EventEmitter
|
||||
var util = require('util')
|
||||
var assert = require('assert')
|
||||
var types = require('pg-types')
|
||||
var buildResult = require('./lib/build-result')
|
||||
var CopyStream = require('./lib/copy-stream')
|
||||
const Libpq = require('libpq')
|
||||
const EventEmitter = require('events').EventEmitter
|
||||
const util = require('util')
|
||||
const assert = require('assert')
|
||||
const types = require('pg-types')
|
||||
const buildResult = require('./lib/build-result')
|
||||
const CopyStream = require('./lib/copy-stream')
|
||||
|
||||
var Client = (module.exports = function (config) {
|
||||
const Client = (module.exports = function (config) {
|
||||
if (!(this instanceof Client)) {
|
||||
return new Client(config)
|
||||
}
|
||||
@ -51,34 +51,31 @@ Client.prototype.connectSync = function (params) {
|
||||
}
|
||||
|
||||
Client.prototype.query = function (text, values, cb) {
|
||||
var queryFn
|
||||
let queryFn
|
||||
|
||||
if (typeof values === 'function') {
|
||||
cb = values
|
||||
}
|
||||
|
||||
if (Array.isArray(values)) {
|
||||
queryFn = function () {
|
||||
return self.pq.sendQueryParams(text, values)
|
||||
queryFn = () => {
|
||||
return this.pq.sendQueryParams(text, values)
|
||||
}
|
||||
} else {
|
||||
queryFn = function () {
|
||||
return self.pq.sendQuery(text)
|
||||
queryFn = () => {
|
||||
return this.pq.sendQuery(text)
|
||||
}
|
||||
}
|
||||
|
||||
var self = this
|
||||
|
||||
self._dispatchQuery(self.pq, queryFn, function (err) {
|
||||
this._dispatchQuery(this.pq, queryFn, (err) => {
|
||||
if (err) return cb(err)
|
||||
|
||||
self._awaitResult(cb)
|
||||
this._awaitResult(cb)
|
||||
})
|
||||
}
|
||||
|
||||
Client.prototype.prepare = function (statementName, text, nParams, cb) {
|
||||
var self = this
|
||||
var fn = function () {
|
||||
const self = this
|
||||
const fn = function () {
|
||||
return self.pq.sendPrepare(statementName, text, nParams)
|
||||
}
|
||||
|
||||
@ -89,9 +86,9 @@ Client.prototype.prepare = function (statementName, text, nParams, cb) {
|
||||
}
|
||||
|
||||
Client.prototype.execute = function (statementName, parameters, cb) {
|
||||
var self = this
|
||||
const self = this
|
||||
|
||||
var fn = function () {
|
||||
const fn = function () {
|
||||
return self.pq.sendQueryPrepared(statementName, parameters)
|
||||
}
|
||||
|
||||
@ -111,7 +108,7 @@ Client.prototype.getCopyStream = function () {
|
||||
Client.prototype.cancel = function (cb) {
|
||||
assert(cb, 'Callback is required')
|
||||
// result is either true or a string containing an error
|
||||
var result = this.pq.cancel()
|
||||
const result = this.pq.cancel()
|
||||
return setImmediate(function () {
|
||||
cb(result === true ? undefined : new Error(result))
|
||||
})
|
||||
@ -158,7 +155,7 @@ Client.prototype.end = function (cb) {
|
||||
}
|
||||
|
||||
Client.prototype._readError = function (message) {
|
||||
var err = new Error(message || this.pq.errorMessage())
|
||||
const err = new Error(message || this.pq.errorMessage())
|
||||
this.emit('error', err)
|
||||
}
|
||||
|
||||
@ -174,7 +171,7 @@ Client.prototype._consumeQueryResults = function (pq) {
|
||||
}
|
||||
|
||||
Client.prototype._emitResult = function (pq) {
|
||||
var status = pq.resultStatus()
|
||||
const status = pq.resultStatus()
|
||||
switch (status) {
|
||||
case 'PGRES_FATAL_ERROR':
|
||||
this._queryError = new Error(this.pq.resultErrorMessage())
|
||||
@ -203,7 +200,7 @@ Client.prototype._emitResult = function (pq) {
|
||||
|
||||
// called when libpq is readable
|
||||
Client.prototype._read = function () {
|
||||
var pq = this.pq
|
||||
const pq = this.pq
|
||||
// read waiting data from the socket
|
||||
// e.g. clear the pending 'select'
|
||||
if (!pq.consumeInput()) {
|
||||
@ -238,7 +235,7 @@ Client.prototype._read = function () {
|
||||
|
||||
this.emit('readyForQuery')
|
||||
|
||||
var notice = this.pq.notifies()
|
||||
let notice = this.pq.notifies()
|
||||
while (notice) {
|
||||
this.emit('notification', notice)
|
||||
notice = this.pq.notifies()
|
||||
@ -254,8 +251,8 @@ Client.prototype._startReading = function () {
|
||||
this.pq.startReader()
|
||||
}
|
||||
|
||||
var throwIfError = function (pq) {
|
||||
var err = pq.resultErrorMessage() || pq.errorMessage()
|
||||
const throwIfError = function (pq) {
|
||||
const err = pq.resultErrorMessage() || pq.errorMessage()
|
||||
if (err) {
|
||||
throw new Error(err)
|
||||
}
|
||||
@ -268,7 +265,7 @@ Client.prototype._awaitResult = function (cb) {
|
||||
|
||||
// wait for the writable socket to drain
|
||||
Client.prototype._waitForDrain = function (pq, cb) {
|
||||
var res = pq.flush()
|
||||
const res = pq.flush()
|
||||
// res of 0 is success
|
||||
if (res === 0) return cb()
|
||||
|
||||
@ -277,7 +274,7 @@ Client.prototype._waitForDrain = function (pq, cb) {
|
||||
|
||||
// otherwise outgoing message didn't flush to socket
|
||||
// wait for it to flush and try again
|
||||
var self = this
|
||||
const self = this
|
||||
// you cannot read & write on a socket at the same time
|
||||
return pq.writable(function () {
|
||||
self._waitForDrain(pq, cb)
|
||||
@ -288,9 +285,9 @@ Client.prototype._waitForDrain = function (pq, cb) {
|
||||
// finish writing query text to the socket
|
||||
Client.prototype._dispatchQuery = function (pq, fn, cb) {
|
||||
this._stopReading()
|
||||
var success = pq.setNonBlocking(true)
|
||||
const success = pq.setNonBlocking(true)
|
||||
if (!success) return cb(new Error('Unable to set non-blocking to true'))
|
||||
var sent = fn()
|
||||
const sent = fn()
|
||||
if (!sent) return cb(new Error(pq.errorMessage() || 'Something went wrong dispatching the query'))
|
||||
this._waitForDrain(pq, cb)
|
||||
}
|
||||
|
||||
@ -20,9 +20,9 @@ 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)
|
||||
const row = {}
|
||||
for (let x = 0; x < nfields; x++) {
|
||||
const name = pq.fname(x)
|
||||
row[name] = null
|
||||
this.fields[x] = {
|
||||
name: name,
|
||||
@ -35,14 +35,14 @@ class Result {
|
||||
consumeRows(pq) {
|
||||
const tupleCount = pq.ntuples()
|
||||
this.rows = new Array(tupleCount)
|
||||
for (var i = 0; i < tupleCount; i++) {
|
||||
for (let i = 0; i < tupleCount; i++) {
|
||||
this.rows[i] = this._arrayMode ? this.consumeRowAsArray(pq, i) : this.consumeRowAsObject(pq, i)
|
||||
}
|
||||
}
|
||||
|
||||
consumeRowAsObject(pq, rowIndex) {
|
||||
const row = { ...this._prebuiltEmptyResultObject }
|
||||
for (var j = 0; j < this.fields.length; j++) {
|
||||
for (let j = 0; j < this.fields.length; j++) {
|
||||
row[this.fields[j].name] = this.readValue(pq, rowIndex, j)
|
||||
}
|
||||
return row
|
||||
@ -50,14 +50,14 @@ class Result {
|
||||
|
||||
consumeRowAsArray(pq, rowIndex) {
|
||||
const row = new Array(this.fields.length)
|
||||
for (var j = 0; j < this.fields.length; j++) {
|
||||
for (let j = 0; j < this.fields.length; j++) {
|
||||
row[j] = this.readValue(pq, rowIndex, j)
|
||||
}
|
||||
return row
|
||||
}
|
||||
|
||||
readValue(pq, rowIndex, colIndex) {
|
||||
var rawValue = pq.getvalue(rowIndex, colIndex)
|
||||
const rawValue = pq.getvalue(rowIndex, colIndex)
|
||||
if (rawValue === '' && pq.getisnull(rowIndex, colIndex)) {
|
||||
return null
|
||||
}
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
var Duplex = require('stream').Duplex
|
||||
var Writable = require('stream').Writable
|
||||
var util = require('util')
|
||||
const Duplex = require('stream').Duplex
|
||||
const Writable = require('stream').Writable
|
||||
const util = require('util')
|
||||
|
||||
var CopyStream = (module.exports = function (pq, options) {
|
||||
const CopyStream = (module.exports = function (pq, options) {
|
||||
Duplex.call(this, options)
|
||||
this.pq = pq
|
||||
this._reading = false
|
||||
@ -12,7 +12,7 @@ util.inherits(CopyStream, Duplex)
|
||||
|
||||
// writer methods
|
||||
CopyStream.prototype._write = function (chunk, encoding, cb) {
|
||||
var result = this.pq.putCopyData(chunk)
|
||||
const result = this.pq.putCopyData(chunk)
|
||||
|
||||
// sent successfully
|
||||
if (result === 1) return cb()
|
||||
@ -21,22 +21,22 @@ CopyStream.prototype._write = function (chunk, encoding, cb) {
|
||||
if (result === -1) return cb(new Error(this.pq.errorMessage()))
|
||||
|
||||
// command would block. wait for writable and call again.
|
||||
var self = this
|
||||
const self = this
|
||||
this.pq.writable(function () {
|
||||
self._write(chunk, encoding, cb)
|
||||
})
|
||||
}
|
||||
|
||||
CopyStream.prototype.end = function () {
|
||||
var args = Array.prototype.slice.call(arguments, 0)
|
||||
var self = this
|
||||
const args = Array.prototype.slice.call(arguments, 0)
|
||||
const self = this
|
||||
|
||||
var callback = args.pop()
|
||||
const callback = args.pop()
|
||||
|
||||
if (args.length) {
|
||||
this.write(args[0])
|
||||
}
|
||||
var result = this.pq.putCopyEnd()
|
||||
const result = this.pq.putCopyEnd()
|
||||
|
||||
// sent successfully
|
||||
if (result === 1) {
|
||||
@ -55,7 +55,7 @@ CopyStream.prototype.end = function () {
|
||||
|
||||
// error
|
||||
if (result === -1) {
|
||||
var err = new Error(this.pq.errorMessage())
|
||||
const err = new Error(this.pq.errorMessage())
|
||||
return this.emit('error', err)
|
||||
}
|
||||
|
||||
@ -70,7 +70,7 @@ CopyStream.prototype.end = function () {
|
||||
|
||||
// reader methods
|
||||
CopyStream.prototype._consumeBuffer = function (cb) {
|
||||
var result = this.pq.getCopyData(true)
|
||||
const result = this.pq.getCopyData(true)
|
||||
if (result instanceof Buffer) {
|
||||
return setImmediate(function () {
|
||||
cb(null, result)
|
||||
@ -81,7 +81,7 @@ CopyStream.prototype._consumeBuffer = function (cb) {
|
||||
return cb(null, null)
|
||||
}
|
||||
if (result === 0) {
|
||||
var self = this
|
||||
const self = this
|
||||
this.pq.once('readable', function () {
|
||||
self.pq.stopReader()
|
||||
self.pq.consumeInput()
|
||||
@ -96,7 +96,7 @@ CopyStream.prototype._read = function (size) {
|
||||
if (this._reading) return
|
||||
this._reading = true
|
||||
// console.log('read begin');
|
||||
var self = this
|
||||
const self = this
|
||||
this._consumeBuffer(function (err, buffer) {
|
||||
self._reading = false
|
||||
if (err) {
|
||||
@ -110,18 +110,18 @@ CopyStream.prototype._read = function (size) {
|
||||
})
|
||||
}
|
||||
|
||||
var consumeResults = function (pq, cb) {
|
||||
var cleanup = function () {
|
||||
const consumeResults = function (pq, cb) {
|
||||
const cleanup = function () {
|
||||
pq.removeListener('readable', onReadable)
|
||||
pq.stopReader()
|
||||
}
|
||||
|
||||
var readError = function (message) {
|
||||
const readError = function (message) {
|
||||
cleanup()
|
||||
return cb(new Error(message || pq.errorMessage()))
|
||||
}
|
||||
|
||||
var onReadable = function () {
|
||||
const onReadable = function () {
|
||||
// read waiting data from the socket
|
||||
// e.g. clear the pending 'select'
|
||||
if (!pq.consumeInput()) {
|
||||
|
||||
@ -1,16 +1,16 @@
|
||||
var Client = require('../')
|
||||
var assert = require('assert')
|
||||
const Client = require('../')
|
||||
const assert = require('assert')
|
||||
|
||||
describe('client with arrayMode', function () {
|
||||
it('returns result as array', function (done) {
|
||||
var client = new Client({ arrayMode: true })
|
||||
const client = new Client({ arrayMode: true })
|
||||
client.connectSync()
|
||||
client.querySync('CREATE TEMP TABLE blah(name TEXT)')
|
||||
client.querySync('INSERT INTO blah (name) VALUES ($1)', ['brian'])
|
||||
client.querySync('INSERT INTO blah (name) VALUES ($1)', ['aaron'])
|
||||
var rows = client.querySync('SELECT * FROM blah')
|
||||
const rows = client.querySync('SELECT * FROM blah')
|
||||
assert.equal(rows.length, 2)
|
||||
var row = rows[0]
|
||||
const row = rows[0]
|
||||
assert.equal(row.length, 1)
|
||||
assert.equal(row[0], 'brian')
|
||||
assert.equal(rows[1][0], 'aaron')
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
var Client = require('../')
|
||||
var ok = require('okay')
|
||||
var assert = require('assert')
|
||||
var concat = require('concat-stream')
|
||||
const Client = require('../')
|
||||
const ok = require('okay')
|
||||
const assert = require('assert')
|
||||
const concat = require('concat-stream')
|
||||
|
||||
describe('async workflow', function () {
|
||||
before(function (done) {
|
||||
@ -9,7 +9,7 @@ describe('async workflow', function () {
|
||||
this.client.connect(done)
|
||||
})
|
||||
|
||||
var echoParams = function (params, cb) {
|
||||
const echoParams = function (params, cb) {
|
||||
this.client.query(
|
||||
'SELECT $1::text as first, $2::text as second',
|
||||
params,
|
||||
@ -20,20 +20,20 @@ describe('async workflow', function () {
|
||||
)
|
||||
}
|
||||
|
||||
var checkParams = function (params, rows) {
|
||||
const checkParams = function (params, rows) {
|
||||
assert.equal(rows.length, 1)
|
||||
assert.equal(rows[0].first, params[0])
|
||||
assert.equal(rows[0].second, params[1])
|
||||
}
|
||||
|
||||
it('sends async query', function (done) {
|
||||
var params = ['one', 'two']
|
||||
const params = ['one', 'two']
|
||||
echoParams.call(this, params, done)
|
||||
})
|
||||
|
||||
it('sends multiple async queries', function (done) {
|
||||
var self = this
|
||||
var params = ['bang', 'boom']
|
||||
const self = this
|
||||
const params = ['bang', 'boom']
|
||||
echoParams.call(
|
||||
this,
|
||||
params,
|
||||
@ -44,13 +44,13 @@ describe('async workflow', function () {
|
||||
})
|
||||
|
||||
it('sends an async query, copies in, copies out, and sends another query', function (done) {
|
||||
var self = this
|
||||
const self = this
|
||||
this.client.querySync('CREATE TEMP TABLE test(name text, age int)')
|
||||
this.client.query(
|
||||
"INSERT INTO test(name, age) VALUES('brian', 32)",
|
||||
ok(done, function () {
|
||||
self.client.querySync('COPY test FROM stdin')
|
||||
var input = self.client.getCopyStream()
|
||||
const input = self.client.getCopyStream()
|
||||
input.write(Buffer.from('Aaron\t30\n', 'utf8'))
|
||||
input.end(function () {
|
||||
self.client.query(
|
||||
@ -60,7 +60,7 @@ describe('async workflow', function () {
|
||||
self.client.query(
|
||||
'COPY test TO stdout',
|
||||
ok(done, function () {
|
||||
var output = self.client.getCopyStream()
|
||||
const output = self.client.getCopyStream()
|
||||
|
||||
// pump the stream
|
||||
output.read()
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
var Client = require('../')
|
||||
var assert = require('assert')
|
||||
const Client = require('../')
|
||||
const assert = require('assert')
|
||||
|
||||
describe('cancel query', function () {
|
||||
it('works', function (done) {
|
||||
var client = new Client()
|
||||
const client = new Client()
|
||||
client.connectSync()
|
||||
client.query('SELECT pg_sleep(1000);', function (err) {
|
||||
assert(err instanceof Error)
|
||||
@ -17,7 +17,7 @@ describe('cancel query', function () {
|
||||
})
|
||||
|
||||
it('does not raise error if no active query', function (done) {
|
||||
var client = new Client()
|
||||
const client = new Client()
|
||||
client.connectSync()
|
||||
client.cancel(function (err) {
|
||||
assert.ifError(err)
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
'use strict'
|
||||
|
||||
var Client = require('../')
|
||||
var assert = require('assert')
|
||||
const Client = require('../')
|
||||
const assert = require('assert')
|
||||
|
||||
describe('connection errors', function () {
|
||||
it('raise error events', function (done) {
|
||||
var client = new Client()
|
||||
const client = new Client()
|
||||
client.connectSync()
|
||||
client.query('SELECT pg_terminate_backend(pg_backend_pid())', assert.fail)
|
||||
client.on('error', function (err) {
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
var Client = require('../')
|
||||
var assert = require('assert')
|
||||
const Client = require('../')
|
||||
const assert = require('assert')
|
||||
|
||||
describe('connection error', function () {
|
||||
it('doesnt segfault', function (done) {
|
||||
var client = new Client()
|
||||
const client = new Client()
|
||||
client.connect('asldgsdgasgdasdg', function (err) {
|
||||
assert(err)
|
||||
// calling error on a closed client was segfaulting
|
||||
@ -15,7 +15,7 @@ describe('connection error', function () {
|
||||
|
||||
describe('reading while not connected', function () {
|
||||
it('does not seg fault but does throw execption', function () {
|
||||
var client = new Client()
|
||||
const client = new Client()
|
||||
assert.throws(function () {
|
||||
client.on('notification', function (msg) {})
|
||||
})
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
var assert = require('assert')
|
||||
var Client = require('../')
|
||||
const assert = require('assert')
|
||||
const Client = require('../')
|
||||
|
||||
describe('COPY FROM', function () {
|
||||
before(function (done) {
|
||||
@ -12,17 +12,17 @@ describe('COPY FROM', function () {
|
||||
})
|
||||
|
||||
it('works', function (done) {
|
||||
var client = this.client
|
||||
const client = this.client
|
||||
this.client.querySync('CREATE TEMP TABLE blah(name text, age int)')
|
||||
this.client.querySync('COPY blah FROM stdin')
|
||||
var stream = this.client.getCopyStream()
|
||||
const stream = this.client.getCopyStream()
|
||||
stream.write(Buffer.from('Brian\t32\n', 'utf8'))
|
||||
stream.write(Buffer.from('Aaron\t30\n', 'utf8'))
|
||||
stream.write(Buffer.from('Shelley\t28\n', 'utf8'))
|
||||
stream.end()
|
||||
|
||||
stream.once('finish', function () {
|
||||
var rows = client.querySync('SELECT COUNT(*) FROM blah')
|
||||
const rows = client.querySync('SELECT COUNT(*) FROM blah')
|
||||
assert.equal(rows.length, 1)
|
||||
assert.equal(rows[0].count, 3)
|
||||
done()
|
||||
@ -30,14 +30,14 @@ describe('COPY FROM', function () {
|
||||
})
|
||||
|
||||
it('works with a callback passed to end', function (done) {
|
||||
var client = this.client
|
||||
const client = this.client
|
||||
this.client.querySync('CREATE TEMP TABLE boom(name text, age int)')
|
||||
this.client.querySync('COPY boom FROM stdin')
|
||||
var stream = this.client.getCopyStream()
|
||||
const stream = this.client.getCopyStream()
|
||||
stream.write(Buffer.from('Brian\t32\n', 'utf8'))
|
||||
stream.write(Buffer.from('Aaron\t30\n', 'utf8'), function () {
|
||||
stream.end(Buffer.from('Shelley\t28\n', 'utf8'), function () {
|
||||
var rows = client.querySync('SELECT COUNT(*) FROM boom')
|
||||
const rows = client.querySync('SELECT COUNT(*) FROM boom')
|
||||
assert.equal(rows.length, 1)
|
||||
assert.equal(rows[0].count, 3)
|
||||
done()
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
var assert = require('assert')
|
||||
var Client = require('../')
|
||||
var concat = require('concat-stream')
|
||||
var _ = require('lodash')
|
||||
const assert = require('assert')
|
||||
const Client = require('../')
|
||||
const concat = require('concat-stream')
|
||||
const _ = require('lodash')
|
||||
|
||||
describe('COPY TO', function () {
|
||||
before(function (done) {
|
||||
@ -14,18 +14,18 @@ describe('COPY TO', function () {
|
||||
})
|
||||
|
||||
it('works - basic check', function (done) {
|
||||
var limit = 1000
|
||||
var qText = 'COPY (SELECT * FROM generate_series(0, ' + (limit - 1) + ')) TO stdout'
|
||||
var self = this
|
||||
const limit = 1000
|
||||
const qText = 'COPY (SELECT * FROM generate_series(0, ' + (limit - 1) + ')) TO stdout'
|
||||
const self = this
|
||||
this.client.query(qText, function (err) {
|
||||
if (err) return done(err)
|
||||
var stream = self.client.getCopyStream()
|
||||
const stream = self.client.getCopyStream()
|
||||
// pump the stream for node v0.11.x
|
||||
stream.read()
|
||||
stream.pipe(
|
||||
concat(function (buff) {
|
||||
var res = buff.toString('utf8')
|
||||
var expected = _.range(0, limit).join('\n') + '\n'
|
||||
const res = buff.toString('utf8')
|
||||
const expected = _.range(0, limit).join('\n') + '\n'
|
||||
assert.equal(res, expected)
|
||||
done()
|
||||
})
|
||||
|
||||
@ -1,10 +1,10 @@
|
||||
var Client = require('../')
|
||||
var ok = require('okay')
|
||||
var assert = require('assert')
|
||||
const Client = require('../')
|
||||
const ok = require('okay')
|
||||
const assert = require('assert')
|
||||
|
||||
describe('Custom type parser', function () {
|
||||
it('is used by client', function (done) {
|
||||
var client = new Client({
|
||||
const client = new Client({
|
||||
types: {
|
||||
getTypeParser: function () {
|
||||
return function () {
|
||||
@ -14,7 +14,7 @@ describe('Custom type parser', function () {
|
||||
},
|
||||
})
|
||||
client.connectSync()
|
||||
var rows = client.querySync('SELECT NOW() AS when')
|
||||
const rows = client.querySync('SELECT NOW() AS when')
|
||||
assert.equal(rows[0].when, 'blah')
|
||||
client.query(
|
||||
'SELECT NOW() as when',
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
var Client = require('../')
|
||||
var assert = require('assert')
|
||||
const Client = require('../')
|
||||
const assert = require('assert')
|
||||
|
||||
var checkDomain = function (domain, when) {
|
||||
const checkDomain = function (domain, when) {
|
||||
assert(process.domain, 'Domain was lost after ' + when)
|
||||
assert.strictEqual(process.domain, domain, 'Domain switched after ' + when)
|
||||
}
|
||||
@ -10,7 +10,7 @@ describe('domains', function () {
|
||||
it('remains bound after a query', function (done) {
|
||||
var domain = require('domain').create() // eslint-disable-line
|
||||
domain.run(function () {
|
||||
var client = new Client()
|
||||
const client = new Client()
|
||||
client.connect(function () {
|
||||
checkDomain(domain, 'connection')
|
||||
client.query('SELECT NOW()', function () {
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
var Client = require('../')
|
||||
var assert = require('assert')
|
||||
const Client = require('../')
|
||||
const assert = require('assert')
|
||||
|
||||
describe('empty query', () => {
|
||||
it('has field metadata in result', (done) => {
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
var Client = require('../')
|
||||
var assert = require('assert')
|
||||
const Client = require('../')
|
||||
const assert = require('assert')
|
||||
|
||||
describe('huge async query', function () {
|
||||
before(function (done) {
|
||||
@ -12,12 +12,12 @@ describe('huge async query', function () {
|
||||
})
|
||||
|
||||
it('works', function (done) {
|
||||
var params = ['']
|
||||
var len = 100000
|
||||
for (var i = 0; i < len; i++) {
|
||||
const params = ['']
|
||||
const len = 100000
|
||||
for (let i = 0; i < len; i++) {
|
||||
params[0] += 'A'
|
||||
}
|
||||
var qText = "SELECT '" + params[0] + "'::text as my_text"
|
||||
const qText = "SELECT '" + params[0] + "'::text as my_text"
|
||||
this.client.query(qText, function (err, rows) {
|
||||
if (err) return done(err)
|
||||
assert.equal(rows[0].my_text.length, len)
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
var Client = require('../')
|
||||
var assert = require('assert')
|
||||
const Client = require('../')
|
||||
const assert = require('assert')
|
||||
|
||||
describe('connection', function () {
|
||||
it('works', function (done) {
|
||||
@ -24,7 +24,7 @@ describe('connectSync', function () {
|
||||
})
|
||||
|
||||
it('works with args', function () {
|
||||
var args = 'host=' + (process.env.PGHOST || 'localhost')
|
||||
const args = 'host=' + (process.env.PGHOST || 'localhost')
|
||||
Client().connectSync(args)
|
||||
})
|
||||
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
var Client = require('../')
|
||||
var async = require('async')
|
||||
var ok = require('okay')
|
||||
const Client = require('../')
|
||||
const async = require('async')
|
||||
const ok = require('okay')
|
||||
|
||||
var execute = function (x, done) {
|
||||
var client = new Client()
|
||||
const execute = function (x, done) {
|
||||
const client = new Client()
|
||||
client.connectSync()
|
||||
var query = function (n, cb) {
|
||||
const query = function (n, cb) {
|
||||
client.query('SELECT $1::int as num', [n], function (err) {
|
||||
cb(err)
|
||||
})
|
||||
|
||||
@ -1,16 +1,16 @@
|
||||
var Client = require('../')
|
||||
var async = require('async')
|
||||
var ok = require('okay')
|
||||
var bytes = require('crypto').pseudoRandomBytes
|
||||
const Client = require('../')
|
||||
const async = require('async')
|
||||
const ok = require('okay')
|
||||
const bytes = require('crypto').pseudoRandomBytes
|
||||
|
||||
describe('many connections', function () {
|
||||
describe('async', function () {
|
||||
var test = function (count, times) {
|
||||
const test = function (count, times) {
|
||||
it(`connecting ${count} clients ${times} times`, function (done) {
|
||||
this.timeout(200000)
|
||||
|
||||
var connectClient = function (n, cb) {
|
||||
var client = new Client()
|
||||
const connectClient = function (n, cb) {
|
||||
const client = new Client()
|
||||
client.connect(
|
||||
ok(cb, function () {
|
||||
bytes(
|
||||
@ -29,7 +29,7 @@ describe('many connections', function () {
|
||||
)
|
||||
}
|
||||
|
||||
var run = function (n, cb) {
|
||||
const run = function (n, cb) {
|
||||
async.times(count, connectClient, cb)
|
||||
}
|
||||
|
||||
|
||||
@ -1,14 +1,14 @@
|
||||
var Client = require('../')
|
||||
var async = require('async')
|
||||
var assert = require('assert')
|
||||
const Client = require('../')
|
||||
const async = require('async')
|
||||
const assert = require('assert')
|
||||
|
||||
describe('many errors', function () {
|
||||
it('functions properly without segfault', function (done) {
|
||||
var throwError = function (n, cb) {
|
||||
var client = new Client()
|
||||
const throwError = function (n, cb) {
|
||||
const client = new Client()
|
||||
client.connectSync()
|
||||
|
||||
var doIt = function (n, cb) {
|
||||
const doIt = function (n, cb) {
|
||||
client.query('select asdfiasdf', function (err) {
|
||||
assert(err, 'bad query should emit an error')
|
||||
cb(null)
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
var Client = require('../')
|
||||
var assert = require('assert')
|
||||
const Client = require('../')
|
||||
const assert = require('assert')
|
||||
|
||||
describe('multiple commands in a single query', function () {
|
||||
before(function (done) {
|
||||
@ -22,7 +22,7 @@ describe('multiple commands in a single query', function () {
|
||||
})
|
||||
|
||||
it('inserts and reads at once', function (done) {
|
||||
var txt = 'CREATE TEMP TABLE boom(age int);'
|
||||
let txt = 'CREATE TEMP TABLE boom(age int);'
|
||||
txt += 'INSERT INTO boom(age) VALUES(10);'
|
||||
txt += 'SELECT * FROM boom;'
|
||||
this.client.query(txt, function (err, rows, results) {
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
var Client = require('../')
|
||||
var assert = require('assert')
|
||||
const Client = require('../')
|
||||
const assert = require('assert')
|
||||
|
||||
describe('multiple statements', () => {
|
||||
before(() => {
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
var Client = require('../')
|
||||
var ok = require('okay')
|
||||
const Client = require('../')
|
||||
const ok = require('okay')
|
||||
|
||||
var notify = function (channel, payload) {
|
||||
var client = new Client()
|
||||
const notify = function (channel, payload) {
|
||||
const client = new Client()
|
||||
client.connectSync()
|
||||
client.querySync('NOTIFY ' + channel + ", '" + payload + "'")
|
||||
client.end()
|
||||
@ -10,12 +10,12 @@ var notify = function (channel, payload) {
|
||||
|
||||
describe('simple LISTEN/NOTIFY', function () {
|
||||
before(function (done) {
|
||||
var client = (this.client = new Client())
|
||||
const client = (this.client = new Client())
|
||||
client.connect(done)
|
||||
})
|
||||
|
||||
it('works', function (done) {
|
||||
var client = this.client
|
||||
const client = this.client
|
||||
client.querySync('LISTEN boom')
|
||||
client.on('notification', function (msg) {
|
||||
done()
|
||||
@ -31,14 +31,14 @@ describe('simple LISTEN/NOTIFY', function () {
|
||||
if (!process.env.TRAVIS_CI) {
|
||||
describe('async LISTEN/NOTIFY', function () {
|
||||
before(function (done) {
|
||||
var client = (this.client = new Client())
|
||||
const client = (this.client = new Client())
|
||||
client.connect(done)
|
||||
})
|
||||
|
||||
it('works', function (done) {
|
||||
var client = this.client
|
||||
var count = 0
|
||||
var check = function () {
|
||||
const client = this.client
|
||||
let count = 0
|
||||
const check = function () {
|
||||
count++
|
||||
if (count >= 2) return done()
|
||||
}
|
||||
|
||||
@ -1,13 +1,13 @@
|
||||
var Client = require('../')
|
||||
var ok = require('okay')
|
||||
var async = require('async')
|
||||
const Client = require('../')
|
||||
const ok = require('okay')
|
||||
const async = require('async')
|
||||
|
||||
describe('async prepare', function () {
|
||||
var run = function (n, cb) {
|
||||
var client = new Client()
|
||||
const run = function (n, cb) {
|
||||
const client = new Client()
|
||||
client.connectSync()
|
||||
|
||||
var exec = function (x, done) {
|
||||
const exec = function (x, done) {
|
||||
client.prepare('get_now' + x, 'SELECT NOW()', 0, done)
|
||||
}
|
||||
|
||||
@ -20,7 +20,7 @@ describe('async prepare', function () {
|
||||
)
|
||||
}
|
||||
|
||||
var t = function (n) {
|
||||
const t = function (n) {
|
||||
it('works for ' + n + ' clients', function (done) {
|
||||
async.times(n, run, function (err) {
|
||||
done(err)
|
||||
@ -28,17 +28,17 @@ describe('async prepare', function () {
|
||||
})
|
||||
}
|
||||
|
||||
for (var i = 0; i < 10; i++) {
|
||||
for (let i = 0; i < 10; i++) {
|
||||
t(i)
|
||||
}
|
||||
})
|
||||
|
||||
describe('async execute', function () {
|
||||
var run = function (n, cb) {
|
||||
var client = new Client()
|
||||
const run = function (n, cb) {
|
||||
const client = new Client()
|
||||
client.connectSync()
|
||||
client.prepareSync('get_now', 'SELECT NOW()', 0)
|
||||
var exec = function (x, cb) {
|
||||
const exec = function (x, cb) {
|
||||
client.execute('get_now', [], cb)
|
||||
}
|
||||
async.timesSeries(
|
||||
@ -50,7 +50,7 @@ describe('async execute', function () {
|
||||
)
|
||||
}
|
||||
|
||||
var t = function (n) {
|
||||
const t = function (n) {
|
||||
it('works for ' + n + ' clients', function (done) {
|
||||
async.times(n, run, function (err) {
|
||||
done(err)
|
||||
@ -58,7 +58,7 @@ describe('async execute', function () {
|
||||
})
|
||||
}
|
||||
|
||||
for (var i = 0; i < 10; i++) {
|
||||
for (let i = 0; i < 10; i++) {
|
||||
t(i)
|
||||
}
|
||||
})
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
var Client = require('../')
|
||||
var assert = require('assert')
|
||||
var async = require('async')
|
||||
var ok = require('okay')
|
||||
const Client = require('../')
|
||||
const assert = require('assert')
|
||||
const async = require('async')
|
||||
const ok = require('okay')
|
||||
|
||||
describe('async query', function () {
|
||||
before(function (done) {
|
||||
@ -24,7 +24,7 @@ describe('async query', function () {
|
||||
})
|
||||
|
||||
it('simple query works', function (done) {
|
||||
var runQuery = function (n, 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())
|
||||
@ -35,14 +35,14 @@ describe('async query', function () {
|
||||
})
|
||||
|
||||
it('parameters work', function (done) {
|
||||
var runQuery = function (n, 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) {
|
||||
var client = this.client
|
||||
const client = this.client
|
||||
client.prepare('test', 'SELECT $1::text as name', 1, function (err) {
|
||||
if (err) return done(err)
|
||||
client.execute(
|
||||
@ -80,7 +80,7 @@ describe('async query', function () {
|
||||
})
|
||||
|
||||
it('returns an error if there was a query error', function (done) {
|
||||
var runErrorQuery = function (n, done) {
|
||||
const runErrorQuery = function (n, done) {
|
||||
this.client.query('SELECT ALKJSFDSLFKJ', function (err) {
|
||||
assert(err instanceof Error, 'Should return an error instance')
|
||||
done()
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
var Client = require('../')
|
||||
var assert = require('assert')
|
||||
const Client = require('../')
|
||||
const assert = require('assert')
|
||||
|
||||
describe('query sync', function () {
|
||||
before(function () {
|
||||
@ -12,13 +12,13 @@ describe('query sync', function () {
|
||||
})
|
||||
|
||||
it('simple query works', function () {
|
||||
var rows = this.client.querySync('SELECT NOW() AS the_time')
|
||||
const rows = this.client.querySync('SELECT NOW() AS the_time')
|
||||
assert.equal(rows.length, 1)
|
||||
assert.equal(rows[0].the_time.getFullYear(), new Date().getFullYear())
|
||||
})
|
||||
|
||||
it('parameterized query works', function () {
|
||||
var rows = this.client.querySync('SELECT $1::text AS name', ['Brian'])
|
||||
const rows = this.client.querySync('SELECT $1::text AS name', ['Brian'])
|
||||
assert.equal(rows.length, 1)
|
||||
assert.equal(rows[0].name, 'Brian')
|
||||
})
|
||||
@ -37,11 +37,11 @@ describe('query sync', function () {
|
||||
it('prepared statement works', function () {
|
||||
this.client.prepareSync('test', 'SELECT $1::text as name', 1)
|
||||
|
||||
var rows = this.client.executeSync('test', ['Brian'])
|
||||
const rows = this.client.executeSync('test', ['Brian'])
|
||||
assert.equal(rows.length, 1)
|
||||
assert.equal(rows[0].name, 'Brian')
|
||||
|
||||
var rows2 = this.client.executeSync('test', ['Aaron'])
|
||||
const rows2 = this.client.executeSync('test', ['Aaron'])
|
||||
assert.equal(rows2.length, 1)
|
||||
assert.equal(rows2[0].name, 'Aaron')
|
||||
})
|
||||
@ -70,13 +70,13 @@ describe('query sync', function () {
|
||||
})
|
||||
|
||||
it('is still usable after an error', function () {
|
||||
var rows = this.client.querySync('SELECT NOW()')
|
||||
const rows = this.client.querySync('SELECT NOW()')
|
||||
assert(rows, 'should have returned rows')
|
||||
assert.equal(rows.length, 1)
|
||||
})
|
||||
|
||||
it('supports empty query', function () {
|
||||
var rows = this.client.querySync('')
|
||||
const rows = this.client.querySync('')
|
||||
assert(rows, 'should return rows')
|
||||
assert.equal(rows.length, 0, 'should return no rows')
|
||||
})
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
var Client = require('../')
|
||||
var assert = require('assert')
|
||||
var semver = require('semver')
|
||||
const Client = require('../')
|
||||
const assert = require('assert')
|
||||
const semver = require('semver')
|
||||
|
||||
describe('version', function () {
|
||||
it('is exported', function () {
|
||||
|
||||
@ -57,7 +57,7 @@ describe('connection timeout', () => {
|
||||
function* () {
|
||||
const errors = []
|
||||
const pool = new Pool({ connectionTimeoutMillis: 1, port: this.port, host: 'localhost' })
|
||||
for (var i = 0; i < 15; i++) {
|
||||
for (let i = 0; i < 15; i++) {
|
||||
try {
|
||||
yield pool.connect()
|
||||
} catch (e) {
|
||||
|
||||
@ -198,7 +198,7 @@ describe('pool error handling', function () {
|
||||
co.wrap(function* () {
|
||||
const pool = new Pool({ max: 1 })
|
||||
const errors = []
|
||||
for (var i = 0; i < 20; i++) {
|
||||
for (let i = 0; i < 20; i++) {
|
||||
try {
|
||||
yield pool.query('invalid sql')
|
||||
} catch (err) {
|
||||
|
||||
@ -54,8 +54,8 @@ describe('idle timeout', () => {
|
||||
co.wrap(function* () {
|
||||
const pool = new Pool({ idleTimeoutMillis: 1 })
|
||||
const results = []
|
||||
for (var i = 0; i < 20; i++) {
|
||||
let query = pool.query('SELECT NOW()')
|
||||
for (let i = 0; i < 20; i++) {
|
||||
const query = pool.query('SELECT NOW()')
|
||||
expect(pool.idleCount).to.equal(0)
|
||||
expect(pool.totalCount).to.equal(1)
|
||||
results.push(yield query)
|
||||
@ -72,8 +72,8 @@ describe('idle timeout', () => {
|
||||
co.wrap(function* () {
|
||||
const pool = new Pool({ idleTimeoutMillis: 1 })
|
||||
const results = []
|
||||
for (var i = 0; i < 20; i++) {
|
||||
let client = yield pool.connect()
|
||||
for (let i = 0; i < 20; i++) {
|
||||
const client = yield pool.connect()
|
||||
expect(pool.totalCount).to.equal(1)
|
||||
expect(pool.idleCount).to.equal(0)
|
||||
yield wait(10)
|
||||
|
||||
@ -32,7 +32,7 @@ describe('lifetime timeout', () => {
|
||||
'can remove expired clients and recreate them',
|
||||
co.wrap(function* () {
|
||||
const pool = new Pool({ maxLifetimeSeconds: 1 })
|
||||
let query = pool.query('SELECT pg_sleep(1.4)')
|
||||
const query = pool.query('SELECT pg_sleep(1.4)')
|
||||
expect(pool.expiredCount).to.equal(0)
|
||||
expect(pool.totalCount).to.equal(1)
|
||||
yield query
|
||||
|
||||
@ -4,7 +4,7 @@ import { BufferReader } from './buffer-reader'
|
||||
|
||||
const LOOPS = 1000
|
||||
let count = 0
|
||||
let start = Date.now()
|
||||
const start = Date.now()
|
||||
|
||||
const reader = new BufferReader()
|
||||
const buffer = Buffer.from([33, 33, 33, 33, 33, 33, 33, 0])
|
||||
|
||||
@ -9,12 +9,12 @@ export class Writer {
|
||||
}
|
||||
|
||||
private ensure(size: number): void {
|
||||
var remaining = this.buffer.length - this.offset
|
||||
const remaining = this.buffer.length - this.offset
|
||||
if (remaining < size) {
|
||||
var oldBuffer = this.buffer
|
||||
const oldBuffer = this.buffer
|
||||
// exponential growth factor of around ~ 1.5
|
||||
// https://stackoverflow.com/questions/2269063/buffer-growth-strategy
|
||||
var newSize = oldBuffer.length + (oldBuffer.length >> 1) + size
|
||||
const newSize = oldBuffer.length + (oldBuffer.length >> 1) + size
|
||||
this.buffer = Buffer.allocUnsafe(newSize)
|
||||
oldBuffer.copy(this.buffer)
|
||||
}
|
||||
@ -40,7 +40,7 @@ export class Writer {
|
||||
if (!string) {
|
||||
this.ensure(1)
|
||||
} else {
|
||||
var len = Buffer.byteLength(string)
|
||||
const len = Buffer.byteLength(string)
|
||||
this.ensure(len + 1) // +1 for null terminator
|
||||
this.buffer.write(string, this.offset, 'utf-8')
|
||||
this.offset += len
|
||||
@ -51,7 +51,7 @@ export class Writer {
|
||||
}
|
||||
|
||||
public addString(string: string = ''): Writer {
|
||||
var len = Buffer.byteLength(string)
|
||||
const len = Buffer.byteLength(string)
|
||||
this.ensure(len)
|
||||
this.buffer.write(string, this.offset)
|
||||
this.offset += len
|
||||
@ -76,7 +76,7 @@ export class Writer {
|
||||
}
|
||||
|
||||
public flush(code?: number): Buffer {
|
||||
var result = this.join(code)
|
||||
const result = this.join(code)
|
||||
this.offset = 5
|
||||
this.headerPosition = 0
|
||||
this.buffer = Buffer.allocUnsafe(this.size)
|
||||
|
||||
@ -5,16 +5,16 @@ import assert from 'assert'
|
||||
import { PassThrough } from 'stream'
|
||||
import { BackendMessage } from './messages'
|
||||
|
||||
var authOkBuffer = buffers.authenticationOk()
|
||||
var paramStatusBuffer = buffers.parameterStatus('client_encoding', 'UTF8')
|
||||
var readyForQueryBuffer = buffers.readyForQuery()
|
||||
var backendKeyDataBuffer = buffers.backendKeyData(1, 2)
|
||||
var commandCompleteBuffer = buffers.commandComplete('SELECT 3')
|
||||
var parseCompleteBuffer = buffers.parseComplete()
|
||||
var bindCompleteBuffer = buffers.bindComplete()
|
||||
var portalSuspendedBuffer = buffers.portalSuspended()
|
||||
const authOkBuffer = buffers.authenticationOk()
|
||||
const paramStatusBuffer = buffers.parameterStatus('client_encoding', 'UTF8')
|
||||
const readyForQueryBuffer = buffers.readyForQuery()
|
||||
const backendKeyDataBuffer = buffers.backendKeyData(1, 2)
|
||||
const commandCompleteBuffer = buffers.commandComplete('SELECT 3')
|
||||
const parseCompleteBuffer = buffers.parseComplete()
|
||||
const bindCompleteBuffer = buffers.bindComplete()
|
||||
const portalSuspendedBuffer = buffers.portalSuspended()
|
||||
|
||||
var row1 = {
|
||||
const row1 = {
|
||||
name: 'id',
|
||||
tableID: 1,
|
||||
attributeNumber: 2,
|
||||
@ -23,10 +23,10 @@ var row1 = {
|
||||
typeModifier: 5,
|
||||
formatCode: 0,
|
||||
}
|
||||
var oneRowDescBuff = buffers.rowDescription([row1])
|
||||
const oneRowDescBuff = buffers.rowDescription([row1])
|
||||
row1.name = 'bang'
|
||||
|
||||
var twoRowBuf = buffers.rowDescription([
|
||||
const twoRowBuf = buffers.rowDescription([
|
||||
row1,
|
||||
{
|
||||
name: 'whoah',
|
||||
@ -39,7 +39,7 @@ var twoRowBuf = buffers.rowDescription([
|
||||
},
|
||||
])
|
||||
|
||||
var rowWithBigOids = {
|
||||
const rowWithBigOids = {
|
||||
name: 'bigoid',
|
||||
tableID: 3000000001,
|
||||
attributeNumber: 2,
|
||||
@ -48,52 +48,52 @@ var rowWithBigOids = {
|
||||
typeModifier: 5,
|
||||
formatCode: 0,
|
||||
}
|
||||
var bigOidDescBuff = buffers.rowDescription([rowWithBigOids])
|
||||
const bigOidDescBuff = buffers.rowDescription([rowWithBigOids])
|
||||
|
||||
var emptyRowFieldBuf = buffers.dataRow([])
|
||||
const emptyRowFieldBuf = buffers.dataRow([])
|
||||
|
||||
var oneFieldBuf = buffers.dataRow(['test'])
|
||||
const oneFieldBuf = buffers.dataRow(['test'])
|
||||
|
||||
var expectedAuthenticationOkayMessage = {
|
||||
const expectedAuthenticationOkayMessage = {
|
||||
name: 'authenticationOk',
|
||||
length: 8,
|
||||
}
|
||||
|
||||
var expectedParameterStatusMessage = {
|
||||
const expectedParameterStatusMessage = {
|
||||
name: 'parameterStatus',
|
||||
parameterName: 'client_encoding',
|
||||
parameterValue: 'UTF8',
|
||||
length: 25,
|
||||
}
|
||||
|
||||
var expectedBackendKeyDataMessage = {
|
||||
const expectedBackendKeyDataMessage = {
|
||||
name: 'backendKeyData',
|
||||
processID: 1,
|
||||
secretKey: 2,
|
||||
}
|
||||
|
||||
var expectedReadyForQueryMessage = {
|
||||
const expectedReadyForQueryMessage = {
|
||||
name: 'readyForQuery',
|
||||
length: 5,
|
||||
status: 'I',
|
||||
}
|
||||
|
||||
var expectedCommandCompleteMessage = {
|
||||
const expectedCommandCompleteMessage = {
|
||||
name: 'commandComplete',
|
||||
length: 13,
|
||||
text: 'SELECT 3',
|
||||
}
|
||||
var emptyRowDescriptionBuffer = new BufferList()
|
||||
const emptyRowDescriptionBuffer = new BufferList()
|
||||
.addInt16(0) // number of fields
|
||||
.join(true, 'T')
|
||||
|
||||
var expectedEmptyRowDescriptionMessage = {
|
||||
const expectedEmptyRowDescriptionMessage = {
|
||||
name: 'rowDescription',
|
||||
length: 6,
|
||||
fieldCount: 0,
|
||||
fields: [],
|
||||
}
|
||||
var expectedOneRowMessage = {
|
||||
const expectedOneRowMessage = {
|
||||
name: 'rowDescription',
|
||||
length: 27,
|
||||
fieldCount: 1,
|
||||
@ -110,7 +110,7 @@ var expectedOneRowMessage = {
|
||||
],
|
||||
}
|
||||
|
||||
var expectedTwoRowMessage = {
|
||||
const expectedTwoRowMessage = {
|
||||
name: 'rowDescription',
|
||||
length: 53,
|
||||
fieldCount: 2,
|
||||
@ -135,7 +135,7 @@ var expectedTwoRowMessage = {
|
||||
},
|
||||
],
|
||||
}
|
||||
var expectedBigOidMessage = {
|
||||
const expectedBigOidMessage = {
|
||||
name: 'rowDescription',
|
||||
length: 31,
|
||||
fieldCount: 1,
|
||||
@ -152,36 +152,36 @@ var expectedBigOidMessage = {
|
||||
],
|
||||
}
|
||||
|
||||
var emptyParameterDescriptionBuffer = new BufferList()
|
||||
const emptyParameterDescriptionBuffer = new BufferList()
|
||||
.addInt16(0) // number of parameters
|
||||
.join(true, 't')
|
||||
|
||||
var oneParameterDescBuf = buffers.parameterDescription([1111])
|
||||
const oneParameterDescBuf = buffers.parameterDescription([1111])
|
||||
|
||||
var twoParameterDescBuf = buffers.parameterDescription([2222, 3333])
|
||||
const twoParameterDescBuf = buffers.parameterDescription([2222, 3333])
|
||||
|
||||
var expectedEmptyParameterDescriptionMessage = {
|
||||
const expectedEmptyParameterDescriptionMessage = {
|
||||
name: 'parameterDescription',
|
||||
length: 6,
|
||||
parameterCount: 0,
|
||||
dataTypeIDs: [],
|
||||
}
|
||||
|
||||
var expectedOneParameterMessage = {
|
||||
const expectedOneParameterMessage = {
|
||||
name: 'parameterDescription',
|
||||
length: 10,
|
||||
parameterCount: 1,
|
||||
dataTypeIDs: [1111],
|
||||
}
|
||||
|
||||
var expectedTwoParameterMessage = {
|
||||
const expectedTwoParameterMessage = {
|
||||
name: 'parameterDescription',
|
||||
length: 14,
|
||||
parameterCount: 2,
|
||||
dataTypeIDs: [2222, 3333],
|
||||
}
|
||||
|
||||
var testForMessage = function (buffer: Buffer, expectedMessage: any) {
|
||||
const testForMessage = function (buffer: Buffer, expectedMessage: any) {
|
||||
it('receives and parses ' + expectedMessage.name, async () => {
|
||||
const messages = await parseBuffers([buffer])
|
||||
const [lastMessage] = messages
|
||||
@ -192,38 +192,38 @@ var testForMessage = function (buffer: Buffer, expectedMessage: any) {
|
||||
})
|
||||
}
|
||||
|
||||
var plainPasswordBuffer = buffers.authenticationCleartextPassword()
|
||||
var md5PasswordBuffer = buffers.authenticationMD5Password()
|
||||
var SASLBuffer = buffers.authenticationSASL()
|
||||
var SASLContinueBuffer = buffers.authenticationSASLContinue()
|
||||
var SASLFinalBuffer = buffers.authenticationSASLFinal()
|
||||
const plainPasswordBuffer = buffers.authenticationCleartextPassword()
|
||||
const md5PasswordBuffer = buffers.authenticationMD5Password()
|
||||
const SASLBuffer = buffers.authenticationSASL()
|
||||
const SASLContinueBuffer = buffers.authenticationSASLContinue()
|
||||
const SASLFinalBuffer = buffers.authenticationSASLFinal()
|
||||
|
||||
var expectedPlainPasswordMessage = {
|
||||
const expectedPlainPasswordMessage = {
|
||||
name: 'authenticationCleartextPassword',
|
||||
}
|
||||
|
||||
var expectedMD5PasswordMessage = {
|
||||
const expectedMD5PasswordMessage = {
|
||||
name: 'authenticationMD5Password',
|
||||
salt: Buffer.from([1, 2, 3, 4]),
|
||||
}
|
||||
|
||||
var expectedSASLMessage = {
|
||||
const expectedSASLMessage = {
|
||||
name: 'authenticationSASL',
|
||||
mechanisms: ['SCRAM-SHA-256'],
|
||||
}
|
||||
|
||||
var expectedSASLContinueMessage = {
|
||||
const expectedSASLContinueMessage = {
|
||||
name: 'authenticationSASLContinue',
|
||||
data: 'data',
|
||||
}
|
||||
|
||||
var expectedSASLFinalMessage = {
|
||||
const expectedSASLFinalMessage = {
|
||||
name: 'authenticationSASLFinal',
|
||||
data: 'data',
|
||||
}
|
||||
|
||||
var notificationResponseBuffer = buffers.notification(4, 'hi', 'boom')
|
||||
var expectedNotificationResponseMessage = {
|
||||
const notificationResponseBuffer = buffers.notification(4, 'hi', 'boom')
|
||||
const expectedNotificationResponseMessage = {
|
||||
name: 'notification',
|
||||
processId: 4,
|
||||
channel: 'hi',
|
||||
@ -308,7 +308,7 @@ describe('PgPacketStream', function () {
|
||||
|
||||
describe('notice message', function () {
|
||||
// this uses the same logic as error message
|
||||
var buff = buffers.notice([{ type: 'C', value: 'code' }])
|
||||
const buff = buffers.notice([{ type: 'C', value: 'code' }])
|
||||
testForMessage(buff, {
|
||||
name: 'notice',
|
||||
code: 'code',
|
||||
@ -320,7 +320,7 @@ describe('PgPacketStream', function () {
|
||||
})
|
||||
|
||||
describe('with all the fields', function () {
|
||||
var buffer = buffers.error([
|
||||
const buffer = buffers.error([
|
||||
{
|
||||
type: 'S',
|
||||
value: 'ERROR',
|
||||
@ -466,7 +466,7 @@ describe('PgPacketStream', function () {
|
||||
// tcp packets anywhere, we need to make sure we can parse every single
|
||||
// split on a tcp message
|
||||
describe('split buffer, single message parsing', function () {
|
||||
var fullBuffer = buffers.dataRow([null, 'bang', 'zug zug', null, '!'])
|
||||
const fullBuffer = buffers.dataRow([null, 'bang', 'zug zug', null, '!'])
|
||||
|
||||
it('parses when full buffer comes in', async function () {
|
||||
const messages = await parseBuffers([fullBuffer])
|
||||
@ -479,9 +479,9 @@ describe('PgPacketStream', function () {
|
||||
assert.equal(message.fields[4], '!')
|
||||
})
|
||||
|
||||
var testMessageReceivedAfterSplitAt = async function (split: number) {
|
||||
var firstBuffer = Buffer.alloc(fullBuffer.length - split)
|
||||
var secondBuffer = Buffer.alloc(fullBuffer.length - firstBuffer.length)
|
||||
const testMessageReceivedAfterSplitAt = async function (split: number) {
|
||||
const firstBuffer = Buffer.alloc(fullBuffer.length - split)
|
||||
const secondBuffer = Buffer.alloc(fullBuffer.length - firstBuffer.length)
|
||||
fullBuffer.copy(firstBuffer, 0, 0)
|
||||
fullBuffer.copy(secondBuffer, 0, firstBuffer.length)
|
||||
const messages = await parseBuffers([firstBuffer, secondBuffer])
|
||||
@ -512,13 +512,13 @@ describe('PgPacketStream', function () {
|
||||
})
|
||||
|
||||
describe('split buffer, multiple message parsing', function () {
|
||||
var dataRowBuffer = buffers.dataRow(['!'])
|
||||
var readyForQueryBuffer = buffers.readyForQuery()
|
||||
var fullBuffer = Buffer.alloc(dataRowBuffer.length + readyForQueryBuffer.length)
|
||||
const dataRowBuffer = buffers.dataRow(['!'])
|
||||
const readyForQueryBuffer = buffers.readyForQuery()
|
||||
const fullBuffer = Buffer.alloc(dataRowBuffer.length + readyForQueryBuffer.length)
|
||||
dataRowBuffer.copy(fullBuffer, 0, 0)
|
||||
readyForQueryBuffer.copy(fullBuffer, dataRowBuffer.length, 0)
|
||||
|
||||
var verifyMessages = function (messages: any[]) {
|
||||
const verifyMessages = function (messages: any[]) {
|
||||
assert.strictEqual(messages.length, 2)
|
||||
assert.deepEqual(messages[0], {
|
||||
name: 'dataRow',
|
||||
@ -539,9 +539,9 @@ describe('PgPacketStream', function () {
|
||||
verifyMessages(messages)
|
||||
})
|
||||
|
||||
var splitAndVerifyTwoMessages = async function (split: number) {
|
||||
var firstBuffer = Buffer.alloc(fullBuffer.length - split)
|
||||
var secondBuffer = Buffer.alloc(fullBuffer.length - firstBuffer.length)
|
||||
const splitAndVerifyTwoMessages = async function (split: number) {
|
||||
const firstBuffer = Buffer.alloc(fullBuffer.length - split)
|
||||
const secondBuffer = Buffer.alloc(fullBuffer.length - firstBuffer.length)
|
||||
fullBuffer.copy(firstBuffer, 0, 0)
|
||||
fullBuffer.copy(secondBuffer, 0, firstBuffer.length)
|
||||
const messages = await parseBuffers([firstBuffer, secondBuffer])
|
||||
|
||||
@ -46,7 +46,7 @@ describe('serializer', () => {
|
||||
})
|
||||
|
||||
it('builds query message', function () {
|
||||
var txt = 'select * from boom'
|
||||
const txt = 'select * from boom'
|
||||
const actual = serialize.query(txt)
|
||||
assert.deepEqual(actual, new BufferList().addCString(txt).join(true, 'Q'))
|
||||
})
|
||||
@ -54,7 +54,7 @@ describe('serializer', () => {
|
||||
describe('parse message', () => {
|
||||
it('builds parse message', function () {
|
||||
const actual = serialize.parse({ text: '!' })
|
||||
var expected = new BufferList().addCString('').addCString('!').addInt16(0).join(true, 'P')
|
||||
const expected = new BufferList().addCString('').addCString('!').addInt16(0).join(true, 'P')
|
||||
assert.deepEqual(actual, expected)
|
||||
})
|
||||
|
||||
@ -64,7 +64,7 @@ describe('serializer', () => {
|
||||
text: 'select * from boom',
|
||||
types: [],
|
||||
})
|
||||
var expected = new BufferList().addCString('boom').addCString('select * from boom').addInt16(0).join(true, 'P')
|
||||
const expected = new BufferList().addCString('boom').addCString('select * from boom').addInt16(0).join(true, 'P')
|
||||
assert.deepEqual(actual, expected)
|
||||
})
|
||||
|
||||
@ -74,7 +74,7 @@ describe('serializer', () => {
|
||||
text: 'select * from bang where name = $1',
|
||||
types: [1, 2, 3, 4],
|
||||
})
|
||||
var expected = new BufferList()
|
||||
const expected = new BufferList()
|
||||
.addCString('force')
|
||||
.addCString('select * from bang where name = $1')
|
||||
.addInt16(4)
|
||||
@ -91,7 +91,7 @@ describe('serializer', () => {
|
||||
it('with no values', function () {
|
||||
const actual = serialize.bind()
|
||||
|
||||
var expectedBuffer = new BufferList()
|
||||
const expectedBuffer = new BufferList()
|
||||
.addCString('')
|
||||
.addCString('')
|
||||
.addInt16(0)
|
||||
@ -107,7 +107,7 @@ describe('serializer', () => {
|
||||
statement: 'woo',
|
||||
values: ['1', 'hi', null, 'zing'],
|
||||
})
|
||||
var expectedBuffer = new BufferList()
|
||||
const expectedBuffer = new BufferList()
|
||||
.addCString('bang') // portal name
|
||||
.addCString('woo') // statement name
|
||||
.addInt16(4)
|
||||
@ -136,7 +136,7 @@ describe('serializer', () => {
|
||||
values: ['1', 'hi', null, 'zing'],
|
||||
valueMapper: () => null,
|
||||
})
|
||||
var expectedBuffer = new BufferList()
|
||||
const expectedBuffer = new BufferList()
|
||||
.addCString('bang') // portal name
|
||||
.addCString('woo') // statement name
|
||||
.addInt16(4)
|
||||
@ -160,7 +160,7 @@ describe('serializer', () => {
|
||||
statement: 'woo',
|
||||
values: ['1', 'hi', null, Buffer.from('zing', 'utf8')],
|
||||
})
|
||||
var expectedBuffer = new BufferList()
|
||||
const expectedBuffer = new BufferList()
|
||||
.addCString('bang') // portal name
|
||||
.addCString('woo') // statement name
|
||||
.addInt16(4) // value count
|
||||
@ -184,7 +184,7 @@ describe('serializer', () => {
|
||||
describe('builds execute message', function () {
|
||||
it('for unamed portal with no row limit', function () {
|
||||
const actual = serialize.execute()
|
||||
var expectedBuffer = new BufferList().addCString('').addInt32(0).join(true, 'E')
|
||||
const expectedBuffer = new BufferList().addCString('').addInt32(0).join(true, 'E')
|
||||
assert.deepEqual(actual, expectedBuffer)
|
||||
})
|
||||
|
||||
@ -193,39 +193,39 @@ describe('serializer', () => {
|
||||
portal: 'my favorite portal',
|
||||
rows: 100,
|
||||
})
|
||||
var expectedBuffer = new BufferList().addCString('my favorite portal').addInt32(100).join(true, 'E')
|
||||
const expectedBuffer = new BufferList().addCString('my favorite portal').addInt32(100).join(true, 'E')
|
||||
assert.deepEqual(actual, expectedBuffer)
|
||||
})
|
||||
})
|
||||
|
||||
it('builds flush command', function () {
|
||||
const actual = serialize.flush()
|
||||
var expected = new BufferList().join(true, 'H')
|
||||
const expected = new BufferList().join(true, 'H')
|
||||
assert.deepEqual(actual, expected)
|
||||
})
|
||||
|
||||
it('builds sync command', function () {
|
||||
const actual = serialize.sync()
|
||||
var expected = new BufferList().join(true, 'S')
|
||||
const expected = new BufferList().join(true, 'S')
|
||||
assert.deepEqual(actual, expected)
|
||||
})
|
||||
|
||||
it('builds end command', function () {
|
||||
const actual = serialize.end()
|
||||
var expected = Buffer.from([0x58, 0, 0, 0, 4])
|
||||
const expected = Buffer.from([0x58, 0, 0, 0, 4])
|
||||
assert.deepEqual(actual, expected)
|
||||
})
|
||||
|
||||
describe('builds describe command', function () {
|
||||
it('describe statement', function () {
|
||||
const actual = serialize.describe({ type: 'S', name: 'bang' })
|
||||
var expected = new BufferList().addChar('S').addCString('bang').join(true, 'D')
|
||||
const expected = new BufferList().addChar('S').addCString('bang').join(true, 'D')
|
||||
assert.deepEqual(actual, expected)
|
||||
})
|
||||
|
||||
it('describe unnamed portal', function () {
|
||||
const actual = serialize.describe({ type: 'P' })
|
||||
var expected = new BufferList().addChar('P').addCString('').join(true, 'D')
|
||||
const expected = new BufferList().addChar('P').addCString('').join(true, 'D')
|
||||
assert.deepEqual(actual, expected)
|
||||
})
|
||||
})
|
||||
@ -233,13 +233,13 @@ describe('serializer', () => {
|
||||
describe('builds close command', function () {
|
||||
it('describe statement', function () {
|
||||
const actual = serialize.close({ type: 'S', name: 'bang' })
|
||||
var expected = new BufferList().addChar('S').addCString('bang').join(true, 'C')
|
||||
const expected = new BufferList().addChar('S').addCString('bang').join(true, 'C')
|
||||
assert.deepEqual(actual, expected)
|
||||
})
|
||||
|
||||
it('describe unnamed portal', function () {
|
||||
const actual = serialize.close({ type: 'P' })
|
||||
var expected = new BufferList().addChar('P').addCString('').join(true, 'C')
|
||||
const expected = new BufferList().addChar('P').addCString('').join(true, 'C')
|
||||
assert.deepEqual(actual, expected)
|
||||
})
|
||||
})
|
||||
|
||||
@ -27,10 +27,10 @@ const startup = (opts: Record<string, string>): Buffer => {
|
||||
|
||||
writer.addCString('client_encoding').addCString('UTF8')
|
||||
|
||||
var bodyBuffer = writer.addCString('').flush()
|
||||
const bodyBuffer = writer.addCString('').flush()
|
||||
// this message is sent without a code
|
||||
|
||||
var length = bodyBuffer.length + 4
|
||||
const length = bodyBuffer.length + 4
|
||||
|
||||
return new Writer().addInt32(length).add(bodyBuffer).flush()
|
||||
}
|
||||
@ -87,14 +87,14 @@ const parse = (query: ParseOpts): Buffer => {
|
||||
|
||||
const types = query.types || emptyArray
|
||||
|
||||
var len = types.length
|
||||
const len = types.length
|
||||
|
||||
var buffer = writer
|
||||
const buffer = writer
|
||||
.addCString(name) // name of query
|
||||
.addCString(query.text) // actual query text
|
||||
.addInt16(len)
|
||||
|
||||
for (var i = 0; i < len; i++) {
|
||||
for (let i = 0; i < len; i++) {
|
||||
buffer.addInt32(types[i])
|
||||
}
|
||||
|
||||
|
||||
@ -24,16 +24,16 @@ export default class BufferList {
|
||||
}
|
||||
|
||||
public addCString(val: string, front?: boolean) {
|
||||
var len = Buffer.byteLength(val)
|
||||
var buffer = Buffer.alloc(len + 1)
|
||||
const len = Buffer.byteLength(val)
|
||||
const buffer = Buffer.alloc(len + 1)
|
||||
buffer.write(val)
|
||||
buffer[len] = 0
|
||||
return this.add(buffer, front)
|
||||
}
|
||||
|
||||
public addString(val: string, front?: boolean) {
|
||||
var len = Buffer.byteLength(val)
|
||||
var buffer = Buffer.alloc(len)
|
||||
const len = Buffer.byteLength(val)
|
||||
const buffer = Buffer.alloc(len)
|
||||
buffer.write(val)
|
||||
return this.add(buffer, front)
|
||||
}
|
||||
@ -47,7 +47,7 @@ export default class BufferList {
|
||||
}
|
||||
|
||||
public join(appendLength?: boolean, char?: string): Buffer {
|
||||
var length = this.getByteLength()
|
||||
let length = this.getByteLength()
|
||||
if (appendLength) {
|
||||
this.addInt32(length + 4, true)
|
||||
return this.join(false, char)
|
||||
@ -56,8 +56,8 @@ export default class BufferList {
|
||||
this.addChar(char, true)
|
||||
length++
|
||||
}
|
||||
var result = Buffer.alloc(length)
|
||||
var index = 0
|
||||
const result = Buffer.alloc(length)
|
||||
let index = 0
|
||||
this.buffers.forEach(function (buffer) {
|
||||
buffer.copy(result, index, 0)
|
||||
index += buffer.length
|
||||
|
||||
@ -47,7 +47,7 @@ const buffers = {
|
||||
|
||||
rowDescription: function (fields: any[]) {
|
||||
fields = fields || []
|
||||
var buf = new BufferList()
|
||||
const buf = new BufferList()
|
||||
buf.addInt16(fields.length)
|
||||
fields.forEach(function (field) {
|
||||
buf
|
||||
@ -64,7 +64,7 @@ const buffers = {
|
||||
|
||||
parameterDescription: function (dataTypeIDs: number[]) {
|
||||
dataTypeIDs = dataTypeIDs || []
|
||||
var buf = new BufferList()
|
||||
const buf = new BufferList()
|
||||
buf.addInt16(dataTypeIDs.length)
|
||||
dataTypeIDs.forEach(function (dataTypeID) {
|
||||
buf.addInt32(dataTypeID)
|
||||
@ -74,13 +74,13 @@ const buffers = {
|
||||
|
||||
dataRow: function (columns: any[]) {
|
||||
columns = columns || []
|
||||
var buf = new BufferList()
|
||||
const buf = new BufferList()
|
||||
buf.addInt16(columns.length)
|
||||
columns.forEach(function (col) {
|
||||
if (col == null) {
|
||||
buf.addInt32(-1)
|
||||
} else {
|
||||
var strBuf = Buffer.from(col, 'utf8')
|
||||
const strBuf = Buffer.from(col, 'utf8')
|
||||
buf.addInt32(strBuf.length)
|
||||
buf.add(strBuf)
|
||||
}
|
||||
@ -98,7 +98,7 @@ const buffers = {
|
||||
|
||||
errorOrNotice: function (fields: any) {
|
||||
fields = fields || []
|
||||
var buf = new BufferList()
|
||||
const buf = new BufferList()
|
||||
fields.forEach(function (field: any) {
|
||||
buf.addChar(field.type)
|
||||
buf.addCString(field.value)
|
||||
|
||||
@ -23,7 +23,7 @@ const exec = async (client, q) => {
|
||||
}
|
||||
|
||||
const bench = async (client, q, time) => {
|
||||
let start = Date.now()
|
||||
const start = Date.now()
|
||||
let count = 0
|
||||
// eslint-disable-next-line no-constant-condition
|
||||
while (true) {
|
||||
|
||||
@ -1,14 +1,14 @@
|
||||
'use strict'
|
||||
|
||||
var EventEmitter = require('events').EventEmitter
|
||||
var utils = require('./utils')
|
||||
var sasl = require('./crypto/sasl')
|
||||
var TypeOverrides = require('./type-overrides')
|
||||
const EventEmitter = require('events').EventEmitter
|
||||
const utils = require('./utils')
|
||||
const sasl = require('./crypto/sasl')
|
||||
const TypeOverrides = require('./type-overrides')
|
||||
|
||||
var ConnectionParameters = require('./connection-parameters')
|
||||
var Query = require('./query')
|
||||
var defaults = require('./defaults')
|
||||
var Connection = require('./connection')
|
||||
const ConnectionParameters = require('./connection-parameters')
|
||||
const Query = require('./query')
|
||||
const defaults = require('./defaults')
|
||||
const Connection = require('./connection')
|
||||
const crypto = require('./crypto/utils')
|
||||
|
||||
class Client extends EventEmitter {
|
||||
@ -32,7 +32,7 @@ class Client extends EventEmitter {
|
||||
|
||||
this.replication = this.connectionParameters.replication
|
||||
|
||||
var c = config || {}
|
||||
const c = config || {}
|
||||
|
||||
this._Promise = c.Promise || global.Promise
|
||||
this._types = new TypeOverrides(c.types)
|
||||
@ -87,8 +87,8 @@ class Client extends EventEmitter {
|
||||
}
|
||||
|
||||
_connect(callback) {
|
||||
var self = this
|
||||
var con = this.connection
|
||||
const self = this
|
||||
const con = this.connection
|
||||
this._connectionCallback = callback
|
||||
|
||||
if (this._connecting || this._connected) {
|
||||
@ -427,14 +427,14 @@ class Client extends EventEmitter {
|
||||
}
|
||||
|
||||
getStartupConf() {
|
||||
var params = this.connectionParameters
|
||||
const params = this.connectionParameters
|
||||
|
||||
var data = {
|
||||
const data = {
|
||||
user: params.user,
|
||||
database: params.database,
|
||||
}
|
||||
|
||||
var appName = params.application_name || params.fallback_application_name
|
||||
const appName = params.application_name || params.fallback_application_name
|
||||
if (appName) {
|
||||
data.application_name = appName
|
||||
}
|
||||
@ -459,7 +459,7 @@ class Client extends EventEmitter {
|
||||
|
||||
cancel(client, query) {
|
||||
if (client.activeQuery === query) {
|
||||
var con = this.connection
|
||||
const con = this.connection
|
||||
|
||||
if (this.host && this.host.indexOf('/') === 0) {
|
||||
con.connect(this.host + '/.s.PGSQL.' + this.port)
|
||||
@ -519,11 +519,11 @@ class Client extends EventEmitter {
|
||||
|
||||
query(config, values, callback) {
|
||||
// can take in strings, config object or query object
|
||||
var query
|
||||
var result
|
||||
var readTimeout
|
||||
var readTimeoutTimer
|
||||
var queryCallback
|
||||
let query
|
||||
let result
|
||||
let readTimeout
|
||||
let readTimeoutTimer
|
||||
let queryCallback
|
||||
|
||||
if (config === null || config === undefined) {
|
||||
throw new TypeError('Client was passed a null or undefined query')
|
||||
@ -552,7 +552,7 @@ class Client extends EventEmitter {
|
||||
queryCallback = query.callback
|
||||
|
||||
readTimeoutTimer = setTimeout(() => {
|
||||
var error = new Error('Query read timeout')
|
||||
const error = new Error('Query read timeout')
|
||||
|
||||
process.nextTick(() => {
|
||||
query.handleError(error, this.connection)
|
||||
@ -565,7 +565,7 @@ class Client extends EventEmitter {
|
||||
query.callback = () => {}
|
||||
|
||||
// Remove from queue
|
||||
var index = this.queryQueue.indexOf(query)
|
||||
const index = this.queryQueue.indexOf(query)
|
||||
if (index > -1) {
|
||||
this.queryQueue.splice(index, 1)
|
||||
}
|
||||
|
||||
@ -1,12 +1,12 @@
|
||||
'use strict'
|
||||
|
||||
var dns = require('dns')
|
||||
const dns = require('dns')
|
||||
|
||||
var defaults = require('./defaults')
|
||||
const defaults = require('./defaults')
|
||||
|
||||
var parse = require('pg-connection-string').parse // parses a connection string
|
||||
const parse = require('pg-connection-string').parse // parses a connection string
|
||||
|
||||
var val = function (key, config, envVar) {
|
||||
const val = function (key, config, envVar) {
|
||||
if (envVar === undefined) {
|
||||
envVar = process.env['PG' + key.toUpperCase()]
|
||||
} else if (envVar === false) {
|
||||
@ -18,7 +18,7 @@ var val = function (key, config, envVar) {
|
||||
return config[key] || envVar || defaults[key]
|
||||
}
|
||||
|
||||
var readSSLConfigFromEnvironment = function () {
|
||||
const readSSLConfigFromEnvironment = function () {
|
||||
switch (process.env.PGSSLMODE) {
|
||||
case 'disable':
|
||||
return false
|
||||
@ -34,12 +34,12 @@ var readSSLConfigFromEnvironment = function () {
|
||||
}
|
||||
|
||||
// Convert arg to a string, surround in single quotes, and escape single quotes and backslashes
|
||||
var quoteParamValue = function (value) {
|
||||
const quoteParamValue = function (value) {
|
||||
return "'" + ('' + value).replace(/\\/g, '\\\\').replace(/'/g, "\\'") + "'"
|
||||
}
|
||||
|
||||
var add = function (params, config, paramName) {
|
||||
var value = config[paramName]
|
||||
const add = function (params, config, paramName) {
|
||||
const value = config[paramName]
|
||||
if (value !== undefined && value !== null) {
|
||||
params.push(paramName + '=' + quoteParamValue(value))
|
||||
}
|
||||
@ -125,7 +125,7 @@ class ConnectionParameters {
|
||||
}
|
||||
|
||||
getLibpqConnectionString(cb) {
|
||||
var params = []
|
||||
const params = []
|
||||
add(params, this, 'user')
|
||||
add(params, this, 'password')
|
||||
add(params, this, 'port')
|
||||
@ -134,7 +134,7 @@ class ConnectionParameters {
|
||||
add(params, this, 'connect_timeout')
|
||||
add(params, this, 'options')
|
||||
|
||||
var ssl = typeof this.ssl === 'object' ? this.ssl : this.ssl ? { sslmode: this.ssl } : {}
|
||||
const ssl = typeof this.ssl === 'object' ? this.ssl : this.ssl ? { sslmode: this.ssl } : {}
|
||||
add(params, ssl, 'sslmode')
|
||||
add(params, ssl, 'sslca')
|
||||
add(params, ssl, 'sslkey')
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
'use strict'
|
||||
|
||||
var EventEmitter = require('events').EventEmitter
|
||||
const EventEmitter = require('events').EventEmitter
|
||||
|
||||
const { parse, serialize } = require('pg-protocol')
|
||||
const { getStream, getSecureStream } = require('./stream')
|
||||
@ -27,7 +27,7 @@ class Connection extends EventEmitter {
|
||||
this.ssl = config.ssl || false
|
||||
this._ending = false
|
||||
this._emitMessage = false
|
||||
var self = this
|
||||
const self = this
|
||||
this.on('newListener', function (eventName) {
|
||||
if (eventName === 'message') {
|
||||
self._emitMessage = true
|
||||
@ -36,7 +36,7 @@ class Connection extends EventEmitter {
|
||||
}
|
||||
|
||||
connect(port, host) {
|
||||
var self = this
|
||||
const self = this
|
||||
|
||||
this._connecting = true
|
||||
this.stream.setNoDelay(true)
|
||||
@ -67,7 +67,7 @@ class Connection extends EventEmitter {
|
||||
}
|
||||
|
||||
this.stream.once('data', function (buffer) {
|
||||
var responseCode = buffer.toString('utf8')
|
||||
const responseCode = buffer.toString('utf8')
|
||||
switch (responseCode) {
|
||||
case 'S': // Server supports SSL connections, continue with a secure connection
|
||||
break
|
||||
@ -91,7 +91,7 @@ class Connection extends EventEmitter {
|
||||
}
|
||||
}
|
||||
|
||||
var net = require('net')
|
||||
const net = require('net')
|
||||
if (net.isIP && net.isIP(host) === 0) {
|
||||
options.servername = host
|
||||
}
|
||||
@ -109,7 +109,7 @@ class Connection extends EventEmitter {
|
||||
|
||||
attachListeners(stream) {
|
||||
parse(stream, (msg) => {
|
||||
var eventName = msg.name === 'error' ? 'errorMessage' : msg.name
|
||||
const eventName = msg.name === 'error' ? 'errorMessage' : msg.name
|
||||
if (this._emitMessage) {
|
||||
this.emit('message', msg)
|
||||
}
|
||||
|
||||
@ -22,7 +22,7 @@ function readASN1OID(data, index) {
|
||||
|
||||
const { length: OIDLength, index: indexAfterOIDLength } = readASN1Length(data, index)
|
||||
index = indexAfterOIDLength
|
||||
let lastIndex = index + OIDLength
|
||||
const lastIndex = index + OIDLength
|
||||
|
||||
const byte1 = data[index++]
|
||||
let oid = ((byte1 / 40) >> 0) + '.' + (byte1 % 40)
|
||||
|
||||
@ -50,8 +50,8 @@ async function continueSession(session, password, serverData, stream) {
|
||||
throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: server nonce is too short')
|
||||
}
|
||||
|
||||
var clientFirstMessageBare = 'n=*,r=' + session.clientNonce
|
||||
var serverFirstMessage = 'r=' + sv.nonce + ',s=' + sv.salt + ',i=' + sv.iteration
|
||||
const clientFirstMessageBare = 'n=*,r=' + session.clientNonce
|
||||
const serverFirstMessage = 'r=' + sv.nonce + ',s=' + sv.salt + ',i=' + sv.iteration
|
||||
|
||||
// without channel binding:
|
||||
let channelBinding = stream ? 'eSws' : 'biws' // 'y,,' or 'n,,', base64-encoded
|
||||
@ -66,17 +66,17 @@ async function continueSession(session, password, serverData, stream) {
|
||||
channelBinding = bindingData.toString('base64')
|
||||
}
|
||||
|
||||
var clientFinalMessageWithoutProof = 'c=' + channelBinding + ',r=' + sv.nonce
|
||||
var authMessage = clientFirstMessageBare + ',' + serverFirstMessage + ',' + clientFinalMessageWithoutProof
|
||||
const clientFinalMessageWithoutProof = 'c=' + channelBinding + ',r=' + sv.nonce
|
||||
const authMessage = clientFirstMessageBare + ',' + serverFirstMessage + ',' + clientFinalMessageWithoutProof
|
||||
|
||||
var saltBytes = Buffer.from(sv.salt, 'base64')
|
||||
var saltedPassword = await crypto.deriveKey(password, saltBytes, sv.iteration)
|
||||
var clientKey = await crypto.hmacSha256(saltedPassword, 'Client Key')
|
||||
var storedKey = await crypto.sha256(clientKey)
|
||||
var clientSignature = await crypto.hmacSha256(storedKey, authMessage)
|
||||
var clientProof = xorBuffers(Buffer.from(clientKey), Buffer.from(clientSignature)).toString('base64')
|
||||
var serverKey = await crypto.hmacSha256(saltedPassword, 'Server Key')
|
||||
var serverSignatureBytes = await crypto.hmacSha256(serverKey, authMessage)
|
||||
const saltBytes = Buffer.from(sv.salt, 'base64')
|
||||
const saltedPassword = await crypto.deriveKey(password, saltBytes, sv.iteration)
|
||||
const clientKey = await crypto.hmacSha256(saltedPassword, 'Client Key')
|
||||
const storedKey = await crypto.sha256(clientKey)
|
||||
const clientSignature = await crypto.hmacSha256(storedKey, authMessage)
|
||||
const clientProof = xorBuffers(Buffer.from(clientKey), Buffer.from(clientSignature)).toString('base64')
|
||||
const serverKey = await crypto.hmacSha256(saltedPassword, 'Server Key')
|
||||
const serverSignatureBytes = await crypto.hmacSha256(serverKey, authMessage)
|
||||
|
||||
session.message = 'SASLResponse'
|
||||
session.serverSignature = Buffer.from(serverSignatureBytes).toString('base64')
|
||||
|
||||
@ -10,8 +10,8 @@ function md5(string) {
|
||||
|
||||
// See AuthenticationMD5Password at https://www.postgresql.org/docs/current/static/protocol-flow.html
|
||||
function postgresMd5PasswordHash(user, password, salt) {
|
||||
var inner = md5(password + user)
|
||||
var outer = md5(Buffer.concat([Buffer.from(inner), salt]))
|
||||
const inner = md5(password + user)
|
||||
const outer = md5(Buffer.concat([Buffer.from(inner), salt]))
|
||||
return 'md5' + outer
|
||||
}
|
||||
|
||||
|
||||
@ -49,8 +49,8 @@ async function md5(string) {
|
||||
|
||||
// See AuthenticationMD5Password at https://www.postgresql.org/docs/current/static/protocol-flow.html
|
||||
async function postgresMd5PasswordHash(user, password, salt) {
|
||||
var inner = await md5(password + user)
|
||||
var outer = await md5(Buffer.concat([Buffer.from(inner), salt]))
|
||||
const inner = await md5(password + user)
|
||||
const outer = await md5(Buffer.concat([Buffer.from(inner), salt]))
|
||||
return 'md5' + outer
|
||||
}
|
||||
|
||||
|
||||
@ -72,10 +72,10 @@ module.exports = {
|
||||
keepalives_idle: 0,
|
||||
}
|
||||
|
||||
var pgTypes = require('pg-types')
|
||||
const pgTypes = require('pg-types')
|
||||
// save default parsers
|
||||
var parseBigInteger = pgTypes.getTypeParser(20, 'text')
|
||||
var parseBigIntegerArray = pgTypes.getTypeParser(1016, 'text')
|
||||
const parseBigInteger = pgTypes.getTypeParser(20, 'text')
|
||||
const parseBigIntegerArray = pgTypes.getTypeParser(1016, 'text')
|
||||
|
||||
// parse int8 so you can get your count values as actual numbers
|
||||
module.exports.__defineSetter__('parseInt8', function (val) {
|
||||
|
||||
@ -18,7 +18,7 @@ const poolFactory = (Client) => {
|
||||
}
|
||||
}
|
||||
|
||||
var PG = function (clientConstructor) {
|
||||
const PG = function (clientConstructor) {
|
||||
this.defaults = defaults
|
||||
this.Client = clientConstructor
|
||||
this.Query = this.Client.Query
|
||||
@ -44,7 +44,7 @@ if (typeof process.env.NODE_PG_FORCE_NATIVE !== 'undefined') {
|
||||
configurable: true,
|
||||
enumerable: false,
|
||||
get() {
|
||||
var native = null
|
||||
let native = null
|
||||
try {
|
||||
native = new PG(require('./native'))
|
||||
} catch (err) {
|
||||
|
||||
@ -9,14 +9,14 @@ try {
|
||||
} catch (e) {
|
||||
throw e
|
||||
}
|
||||
var TypeOverrides = require('../type-overrides')
|
||||
var EventEmitter = require('events').EventEmitter
|
||||
var util = require('util')
|
||||
var ConnectionParameters = require('../connection-parameters')
|
||||
const TypeOverrides = require('../type-overrides')
|
||||
const EventEmitter = require('events').EventEmitter
|
||||
const util = require('util')
|
||||
const ConnectionParameters = require('../connection-parameters')
|
||||
|
||||
var NativeQuery = require('./query')
|
||||
const NativeQuery = require('./query')
|
||||
|
||||
var Client = (module.exports = function (config) {
|
||||
const Client = (module.exports = function (config) {
|
||||
EventEmitter.call(this)
|
||||
config = config || {}
|
||||
|
||||
@ -35,7 +35,7 @@ var Client = (module.exports = function (config) {
|
||||
|
||||
// keep these on the object for legacy reasons
|
||||
// for the time being. TODO: deprecate all this jazz
|
||||
var cp = (this.connectionParameters = new ConnectionParameters(config))
|
||||
const cp = (this.connectionParameters = new ConnectionParameters(config))
|
||||
if (config.nativeConnectionString) cp.nativeConnectionString = config.nativeConnectionString
|
||||
this.user = cp.user
|
||||
|
||||
@ -80,7 +80,7 @@ Client.prototype._errorAllQueries = function (err) {
|
||||
// pass an optional callback to be called once connected
|
||||
// or with an error if there was a connection error
|
||||
Client.prototype._connect = function (cb) {
|
||||
var self = this
|
||||
const self = this
|
||||
|
||||
if (this._connecting) {
|
||||
process.nextTick(() => cb(new Error('Client has already been connected. You cannot reuse a client.')))
|
||||
@ -152,11 +152,11 @@ Client.prototype.connect = function (callback) {
|
||||
// optional string rowMode = 'array' for an array of results
|
||||
// }
|
||||
Client.prototype.query = function (config, values, callback) {
|
||||
var query
|
||||
var result
|
||||
var readTimeout
|
||||
var readTimeoutTimer
|
||||
var queryCallback
|
||||
let query
|
||||
let result
|
||||
let readTimeout
|
||||
let readTimeoutTimer
|
||||
let queryCallback
|
||||
|
||||
if (config === null || config === undefined) {
|
||||
throw new TypeError('Client was passed a null or undefined query')
|
||||
@ -187,7 +187,7 @@ Client.prototype.query = function (config, values, callback) {
|
||||
queryCallback = query.callback
|
||||
|
||||
readTimeoutTimer = setTimeout(() => {
|
||||
var error = new Error('Query read timeout')
|
||||
const error = new Error('Query read timeout')
|
||||
|
||||
process.nextTick(() => {
|
||||
query.handleError(error, this.connection)
|
||||
@ -200,7 +200,7 @@ Client.prototype.query = function (config, values, callback) {
|
||||
query.callback = () => {}
|
||||
|
||||
// Remove from queue
|
||||
var index = this._queryQueue.indexOf(query)
|
||||
const index = this._queryQueue.indexOf(query)
|
||||
if (index > -1) {
|
||||
this._queryQueue.splice(index, 1)
|
||||
}
|
||||
@ -237,14 +237,14 @@ Client.prototype.query = function (config, values, callback) {
|
||||
|
||||
// disconnect from the backend server
|
||||
Client.prototype.end = function (cb) {
|
||||
var self = this
|
||||
const self = this
|
||||
|
||||
this._ending = true
|
||||
|
||||
if (!this._connected) {
|
||||
this.once('connect', this.end.bind(this, cb))
|
||||
}
|
||||
var result
|
||||
let result
|
||||
if (!cb) {
|
||||
result = new this._Promise(function (resolve, reject) {
|
||||
cb = (err) => (err ? reject(err) : resolve())
|
||||
@ -272,7 +272,7 @@ Client.prototype._pulseQueryQueue = function (initialConnection) {
|
||||
if (this._hasActiveQuery()) {
|
||||
return
|
||||
}
|
||||
var query = this._queryQueue.shift()
|
||||
const query = this._queryQueue.shift()
|
||||
if (!query) {
|
||||
if (!initialConnection) {
|
||||
this.emit('drain')
|
||||
@ -281,7 +281,7 @@ Client.prototype._pulseQueryQueue = function (initialConnection) {
|
||||
}
|
||||
this._activeQuery = query
|
||||
query.submit(this)
|
||||
var self = this
|
||||
const self = this
|
||||
query.once('_done', function () {
|
||||
self._pulseQueryQueue()
|
||||
})
|
||||
|
||||
@ -1,10 +1,10 @@
|
||||
'use strict'
|
||||
|
||||
var EventEmitter = require('events').EventEmitter
|
||||
var util = require('util')
|
||||
var utils = require('../utils')
|
||||
const EventEmitter = require('events').EventEmitter
|
||||
const util = require('util')
|
||||
const utils = require('../utils')
|
||||
|
||||
var NativeQuery = (module.exports = function (config, values, callback) {
|
||||
const NativeQuery = (module.exports = function (config, values, callback) {
|
||||
EventEmitter.call(this)
|
||||
config = utils.normalizeQueryConfig(config, values, callback)
|
||||
this.text = config.text
|
||||
@ -31,7 +31,7 @@ var NativeQuery = (module.exports = function (config, values, callback) {
|
||||
|
||||
util.inherits(NativeQuery, EventEmitter)
|
||||
|
||||
var errorFieldMap = {
|
||||
const errorFieldMap = {
|
||||
/* eslint-disable quote-props */
|
||||
sqlState: 'code',
|
||||
statementPosition: 'position',
|
||||
@ -49,10 +49,10 @@ var errorFieldMap = {
|
||||
|
||||
NativeQuery.prototype.handleError = function (err) {
|
||||
// copy pq error fields into the error object
|
||||
var fields = this.native.pq.resultErrorFields()
|
||||
const fields = this.native.pq.resultErrorFields()
|
||||
if (fields) {
|
||||
for (var key in fields) {
|
||||
var normalizedFieldName = errorFieldMap[key] || key
|
||||
for (const key in fields) {
|
||||
const normalizedFieldName = errorFieldMap[key] || key
|
||||
err[normalizedFieldName] = fields[key]
|
||||
}
|
||||
}
|
||||
@ -85,11 +85,11 @@ NativeQuery.prototype._getPromise = function () {
|
||||
|
||||
NativeQuery.prototype.submit = function (client) {
|
||||
this.state = 'running'
|
||||
var self = this
|
||||
const self = this
|
||||
this.native = client.native
|
||||
client.native.arrayMode = this._arrayMode
|
||||
|
||||
var after = function (err, rows, results) {
|
||||
let after = function (err, rows, results) {
|
||||
client.native.arrayMode = false
|
||||
setImmediate(function () {
|
||||
self.emit('_done')
|
||||
@ -136,7 +136,7 @@ NativeQuery.prototype.submit = function (client) {
|
||||
console.error('This can cause conflicts and silent errors executing queries')
|
||||
/* eslint-enable no-console */
|
||||
}
|
||||
var values = (this.values || []).map(utils.prepareValue)
|
||||
const values = (this.values || []).map(utils.prepareValue)
|
||||
|
||||
// check if the client has already executed this named query
|
||||
// if so...just execute it again - skip the planning phase
|
||||
@ -158,7 +158,7 @@ NativeQuery.prototype.submit = function (client) {
|
||||
const err = new Error('Query values must be an array')
|
||||
return after(err)
|
||||
}
|
||||
var vals = this.values.map(utils.prepareValue)
|
||||
const vals = this.values.map(utils.prepareValue)
|
||||
client.native.query(this.text, vals, after)
|
||||
} else if (this.queryMode === 'extended') {
|
||||
client.native.query(this.text, [], after)
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
'use strict'
|
||||
|
||||
var types = require('pg-types')
|
||||
const types = require('pg-types')
|
||||
|
||||
var matchRegexp = /^([A-Za-z]+)(?: (\d+))?(?: (\d+))?/
|
||||
const matchRegexp = /^([A-Za-z]+)(?: (\d+))?(?: (\d+))?/
|
||||
|
||||
// result object returned from query
|
||||
// in the 'end' event and also
|
||||
@ -26,7 +26,7 @@ class Result {
|
||||
|
||||
// adds a command complete message
|
||||
addCommandComplete(msg) {
|
||||
var match
|
||||
let match
|
||||
if (msg.text) {
|
||||
// pure javascript
|
||||
match = matchRegexp.exec(msg.text)
|
||||
@ -48,9 +48,9 @@ class Result {
|
||||
}
|
||||
|
||||
_parseRowAsArray(rowData) {
|
||||
var row = new Array(rowData.length)
|
||||
for (var i = 0, len = rowData.length; i < len; i++) {
|
||||
var rawValue = rowData[i]
|
||||
const row = new Array(rowData.length)
|
||||
for (let i = 0, len = rowData.length; i < len; i++) {
|
||||
const rawValue = rowData[i]
|
||||
if (rawValue !== null) {
|
||||
row[i] = this._parsers[i](rawValue)
|
||||
} else {
|
||||
@ -61,10 +61,10 @@ class Result {
|
||||
}
|
||||
|
||||
parseRow(rowData) {
|
||||
var row = { ...this._prebuiltEmptyResultObject }
|
||||
for (var i = 0, len = rowData.length; i < len; i++) {
|
||||
var rawValue = rowData[i]
|
||||
var field = this.fields[i].name
|
||||
const row = { ...this._prebuiltEmptyResultObject }
|
||||
for (let i = 0, len = rowData.length; i < len; i++) {
|
||||
const rawValue = rowData[i]
|
||||
const field = this.fields[i].name
|
||||
if (rawValue !== null) {
|
||||
row[field] = this._parsers[i](rawValue)
|
||||
} else {
|
||||
@ -88,10 +88,10 @@ class Result {
|
||||
this._parsers = new Array(fieldDescriptions.length)
|
||||
}
|
||||
|
||||
var row = {}
|
||||
const row = {}
|
||||
|
||||
for (var i = 0; i < fieldDescriptions.length; i++) {
|
||||
var desc = fieldDescriptions[i]
|
||||
for (let i = 0; i < fieldDescriptions.length; i++) {
|
||||
const desc = fieldDescriptions[i]
|
||||
row[desc.name] = null
|
||||
|
||||
if (this._types) {
|
||||
|
||||
@ -24,7 +24,7 @@ function getNodejsStreamFuncs() {
|
||||
}
|
||||
|
||||
function getSecureStream(options) {
|
||||
var tls = require('tls')
|
||||
const tls = require('tls')
|
||||
return tls.connect(options)
|
||||
}
|
||||
return {
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
'use strict'
|
||||
|
||||
var types = require('pg-types')
|
||||
const types = require('pg-types')
|
||||
|
||||
function TypeOverrides(userTypes) {
|
||||
this._types = userTypes || types
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
const defaults = require('./defaults')
|
||||
|
||||
function escapeElement(elementRepresentation) {
|
||||
var escaped = elementRepresentation.replace(/\\/g, '\\\\').replace(/"/g, '\\"')
|
||||
const escaped = elementRepresentation.replace(/\\/g, '\\\\').replace(/"/g, '\\"')
|
||||
|
||||
return '"' + escaped + '"'
|
||||
}
|
||||
@ -12,8 +12,8 @@ function escapeElement(elementRepresentation) {
|
||||
// uses comma separator so won't work for types like box that use
|
||||
// a different array separator.
|
||||
function arrayString(val) {
|
||||
var result = '{'
|
||||
for (var i = 0; i < val.length; i++) {
|
||||
let result = '{'
|
||||
for (let i = 0; i < val.length; i++) {
|
||||
if (i > 0) {
|
||||
result = result + ','
|
||||
}
|
||||
@ -22,9 +22,9 @@ function arrayString(val) {
|
||||
} else if (Array.isArray(val[i])) {
|
||||
result = result + arrayString(val[i])
|
||||
} else if (ArrayBuffer.isView(val[i])) {
|
||||
var item = val[i]
|
||||
let item = val[i]
|
||||
if (!(item instanceof Buffer)) {
|
||||
var buf = Buffer.from(item.buffer, item.byteOffset, item.byteLength)
|
||||
const buf = Buffer.from(item.buffer, item.byteOffset, item.byteLength)
|
||||
if (buf.length === item.byteLength) {
|
||||
item = buf
|
||||
} else {
|
||||
@ -44,7 +44,7 @@ function arrayString(val) {
|
||||
// to their 'raw' counterparts for use as a postgres parameter
|
||||
// note: you can override this function to provide your own conversion mechanism
|
||||
// for complex types, etc...
|
||||
var prepareValue = function (val, seen) {
|
||||
const prepareValue = function (val, seen) {
|
||||
// null and undefined are both null for postgres
|
||||
if (val == null) {
|
||||
return null
|
||||
@ -54,7 +54,7 @@ var prepareValue = function (val, seen) {
|
||||
return val
|
||||
}
|
||||
if (ArrayBuffer.isView(val)) {
|
||||
var buf = Buffer.from(val.buffer, val.byteOffset, val.byteLength)
|
||||
const buf = Buffer.from(val.buffer, val.byteOffset, val.byteLength)
|
||||
if (buf.length === val.byteLength) {
|
||||
return buf
|
||||
}
|
||||
@ -90,13 +90,13 @@ function prepareObject(val, seen) {
|
||||
}
|
||||
|
||||
function dateToString(date) {
|
||||
var offset = -date.getTimezoneOffset()
|
||||
let offset = -date.getTimezoneOffset()
|
||||
|
||||
var year = date.getFullYear()
|
||||
var isBCYear = year < 1
|
||||
let year = date.getFullYear()
|
||||
const isBCYear = year < 1
|
||||
if (isBCYear) year = Math.abs(year) + 1 // negative years are 1 off their BC representation
|
||||
|
||||
var ret =
|
||||
let ret =
|
||||
String(year).padStart(4, '0') +
|
||||
'-' +
|
||||
String(date.getMonth() + 1).padStart(2, '0') +
|
||||
@ -124,11 +124,11 @@ function dateToString(date) {
|
||||
}
|
||||
|
||||
function dateToStringUTC(date) {
|
||||
var year = date.getUTCFullYear()
|
||||
var isBCYear = year < 1
|
||||
let year = date.getUTCFullYear()
|
||||
const isBCYear = year < 1
|
||||
if (isBCYear) year = Math.abs(year) + 1 // negative years are 1 off their BC representation
|
||||
|
||||
var ret =
|
||||
let ret =
|
||||
String(year).padStart(4, '0') +
|
||||
'-' +
|
||||
String(date.getUTCMonth() + 1).padStart(2, '0') +
|
||||
@ -170,11 +170,11 @@ const escapeIdentifier = function (str) {
|
||||
}
|
||||
|
||||
const escapeLiteral = function (str) {
|
||||
var hasBackslash = false
|
||||
var escaped = "'"
|
||||
let hasBackslash = false
|
||||
let escaped = "'"
|
||||
|
||||
for (var i = 0; i < str.length; i++) {
|
||||
var c = str[i]
|
||||
for (let i = 0; i < str.length; i++) {
|
||||
const c = str[i]
|
||||
if (c === "'") {
|
||||
escaped += c + c
|
||||
} else if (c === '\\') {
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
'use strict'
|
||||
var args = require('../test/cli')
|
||||
var pg = require('../lib')
|
||||
const args = require('../test/cli')
|
||||
const pg = require('../lib')
|
||||
|
||||
var people = [
|
||||
const people = [
|
||||
{ name: 'Aaron', age: 10 },
|
||||
{ name: 'Brian', age: 20 },
|
||||
{ name: 'Chris', age: 30 },
|
||||
@ -32,7 +32,7 @@ var people = [
|
||||
]
|
||||
|
||||
async function run() {
|
||||
var con = new pg.Client({
|
||||
const con = new pg.Client({
|
||||
user: args.user,
|
||||
password: args.password,
|
||||
host: args.host,
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
'use strict'
|
||||
var pg = require('../lib')
|
||||
var args = require('../test/cli')
|
||||
const pg = require('../lib')
|
||||
const args = require('../test/cli')
|
||||
|
||||
var queries = ['select CURRENT_TIMESTAMP', "select interval '1 day' + interval '1 hour'", "select TIMESTAMP 'today'"]
|
||||
const queries = ['select CURRENT_TIMESTAMP', "select interval '1 day' + interval '1 hour'", "select TIMESTAMP 'today'"]
|
||||
|
||||
queries.forEach(function (query) {
|
||||
var client = new pg.Client({
|
||||
const client = new pg.Client({
|
||||
user: args.user,
|
||||
database: args.database,
|
||||
password: args.password,
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
const BufferList = function () {
|
||||
this.buffers = []
|
||||
}
|
||||
var p = BufferList.prototype
|
||||
const p = BufferList.prototype
|
||||
|
||||
p.add = function (buffer, front) {
|
||||
this.buffers[front ? 'unshift' : 'push'](buffer)
|
||||
@ -28,16 +28,16 @@ p.addInt32 = function (val, first) {
|
||||
}
|
||||
|
||||
p.addCString = function (val, front) {
|
||||
var len = Buffer.byteLength(val)
|
||||
var buffer = Buffer.alloc(len + 1)
|
||||
const len = Buffer.byteLength(val)
|
||||
const buffer = Buffer.alloc(len + 1)
|
||||
buffer.write(val)
|
||||
buffer[len] = 0
|
||||
return this.add(buffer, front)
|
||||
}
|
||||
|
||||
p.addString = function (val, front) {
|
||||
var len = Buffer.byteLength(val)
|
||||
var buffer = Buffer.alloc(len)
|
||||
const len = Buffer.byteLength(val)
|
||||
const buffer = Buffer.alloc(len)
|
||||
buffer.write(val)
|
||||
return this.add(buffer, front)
|
||||
}
|
||||
@ -47,7 +47,7 @@ p.addChar = function (char, first) {
|
||||
}
|
||||
|
||||
p.join = function (appendLength, char) {
|
||||
var length = this.getByteLength()
|
||||
let length = this.getByteLength()
|
||||
if (appendLength) {
|
||||
this.addInt32(length + 4, true)
|
||||
return this.join(false, char)
|
||||
@ -56,8 +56,8 @@ p.join = function (appendLength, char) {
|
||||
this.addChar(char, true)
|
||||
length++
|
||||
}
|
||||
var result = Buffer.alloc(length)
|
||||
var index = 0
|
||||
const result = Buffer.alloc(length)
|
||||
let index = 0
|
||||
this.buffers.forEach(function (buffer) {
|
||||
buffer.copy(result, index, 0)
|
||||
index += buffer.length
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
'use strict'
|
||||
var ConnectionParameters = require('../lib/connection-parameters')
|
||||
var config = new ConnectionParameters(process.argv[2])
|
||||
const ConnectionParameters = require('../lib/connection-parameters')
|
||||
const config = new ConnectionParameters(process.argv[2])
|
||||
|
||||
for (var i = 0; i < process.argv.length; i++) {
|
||||
for (let i = 0; i < process.argv.length; i++) {
|
||||
switch (process.argv[i].toLowerCase()) {
|
||||
case 'native':
|
||||
config.native = true
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
'use strict'
|
||||
var helper = require('../test-helper')
|
||||
var pg = helper.pg
|
||||
const helper = require('../test-helper')
|
||||
const pg = helper.pg
|
||||
const assert = require('assert')
|
||||
|
||||
var suite = new helper.Suite()
|
||||
const suite = new helper.Suite()
|
||||
|
||||
suite.test('null and undefined are both inserted as NULL', function (done) {
|
||||
const pool = new pg.Pool()
|
||||
@ -180,7 +180,7 @@ suite.test('executing nested queries', function (done) {
|
||||
})
|
||||
|
||||
suite.test('raises error if cannot connect', function () {
|
||||
var connectionString = 'pg://sfalsdkf:asdf@localhost/ieieie'
|
||||
const connectionString = 'pg://sfalsdkf:asdf@localhost/ieieie'
|
||||
const pool = new pg.Pool({ connectionString: connectionString })
|
||||
pool.connect(
|
||||
assert.calls(function (err, client, done) {
|
||||
@ -213,7 +213,7 @@ suite.test('callback is fired once and only once', function (done) {
|
||||
assert.calls(function (err, client, release) {
|
||||
assert(!err)
|
||||
client.query('CREATE TEMP TABLE boom(name varchar(10))')
|
||||
var callCount = 0
|
||||
let callCount = 0
|
||||
client.query(
|
||||
[
|
||||
"INSERT INTO boom(name) VALUES('hai')",
|
||||
@ -256,7 +256,7 @@ suite.test('can provide callback and config and parameters', function (done) {
|
||||
pool.connect(
|
||||
assert.calls(function (err, client, release) {
|
||||
assert(!err)
|
||||
var config = {
|
||||
const config = {
|
||||
text: 'select $1::text as val',
|
||||
}
|
||||
client.query(
|
||||
|
||||
@ -1,24 +1,24 @@
|
||||
'use strict'
|
||||
var helper = require('./test-helper')
|
||||
var Client = helper.Client
|
||||
const helper = require('./test-helper')
|
||||
const Client = helper.Client
|
||||
const assert = require('assert')
|
||||
|
||||
var suite = new helper.Suite()
|
||||
const suite = new helper.Suite()
|
||||
|
||||
var conInfo = helper.config
|
||||
const conInfo = helper.config
|
||||
|
||||
function getConInfo(override) {
|
||||
return Object.assign({}, conInfo, override)
|
||||
}
|
||||
|
||||
function getAppName(conf, cb) {
|
||||
var client = new Client(conf)
|
||||
const client = new Client(conf)
|
||||
client.connect(
|
||||
assert.success(function () {
|
||||
client.query(
|
||||
'SHOW application_name',
|
||||
assert.success(function (res) {
|
||||
var appName = res.rows[0].application_name
|
||||
const appName = res.rows[0].application_name
|
||||
cb(appName)
|
||||
client.end()
|
||||
})
|
||||
@ -35,8 +35,8 @@ suite.test('No default appliation_name ', function (done) {
|
||||
})
|
||||
|
||||
suite.test('fallback_application_name is used', function (done) {
|
||||
var fbAppName = 'this is my app'
|
||||
var conf = getConInfo({
|
||||
const fbAppName = 'this is my app'
|
||||
const conf = getConInfo({
|
||||
fallback_application_name: fbAppName,
|
||||
})
|
||||
getAppName(conf, function (res) {
|
||||
@ -46,8 +46,8 @@ suite.test('fallback_application_name is used', function (done) {
|
||||
})
|
||||
|
||||
suite.test('application_name is used', function (done) {
|
||||
var appName = 'some wired !@#$% application_name'
|
||||
var conf = getConInfo({
|
||||
const appName = 'some wired !@#$% application_name'
|
||||
const conf = getConInfo({
|
||||
application_name: appName,
|
||||
})
|
||||
getAppName(conf, function (res) {
|
||||
@ -57,9 +57,9 @@ suite.test('application_name is used', function (done) {
|
||||
})
|
||||
|
||||
suite.test('application_name has precedence over fallback_application_name', function (done) {
|
||||
var appName = 'some wired !@#$% application_name'
|
||||
var fbAppName = 'some other strange $$test$$ appname'
|
||||
var conf = getConInfo({
|
||||
const appName = 'some wired !@#$% application_name'
|
||||
const fbAppName = 'some other strange $$test$$ appname'
|
||||
const conf = getConInfo({
|
||||
application_name: appName,
|
||||
fallback_application_name: fbAppName,
|
||||
})
|
||||
@ -70,9 +70,9 @@ suite.test('application_name has precedence over fallback_application_name', fun
|
||||
})
|
||||
|
||||
suite.test('application_name from connection string', function (done) {
|
||||
var appName = 'my app'
|
||||
var conParams = require('../../../lib/connection-parameters')
|
||||
var conf
|
||||
const appName = 'my app'
|
||||
const conParams = require('../../../lib/connection-parameters')
|
||||
let conf
|
||||
if (process.argv[2]) {
|
||||
conf = new conParams(process.argv[2] + '?application_name=' + appName)
|
||||
} else {
|
||||
@ -87,7 +87,7 @@ suite.test('application_name from connection string', function (done) {
|
||||
// TODO: make the test work for native client too
|
||||
if (!helper.args.native) {
|
||||
suite.test('application_name is read from the env', function (done) {
|
||||
var appName = (process.env.PGAPPNAME = 'testest')
|
||||
const appName = (process.env.PGAPPNAME = 'testest')
|
||||
getAppName({}, function (res) {
|
||||
delete process.env.PGAPPNAME
|
||||
assert.strictEqual(res, appName)
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
'use strict'
|
||||
var helper = require('./test-helper')
|
||||
var pg = helper.pg
|
||||
const helper = require('./test-helper')
|
||||
const pg = helper.pg
|
||||
const assert = require('assert')
|
||||
|
||||
var suite = new helper.Suite()
|
||||
const suite = new helper.Suite()
|
||||
|
||||
const pool = new pg.Pool()
|
||||
|
||||
@ -16,7 +16,7 @@ pool.connect(
|
||||
'SELECT $1::text[] as array',
|
||||
[[null]],
|
||||
assert.success(function (result) {
|
||||
var array = result.rows[0].array
|
||||
const array = result.rows[0].array
|
||||
assert.lengthIs(array, 1)
|
||||
assert.isNull(array[0])
|
||||
done()
|
||||
@ -25,9 +25,9 @@ pool.connect(
|
||||
})
|
||||
|
||||
suite.test('elements containing JSON-escaped characters', function (done) {
|
||||
var param = '\\"\\"'
|
||||
let param = '\\"\\"'
|
||||
|
||||
for (var i = 1; i <= 0x1f; i++) {
|
||||
for (let i = 1; i <= 0x1f; i++) {
|
||||
param += String.fromCharCode(i)
|
||||
}
|
||||
|
||||
@ -35,7 +35,7 @@ pool.connect(
|
||||
'SELECT $1::text[] as array',
|
||||
[[param]],
|
||||
assert.success(function (result) {
|
||||
var array = result.rows[0].array
|
||||
const array = result.rows[0].array
|
||||
assert.lengthIs(array, 1)
|
||||
assert.equal(array[0], param)
|
||||
done()
|
||||
@ -70,7 +70,7 @@ pool.connect(
|
||||
client.query(
|
||||
'SELECT names FROM why',
|
||||
assert.success(function (result) {
|
||||
var names = result.rows[0].names
|
||||
const names = result.rows[0].names
|
||||
assert.lengthIs(names, 3)
|
||||
assert.equal(names[0], 'aaron')
|
||||
assert.equal(names[1], 'brian')
|
||||
@ -84,7 +84,7 @@ pool.connect(
|
||||
client.query(
|
||||
"SELECT '{}'::text[] as names",
|
||||
assert.success(function (result) {
|
||||
var names = result.rows[0].names
|
||||
const names = result.rows[0].names
|
||||
assert.lengthIs(names, 0)
|
||||
done()
|
||||
})
|
||||
@ -95,7 +95,7 @@ pool.connect(
|
||||
client.query(
|
||||
'SELECT \'{"joe,bob",jim}\'::text[] as names',
|
||||
assert.success(function (result) {
|
||||
var names = result.rows[0].names
|
||||
const names = result.rows[0].names
|
||||
assert.lengthIs(names, 2)
|
||||
assert.equal(names[0], 'joe,bob')
|
||||
assert.equal(names[1], 'jim')
|
||||
@ -108,7 +108,7 @@ pool.connect(
|
||||
client.query(
|
||||
'SELECT \'{"{","}"}\'::text[] as names',
|
||||
assert.success(function (result) {
|
||||
var names = result.rows[0].names
|
||||
const names = result.rows[0].names
|
||||
assert.lengthIs(names, 2)
|
||||
assert.equal(names[0], '{')
|
||||
assert.equal(names[1], '}')
|
||||
@ -121,7 +121,7 @@ pool.connect(
|
||||
client.query(
|
||||
'SELECT \'{joe,null,bob,"NULL"}\'::text[] as names',
|
||||
assert.success(function (result) {
|
||||
var names = result.rows[0].names
|
||||
const names = result.rows[0].names
|
||||
assert.lengthIs(names, 4)
|
||||
assert.equal(names[0], 'joe')
|
||||
assert.equal(names[1], null)
|
||||
@ -136,7 +136,7 @@ pool.connect(
|
||||
client.query(
|
||||
"SELECT ARRAY['joe''', 'jim', 'bob\"'] AS names",
|
||||
assert.success(function (result) {
|
||||
var names = result.rows[0].names
|
||||
const names = result.rows[0].names
|
||||
assert.lengthIs(names, 3)
|
||||
assert.equal(names[0], "joe'")
|
||||
assert.equal(names[1], 'jim')
|
||||
@ -150,7 +150,7 @@ pool.connect(
|
||||
client.query(
|
||||
"SELECT '{{1,joe},{2,bob}}'::text[] as names",
|
||||
assert.success(function (result) {
|
||||
var names = result.rows[0].names
|
||||
const names = result.rows[0].names
|
||||
assert.lengthIs(names, 2)
|
||||
|
||||
assert.lengthIs(names[0], 2)
|
||||
@ -169,7 +169,7 @@ pool.connect(
|
||||
client.query(
|
||||
"SELECT '{1,2,3}'::integer[] as names",
|
||||
assert.success(function (result) {
|
||||
var names = result.rows[0].names
|
||||
const names = result.rows[0].names
|
||||
assert.lengthIs(names, 3)
|
||||
assert.equal(names[0], 1)
|
||||
assert.equal(names[1], 2)
|
||||
@ -183,7 +183,7 @@ pool.connect(
|
||||
client.query(
|
||||
"SELECT '{{1,100},{2,100},{3,100}}'::integer[] as names",
|
||||
assert.success(function (result) {
|
||||
var names = result.rows[0].names
|
||||
const names = result.rows[0].names
|
||||
assert.lengthIs(names, 3)
|
||||
assert.equal(names[0][0], 1)
|
||||
assert.equal(names[0][1], 100)
|
||||
@ -209,7 +209,7 @@ pool.connect(
|
||||
],
|
||||
],
|
||||
assert.success(function (result) {
|
||||
var names = result.rows[0].names
|
||||
const names = result.rows[0].names
|
||||
assert.lengthIs(names, 3)
|
||||
assert.equal(names[0][0], 1)
|
||||
assert.equal(names[0][1], 100)
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
'use strict'
|
||||
var helper = require('../test-helper')
|
||||
var pg = helper.pg
|
||||
const helper = require('../test-helper')
|
||||
const pg = helper.pg
|
||||
|
||||
process.on('unhandledRejection', function (e) {
|
||||
console.error(e, e.stack)
|
||||
|
||||
File diff suppressed because one or more lines are too long
@ -1,14 +1,14 @@
|
||||
'use strict'
|
||||
var helper = require('./test-helper')
|
||||
var pg = helper.pg
|
||||
const helper = require('./test-helper')
|
||||
const pg = helper.pg
|
||||
const assert = require('assert')
|
||||
const { Client } = helper
|
||||
|
||||
var suite = new helper.Suite()
|
||||
const suite = new helper.Suite()
|
||||
|
||||
// clear process.env
|
||||
var realEnv = {}
|
||||
for (var key in process.env) {
|
||||
const realEnv = {}
|
||||
for (const key in process.env) {
|
||||
realEnv[key] = process.env[key]
|
||||
if (!key.indexOf('PG')) delete process.env[key]
|
||||
}
|
||||
@ -30,7 +30,7 @@ suite.test('default values are used in new clients', function () {
|
||||
parseInputDatesAsUTC: false,
|
||||
})
|
||||
|
||||
var client = new pg.Client()
|
||||
const client = new pg.Client()
|
||||
assert.same(client, {
|
||||
user: process.env.USER,
|
||||
password: null,
|
||||
@ -46,7 +46,7 @@ suite.test('modified values are passed to created clients', function () {
|
||||
pg.defaults.port = 1234
|
||||
pg.defaults.database = 'pow'
|
||||
|
||||
var client = new Client()
|
||||
const client = new Client()
|
||||
assert.same(client, {
|
||||
user: 'boom',
|
||||
password: 'zap',
|
||||
@ -80,7 +80,7 @@ suite.test('database defaults to user when user is non-default', () => {
|
||||
|
||||
suite.test('cleanup', () => {
|
||||
// restore process.env
|
||||
for (var key in realEnv) {
|
||||
for (const key in realEnv) {
|
||||
process.env[key] = realEnv[key]
|
||||
}
|
||||
})
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
'use strict'
|
||||
var helper = require('./test-helper')
|
||||
const helper = require('./test-helper')
|
||||
const suite = new helper.Suite()
|
||||
const assert = require('assert')
|
||||
|
||||
|
||||
@ -1,14 +1,14 @@
|
||||
'use strict'
|
||||
|
||||
var helper = require('./test-helper')
|
||||
const helper = require('./test-helper')
|
||||
|
||||
var pg = helper.pg
|
||||
const pg = helper.pg
|
||||
const assert = require('assert')
|
||||
const Client = pg.Client
|
||||
const DatabaseError = pg.DatabaseError
|
||||
|
||||
var createErorrClient = function () {
|
||||
var client = helper.client()
|
||||
const createErorrClient = function () {
|
||||
const client = helper.client()
|
||||
client.once('error', function (err) {
|
||||
assert.fail('Client shoud not throw error during query execution')
|
||||
})
|
||||
@ -78,7 +78,7 @@ suite.test('using a client after closing it results in error', (done) => {
|
||||
})
|
||||
|
||||
suite.test('query receives error on client shutdown', function (done) {
|
||||
var client = new Client()
|
||||
const client = new Client()
|
||||
client.connect(
|
||||
assert.success(function () {
|
||||
const config = {
|
||||
@ -102,8 +102,8 @@ suite.test('query receives error on client shutdown', function (done) {
|
||||
)
|
||||
})
|
||||
|
||||
var ensureFuture = function (testClient, done) {
|
||||
var goodQuery = testClient.query(new pg.Query('select age from boom'))
|
||||
const ensureFuture = function (testClient, done) {
|
||||
const goodQuery = testClient.query(new pg.Query('select age from boom'))
|
||||
assert.emits(goodQuery, 'row', function (row) {
|
||||
assert.equal(row.age, 28)
|
||||
done()
|
||||
@ -111,12 +111,12 @@ var ensureFuture = function (testClient, done) {
|
||||
}
|
||||
|
||||
suite.test('when query is parsing', (done) => {
|
||||
var client = createErorrClient()
|
||||
const client = createErorrClient()
|
||||
|
||||
client.query({ text: 'CREATE TEMP TABLE boom(age integer); INSERT INTO boom (age) VALUES (28);' })
|
||||
|
||||
// this query wont parse since there isn't a table named bang
|
||||
var query = client.query(
|
||||
const query = client.query(
|
||||
new pg.Query({
|
||||
text: 'select * from bang where name = $1',
|
||||
values: ['0'],
|
||||
@ -129,11 +129,11 @@ suite.test('when query is parsing', (done) => {
|
||||
})
|
||||
|
||||
suite.test('when a query is binding', function (done) {
|
||||
var client = createErorrClient()
|
||||
const client = createErorrClient()
|
||||
|
||||
client.query({ text: 'CREATE TEMP TABLE boom(age integer); INSERT INTO boom (age) VALUES (28);' })
|
||||
|
||||
var query = client.query(
|
||||
const query = client.query(
|
||||
new pg.Query({
|
||||
text: 'select * from boom where age = $1',
|
||||
values: ['asldkfjasdf'],
|
||||
@ -150,7 +150,7 @@ suite.test('when a query is binding', function (done) {
|
||||
})
|
||||
|
||||
suite.test('non-query error with callback', function (done) {
|
||||
var client = new Client({
|
||||
const client = new Client({
|
||||
user: 'asldkfjsadlfkj',
|
||||
})
|
||||
client.connect(
|
||||
@ -162,7 +162,7 @@ suite.test('non-query error with callback', function (done) {
|
||||
})
|
||||
|
||||
suite.test('non-error calls supplied callback', function (done) {
|
||||
var client = new Client({
|
||||
const client = new Client({
|
||||
user: helper.args.user,
|
||||
password: helper.args.password,
|
||||
host: helper.args.host,
|
||||
@ -179,7 +179,7 @@ suite.test('non-error calls supplied callback', function (done) {
|
||||
})
|
||||
|
||||
suite.test('when connecting to an invalid host with callback', function (done) {
|
||||
var client = new Client({
|
||||
const client = new Client({
|
||||
user: 'very invalid username',
|
||||
})
|
||||
client.on('error', () => {
|
||||
@ -192,7 +192,7 @@ suite.test('when connecting to an invalid host with callback', function (done) {
|
||||
})
|
||||
|
||||
suite.test('when connecting to invalid host with promise', function (done) {
|
||||
var client = new Client({
|
||||
const client = new Client({
|
||||
user: 'very invalid username',
|
||||
})
|
||||
client.on('error', () => {
|
||||
@ -202,7 +202,7 @@ suite.test('when connecting to invalid host with promise', function (done) {
|
||||
})
|
||||
|
||||
suite.test('non-query error', function (done) {
|
||||
var client = new Client({
|
||||
const client = new Client({
|
||||
user: 'asldkfjsadlfkj',
|
||||
})
|
||||
client.connect().catch((e) => {
|
||||
@ -212,9 +212,9 @@ suite.test('non-query error', function (done) {
|
||||
})
|
||||
|
||||
suite.test('within a simple query', (done) => {
|
||||
var client = createErorrClient()
|
||||
const client = createErorrClient()
|
||||
|
||||
var query = client.query(new pg.Query("select eeeee from yodas_dsflsd where pixistix = 'zoiks!!!'"))
|
||||
const query = client.query(new pg.Query("select eeeee from yodas_dsflsd where pixistix = 'zoiks!!!'"))
|
||||
|
||||
assert.emits(query, 'error', function (error) {
|
||||
if (!helper.config.native) {
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
var pg = require('./test-helper').pg
|
||||
const pg = require('./test-helper').pg
|
||||
|
||||
var sql = 'SELECT 1 AS "\\\'/*", 2 AS "\\\'*/\n + process.exit(-1)] = null;\n//"'
|
||||
const sql = 'SELECT 1 AS "\\\'/*", 2 AS "\\\'*/\n + process.exit(-1)] = null;\n//"'
|
||||
|
||||
var client = new pg.Client()
|
||||
const client = new pg.Client()
|
||||
client.connect()
|
||||
client.query(sql, function (err, res) {
|
||||
if (err) throw err
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
'use strict'
|
||||
var helper = require('./test-helper')
|
||||
const helper = require('./test-helper')
|
||||
const pool = new helper.pg.Pool()
|
||||
const assert = require('assert')
|
||||
|
||||
pool.connect(
|
||||
assert.success(function (client, done) {
|
||||
var types = require('pg-types')
|
||||
const types = require('pg-types')
|
||||
// 1231 = numericOID
|
||||
types.setTypeParser(1700, function () {
|
||||
return 'yes'
|
||||
@ -13,7 +13,7 @@ pool.connect(
|
||||
types.setTypeParser(1700, 'binary', function () {
|
||||
return 'yes'
|
||||
})
|
||||
var bignum = '294733346389144765940638005275322203805'
|
||||
const bignum = '294733346389144765940638005275322203805'
|
||||
client.query('CREATE TEMP TABLE bignumz(id numeric)')
|
||||
client.query('INSERT INTO bignumz(id) VALUES ($1)', [bignum])
|
||||
client.query(
|
||||
|
||||
@ -1,18 +1,18 @@
|
||||
'use strict'
|
||||
var helper = require('./test-helper')
|
||||
var Client = helper.Client
|
||||
const helper = require('./test-helper')
|
||||
const Client = helper.Client
|
||||
const assert = require('assert')
|
||||
|
||||
var suite = new helper.Suite()
|
||||
const suite = new helper.Suite()
|
||||
|
||||
var conInfo = helper.config
|
||||
const conInfo = helper.config
|
||||
|
||||
function getConInfo(override) {
|
||||
return Object.assign({}, conInfo, override)
|
||||
}
|
||||
|
||||
function testClientVersion(cb) {
|
||||
var client = new Client({})
|
||||
const client = new Client({})
|
||||
client.connect(
|
||||
assert.success(function () {
|
||||
helper.versionGTE(
|
||||
@ -37,13 +37,13 @@ function testClientVersion(cb) {
|
||||
}
|
||||
|
||||
function getIdleTransactionSessionTimeout(conf, cb) {
|
||||
var client = new Client(conf)
|
||||
const client = new Client(conf)
|
||||
client.connect(
|
||||
assert.success(function () {
|
||||
client.query(
|
||||
'SHOW idle_in_transaction_session_timeout',
|
||||
assert.success(function (res) {
|
||||
var timeout = res.rows[0].idle_in_transaction_session_timeout
|
||||
const timeout = res.rows[0].idle_in_transaction_session_timeout
|
||||
cb(timeout)
|
||||
client.end()
|
||||
})
|
||||
@ -64,7 +64,7 @@ if (!helper.args.native) {
|
||||
})
|
||||
|
||||
suite.test('idle_in_transaction_session_timeout integer is used', function (done) {
|
||||
var conf = getConInfo({
|
||||
const conf = getConInfo({
|
||||
idle_in_transaction_session_timeout: 3000,
|
||||
})
|
||||
getIdleTransactionSessionTimeout(conf, function (res) {
|
||||
@ -74,7 +74,7 @@ if (!helper.args.native) {
|
||||
})
|
||||
|
||||
suite.test('idle_in_transaction_session_timeout float is used', function (done) {
|
||||
var conf = getConInfo({
|
||||
const conf = getConInfo({
|
||||
idle_in_transaction_session_timeout: 3000.7,
|
||||
})
|
||||
getIdleTransactionSessionTimeout(conf, function (res) {
|
||||
@ -84,7 +84,7 @@ if (!helper.args.native) {
|
||||
})
|
||||
|
||||
suite.test('idle_in_transaction_session_timeout string is used', function (done) {
|
||||
var conf = getConInfo({
|
||||
const conf = getConInfo({
|
||||
idle_in_transaction_session_timeout: '3000',
|
||||
})
|
||||
getIdleTransactionSessionTimeout(conf, function (res) {
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
'use strict'
|
||||
var helper = require('./test-helper')
|
||||
var assert = require('assert')
|
||||
const helper = require('./test-helper')
|
||||
const assert = require('assert')
|
||||
|
||||
const pool = new helper.pg.Pool()
|
||||
pool.connect(
|
||||
@ -15,14 +15,14 @@ pool.connect(
|
||||
return pool.end()
|
||||
}
|
||||
client.query('CREATE TEMP TABLE stuff(id SERIAL PRIMARY KEY, data JSON)')
|
||||
var value = { name: 'Brian', age: 250, alive: true, now: new Date() }
|
||||
const value = { name: 'Brian', age: 250, alive: true, now: new Date() }
|
||||
client.query('INSERT INTO stuff (data) VALUES ($1)', [value])
|
||||
client.query(
|
||||
'SELECT * FROM stuff',
|
||||
assert.success(function (result) {
|
||||
assert.equal(result.rows.length, 1)
|
||||
assert.equal(typeof result.rows[0].data, 'object')
|
||||
var row = result.rows[0].data
|
||||
const row = result.rows[0].data
|
||||
assert.strictEqual(row.name, value.name)
|
||||
assert.strictEqual(row.age, value.age)
|
||||
assert.strictEqual(row.alive, value.alive)
|
||||
|
||||
@ -1,12 +1,12 @@
|
||||
'use strict'
|
||||
var buffers = require('../../test-buffers')
|
||||
var helper = require('./test-helper')
|
||||
var suite = new helper.Suite()
|
||||
const buffers = require('../../test-buffers')
|
||||
const helper = require('./test-helper')
|
||||
const suite = new helper.Suite()
|
||||
const assert = require('assert')
|
||||
|
||||
var net = require('net')
|
||||
const net = require('net')
|
||||
|
||||
var Server = function (response) {
|
||||
const Server = function (response) {
|
||||
this.server = undefined
|
||||
this.socket = undefined
|
||||
this.response = response
|
||||
@ -58,11 +58,11 @@ Server.prototype.close = function (cb) {
|
||||
this.server.close(cb)
|
||||
}
|
||||
|
||||
var testServer = function (server, cb) {
|
||||
const testServer = function (server, cb) {
|
||||
// wait for our server to start
|
||||
server.start(function (options) {
|
||||
// connect a client to it
|
||||
var client = new helper.Client(options)
|
||||
const client = new helper.Client(options)
|
||||
client.connect().catch((err) => {
|
||||
assert(err instanceof Error)
|
||||
clearTimeout(timeoutId)
|
||||
@ -77,7 +77,7 @@ var testServer = function (server, cb) {
|
||||
})
|
||||
|
||||
// blow up if we don't receive an error
|
||||
var timeoutId = setTimeout(function () {
|
||||
const timeoutId = setTimeout(function () {
|
||||
throw new Error('Client should have emitted an error but it did not.')
|
||||
}, 5000)
|
||||
})
|
||||
|
||||
@ -1,10 +1,10 @@
|
||||
'use strict'
|
||||
var helper = require('./test-helper')
|
||||
const helper = require('./test-helper')
|
||||
const suite = new helper.Suite()
|
||||
const assert = require('assert')
|
||||
|
||||
suite.test('noData message handling', function () {
|
||||
var client = helper.client()
|
||||
const client = helper.client()
|
||||
|
||||
client.query({
|
||||
name: 'boom',
|
||||
@ -37,7 +37,7 @@ suite.test('noData message handling', function () {
|
||||
values: [101],
|
||||
},
|
||||
(err, res) => {
|
||||
var row = res.rows[0]
|
||||
const row = res.rows[0]
|
||||
assert.strictEqual(row.size, 100)
|
||||
}
|
||||
)
|
||||
|
||||
@ -1,12 +1,12 @@
|
||||
'use strict'
|
||||
var helper = require('./test-helper')
|
||||
var pg = helper.pg
|
||||
const helper = require('./test-helper')
|
||||
const pg = helper.pg
|
||||
const suite = new helper.Suite()
|
||||
const pool = new pg.Pool()
|
||||
const assert = require('assert')
|
||||
|
||||
suite.test('can access results when no rows are returned', function (done) {
|
||||
var checkResult = function (result) {
|
||||
const checkResult = function (result) {
|
||||
assert(result.fields, 'should have fields definition')
|
||||
assert.equal(result.fields.length, 1)
|
||||
assert.equal(result.fields[0].name, 'val')
|
||||
@ -16,7 +16,7 @@ suite.test('can access results when no rows are returned', function (done) {
|
||||
pool.connect(
|
||||
assert.success(function (client, release) {
|
||||
const q = new pg.Query('select $1::text as val limit 0', ['hi'])
|
||||
var query = client.query(
|
||||
const query = client.query(
|
||||
q,
|
||||
assert.success(function (result) {
|
||||
checkResult(result)
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
'use strict'
|
||||
|
||||
var helper = require('../test-helper')
|
||||
var pg = helper.pg
|
||||
const helper = require('../test-helper')
|
||||
const pg = helper.pg
|
||||
const suite = new helper.Suite()
|
||||
const assert = require('assert')
|
||||
|
||||
|
||||
@ -1,18 +1,18 @@
|
||||
'use strict'
|
||||
var helper = require('./test-helper')
|
||||
var Query = helper.pg.Query
|
||||
const helper = require('./test-helper')
|
||||
const Query = helper.pg.Query
|
||||
|
||||
const assert = require('assert')
|
||||
var suite = new helper.Suite()
|
||||
const suite = new helper.Suite()
|
||||
|
||||
;(function () {
|
||||
var client = helper.client()
|
||||
const client = helper.client()
|
||||
client.on('drain', client.end.bind(client))
|
||||
|
||||
var queryName = 'user by age and like name'
|
||||
const queryName = 'user by age and like name'
|
||||
|
||||
suite.test('first named prepared statement', function (done) {
|
||||
var query = client.query(
|
||||
const query = client.query(
|
||||
new Query({
|
||||
text: 'select name from person where age <= $1 and name LIKE $2',
|
||||
values: [20, 'Bri%'],
|
||||
@ -28,7 +28,7 @@ var suite = new helper.Suite()
|
||||
})
|
||||
|
||||
suite.test('second named prepared statement with same name & text', function (done) {
|
||||
var cachedQuery = client.query(
|
||||
const cachedQuery = client.query(
|
||||
new Query({
|
||||
text: 'select name from person where age <= $1 and name LIKE $2',
|
||||
name: queryName,
|
||||
@ -44,7 +44,7 @@ var suite = new helper.Suite()
|
||||
})
|
||||
|
||||
suite.test('with same name, but without query text', function (done) {
|
||||
var q = client.query(
|
||||
const q = client.query(
|
||||
new Query({
|
||||
name: queryName,
|
||||
values: [30, '%n%'],
|
||||
@ -81,12 +81,12 @@ var suite = new helper.Suite()
|
||||
})
|
||||
})()
|
||||
;(function () {
|
||||
var statementName = 'differ'
|
||||
var statement1 = 'select count(*)::int4 as count from person'
|
||||
var statement2 = 'select count(*)::int4 as count from person where age < $1'
|
||||
const statementName = 'differ'
|
||||
const statement1 = 'select count(*)::int4 as count from person'
|
||||
const statement2 = 'select count(*)::int4 as count from person where age < $1'
|
||||
|
||||
var client1 = helper.client()
|
||||
var client2 = helper.client()
|
||||
const client1 = helper.client()
|
||||
const client2 = helper.client()
|
||||
|
||||
suite.test('client 1 execution', function (done) {
|
||||
client1.query(
|
||||
@ -103,7 +103,7 @@ var suite = new helper.Suite()
|
||||
})
|
||||
|
||||
suite.test('client 2 execution', function (done) {
|
||||
var query = client2.query(
|
||||
const query = client2.query(
|
||||
new Query({
|
||||
name: statementName,
|
||||
text: statement2,
|
||||
@ -125,13 +125,13 @@ var suite = new helper.Suite()
|
||||
})
|
||||
})()
|
||||
;(function () {
|
||||
var client = helper.client()
|
||||
const client = helper.client()
|
||||
client.query('CREATE TEMP TABLE zoom(name varchar(100));')
|
||||
client.query("INSERT INTO zoom (name) VALUES ('zed')")
|
||||
client.query("INSERT INTO zoom (name) VALUES ('postgres')")
|
||||
client.query("INSERT INTO zoom (name) VALUES ('node postgres')")
|
||||
|
||||
var checkForResults = function (q) {
|
||||
const checkForResults = function (q) {
|
||||
assert.emits(q, 'row', function (row) {
|
||||
assert.equal(row.name, 'node postgres')
|
||||
|
||||
@ -146,7 +146,7 @@ var suite = new helper.Suite()
|
||||
}
|
||||
|
||||
suite.test('with small row count', function (done) {
|
||||
var query = client.query(
|
||||
const query = client.query(
|
||||
new Query(
|
||||
{
|
||||
name: 'get names',
|
||||
@ -161,7 +161,7 @@ var suite = new helper.Suite()
|
||||
})
|
||||
|
||||
suite.test('with large row count', function (done) {
|
||||
var query = client.query(
|
||||
const query = client.query(
|
||||
new Query(
|
||||
{
|
||||
name: 'get names',
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
'use strict'
|
||||
var bluebird = require('bluebird')
|
||||
var helper = require('../test-helper')
|
||||
var pg = helper.pg
|
||||
const bluebird = require('bluebird')
|
||||
const helper = require('../test-helper')
|
||||
const pg = helper.pg
|
||||
const assert = require('assert')
|
||||
|
||||
process.on('unhandledRejection', function (e) {
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
'use strict'
|
||||
var helper = require('../test-helper')
|
||||
var pg = helper.pg
|
||||
const helper = require('../test-helper')
|
||||
const pg = helper.pg
|
||||
const assert = require('assert')
|
||||
|
||||
new helper.Suite().test('support for complex column names', function () {
|
||||
|
||||
@ -1,24 +1,24 @@
|
||||
'use strict'
|
||||
var helper = require('./test-helper')
|
||||
var Query = helper.pg.Query
|
||||
const helper = require('./test-helper')
|
||||
const Query = helper.pg.Query
|
||||
const { Client } = helper
|
||||
const assert = require('assert')
|
||||
|
||||
var suite = new helper.Suite()
|
||||
const suite = new helper.Suite()
|
||||
|
||||
suite.test('client end during query execution of prepared statement', function (done) {
|
||||
var client = new Client()
|
||||
const client = new Client()
|
||||
client.connect(
|
||||
assert.success(function () {
|
||||
var sleepQuery = 'select pg_sleep($1)'
|
||||
const sleepQuery = 'select pg_sleep($1)'
|
||||
|
||||
var queryConfig = {
|
||||
const queryConfig = {
|
||||
name: 'sleep query',
|
||||
text: sleepQuery,
|
||||
values: [5],
|
||||
}
|
||||
|
||||
var queryInstance = new Query(
|
||||
const queryInstance = new Query(
|
||||
queryConfig,
|
||||
assert.calls(function (err, result) {
|
||||
assert.equal(err.message, 'Connection terminated')
|
||||
@ -26,7 +26,7 @@ suite.test('client end during query execution of prepared statement', function (
|
||||
})
|
||||
)
|
||||
|
||||
var query1 = client.query(queryInstance)
|
||||
const query1 = client.query(queryInstance)
|
||||
|
||||
query1.on('error', function (err) {
|
||||
assert.fail('Prepared statement should not emit error')
|
||||
@ -46,9 +46,9 @@ suite.test('client end during query execution of prepared statement', function (
|
||||
})
|
||||
|
||||
function killIdleQuery(targetQuery, cb) {
|
||||
var client2 = new Client(helper.args)
|
||||
var pidColName = 'procpid'
|
||||
var queryColName = 'current_query'
|
||||
const client2 = new Client(helper.args)
|
||||
let pidColName = 'procpid'
|
||||
let queryColName = 'current_query'
|
||||
client2.connect(
|
||||
assert.success(function () {
|
||||
helper.versionGTE(
|
||||
@ -59,7 +59,7 @@ function killIdleQuery(targetQuery, cb) {
|
||||
pidColName = 'pid'
|
||||
queryColName = 'query'
|
||||
}
|
||||
var killIdleQuery =
|
||||
const killIdleQuery =
|
||||
'SELECT ' +
|
||||
pidColName +
|
||||
', (SELECT pg_terminate_backend(' +
|
||||
@ -87,10 +87,10 @@ suite.test('query killed during query execution of prepared statement', function
|
||||
if (helper.args.native) {
|
||||
return done()
|
||||
}
|
||||
var client = new Client(helper.args)
|
||||
const client = new Client(helper.args)
|
||||
client.connect(
|
||||
assert.success(function () {
|
||||
var sleepQuery = 'select pg_sleep($1)'
|
||||
const sleepQuery = 'select pg_sleep($1)'
|
||||
|
||||
const queryConfig = {
|
||||
name: 'sleep query',
|
||||
@ -101,7 +101,7 @@ suite.test('query killed during query execution of prepared statement', function
|
||||
// client should emit an error because it is unexpectedly disconnected
|
||||
assert.emits(client, 'error')
|
||||
|
||||
var query1 = client.query(
|
||||
const query1 = client.query(
|
||||
new Query(queryConfig),
|
||||
assert.calls(function (err, result) {
|
||||
assert.equal(err.message, 'terminating connection due to administrator command')
|
||||
|
||||
@ -1,19 +1,19 @@
|
||||
'use strict'
|
||||
var helper = require('./test-helper')
|
||||
var Query = helper.pg.Query
|
||||
var DatabaseError = helper.pg.DatabaseError
|
||||
const helper = require('./test-helper')
|
||||
const Query = helper.pg.Query
|
||||
const DatabaseError = helper.pg.DatabaseError
|
||||
const assert = require('assert')
|
||||
const { Client } = helper
|
||||
const suite = new helper.Suite()
|
||||
|
||||
suite.test('error during query execution', function () {
|
||||
var client = new Client(helper.args)
|
||||
const client = new Client(helper.args)
|
||||
client.connect(
|
||||
assert.success(function () {
|
||||
var queryText = 'select pg_sleep(10)'
|
||||
var sleepQuery = new Query(queryText)
|
||||
var pidColName = 'procpid'
|
||||
var queryColName = 'current_query'
|
||||
const queryText = 'select pg_sleep(10)'
|
||||
const sleepQuery = new Query(queryText)
|
||||
let pidColName = 'procpid'
|
||||
let queryColName = 'current_query'
|
||||
helper.versionGTE(
|
||||
client,
|
||||
90200,
|
||||
@ -22,7 +22,7 @@ suite.test('error during query execution', function () {
|
||||
pidColName = 'pid'
|
||||
queryColName = 'query'
|
||||
}
|
||||
var query1 = client.query(
|
||||
const query1 = client.query(
|
||||
sleepQuery,
|
||||
assert.calls(function (err, result) {
|
||||
assert(err)
|
||||
@ -36,10 +36,10 @@ suite.test('error during query execution', function () {
|
||||
assert.fail('Query with an error should not emit "end" event')
|
||||
})
|
||||
setTimeout(function () {
|
||||
var client2 = new Client(helper.args)
|
||||
const client2 = new Client(helper.args)
|
||||
client2.connect(
|
||||
assert.success(function () {
|
||||
var killIdleQuery = `SELECT ${pidColName}, (SELECT pg_cancel_backend(${pidColName})) AS killed FROM pg_stat_activity WHERE ${queryColName} LIKE $1`
|
||||
const killIdleQuery = `SELECT ${pidColName}, (SELECT pg_cancel_backend(${pidColName})) AS killed FROM pg_stat_activity WHERE ${queryColName} LIKE $1`
|
||||
client2.query(
|
||||
killIdleQuery,
|
||||
[queryText],
|
||||
@ -64,7 +64,7 @@ if (helper.config.native) {
|
||||
}
|
||||
|
||||
suite.test('9.3 column error fields', function () {
|
||||
var client = new Client(helper.args)
|
||||
const client = new Client(helper.args)
|
||||
client.connect(
|
||||
assert.success(function () {
|
||||
helper.versionGTE(
|
||||
@ -93,7 +93,7 @@ suite.test('9.3 column error fields', function () {
|
||||
})
|
||||
|
||||
suite.test('9.3 constraint error fields', function () {
|
||||
var client = new Client(helper.args)
|
||||
const client = new Client(helper.args)
|
||||
client.connect(
|
||||
assert.success(function () {
|
||||
helper.versionGTE(
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
'use strict'
|
||||
// test for issue #320
|
||||
//
|
||||
var helper = require('./test-helper')
|
||||
const helper = require('./test-helper')
|
||||
|
||||
var client = new helper.pg.Client(helper.config)
|
||||
const client = new helper.pg.Client(helper.config)
|
||||
client.connect()
|
||||
client.end()
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
'use strict'
|
||||
var helper = require('./test-helper')
|
||||
var pg = helper.pg
|
||||
const helper = require('./test-helper')
|
||||
const pg = helper.pg
|
||||
const assert = require('assert')
|
||||
|
||||
const pool = new pg.Pool()
|
||||
|
||||
@ -1,16 +1,16 @@
|
||||
'use strict'
|
||||
var util = require('util')
|
||||
var helper = require('./test-helper')
|
||||
const util = require('util')
|
||||
const helper = require('./test-helper')
|
||||
const assert = require('assert')
|
||||
const suite = new helper.Suite()
|
||||
|
||||
var Client = helper.Client
|
||||
const Client = helper.Client
|
||||
|
||||
var conInfo = helper.config
|
||||
const conInfo = helper.config
|
||||
|
||||
suite.test('returns results as array', function () {
|
||||
var client = new Client(conInfo)
|
||||
var checkRow = function (row) {
|
||||
const client = new Client(conInfo)
|
||||
const checkRow = function (row) {
|
||||
assert(util.isArray(row), 'row should be an array')
|
||||
assert.equal(row.length, 4)
|
||||
assert.equal(row[0].getFullYear(), new Date().getFullYear())
|
||||
@ -20,7 +20,7 @@ suite.test('returns results as array', function () {
|
||||
}
|
||||
client.connect(
|
||||
assert.success(function () {
|
||||
var config = {
|
||||
const config = {
|
||||
text: 'SELECT NOW(), 1::int, $1::text, null',
|
||||
values: ['hai'],
|
||||
rowMode: 'array',
|
||||
|
||||
@ -1,16 +1,16 @@
|
||||
'use strict'
|
||||
var helper = require('./test-helper')
|
||||
const helper = require('./test-helper')
|
||||
const assert = require('assert')
|
||||
const suite = new helper.Suite()
|
||||
|
||||
var Client = helper.Client
|
||||
const Client = helper.Client
|
||||
|
||||
var conInfo = helper.config
|
||||
const conInfo = helper.config
|
||||
|
||||
var checkResult = function (result) {
|
||||
const checkResult = function (result) {
|
||||
assert(result.fields)
|
||||
assert.equal(result.fields.length, 3)
|
||||
var fields = result.fields
|
||||
const fields = result.fields
|
||||
assert.equal(fields[0].name, 'now')
|
||||
assert.equal(fields[1].name, 'num')
|
||||
assert.equal(fields[2].name, 'texty')
|
||||
@ -20,7 +20,7 @@ var checkResult = function (result) {
|
||||
}
|
||||
|
||||
suite.test('row descriptions on result object', function () {
|
||||
var client = new Client(conInfo)
|
||||
const client = new Client(conInfo)
|
||||
client.connect(
|
||||
assert.success(function () {
|
||||
client.query(
|
||||
@ -36,7 +36,7 @@ suite.test('row descriptions on result object', function () {
|
||||
})
|
||||
|
||||
suite.test('row description on no rows', function () {
|
||||
var client = new Client(conInfo)
|
||||
const client = new Client(conInfo)
|
||||
client.connect(
|
||||
assert.success(function () {
|
||||
client.query(
|
||||
|
||||
@ -1,28 +1,28 @@
|
||||
'use strict'
|
||||
var helper = require('./test-helper')
|
||||
var Query = helper.pg.Query
|
||||
const helper = require('./test-helper')
|
||||
const Query = helper.pg.Query
|
||||
const assert = require('assert')
|
||||
const suite = new helper.Suite()
|
||||
const test = suite.test.bind(suite)
|
||||
|
||||
// before running this test make sure you run the script create-test-tables
|
||||
test('simple query interface', function () {
|
||||
var client = helper.client()
|
||||
const client = helper.client()
|
||||
|
||||
var query = client.query(new Query('select name from person order by name collate "C"'))
|
||||
const query = client.query(new Query('select name from person order by name collate "C"'))
|
||||
|
||||
client.on('drain', client.end.bind(client))
|
||||
|
||||
var rows = []
|
||||
const rows = []
|
||||
query.on('row', function (row, result) {
|
||||
assert.ok(result)
|
||||
rows.push(row['name'])
|
||||
})
|
||||
query.once('row', function (row) {
|
||||
test('Can iterate through columns', function () {
|
||||
var columnCount = 0
|
||||
let columnCount = 0
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
for (var column in row) {
|
||||
for (const column in row) {
|
||||
columnCount++
|
||||
}
|
||||
if ('length' in row) {
|
||||
@ -47,11 +47,11 @@ test('simple query interface', function () {
|
||||
})
|
||||
|
||||
test('prepared statements do not mutate params', function () {
|
||||
var client = helper.client()
|
||||
const client = helper.client()
|
||||
|
||||
var params = [1]
|
||||
const params = [1]
|
||||
|
||||
var query = client.query(new Query('select name from person where $1 = 1 order by name collate "C"', params))
|
||||
const query = client.query(new Query('select name from person where $1 = 1 order by name collate "C"', params))
|
||||
|
||||
assert.deepEqual(params, [1])
|
||||
|
||||
@ -72,10 +72,10 @@ test('prepared statements do not mutate params', function () {
|
||||
})
|
||||
|
||||
test('multiple simple queries', function () {
|
||||
var client = helper.client()
|
||||
const client = helper.client()
|
||||
client.query({ text: "create temp table bang(id serial, name varchar(5));insert into bang(name) VALUES('boom');" })
|
||||
client.query("insert into bang(name) VALUES ('yes');")
|
||||
var query = client.query(new Query('select name from bang'))
|
||||
const query = client.query(new Query('select name from bang'))
|
||||
assert.emits(query, 'row', function (row) {
|
||||
assert.equal(row['name'], 'boom')
|
||||
assert.emits(query, 'row', function (row) {
|
||||
@ -86,12 +86,12 @@ test('multiple simple queries', function () {
|
||||
})
|
||||
|
||||
test('multiple select statements', function () {
|
||||
var client = helper.client()
|
||||
const client = helper.client()
|
||||
client.query(
|
||||
'create temp table boom(age integer); insert into boom(age) values(1); insert into boom(age) values(2); insert into boom(age) values(3)'
|
||||
)
|
||||
client.query({ text: "create temp table bang(name varchar(5)); insert into bang(name) values('zoom');" })
|
||||
var result = client.query(new Query({ text: 'select age from boom where age < 2; select name from bang' }))
|
||||
const result = client.query(new Query({ text: 'select age from boom where age < 2; select name from bang' }))
|
||||
assert.emits(result, 'row', function (row) {
|
||||
assert.strictEqual(row['age'], 1)
|
||||
assert.emits(result, 'row', function (row) {
|
||||
|
||||
@ -1,24 +1,24 @@
|
||||
'use strict'
|
||||
var helper = require('./test-helper')
|
||||
var Client = helper.Client
|
||||
const helper = require('./test-helper')
|
||||
const Client = helper.Client
|
||||
|
||||
const assert = require('assert')
|
||||
var suite = new helper.Suite()
|
||||
const suite = new helper.Suite()
|
||||
|
||||
var conInfo = helper.config
|
||||
const conInfo = helper.config
|
||||
|
||||
function getConInfo(override) {
|
||||
return Object.assign({}, conInfo, override)
|
||||
}
|
||||
|
||||
function getStatementTimeout(conf, cb) {
|
||||
var client = new Client(conf)
|
||||
const client = new Client(conf)
|
||||
client.connect(
|
||||
assert.success(function () {
|
||||
client.query(
|
||||
'SHOW statement_timeout',
|
||||
assert.success(function (res) {
|
||||
var statementTimeout = res.rows[0].statement_timeout
|
||||
const statementTimeout = res.rows[0].statement_timeout
|
||||
cb(statementTimeout)
|
||||
client.end()
|
||||
})
|
||||
@ -38,7 +38,7 @@ if (!helper.args.native) {
|
||||
})
|
||||
|
||||
suite.test('statement_timeout integer is used', function (done) {
|
||||
var conf = getConInfo({
|
||||
const conf = getConInfo({
|
||||
statement_timeout: 3000,
|
||||
})
|
||||
getStatementTimeout(conf, function (res) {
|
||||
@ -48,7 +48,7 @@ if (!helper.args.native) {
|
||||
})
|
||||
|
||||
suite.test('statement_timeout float is used', function (done) {
|
||||
var conf = getConInfo({
|
||||
const conf = getConInfo({
|
||||
statement_timeout: 3000.7,
|
||||
})
|
||||
getStatementTimeout(conf, function (res) {
|
||||
@ -58,7 +58,7 @@ if (!helper.args.native) {
|
||||
})
|
||||
|
||||
suite.test('statement_timeout string is used', function (done) {
|
||||
var conf = getConInfo({
|
||||
const conf = getConInfo({
|
||||
statement_timeout: '3000',
|
||||
})
|
||||
getStatementTimeout(conf, function (res) {
|
||||
@ -68,10 +68,10 @@ if (!helper.args.native) {
|
||||
})
|
||||
|
||||
suite.test('statement_timeout actually cancels long running queries', function (done) {
|
||||
var conf = getConInfo({
|
||||
const conf = getConInfo({
|
||||
statement_timeout: '10', // 10ms to keep tests running fast
|
||||
})
|
||||
var client = new Client(conf)
|
||||
const client = new Client(conf)
|
||||
client.connect(
|
||||
assert.success(function () {
|
||||
client.query('SELECT pg_sleep( 1 )', function (error) {
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
'use strict'
|
||||
var helper = require('./../test-helper')
|
||||
const helper = require('./../test-helper')
|
||||
|
||||
module.exports = helper
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
'use strict'
|
||||
var helper = require('./../test-helper')
|
||||
const helper = require('./../test-helper')
|
||||
const assert = require('assert')
|
||||
|
||||
var oldTz = process.env.TZ
|
||||
const oldTz = process.env.TZ
|
||||
process.env.TZ = 'Europe/Berlin'
|
||||
|
||||
var date = new Date()
|
||||
const date = new Date()
|
||||
|
||||
const pool = new helper.pg.Pool()
|
||||
const suite = new helper.Suite()
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
'use strict'
|
||||
var helper = require('./test-helper')
|
||||
const helper = require('./test-helper')
|
||||
const suite = new helper.Suite()
|
||||
const pg = helper.pg
|
||||
const assert = require('assert')
|
||||
@ -9,7 +9,7 @@ client.connect(
|
||||
assert.success(function () {
|
||||
client.query('begin')
|
||||
|
||||
var getZed = {
|
||||
const getZed = {
|
||||
text: 'SELECT * FROM person WHERE name = $1',
|
||||
values: ['Zed'],
|
||||
}
|
||||
|
||||
@ -1,10 +1,10 @@
|
||||
'use strict'
|
||||
var helper = require('./test-helper')
|
||||
var pg = helper.pg
|
||||
const helper = require('./test-helper')
|
||||
const pg = helper.pg
|
||||
const suite = new helper.Suite()
|
||||
const assert = require('assert')
|
||||
|
||||
var testForTypeCoercion = function (type) {
|
||||
const testForTypeCoercion = function (type) {
|
||||
const pool = new pg.Pool()
|
||||
suite.test(`test type coercion ${type.name}`, (cb) => {
|
||||
pool.connect(function (err, client, done) {
|
||||
@ -23,7 +23,7 @@ var testForTypeCoercion = function (type) {
|
||||
})
|
||||
)
|
||||
|
||||
var query = client.query(
|
||||
const query = client.query(
|
||||
new pg.Query({
|
||||
name: 'get type ' + type.name,
|
||||
text: 'select col from test_type',
|
||||
@ -39,8 +39,8 @@ var testForTypeCoercion = function (type) {
|
||||
query,
|
||||
'row',
|
||||
function (row) {
|
||||
var expected = val + ' (' + typeof val + ')'
|
||||
var returned = row.col + ' (' + typeof row.col + ')'
|
||||
const expected = val + ' (' + typeof val + ')'
|
||||
const returned = row.col + ' (' + typeof row.col + ')'
|
||||
assert.strictEqual(row.col, val, 'expected ' + type.name + ' of ' + expected + ' but got ' + returned)
|
||||
},
|
||||
'row should have been called for ' + type.name + ' of ' + val
|
||||
@ -59,7 +59,7 @@ var testForTypeCoercion = function (type) {
|
||||
})
|
||||
}
|
||||
|
||||
var types = [
|
||||
let types = [
|
||||
{
|
||||
name: 'integer',
|
||||
values: [-2147483648, -1, 0, 1, 2147483647, null],
|
||||
@ -141,15 +141,15 @@ types.forEach(function (type) {
|
||||
})
|
||||
|
||||
suite.test('timestamptz round trip', function (cb) {
|
||||
var now = new Date()
|
||||
var client = helper.client()
|
||||
const now = new Date()
|
||||
const client = helper.client()
|
||||
client.query('create temp table date_tests(name varchar(10), tstz timestamptz(3))')
|
||||
client.query({
|
||||
text: 'insert into date_tests(name, tstz)VALUES($1, $2)',
|
||||
name: 'add date',
|
||||
values: ['now', now],
|
||||
})
|
||||
var result = client.query(
|
||||
const result = client.query(
|
||||
new pg.Query({
|
||||
name: 'get date',
|
||||
text: 'select * from date_tests where name = $1',
|
||||
@ -158,7 +158,7 @@ suite.test('timestamptz round trip', function (cb) {
|
||||
)
|
||||
|
||||
assert.emits(result, 'row', function (row) {
|
||||
var date = row.tstz
|
||||
const date = row.tstz
|
||||
assert.equal(date.getYear(), now.getYear())
|
||||
assert.equal(date.getMonth(), now.getMonth())
|
||||
assert.equal(date.getDate(), now.getDate())
|
||||
@ -196,7 +196,7 @@ suite.test('selecting nulls', (cb) => {
|
||||
})
|
||||
|
||||
suite.test('date range extremes', function (done) {
|
||||
var client = helper.client()
|
||||
const client = helper.client()
|
||||
|
||||
// Set the server timeszone to the same as used for the test,
|
||||
// otherwise (if server's timezone is ahead of GMT) in
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
'use strict'
|
||||
var helper = require('./test-helper')
|
||||
const helper = require('./test-helper')
|
||||
const assert = require('assert')
|
||||
|
||||
function testTypeParser(client, expectedResult, done) {
|
||||
var boolValue = true
|
||||
const boolValue = true
|
||||
client.query('CREATE TEMP TABLE parserOverrideTest(id bool)')
|
||||
client.query('INSERT INTO parserOverrideTest(id) VALUES ($1)', [boolValue])
|
||||
client.query(
|
||||
@ -20,7 +20,7 @@ pool.connect(
|
||||
assert.success(function (client1, done1) {
|
||||
pool.connect(
|
||||
assert.success(function (client2, done2) {
|
||||
var boolTypeOID = 16
|
||||
const boolTypeOID = 16
|
||||
client1.setTypeParser(boolTypeOID, function () {
|
||||
return 'first client'
|
||||
})
|
||||
|
||||
@ -11,7 +11,7 @@ const testPoolSize = function (max) {
|
||||
let count = 0
|
||||
|
||||
return new Promise((resolve) => {
|
||||
for (var i = 0; i < max; i++) {
|
||||
for (let i = 0; i < max; i++) {
|
||||
pool.connect(function (err, client, release) {
|
||||
assert(!err)
|
||||
client.query('SELECT * FROM NOW()')
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
'use strict'
|
||||
var helper = require('./test-helper')
|
||||
const helper = require('./test-helper')
|
||||
const pg = helper.pg
|
||||
const native = helper.args.native
|
||||
const assert = require('assert')
|
||||
@ -23,9 +23,9 @@ suite.test('errors emitted on checked-out clients', (cb) => {
|
||||
client2,
|
||||
90200,
|
||||
assert.success(function (isGreater) {
|
||||
var killIdleQuery =
|
||||
let killIdleQuery =
|
||||
'SELECT pid, (SELECT pg_terminate_backend(pid)) AS killed FROM pg_stat_activity WHERE state = $1'
|
||||
var params = ['idle']
|
||||
let params = ['idle']
|
||||
if (!isGreater) {
|
||||
killIdleQuery =
|
||||
'SELECT procpid, (SELECT pg_terminate_backend(procpid)) AS killed FROM pg_stat_activity WHERE current_query LIKE $1'
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
'use strict'
|
||||
var helper = require('./test-helper')
|
||||
const helper = require('./test-helper')
|
||||
const assert = require('assert')
|
||||
|
||||
new helper.Suite().test('idle timeout', function () {
|
||||
|
||||
@ -1,10 +1,10 @@
|
||||
'use strict'
|
||||
var helper = require('./../test-helper')
|
||||
var pg = helper.pg
|
||||
var native = helper.args.native
|
||||
const helper = require('./../test-helper')
|
||||
const pg = helper.pg
|
||||
const native = helper.args.native
|
||||
const assert = require('assert')
|
||||
|
||||
var pool = new pg.Pool()
|
||||
const pool = new pg.Pool()
|
||||
|
||||
pool.connect(
|
||||
assert.calls(function (err, client, done) {
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
'use strict'
|
||||
var helper = require('./../test-helper')
|
||||
const helper = require('./../test-helper')
|
||||
|
||||
module.exports = helper
|
||||
|
||||
@ -1,17 +1,17 @@
|
||||
'use strict'
|
||||
var helper = require('./test-helper')
|
||||
var co = require('co')
|
||||
const helper = require('./test-helper')
|
||||
const co = require('co')
|
||||
const assert = require('assert')
|
||||
|
||||
const pool = new helper.pg.Pool()
|
||||
new helper.Suite().test(
|
||||
'using coroutines works with promises',
|
||||
co.wrap(function* () {
|
||||
var client = yield pool.connect()
|
||||
var res = yield client.query('SELECT $1::text as name', ['foo'])
|
||||
const client = yield pool.connect()
|
||||
const res = yield client.query('SELECT $1::text as name', ['foo'])
|
||||
assert.equal(res.rows[0].name, 'foo')
|
||||
|
||||
var threw = false
|
||||
let threw = false
|
||||
try {
|
||||
yield client.query('SELECT LKDSJDSLKFJ')
|
||||
} catch (e) {
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
'use strict'
|
||||
|
||||
var helper = require('./test-helper')
|
||||
var Query = helper.pg.Query
|
||||
var suite = new helper.Suite()
|
||||
const helper = require('./test-helper')
|
||||
const Query = helper.pg.Query
|
||||
const suite = new helper.Suite()
|
||||
|
||||
const assert = require('assert')
|
||||
const Pool = helper.pg.Pool
|
||||
@ -22,9 +22,9 @@ suite.test('no domain', function (cb) {
|
||||
suite.test('with domain', function (cb) {
|
||||
assert(!process.domain)
|
||||
const pool = new Pool()
|
||||
var domain = require('domain').create()
|
||||
const domain = require('domain').create()
|
||||
domain.run(function () {
|
||||
var startingDomain = process.domain
|
||||
const startingDomain = process.domain
|
||||
assert(startingDomain)
|
||||
pool.connect(
|
||||
assert.success(function (client, done) {
|
||||
@ -46,7 +46,7 @@ suite.test('with domain', function (cb) {
|
||||
})
|
||||
|
||||
suite.test('error on domain', function (cb) {
|
||||
var domain = require('domain').create()
|
||||
const domain = require('domain').create()
|
||||
const pool = new Pool()
|
||||
domain.on('error', function () {
|
||||
pool.end(cb)
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
'use strict'
|
||||
var helper = require('../test-helper')
|
||||
var exec = require('child_process').exec
|
||||
const helper = require('../test-helper')
|
||||
const exec = require('child_process').exec
|
||||
const assert = require('assert')
|
||||
|
||||
helper.pg.defaults.poolIdleTimeout = 1000
|
||||
@ -14,8 +14,8 @@ pool.connect(function (err, client, done) {
|
||||
})
|
||||
client.query('SELECT pg_backend_pid()', function (err, result) {
|
||||
assert.ifError(err)
|
||||
var pid = result.rows[0].pg_backend_pid
|
||||
var psql = 'psql'
|
||||
const pid = result.rows[0].pg_backend_pid
|
||||
let psql = 'psql'
|
||||
if (helper.args.host) psql = psql + ' -h ' + helper.args.host
|
||||
if (helper.args.port) psql = psql + ' -p ' + helper.args.port
|
||||
if (helper.args.user) psql = psql + ' -U ' + helper.args.user
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user