// @credit COLSA Corporation
///
import events = require("events");
import { Readable, ReadableOptions } from "stream";
import tds = require("tedious");
import { Pool } from "tarn";
import { CallbackOrPromise, PoolOptions } from "tarn/dist/Pool";
export interface ISqlType {
type: ISqlTypeFactory;
}
export interface ISqlTypeWithNoParams extends ISqlType {
type: ISqlTypeFactoryWithNoParams;
}
export interface ISqlTypeWithLength extends ISqlType {
type: ISqlTypeFactoryWithLength;
length: number;
}
export interface ISqlTypeWithScale extends ISqlType {
type: ISqlTypeFactoryWithScale;
scale: number;
}
export interface ISqlTypeWithPrecisionScale extends ISqlType {
type: ISqlTypeFactoryWithPrecisionScale;
precision: number;
scale: number;
}
export interface ISqlTypeWithTvpType extends ISqlType {
type: ISqlTypeFactoryWithTvpType;
tvpType: any;
}
export interface ISqlTypeFactory {
}
export interface ISqlTypeFactoryWithNoParams extends ISqlTypeFactory {
(): ISqlTypeWithNoParams;
}
export interface ISqlTypeFactoryWithLength extends ISqlTypeFactory {
(length?: number): ISqlTypeWithLength;
}
export interface ISqlTypeFactoryWithScale extends ISqlTypeFactory {
(scale?: number): ISqlTypeWithScale;
}
export interface ISqlTypeFactoryWithPrecisionScale extends ISqlTypeFactory {
(precision?: number, scale?: number): ISqlTypeWithPrecisionScale;
}
export interface ISqlTypeFactoryWithTvpType extends ISqlTypeFactory {
(tvpType?: any): ISqlTypeWithTvpType;
}
export declare var VarChar: ISqlTypeFactoryWithLength;
export declare var NVarChar: ISqlTypeFactoryWithLength;
export declare var Text: ISqlTypeFactoryWithNoParams;
export declare var Int: ISqlTypeFactoryWithNoParams;
export declare var BigInt: ISqlTypeFactoryWithNoParams;
export declare var TinyInt: ISqlTypeFactoryWithNoParams;
export declare var SmallInt: ISqlTypeFactoryWithNoParams;
export declare var Bit: ISqlTypeFactoryWithNoParams;
export declare var Float: ISqlTypeFactoryWithNoParams;
export declare var Numeric: ISqlTypeFactoryWithPrecisionScale;
export declare var Decimal: ISqlTypeFactoryWithPrecisionScale;
export declare var Real: ISqlTypeFactoryWithNoParams;
export declare var Date: ISqlTypeFactoryWithNoParams;
export declare var DateTime: ISqlTypeFactoryWithNoParams;
export declare var DateTime2: ISqlTypeFactoryWithScale;
export declare var DateTimeOffset: ISqlTypeFactoryWithScale;
export declare var SmallDateTime: ISqlTypeFactoryWithNoParams;
export declare var Time: ISqlTypeFactoryWithScale;
export declare var UniqueIdentifier: ISqlTypeFactoryWithNoParams;
export declare var SmallMoney: ISqlTypeFactoryWithNoParams;
export declare var Money: ISqlTypeFactoryWithNoParams;
export declare var Binary: ISqlTypeFactoryWithNoParams;
export declare var VarBinary: ISqlTypeFactoryWithLength;
export declare var Image: ISqlTypeFactoryWithNoParams;
export declare var Xml: ISqlTypeFactoryWithNoParams;
export declare var Char: ISqlTypeFactoryWithLength;
export declare var NChar: ISqlTypeFactoryWithLength;
export declare var NText: ISqlTypeFactoryWithNoParams;
export declare var TVP: ISqlTypeFactoryWithTvpType;
export declare var UDT: ISqlTypeFactoryWithNoParams;
export declare var Geography: ISqlTypeFactoryWithNoParams;
export declare var Geometry: ISqlTypeFactoryWithNoParams;
export declare var Variant: ISqlTypeFactoryWithNoParams;
export type Connection = tds.Connection;
export declare var TYPES: {
VarChar: ISqlTypeFactoryWithLength;
NVarChar: ISqlTypeFactoryWithLength;
Text: ISqlTypeFactoryWithNoParams;
Int: ISqlTypeFactoryWithNoParams;
BigInt: ISqlTypeFactoryWithNoParams;
TinyInt: ISqlTypeFactoryWithNoParams;
SmallInt: ISqlTypeFactoryWithNoParams;
Bit: ISqlTypeFactoryWithNoParams;
Float: ISqlTypeFactoryWithNoParams;
Numeric: ISqlTypeFactoryWithPrecisionScale;
Decimal: ISqlTypeFactoryWithPrecisionScale;
Real: ISqlTypeFactoryWithNoParams;
Date: ISqlTypeFactoryWithNoParams;
DateTime: ISqlTypeFactoryWithNoParams;
DateTime2: ISqlTypeFactoryWithScale;
DateTimeOffset: ISqlTypeFactoryWithScale;
SmallDateTime: ISqlTypeFactoryWithNoParams;
Time: ISqlTypeFactoryWithScale;
UniqueIdentifier: ISqlTypeFactoryWithNoParams;
SmallMoney: ISqlTypeFactoryWithNoParams;
Money: ISqlTypeFactoryWithNoParams;
Binary: ISqlTypeFactoryWithNoParams;
VarBinary: ISqlTypeFactoryWithLength;
Image: ISqlTypeFactoryWithNoParams;
Xml: ISqlTypeFactoryWithNoParams;
Char: ISqlTypeFactoryWithLength;
NChar: ISqlTypeFactoryWithLength;
NText: ISqlTypeFactoryWithNoParams;
TVP: ISqlTypeFactoryWithTvpType;
UDT: ISqlTypeFactoryWithNoParams;
Geography: ISqlTypeFactoryWithNoParams;
Geometry: ISqlTypeFactoryWithNoParams;
Variant: ISqlTypeFactoryWithNoParams;
};
export declare var MAX: number;
export declare var fix: boolean;
export declare var Promise: any;
interface IMap extends Array<{ js: any; sql: any }> {
register(jstype: any, sql: any): void;
}
export declare var map: IMap;
export declare var DRIVERS: string[];
export interface IColumnMetadata {
[name: string]: {
index: number;
name: string;
length: number;
type: (() => ISqlType) | ISqlType;
udt?: any;
scale?: number | undefined;
precision?: number | undefined;
nullable: boolean;
caseSensitive: boolean;
identity: boolean;
readOnly: boolean;
};
}
export interface IResult {
recordsets: T extends any[] ? { [P in keyof T]: IRecordSet } : Array>;
recordset: IRecordSet;
rowsAffected: number[];
output: { [key: string]: any };
}
export interface IBulkResult {
rowsAffected: number;
}
export interface IProcedureResult extends IResult {
returnValue: any;
}
export interface IRecordSet extends Array {
columns: IColumnMetadata;
toTable(name?: string): Table;
}
type IIsolationLevel = number;
export declare var ISOLATION_LEVEL: {
READ_UNCOMMITTED: IIsolationLevel;
READ_COMMITTED: IIsolationLevel;
REPEATABLE_READ: IIsolationLevel;
SERIALIZABLE: IIsolationLevel;
SNAPSHOT: IIsolationLevel;
};
export interface IOptions extends Omit {
beforeConnect?: void | undefined;
connectionString?: string | undefined;
trustedConnection?: boolean | undefined;
}
export declare var pool: ConnectionPool;
export interface PoolOpts extends Omit, "create" | "destroy" | "min" | "max"> {
create?: CallbackOrPromise | undefined;
destroy?: ((resource: T) => any) | undefined;
min?: number | undefined;
max?: number | undefined;
}
export interface config {
driver?: string | undefined;
user?: string | undefined;
password?: string | undefined;
server: string;
port?: number | undefined;
domain?: string | undefined;
database?: string | undefined;
connectionTimeout?: number | undefined;
requestTimeout?: number | undefined;
stream?: boolean | undefined;
parseJSON?: boolean | undefined;
options?: IOptions | undefined;
pool?: PoolOpts | undefined;
arrayRowMode?: boolean | undefined;
authentication?: tds.ConnectionAuthentication | undefined;
/**
* Invoked before opening the connection. The parameter conn is the configured
* tedious Connection. It can be used for attaching event handlers.
*/
beforeConnect?: ((conn: Connection) => void) | undefined;
}
export declare class MSSQLError extends Error {
constructor(message: Error | string, code?: string);
public code: string;
public name: string;
public originalError?: Error | undefined;
}
export declare class ConnectionPool extends events.EventEmitter {
public readonly connected: boolean;
public readonly connecting: boolean;
public readonly healthy: boolean;
public readonly driver: string;
public readonly size: number;
public readonly available: number;
public readonly pending: number;
public readonly borrowed: number;
public readonly pool: Pool;
public static parseConnectionString(
connectionString: string,
): config & { options: IOptions; pool: Partial> };
public constructor(config: config, callback?: (err?: any) => void);
public constructor(connectionString: string, callback?: (err?: any) => void);
public query(command: string): Promise>;
public query(strings: TemplateStringsArray, ...interpolations: any[]): Promise>;
public query(command: string): Promise>;
public query(strings: TemplateStringsArray, ...interpolations: any[]): Promise>;
public query(command: string, callback: (err?: Error, recordset?: IResult) => void): void;
public batch(batch: string): Promise>;
public batch(strings: TemplateStringsArray, ...interpolations: any[]): Promise>;
public batch(batch: string, callback: (err?: Error, recordset?: IResult) => void): void;
public batch(batch: string): Promise>;
public batch(strings: TemplateStringsArray, ...interpolations: any[]): Promise>;
public connect(): Promise;
public connect(callback: (err: any) => void): void;
public close(): Promise;
public close(callback: (err: any) => void): void;
public request(): Request;
public transaction(): Transaction;
}
export declare class ConnectionError extends MSSQLError {}
export interface IColumnOptions {
nullable?: boolean | undefined;
primary?: boolean | undefined;
identity?: boolean | undefined;
readOnly?: boolean | undefined;
length?: number | undefined;
}
export interface IColumn extends ISqlType {
name: string;
nullable: boolean;
primary: boolean;
}
declare class columns extends Array {
public add(name: string, type: (() => ISqlType) | ISqlType, options?: IColumnOptions): number;
}
type IRow = Array;
declare class rows extends Array {
public add(...row: IRow): number;
}
export declare class Table {
public create: boolean;
public columns: columns;
public rows: rows;
public constructor(tableName?: string);
public schema?: string | undefined;
public database?: string | undefined;
public name?: string | undefined;
public path?: string | undefined;
public temporary?: boolean | undefined;
}
interface IRequestParameters {
[name: string]: {
name: string;
type: (() => ISqlType) | ISqlType;
io: number;
value: any;
length: number;
scale: number;
precision: number;
tvpType: any;
};
}
/**
* Options object to be passed through to driver (currently tedious only)
*/
export interface IBulkOptions {
/** Honors constraints during bulk load, using T-SQL CHECK_CONSTRAINTS. (default: false) */
checkConstraints?: boolean | undefined;
/** Honors insert triggers during bulk load, using the T-SQL FIRE_TRIGGERS. (default: false) */
fireTriggers?: boolean | undefined;
/** Honors null value passed, ignores the default values set on table, using T-SQL KEEP_NULLS. (default: false) */
keepNulls?: boolean | undefined;
/** Places a bulk update(BU) lock on table while performing bulk load, using T-SQL TABLOCK. (default: false) */
tableLock?: boolean | undefined;
}
export declare class Request extends events.EventEmitter {
public transaction: Transaction;
public pstatement: PreparedStatement;
public parameters: IRequestParameters;
public verbose: boolean;
public canceled: boolean;
public multiple: boolean;
public stream: boolean;
public arrayRowMode: boolean;
public constructor(connection?: ConnectionPool);
public constructor(transaction: Transaction);
public constructor(preparedStatement: PreparedStatement);
public execute(procedure: string): Promise>;
public execute(procedure: string): Promise>;
public execute(
procedure: string,
callback: (err?: any, recordsets?: IProcedureResult, returnValue?: any) => void,
): void;
public input(name: string, value: any): Request;
public input(name: string, type: (() => ISqlType) | ISqlType, value: any): Request;
public replaceInput(name: string, value: any): Request;
public replaceInput(name: string, type: (() => ISqlType) | ISqlType, value: any): Request;
public output(name: string, type: (() => ISqlType) | ISqlType, value?: any): Request;
public pipe(stream: NodeJS.WritableStream): NodeJS.WritableStream;
public query(command: string): Promise>;
public query(command: TemplateStringsArray, ...interpolations: any[]): Promise>;
public query(command: string): Promise>;
public query(command: TemplateStringsArray, ...interpolations: any[]): Promise>;
public query(command: string, callback: (err?: Error, recordset?: IResult) => void): void;
public batch(batch: string): Promise>;
public batch(strings: TemplateStringsArray, ...interpolations: any[]): Promise>;
public batch(batch: string, callback: (err?: Error, recordset?: IResult) => void): void;
public batch(batch: string): Promise>;
public batch(strings: TemplateStringsArray, ...interpolations: any[]): Promise>;
public batch(batch: string, callback: (err?: any, recordset?: IResult) => void): void;
public bulk(table: Table): Promise;
public bulk(table: Table, options: IBulkOptions): Promise;
public bulk(table: Table, callback: (err: Error, result: IBulkResult) => void): void;
public bulk(table: Table, options: IBulkOptions, callback: (err: Error, result: IBulkResult) => void): void;
public cancel(): void;
public pause(): boolean;
public resume(): boolean;
public toReadableStream(streamOptions?: ReadableOptions): Readable;
}
export declare class RequestError extends MSSQLError {
public number?: number | undefined;
public lineNumber?: number | undefined;
public state?: string | undefined;
public class?: string | undefined;
public serverName?: string | undefined;
public procName?: string | undefined;
}
export declare class Transaction extends events.EventEmitter {
public isolationLevel: IIsolationLevel;
public constructor(connection?: ConnectionPool);
/**
* Begin a transaction.
* @param [isolationLevel] - Controls the locking and row versioning behavior of TSQL statements issued by a connection.
* @param [callback] A callback which is called after transaction has began, or an error has occurred. If omited, method returns Promise.
*/
public begin(isolationLevel?: IIsolationLevel): Promise;
public begin(
isolationLevel?: IIsolationLevel,
callback?: (err?: ConnectionError | TransactionError) => void,
): Transaction;
public commit(): Promise;
public commit(callback: (err?: any) => void): void;
public rollback(): Promise;
public rollback(callback: (err?: any) => void): void;
public request(): Request;
}
export declare class TransactionError extends MSSQLError {}
export declare class PreparedStatement extends events.EventEmitter {
public transaction: Transaction;
public prepared: boolean;
public statement: string;
public parameters: IRequestParameters;
public stream: any;
public constructor(connection?: ConnectionPool);
public constructor(transaction: Transaction);
public input(name: string, type: (() => ISqlType) | ISqlType): PreparedStatement;
public output(name: string, type: (() => ISqlType) | ISqlType): PreparedStatement;
public prepare(statement?: string): Promise;
public prepare(statement?: string, callback?: (err?: Error) => void): PreparedStatement;
public execute(values: Object): Promise>;
public execute(values: Object): Promise>;
public execute(values: Object, callback: (err?: Error, result?: IProcedureResult) => void): Request;
public execute(values: Object, callback: (err?: Error, result?: IProcedureResult) => void): Request;
public unprepare(): Promise;
public unprepare(callback: (err?: Error) => void): PreparedStatement;
}
export declare class PreparedStatementError extends MSSQLError {}
/**
* Open global connection pool.
* @param config Connection configuration object or connection string
*/
export declare function connect(config: config | string): Promise;
/**
* Open global connection pool.
* @param config Connection configuration object or connection string.
* @param callback A callback which is called after connection has established, or an error has occurred
*/
export declare function connect(config: config | string, callback?: (err?: Error) => void): void;
export declare function query(command: string): Promise>;
export declare function query(command: TemplateStringsArray, ...interpolations: any[]): Promise>;
export declare function query(command: string): Promise>;
export declare function query(
command: TemplateStringsArray,
...interpolations: any[]
): Promise>;
export declare function query(
command: string,
callback: (err?: Error, recordset?: IResult) => void,
): void;