import {QueryResult} from './types.ts' import {Collection} from "../../../lib/src/collection/Collection.ts"; import {Database} from "../schema/tree/Database.ts"; import AppClass from "../../../lib/src/lifecycle/AppClass.ts"; import {Table} from "../schema/tree/Table.ts"; /** * Error thrown when a connection is used before it is ready. * @extends Error */ export class ConnectionNotReadyError extends Error { constructor(name = '') { super(`The connection ${name} is not ready and cannot execute queries.`) } } /** * Abstract base class for database connections. * @abstract */ export abstract class Connection extends AppClass { constructor( /** * The name of this connection * @type string */ public readonly name: string, /** * This connection's config object */ public readonly config: any = {}, ) { super() } /** * Open the connection. * @return Promise */ public abstract async init(): Promise /** * Execute an SQL query and get the result. * @param {string} query * @return Promise */ public abstract async query(query: string): Promise // TODO query result /** * Close the connection. * @return Promise */ public abstract async close(): Promise public abstract async databases(): Promise> public abstract async database(name: string): Promise public abstract async database_as_schema(name: string): Promise public abstract async tables(database_name: string): Promise> public abstract async table(database_name: string, table_name: string): Promise }