directus

Форк
0
53 строки · 1.5 Кб
1
import type { KNEX_TYPES } from '@directus/constants';
2
import type { Field, Relation, Type } from '@directus/types';
3
import type { Options } from '../types.js';
4
import { SchemaHelper } from '../types.js';
5

6
export class SchemaHelperOracle extends SchemaHelper {
7
	override async changeToType(
8
		table: string,
9
		column: string,
10
		type: (typeof KNEX_TYPES)[number],
11
		options: Options = {},
12
	): Promise<void> {
13
		await this.changeToTypeByCopy(table, column, type, options);
14
	}
15

16
	override castA2oPrimaryKey(): string {
17
		return 'CAST(?? AS VARCHAR2(255))';
18
	}
19

20
	override preRelationChange(relation: Partial<Relation>): void {
21
		if (relation.collection === relation.related_collection) {
22
			// Constraints are not allowed on self referencing relationships
23
			// Setting NO ACTION throws - ORA-00905: missing keyword
24
			if (relation.schema?.on_delete) {
25
				relation.schema.on_delete = null;
26
			}
27
		}
28
	}
29

30
	override processFieldType(field: Field): Type {
31
		if (field.type === 'integer') {
32
			if (field.schema?.numeric_precision === 20) {
33
				return 'bigInteger';
34
			} else if (field.schema?.numeric_precision === 1) {
35
				return 'boolean';
36
			} else if (field.schema?.numeric_precision || field.schema?.numeric_scale) {
37
				return 'decimal';
38
			}
39
		}
40

41
		return field.type;
42
	}
43

44
	override async getDatabaseSize(): Promise<number | null> {
45
		try {
46
			const result = await this.knex.raw('select SUM(bytes) from dba_segments');
47

48
			return result[0]?.['SUM(BYTES)'] ? Number(result[0]?.['SUM(BYTES)']) : null;
49
		} catch {
50
			return null;
51
		}
52
	}
53
}
54

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.