From 3653eef83fb63e92c9751ea67670f0c43b9ef150 Mon Sep 17 00:00:00 2001 From: Leo Liang Date: Fri, 11 Aug 2017 14:37:31 +0800 Subject: [PATCH] Update to pg 7.1 API --- types/pg/index.d.ts | 21 +++--- types/pg/pg-tests.ts | 144 +++++++++++++++++++++++++---------------- types/pg/tsconfig.json | 1 + 3 files changed, 100 insertions(+), 66 deletions(-) diff --git a/types/pg/index.d.ts b/types/pg/index.d.ts index b2c3634f5c..92aeb91c86 100644 --- a/types/pg/index.d.ts +++ b/types/pg/index.d.ts @@ -1,4 +1,4 @@ -// Type definitions for pg 6.1 +// Type definitions for pg 7.1 // Project: https://github.com/brianc/node-postgres // Definitions by: Phips Peter // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped @@ -9,11 +9,6 @@ import events = require("events"); import stream = require("stream"); import pgTypes = require("pg-types"); -export function connect( - connectionOrConfig: string | ClientConfig, - callback: (err: Error, client: Client, done: (err?: any) => void) => void): void; -export function end(): void; - export interface ConnectionConfig { user?: string; database?: string; @@ -41,6 +36,7 @@ export interface PoolConfig extends ClientConfig { max?: number; min?: number; refreshIdle?: boolean; + connectionTimeoutMillis?: number; idleTimeoutMillis?: number; reapIntervalMillis?: number; returnToHead?: boolean; @@ -74,7 +70,8 @@ export class Pool extends events.EventEmitter { connect(): Promise; connect(callback: (err: Error, client: Client, done: () => void) => void): void; - end(callback?: () => void): Promise; + end(): Promise; + end(callback: () => void): void; query(queryStream: QueryConfig & stream.Readable): stream.Readable; query(queryConfig: QueryConfig): Promise; @@ -87,10 +84,14 @@ export class Pool extends events.EventEmitter { } export class Client extends events.EventEmitter { - constructor(connectionOrConfig: string | ClientConfig); + constructor(config: ClientConfig); + + connect(): Promise; + connect(callback: (err: Error) => void): void; + + end(): Promise; + end(callback: (err: Error) => void): void; - connect(callback?: (err: Error) => void): void; - end(callback?: (err: Error) => void): void; release(err?: Error): void; query(queryStream: QueryConfig & stream.Readable): stream.Readable; diff --git a/types/pg/pg-tests.ts b/types/pg/pg-tests.ts index 6bdf408bee..d3359d930a 100644 --- a/types/pg/pg-tests.ts +++ b/types/pg/pg-tests.ts @@ -1,32 +1,15 @@ import * as pg from "pg"; -const conString = "postgres://username:password@localhost/database"; - // https://github.com/brianc/node-pg-types // tslint:disable-next-line no-unnecessary-callback-wrapper pg.types.setTypeParser(20, val => Number(val)); -// Client pooling -pg.defaults.ssl = true; -pg.connect(conString, (err, client, done) => { - if (err) { - return console.error("Error fetching client from pool", err); - } - client.query("SELECT $1::int AS number", ["1"], (err, result) => { - if (err) { - done(err); - return console.error("Error running query", err); - } else { - done(); - } - console.log(result.rows[0]["number"]); - return null; - }); - return null; +const client = new pg.Client({ + host: 'my.database-server.com', + port: 5334, + user: 'database-user', + password: 'secretpassword!!', }); - -// Simple -const client = new pg.Client(conString); client.connect(err => { if (err) { return console.error("Could not connect to postgres", err); @@ -44,51 +27,100 @@ client.connect(err => { }); client.on('end', () => console.log("Client was disconnected.")); -// client pooling +client.connect() + .then(() => console.log('connected')) + .catch(e => console.error('connection error', e.stack)); -const config = { - user: 'foo', - database: 'my_db', - password: 'secret', - port: 5432, - max: 10, - idleTimeoutMillis: 30000, - Promise, +client.query('SELECT NOW()', (err, res) => { + if (err) throw err; + console.log(res); + client.end(); +}); + +client.query('SELECT $1::text as name', ['brianc'], (err, res) => { + if (err) throw err; + console.log(res); + client.end(); +}); + +const query = { + name: 'get-name', + text: 'SELECT $1::text', + values: ['brianc'], + rowMode: 'array' }; -const pool = new pg.Pool(config); +client.query(query, (err, res) => { + if (err) { + console.error(err.stack); + } else { + console.log(res.rows); + } +}); +client.query(query) + .then(res => { + console.log(res.rows); + }) + .catch(e => { + console.error(e.stack); + }); +client.end((err) => { + console.log('client has disconnected'); + if (err) { + console.log('error during disconnection', err.stack); + } +}); + +client.end() + .then(() => console.log('client has disconnected')) + .catch(err => console.error('error during disconnection', err.stack)); + +const pool = new pg.Pool({ + host: 'localhost', + port: 5432, + user: 'database-user', + database: 'my_db', + max: 20, + idleTimeoutMillis: 30000, + connectionTimeoutMillis: 2000, +}); pool.connect((err, client, done) => { - if (err) { - return console.error('error fetching client from pool', err); - } - client.query('SELECT $1::int AS number', ['1'], (err, result) => { - done(); + if (err) { + return console.error('error fetching client from pool', err); + } + client.query('SELECT $1::int AS number', ['1'], (err, result) => { + done(); - if (err) { - return console.error('error running query', err); - } - console.log(result.rows[0].number); - }); + if (err) { + return console.error('error running query', err); + } + console.log(result.rows[0].number); + }); }); pool.on('error', (err, client) => { - console.error('idle client error', err.message, err.stack); + console.error('idle client error', err.message, err.stack); }); -pool.end(); +pool.query('SELECT $1::text as name', ['brianc'], (err, result) => { + if (err) { + return console.error('Error executing query', err.stack); + } + console.log(result.rows[0].name); +}); + +pool.query('SELECT $1::text as name', ['brianc']) + .then((res) => console.log(res.rows[0].name)) + .catch(err => console.error('Error executing query', err.stack)); + pool.end(() => { - console.log("pool is closed"); + console.log('pool has ended'); }); -// Promise +pool.end().then(() => console.log('pool has ended')); -function query(sql: string, binds?: any[]): void { - // binds: any[] | undefined - pool.query(sql, binds) - .then((result: pg.QueryResult) => { - console.log(result.rows[0].number); - }) - .catch((err: any) => { - console.error('error running query', err); - }); -} +(async () => { + const client = await pool.connect(); + await client.query('SELECT NOW()'); + client.release(); +})(); diff --git a/types/pg/tsconfig.json b/types/pg/tsconfig.json index 6905c7197c..caa997a916 100644 --- a/types/pg/tsconfig.json +++ b/types/pg/tsconfig.json @@ -4,6 +4,7 @@ "lib": [ "es6" ], + "target": "es6", "noImplicitAny": true, "noImplicitThis": true, "strictNullChecks": true,