UNPKG

ts-hdb

Version:

hdb driver with typescript

178 lines (177 loc) 5.18 kB
/// <reference types="node" /> import { ResultSet } from "./ResultSet"; import { CUDStatement, DCL, DDL, DMLStatement, DQL, DQLStatement, NoParamMatcher, NoParamStatement, ProceduralStatement, ProcedureStatement, TransactionStatement } from "./Statement"; import { ExtractArguments, ExtractSelect, HDBClientOption, ReadyState } from "./types"; /** * HDB Client */ export declare class HDBClient { #private; constructor(options: HDBClientOption); private _connect; /** * read state of connection */ get readyState(): ReadyState; /** * client of connection */ get clientId(): Buffer; /** * Direct statement execution is the simplest way to execute SQL statements. * * data definition language, defined table sequence or procedure * * @param sql * * @example * * ```ts * await client.exec('create table t_1 (ID bigint)') * ``` * * */ exec(sql: DDL | TransactionStatement | DCL): Promise<void>; /** * execute SQL query `SELECT` statements * * @param sql * @returns the extracted data, if the column is blob type, will return the `Buffer` object * * @example * * ```ts * await client.exec('select A, B from TEST.NUMBERS order by A') // => [{A:1,B:2},{A:3,B:4}] * ``` * */ exec<T extends DQL>(sql: T): Promise<Array<ExtractSelect<T>>>; /** * execute DML like `INSERT`/`UPDATE`/`DELETE` * * @param sql insert/update/delete statement * @returns the number of affected rows */ exec(sql: CUDStatement): Promise<number>; /** * call procedure directly * * if you want to get the output set, please use the `client.prepare()` and `statement.call()` * * @param sql * @returns none, you can not receive any out parameters from direct execution * * @example * * ```ts * await client.exec(`call cal_number (102,3,?,?,?)`); // => empty object * ``` */ exec(sql: ProceduralStatement): Promise<object>; exec(sql: string): Promise<any>; /** * The client returns a statement object which can be executed multiple times * * prepare SELECT, INSERT or PROCEDURE * * @param sql * @template ST statement entity type * @template P query parameters type * @returns * * @example * * ```ts * await client.prepare('SELECT * FROM DUMMY WHERE DUMMY = ?') * await client.prepare('INSERT INTO PERSON VALUES (?,?)') * await client.prepare('CALL proc_xxxxx (?,?)') * ``` */ prepare<SQL extends DQL>(sql: SQL): Promise<DQLStatement<ExtractSelect<SQL>, ExtractArguments<SQL>>>; prepare<SQL extends CUDStatement>(sql: SQL): Promise<DMLStatement<any, ExtractArguments<SQL>>>; prepare<ST = any, P extends Array<any> = Array<any>>(sql: NoParamMatcher): Promise<NoParamStatement>; /** * create procedure statement * * @template ST parameter type * @template P return type * @param sql */ prepare<ST = any, P extends Array<any> = Array<any>>(sql: ProceduralStatement): Promise<ProcedureStatement<ST, P>>; /** * If you use the execute function of the client or statement instead of the exec function, * a resultSet object is returned in the callback instead of an array of all rows. * * The resultSet object allows you to create an object based row stream or an array based stream of rows which can be piped to an writer object. * * Don't forget to **close** the resultSet if you use the execute function * * @param query * @returns */ streamQuery<SQL extends DQL>(query: SQL): Promise<ResultSet<ExtractSelect<SQL>>>; /** * query object stream * * @param query * @returns async object iterator * * * @example * * ```ts * for await (const row of client.streamQueryObject(`SELECT ID, NAME FROM t1`)) { * expect(row.ID).not.toBeUndefined(); * expect(row.NAME).not.toBeUndefined(); * } * ``` * */ streamQueryObject<SQL extends DQL>(query: SQL): AsyncIterable<ExtractSelect<SQL>>; /** * query object list stream * * @param query * @returns async object iterator * * @example * * ```ts * for await (const rows of client.streamQueryObject(`SELECT ID, NAME FROM t1`)) { * expect(rows[0].ID).not.toBeUndefined(); * expect(rows[0].NAME).not.toBeUndefined(); * } * ``` * */ streamQueryList<SQL extends DQL>(query: SQL): AsyncIterable<Array<ExtractSelect<SQL>>>; /** * set auto commit * * @param autoCommit */ setAutoCommit(autoCommit: boolean): Promise<void>; /** * commit transaction * * @returns */ commit(): Promise<void>; /** * rollback transaction * * @returns */ rollback(): Promise<void>; /** * disconnect form HANA server * * @returns */ disconnect(): Promise<unknown>; /** * close TCP connection */ close(): void; }