import { IAnySchemaJson } from '@ulixee/schema/interfaces/ISchemaJson'; import { SqlParser } from '@ulixee/sql-engine'; import { IDbJsTypes, IDbTypeNames } from '@ulixee/sql-engine/interfaces/IDbTypes'; import ISqlAdapter from '@ulixee/sql-engine/interfaces/ISqlAdapter'; import IDatastoreComponents, { TCrawlers, TExtractors, TTables } from '../interfaces/IDatastoreComponents'; import IQueryOptions from '../interfaces/IQueryOptions'; import IStorageEngine from '../interfaces/IStorageEngine'; import Datastore from '../lib/Datastore'; import { IQueryInternalCallbacks } from '../lib/DatastoreInternal'; export type ISchema = Record; export default abstract class AbstractStorageEngine implements IStorageEngine { readonly inputsByName: { [name: string]: ISchema; }; readonly schemasByName: { [name: string]: ISchema; }; readonly virtualTableNames: Set; readonly sqlTableNames: Set; abstract close(): Promise; protected readonly adapter: ISqlAdapter; protected abstract createTable?(name: string, schema: ISchema): Promise; protected isBound: boolean; abstract query(sql: string | SqlParser, boundValues: IDbJsTypes[], metadata?: IQueryOptions, virtualEntitiesByName?: { [name: string]: { parameters?: Record; records: Record[]; }; }, callbacks?: IQueryInternalCallbacks): Promise; abstract filterLocalTableCalls(entityCalls: string[]): string[]; bind(datastore: IDatastoreComponents): void; create(datastore: Datastore, previousVersion?: Datastore): Promise; protected recordToEngineRow(record: Record, schema: Record, inputSchema?: Record, tmpSchemaFieldTypes?: { [fieldName: string]: IDbTypeNames; }): Record; protected recordsFromEngine(records: any[], schemas: Record[], tmpSchemaFieldTypes?: { [fieldName: string]: IDbTypeNames; }): TResult; }