-
-
Notifications
You must be signed in to change notification settings - Fork 496
/
IDatabaseDriver.ts
101 lines (74 loc) · 3.55 KB
/
IDatabaseDriver.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
import { EntityData, EntityMetadata, EntityProperty, AnyEntity, FilterQuery, Primary, Dictionary, QBFilterQuery } from '../typings';
import { Connection, QueryResult, Transaction } from '../connections';
import { QueryOrderMap, QueryFlag } from '../enums';
import { Platform } from '../platforms';
import { MetadataStorage } from '../metadata';
import { LockMode } from '../unit-of-work';
import { Collection } from '../entity';
import { EntityManager } from '../index';
import { DriverException } from '../exceptions';
export const EntityManagerType = Symbol('EntityManagerType');
export interface IDatabaseDriver<C extends Connection = Connection> {
[EntityManagerType]: EntityManager<this>;
createEntityManager<D extends IDatabaseDriver = IDatabaseDriver>(useContext?: boolean): D[typeof EntityManagerType];
connect(): Promise<C>;
close(force?: boolean): Promise<void>;
reconnect(): Promise<C>;
getConnection(type?: 'read' | 'write'): C;
/**
* Finds selection of entities
*/
find<T extends AnyEntity<T>>(entityName: string, where: FilterQuery<T>, options?: FindOptions<T>, ctx?: Transaction): Promise<T[]>;
/**
* Finds single entity (table row, document)
*/
findOne<T extends AnyEntity<T>>(entityName: string, where: FilterQuery<T>, options?: FindOneOptions<T>, ctx?: Transaction): Promise<T | null>;
nativeInsert<T extends AnyEntity<T>>(entityName: string, data: EntityData<T>, ctx?: Transaction): Promise<QueryResult>;
nativeUpdate<T extends AnyEntity<T>>(entityName: string, where: FilterQuery<T>, data: EntityData<T>, ctx?: Transaction): Promise<QueryResult>;
nativeDelete<T extends AnyEntity<T>>(entityName: string, where: FilterQuery<T>, ctx?: Transaction): Promise<QueryResult>;
syncCollection<T extends AnyEntity<T>, O extends AnyEntity<O>>(collection: Collection<T, O>, ctx?: Transaction): Promise<void>;
count<T extends AnyEntity<T>>(entityName: string, where: FilterQuery<T>, ctx?: Transaction): Promise<number>;
aggregate(entityName: string, pipeline: any[]): Promise<any[]>;
mapResult<T extends AnyEntity<T>>(result: EntityData<T>, meta: EntityMetadata): T | null;
/**
* When driver uses pivot tables for M:N, this method will load identifiers for given collections from them
*/
loadFromPivotTable<T extends AnyEntity<T>, O extends AnyEntity<O>>(prop: EntityProperty, owners: Primary<O>[][], where?: FilterQuery<T>, orderBy?: QueryOrderMap, ctx?: Transaction): Promise<Dictionary<T[]>>;
getPlatform(): Platform;
setMetadata(metadata: MetadataStorage): void;
ensureIndexes(): Promise<void>;
/**
* Returns name of the underlying database dependencies (e.g. `mongodb` or `mysql2`)
* for SQL drivers it also returns `knex` in the array as connectors are not used directly there
*/
getDependencies(): string[];
lockPessimistic<T extends AnyEntity<T>>(entity: T, mode: LockMode, ctx?: Transaction): Promise<void>;
/**
* Converts native db errors to standardized driver exceptions
*/
convertException(exception: Error): DriverException;
}
export interface FindOptions<T> {
populate?: string[] | boolean;
orderBy?: QueryOrderMap;
limit?: number;
offset?: number;
refresh?: boolean;
fields?: string[];
schema?: string;
flags?: QueryFlag[];
groupBy?: string | string[];
having?: QBFilterQuery<T>;
}
export interface FindOneOptions<T> {
populate?: string[] | boolean;
orderBy?: QueryOrderMap;
groupBy?: string | string[];
having?: QBFilterQuery<T>;
lockMode?: LockMode;
lockVersion?: number | Date;
refresh?: boolean;
fields?: string[];
schema?: string;
flags?: QueryFlag[];
}