import stream from 'stream'; import { QueryResult } from './query'; import { SqlDialect } from './dialect'; import { SqlDumper } from './dumper'; import { DatabaseInfo, NamedObjectInfo, TableInfo, ViewInfo, ProcedureInfo, FunctionInfo, TriggerInfo, CollectionInfo, SchemaInfo, } from './dbinfo'; import { FilterBehaviour } from './filter-type'; export interface StreamOptions { recordset: (columns) => void; row: (row) => void; error?: (error) => void; done?: (result) => void; info?: (info) => void; } export type CollectionOperationInfo = | { type: 'createCollection'; collection: { name: string; }; } | { type: 'dropCollection'; collection: string; } | { type: 'renameCollection'; collection: string; newName: string; } | { type: 'cloneCollection'; collection: string; newName: string; }; export interface RunScriptOptions { useTransaction: boolean; logScriptItems?: boolean; queryOptions?: QueryOptions; } export interface QueryOptions { discardResult?: boolean; importSqlDump?: boolean; range?: { offset: number; limit: number }; readonly?: boolean; } export interface WriteTableOptions { dropIfExists?: boolean; truncate?: boolean; createIfNotExists?: boolean; commitAfterInsert?: boolean; targetTableStructure?: TableInfo; progressName?: string; } export interface EngineAuthType { title: string; name: string; disabledFields: string[]; } export interface ReadCollectionOptions { pureName: string; schemaName?: string; countDocuments?: boolean; skip?: number; limit?: number; condition?: any; aggregate?: CollectionAggregateDefinition; sort?: CollectionSortDefinition; } export interface NewObjectTemplate { label: string; sql: string; } export interface SupportedDbKeyType { name: string; label: string; dbKeyFields: { name: string }[]; addMethod: string; keyColumn?: string; showItemList?: boolean; } export interface SqlBackupDumper { run(); } export interface SummaryColumn { fieldName: string; header: string; dataType: 'string' | 'number' | 'bytes'; } export interface ServerSummaryDatabase {} export interface ServerSummary { columns: SummaryColumn[]; databases: ServerSummaryDatabase[]; } export type CollectionAggregateFunction = 'count' | 'sum' | 'avg' | 'min' | 'max'; export interface CollectionAggregateDefinition { condition: any; // SQL tree condition groupByColumns: string[]; aggregateColumns: { alias: string; aggregateFunction: CollectionAggregateFunction; columnArgument?: string; }[]; } export interface CollectionSortDefinitionItem { columnName: string; direction: 'ASC' | 'DESC'; } export type CollectionSortDefinition = CollectionSortDefinitionItem[]; export interface DataEditorTypesBehaviour { parseSqlNull?: boolean; parseJsonNull?: boolean; parseJsonBoolean?: boolean; parseNumber?: boolean; parseJsonArray?: boolean; parseJsonObject?: boolean; parseHexAsBuffer?: boolean; parseObjectIdAsDollar?: boolean; parseDateAsDollar?: boolean; parseGeopointAsDollar?: boolean; parseFsDocumentRefAsDollar?: boolean; explicitDataType?: boolean; supportNumberType?: boolean; supportStringType?: boolean; supportBooleanType?: boolean; supportDateType?: boolean; supportNullType?: boolean; supportJsonType?: boolean; supportObjectIdType?: boolean; supportFieldRemoval?: boolean; } export interface FilterBehaviourProvider { getFilterBehaviour(dataType: string, standardFilterBehaviours: { [id: string]: FilterBehaviour }): FilterBehaviour; } export interface DatabaseHandle { client: TClient; database?: string; feedback?: (message: any) => void; getDatabase?: () => any; connectionType?: string; treeKeySeparator?: string; } export type StreamResult = stream.Readable | (stream.Readable | stream.Writable)[]; export interface CommandLineDefinition { command: string; args: string[]; env?: { [key: string]: string }; stdinFilePath?: string; } interface BackupRestoreSettingsBase { database: string; options?: { [key: string]: string }; argsFormat: 'shell' | 'spawn'; } export interface BackupDatabaseSettings extends BackupRestoreSettingsBase { outputFile: string; selectedTables?: { pureName: string; schemaName?: string }[]; skippedTables?: { pureName: string; schemaName?: string }[]; } export interface RestoreDatabaseSettings extends BackupRestoreSettingsBase { inputFile: string; } export interface EngineDriver extends FilterBehaviourProvider { engine: string; title: string; defaultPort?: number; databaseEngineTypes: string[]; editorMode?: string; readOnlySessions: boolean; supportedKeyTypes: SupportedDbKeyType[]; dataEditorTypesBehaviour: DataEditorTypesBehaviour; supportsDatabaseUrl?: boolean; supportsDatabaseBackup?: boolean; supportsDatabaseRestore?: boolean; supportsServerSummary?: boolean; supportsDatabaseProfiler?: boolean; requiresDefaultSortCriteria?: boolean; profilerFormatterFunction?: string; profilerTimestampFunction?: string; profilerChartAggregateFunction?: string; profilerChartMeasures?: { label: string; field: string }[]; // isElectronOnly?: boolean; supportsTransactions?: boolean; implicitTransactions?: boolean; // transaction is started with first SQL command, no BEGIN TRANSACTION is needed premiumOnly?: boolean; collectionSingularLabel?: string; collectionPluralLabel?: string; collectionNameLabel?: string; newCollectionFormParams?: any[]; supportedCreateDatabase?: boolean; showConnectionField?: ( field: string, values: any, { config: {}, } ) => boolean; showConnectionTab?: (tab: 'ssl' | 'sshTunnel', values: any) => boolean; beforeConnectionSave?: (values: any) => any; databaseUrlPlaceholder?: string; defaultAuthTypeName?: string; authTypeFirst?: boolean; defaultLocalDataCenter?: string; defaultSocketPath?: string; authTypeLabel?: string; importExportArgs?: any[]; connect({ server, port, user, password, database, certificateJson }): Promise>; close(dbhan: DatabaseHandle): Promise; query(dbhan: DatabaseHandle, sql: string, options?: QueryOptions): Promise; stream(dbhan: DatabaseHandle, sql: string, options: StreamOptions); readQuery(dbhan: DatabaseHandle, sql: string, structure?: TableInfo): Promise; readJsonQuery(dbhan: DatabaseHandle, query: any, structure?: TableInfo): Promise; // eg. PostgreSQL COPY FROM stdin writeQueryFromStream(dbhan: DatabaseHandle, sql: string): Promise; writeTable(dbhan: DatabaseHandle, name: NamedObjectInfo, options: WriteTableOptions): Promise; analyseSingleObject( dbhan: DatabaseHandle, name: NamedObjectInfo, objectTypeField: keyof DatabaseInfo ): Promise; analyseSingleTable(dbhan: DatabaseHandle, name: NamedObjectInfo): Promise; getVersion(dbhan: DatabaseHandle): Promise<{ version: string; versionText?: string }>; listDatabases(dbhan: DatabaseHandle): Promise< { name: string; }[] >; loadKeys(dbhan: DatabaseHandle, root: string, filter?: string): Promise; scanKeys(dbhan: DatabaseHandle, root: string, pattern: string, cursor: string, count: number): Promise; exportKeys(dbhan: DatabaseHandle, options: {}): Promise; loadKeyInfo(dbhan: DatabaseHandle, key): Promise; loadKeyTableRange(dbhan: DatabaseHandle, key, cursor, count): Promise; loadFieldValues( dbhan: DatabaseHandle, name: NamedObjectInfo, field: string, search: string, dataType: string ): Promise; analyseFull(dbhan: DatabaseHandle, serverVersion): Promise; analyseIncremental(dbhan: DatabaseHandle, structure: DatabaseInfo, serverVersion): Promise; dialect: SqlDialect; dialectByVersion(version): SqlDialect; createDumper(options = null): SqlDumper; createBackupDumper(dbhan: DatabaseHandle, options): Promise; getAuthTypes(): EngineAuthType[]; readCollection(dbhan: DatabaseHandle, options: ReadCollectionOptions): Promise; updateCollection(dbhan: DatabaseHandle, changeSet: any): Promise; getCollectionUpdateScript(changeSet: any, collectionInfo: CollectionInfo): string; createDatabase(dbhan: DatabaseHandle, name: string): Promise; dropDatabase(dbhan: DatabaseHandle, name: string): Promise; getQuerySplitterOptions(usage: 'stream' | 'script' | 'editor' | 'import'): any; script(dbhan: DatabaseHandle, sql: string, options?: RunScriptOptions): Promise; operation(dbhan: DatabaseHandle, operation: CollectionOperationInfo, options?: RunScriptOptions): Promise; getNewObjectTemplates(): NewObjectTemplate[]; // direct call of dbhan.client method, only some methods could be supported, on only some drivers callMethod(dbhan: DatabaseHandle, method, args); serverSummary(dbhan: DatabaseHandle): Promise; summaryCommand(dbhan: DatabaseHandle, command, row): Promise; startProfiler(dbhan: DatabaseHandle, options): Promise; stopProfiler(dbhan: DatabaseHandle, profiler): Promise; getRedirectAuthUrl(connection, options): Promise<{ url: string; sid: string }>; getAuthTokenFromCode(connection, options): Promise; getAccessTokenFromAuth(connection, req): Promise; getCollectionExportQueryScript(collection: string, condition: any, sort?: CollectionSortDefinition): string; getCollectionExportQueryJson(collection: string, condition: any, sort?: CollectionSortDefinition): {}; getScriptTemplates(objectTypeField: keyof DatabaseInfo): { label: string; scriptTemplate: string }[]; getScriptTemplateContent(scriptTemplate: string, props: any): Promise; createSaveChangeSetScript( changeSet: any, dbinfo: DatabaseInfo, defaultCreator: (changeSet: any, dbinfo: DatabaseInfo, dialect: SqlDialect) => any ): any[]; // adapts table info from different source (import, other database) to be suitable for this database adaptTableInfo(table: TableInfo): TableInfo; // simple data type adapter adaptDataType(dataType: string): string; listSchemas(dbhan: DatabaseHandle): Promise; backupDatabaseCommand( connection: any, settings: BackupDatabaseSettings, externalTools: { [tool: string]: string } ): CommandLineDefinition; restoreDatabaseCommand( connection: any, settings: RestoreDatabaseSettings, externalTools: { [tool: string]: string } ): CommandLineDefinition; transformNativeCommandMessage( message: { message: string; severity: 'info' | 'error'; }, command: 'backup' | 'restore' ): { message: string; severity: 'info' | 'error' | 'debug' } | null; getNativeOperationFormArgs(operation: 'backup' | 'restore'): any[]; getAdvancedConnectionFields(): any[]; analyserClass?: any; dumperClass?: any; singleConnectionOnly?: boolean; } export interface DatabaseModification { oldName?: NamedObjectInfo; newName?: NamedObjectInfo; objectId?: string; action: 'add' | 'remove' | 'change' | 'all'; objectTypeField: keyof DatabaseInfo; }