// Type definitions
///
import events = require("events");
import stream = require("stream");
export interface ConnectionConfig {
user?: string;
database?: string;
password?: string;
port?: number;
host?: string;
connectionString?: string;
keepAlive?: boolean;
stream?: stream.Duplex;
statement_timeout?: false | number;
connectionTimeoutMillis?: number;
keepAliveInitialDelayMillis?: number;
}
export interface Defaults extends ConnectionConfig {
poolSize?: number;
poolIdleTimeout?: number;
reapIntervalMillis?: number;
binary?: boolean;
parseInt8?: boolean;
}
import { ConnectionOptions } from "tls";
export interface ClientConfig extends ConnectionConfig {
ssl?: boolean | ConnectionOptions;
}
export interface PoolConfig extends ClientConfig {
max?: number;
min?: number;
connectionTimeoutMillis?: number;
idleTimeoutMillis?: number;
waitForConnections?: boolean;
waitForConnectionsMillis?: number;
queueLimit?: number;
application_name?: string;
Promise?: PromiseConstructorLike;
}
export interface QueryConfig {
name?: string;
text: string;
values?: any[];
}
export interface Submittable {
submit: (connection: Connection) => void;
}
export interface QueryArrayConfig extends QueryConfig {
rowMode: 'array';
}
export interface FieldDef {
name: string;
tableID: number;
columnID: number;
dataTypeID: number;
dataTypeSize: number;
dataTypeModifier: number;
format: string;
}
export interface QueryResultBase {
command: string;
rowCount: number;
oid: number;
fields: FieldDef[];
}
export interface QueryResult extends QueryResultBase {
rows: any[];
}
export interface QueryArrayResult extends QueryResultBase {
rows: any[][];
}
export interface Notification {
processId: number;
channel: string;
payload?: string;
}
export interface ResultBuilder extends QueryResult {
addRow(row: any): void;
}
export interface QueryParse {
name: string;
text: string;
types: string[];
}
export interface BindConfig {
portal?: string;
statement?: string;
binary?: string;
values?: Array<(Buffer | null | undefined | string)>;
}
export interface ExecuteConfig {
portal?: string;
rows?: string;
}
export interface MessageConfig {
type: string;
name?: string;
}
export class Connection extends events.EventEmitter {
readonly stream: stream.Duplex;
constructor(config?: ConnectionConfig);
bind(config: BindConfig | null, more: boolean): void;
execute(config: ExecuteConfig | null, more: boolean): void;
parse(query: QueryParse, more: boolean): void;
query(text: string): void;
describe(msg: MessageConfig, more: boolean): void;
close(msg: MessageConfig, more: boolean): void;
flush(): void;
sync(): void;
end(): void;
}
export class Pool extends events.EventEmitter {
constructor(config?: PoolConfig);
readonly totalCount: number;
readonly idleCount: number;
readonly waitingCount: number;
connect(): Promise;
connect(callback: (err: Error, client: PoolClient, done: (release?: any) => void) => void): void;
end(): Promise;
end(callback: () => void): void;
query(queryStream: T): T;
query(queryConfig: QueryArrayConfig, values?: any[]): Promise;
query(queryConfig: QueryConfig): Promise;
query(queryTextOrConfig: string | QueryConfig, values?: any[]): Promise;
query(queryConfig: QueryArrayConfig, callback: (err: Error, result: QueryArrayResult) => void): void;
query(queryTextOrConfig: string | QueryConfig, callback: (err: Error, result: QueryResult) => void): void;
query(queryText: string, values: any[], callback: (err: Error, result: QueryResult) => void): void;
on(event: "error", listener: (err: Error, client: PoolClient) => void): this;
on(event: "connect" | "acquire" | "remove", listener: (client: PoolClient) => void): this;
}
export class ClientBase extends events.EventEmitter {
constructor(config?: string | ClientConfig);
connect(): Promise;
connect(callback: (err: Error) => void): void;
query(queryStream: T): T;
query(queryConfig: QueryArrayConfig, values?: any[]): Promise;
query(queryConfig: QueryConfig): Promise;
query(queryTextOrConfig: string | QueryConfig, values?: any[]): Promise;
query(queryConfig: QueryArrayConfig, callback: (err: Error, result: QueryArrayResult) => void): void;
query(queryTextOrConfig: string | QueryConfig, callback: (err: Error, result: QueryResult) => void): void;
query(queryText: string, values: any[], callback: (err: Error, result: QueryResult) => void): void;
copyFrom(queryText: string): stream.Writable;
copyTo(queryText: string): stream.Readable;
pauseDrain(): void;
resumeDrain(): void;
escapeIdentifier(str: string): string;
escapeLiteral(str: string): string;
on(event: "drain", listener: () => void): this;
on(event: "error" | "notice", listener: (err: Error) => void): this;
on(event: "notification", listener: (message: Notification) => void): this;
// tslint:disable-next-line unified-signatures
on(event: "end", listener: () => void): this;
}
export class Client extends ClientBase {
constructor(config?: string | ClientConfig);
end(): Promise;
end(callback: (err: Error) => void): void;
}
export interface PoolClient extends ClientBase {
release(err?: Error): void;
}
export class Query extends events.EventEmitter implements Submittable {
constructor(queryTextOrConfig?: string | QueryConfig, values?: any[]);
submit: (connection: Connection) => void;
on(event: "row", listener: (row: any, result?: ResultBuilder) => void): this;
on(event: "error", listener: (err: Error) => void): this;
on(event: "end", listener: (result: ResultBuilder) => void): this;
}
export class Events extends events.EventEmitter {
on(event: "error", listener: (err: Error, client: Client) => void): this;
}
export const defaults: Defaults & ClientConfig;
import * as Pg from '.';
export const native: typeof Pg | null;