-
-
Notifications
You must be signed in to change notification settings - Fork 526
/
SqlitePlatform.ts
68 lines (53 loc) · 1.9 KB
/
SqlitePlatform.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
// @ts-ignore
import { escape } from 'sqlstring-sqlite';
import { EntityProperty, Utils } from '@mikro-orm/core';
import { AbstractSqlPlatform } from '@mikro-orm/knex';
import { SqliteSchemaHelper } from './SqliteSchemaHelper';
import { SqliteExceptionConverter } from './SqliteExceptionConverter';
export class SqlitePlatform extends AbstractSqlPlatform {
protected readonly schemaHelper = new SqliteSchemaHelper();
protected readonly exceptionConverter = new SqliteExceptionConverter();
requiresNullableForAlteringColumn() {
return true;
}
usesDefaultKeyword(): boolean {
return false;
}
getCurrentTimestampSQL(length: number): string {
return super.getCurrentTimestampSQL(0);
}
convertsJsonAutomatically(): boolean {
return false;
}
/**
* This is used to narrow the value of Date properties as they will be stored as timestamps in sqlite.
* We use this method to convert Dates to timestamps when computing the changeset, so we have the right
* data type in the payload as well as in original entity data. Without that, we would end up with diffs
* including all Date properties, as we would be comparing Date object with timestamp.
*/
processDateProperty(value: unknown): string | number | Date {
if (value instanceof Date) {
return +value;
}
return value as number;
}
quoteVersionValue(value: Date | number, prop: EntityProperty): Date | string | number {
if (prop.type.toLowerCase() === 'date') {
return escape(value, true, this.timezone).replace(/^'|\.\d{3}'$/g, '');
}
return value;
}
requiresValuesKeyword() {
return true;
}
quoteValue(value: any): string {
/* istanbul ignore if */
if (Utils.isPlainObject(value)) {
return escape(JSON.stringify(value), true, this.timezone);
}
if (value instanceof Date) {
return '' + +value;
}
return escape(value, true, this.timezone);
}
}