@sqb/connect
Version:
Multi-dialect database connection framework written with TypeScript
58 lines (57 loc) • 1.9 kB
TypeScript
import { classes } from '@sqb/builder';
import { Maybe } from 'ts-gems';
import { ClientConfiguration, DataType, QueryRequest, RowType } from './types.js';
export interface Adapter {
driver: string;
dialect: string;
features?: {
cursor?: boolean;
schema?: boolean;
fetchAsString?: DataType[];
};
connect: (config: ClientConfiguration) => Promise<Adapter.Connection>;
}
export declare namespace Adapter {
interface Connection {
sessionId: any;
execute: (request: QueryRequest) => Promise<Response>;
close: () => Promise<void>;
reset: () => Promise<void>;
test: () => Promise<void>;
startTransaction: () => Promise<void>;
setSavepoint?: (savepoint: string) => Promise<void>;
releaseSavepoint?: (savepoint: string) => Promise<void>;
rollbackSavepoint?: (savepoint: string) => Promise<void>;
commit: () => Promise<void>;
rollback: () => Promise<void>;
setSchema?: (schema: string) => Promise<void>;
getSchema?: () => Promise<string>;
onGenerateQuery?: (request: QueryRequest, query: classes.Query) => void;
getInTransaction?: () => boolean;
}
interface Cursor {
readonly isClosed: boolean;
readonly rowType: RowType;
close: () => Promise<void>;
fetch: (rows: number) => Promise<Maybe<any[]>>;
}
interface Response {
fields?: Field[];
rows?: Record<string, any>[] | any[][];
rowType?: RowType;
cursor?: Adapter.Cursor;
rowsAffected?: number;
}
interface Field {
fieldName: string;
dataType: string;
jsType: string;
isArray?: boolean;
elementDataType?: string;
nullable?: boolean;
fixedLength?: boolean;
size?: number;
precision?: number;
_inf: any;
}
}