[pg] differentiate between pooled and non-pooled clients (release vs end)

This commit is contained in:
Chris Reeves
2018-01-30 04:16:05 -05:00
parent 29e106a36b
commit 429ba7aab3
2 changed files with 22 additions and 10 deletions

26
types/pg/index.d.ts vendored
View File

@@ -98,8 +98,8 @@ export class Pool extends events.EventEmitter {
readonly idleCount: number;
readonly waitingCount: number;
connect(): Promise<Client>;
connect(callback: (err: Error, client: Client, done: () => void) => void): void;
connect(): Promise<PoolClient>;
connect(callback: (err: Error, client: PoolClient, done: () => void) => void): void;
end(): Promise<void>;
end(callback: () => void): void;
@@ -112,21 +112,16 @@ export class Pool extends events.EventEmitter {
query(queryTextOrConfig: string | QueryConfig, callback: (err: Error, result: QueryResult) => void): Query;
query(queryText: string, values: any[], callback: (err: Error, result: QueryResult) => void): Query;
on(event: "error", listener: (err: Error, client: Client) => void): this;
on(event: "connect" | "acquire", listener: (client: Client) => void): this;
on(event: "error", listener: (err: Error, client: PoolClient) => void): this;
on(event: "connect" | "acquire", listener: (client: PoolClient) => void): this;
}
export class Client extends events.EventEmitter {
export class ClientBase extends events.EventEmitter {
constructor(config: string | ClientConfig);
connect(): Promise<void>;
connect(callback: (err: Error) => void): void;
end(): Promise<void>;
end(callback: (err: Error) => void): void;
release(err?: Error): void;
query(queryStream: QueryConfig & stream.Readable): stream.Readable;
query(queryConfig: QueryArrayConfig): Promise<QueryArrayResult>;
query(queryConfig: QueryConfig): Promise<QueryResult>;
@@ -151,6 +146,17 @@ export class Client extends events.EventEmitter {
on(event: "end", listener: () => void): this;
}
export class Client extends ClientBase {
constructor(config: string | ClientConfig);
end(): Promise<void>;
end(callback: (err: Error) => void): void;
}
export interface PoolClient extends ClientBase {
release(err?: Error): void;
}
export class Query extends events.EventEmitter {
on(event: "row", listener: (row: any, result?: ResultBuilder) => void): this;
on(event: "error", listener: (err: Error) => void): this;

View File

@@ -133,6 +133,12 @@ pool.connect((err, client, done) => {
});
});
pool.connect().then(client => {
client.query({ text: 'SELECT $1::int AS number', values: ['1'], rowMode: 'array' }).then(result => {
console.log(result.rowCount, result.rows[0][0], result.fields[0].name);
}).then(() => client.release(), e => client.release(e));
});
pool.on('error', (err, client) => {
console.error('idle client error', err.message, err.stack);
});