mirror of
https://github.com/FlipsideCrypto/DefinitelyTyped.git
synced 2026-02-06 10:56:53 +00:00
Merge pull request #23282 from evs-chris/master
[pg] array mode query results and pooled vs non client release/end
This commit is contained in:
commit
73c5362f5d
@ -12,7 +12,7 @@ const pool = new pg.Pool();
|
||||
pool.connect((err, client, done) => {
|
||||
const stream = client.query(query);
|
||||
stream.on('end', () => {
|
||||
client.end();
|
||||
client.release();
|
||||
});
|
||||
stream.on('data', (data: any) => {
|
||||
console.log(data);
|
||||
|
||||
53
types/pg/index.d.ts
vendored
53
types/pg/index.d.ts
vendored
@ -47,7 +47,10 @@ export interface QueryConfig {
|
||||
name?: string;
|
||||
text: string;
|
||||
values?: any[];
|
||||
rowMode?: string;
|
||||
}
|
||||
|
||||
export interface QueryArrayConfig extends QueryConfig {
|
||||
rowMode: 'array';
|
||||
}
|
||||
|
||||
export interface QueryResult {
|
||||
@ -57,6 +60,24 @@ export interface QueryResult {
|
||||
rows: any[];
|
||||
}
|
||||
|
||||
export interface FieldDef {
|
||||
name: string;
|
||||
tableID: number;
|
||||
columnID: number;
|
||||
dataTypeID: number;
|
||||
dataTypeSize: number;
|
||||
dataTypeModifier: number;
|
||||
format: string;
|
||||
}
|
||||
|
||||
export interface QueryArrayResult {
|
||||
command: string;
|
||||
rowCount: number;
|
||||
oid: number;
|
||||
rows: any[][];
|
||||
fields: FieldDef[];
|
||||
}
|
||||
|
||||
export interface Notification {
|
||||
processId: number;
|
||||
channel: string;
|
||||
@ -77,36 +98,35 @@ 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;
|
||||
|
||||
query(queryStream: QueryConfig & stream.Readable): stream.Readable;
|
||||
query(queryConfig: QueryArrayConfig): Promise<QueryArrayResult>;
|
||||
query(queryConfig: QueryConfig): Promise<QueryResult>;
|
||||
query(queryText: string, values?: any[]): Promise<QueryResult>;
|
||||
query(queryConfig: QueryArrayConfig, callback: (err: Error, result: QueryArrayResult) => void): Query;
|
||||
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>;
|
||||
query(queryText: string, values?: any[]): Promise<QueryResult>;
|
||||
query(queryConfig: QueryArrayConfig, callback: (err: Error, result: QueryArrayResult) => void): Query;
|
||||
query(queryTextOrConfig: string | QueryConfig, callback: (err: Error, result: QueryResult) => void): Query;
|
||||
query(queryText: string, values: any[], callback: (err: Error, result: QueryResult) => void): Query;
|
||||
|
||||
@ -126,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;
|
||||
|
||||
@ -48,8 +48,7 @@ client.query('SELECT $1::text as name', ['brianc'], (err, res) => {
|
||||
const query = {
|
||||
name: 'get-name',
|
||||
text: 'SELECT $1::text',
|
||||
values: ['brianc'],
|
||||
rowMode: 'array'
|
||||
values: ['brianc']
|
||||
};
|
||||
client.query(query, (err, res) => {
|
||||
if (err) {
|
||||
@ -66,6 +65,33 @@ client.query(query)
|
||||
console.error(e.stack);
|
||||
});
|
||||
|
||||
const queryArrMode: pg.QueryArrayConfig = {
|
||||
name: 'get-name-array',
|
||||
text: 'SELECT $1::text',
|
||||
values: ['brianc'],
|
||||
rowMode: 'array'
|
||||
};
|
||||
client.query(queryArrMode, (err, res) => {
|
||||
if (err) {
|
||||
console.error(err.stack);
|
||||
} else {
|
||||
console.log(res.rows);
|
||||
console.log(res.fields.map(f => f.name));
|
||||
}
|
||||
});
|
||||
client.query(queryArrMode)
|
||||
.then(res => {
|
||||
console.log(res.rows);
|
||||
console.log(res.fields.map(f => f.name));
|
||||
})
|
||||
.catch(e => {
|
||||
console.error(e.stack);
|
||||
});
|
||||
client.query({
|
||||
text: 'select 1',
|
||||
rowMode: 'array',
|
||||
}).then(res => console.log(res.fields[0]));
|
||||
|
||||
client.end((err) => {
|
||||
console.log('client has disconnected');
|
||||
if (err) {
|
||||
@ -107,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);
|
||||
});
|
||||
|
||||
Loading…
Reference in New Issue
Block a user