directus

Форк
0
/
translate.ts 
54 строки · 1.4 Кб
1
import getDatabase, { getDatabaseClient } from '../index.js';
2
import emitter from '../../emitter.js';
3
import { extractError as mssql } from './dialects/mssql.js';
4
import { extractError as mysql } from './dialects/mysql.js';
5
import { extractError as oracle } from './dialects/oracle.js';
6
import { extractError as postgres } from './dialects/postgres.js';
7
import { extractError as sqlite } from './dialects/sqlite.js';
8
import type { SQLError } from './dialects/types.js';
9

10
/**
11
 * Translates an error thrown by any of the databases into a pre-defined Exception. Currently
12
 * supports:
13
 * - Invalid Foreign Key
14
 * - Not Null Violation
15
 * - Record Not Unique
16
 * - Value Out of Range
17
 * - Value Too Long
18
 */
19
export async function translateDatabaseError(error: SQLError): Promise<any> {
20
	const client = getDatabaseClient();
21
	let defaultError: any;
22

23
	switch (client) {
24
		case 'mysql':
25
			defaultError = mysql(error);
26
			break;
27
		case 'cockroachdb':
28
		case 'postgres':
29
			defaultError = postgres(error);
30
			break;
31
		case 'sqlite':
32
			defaultError = sqlite(error);
33
			break;
34
		case 'oracle':
35
			defaultError = oracle(error);
36
			break;
37
		case 'mssql':
38
			defaultError = await mssql(error);
39
			break;
40
	}
41

42
	const hookError = await emitter.emitFilter(
43
		'database.error',
44
		defaultError,
45
		{ client },
46
		{
47
			database: getDatabase(),
48
			schema: null,
49
			accountability: null,
50
		},
51
	);
52

53
	return hookError;
54
}
55

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

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

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

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