directus

Форк
0
65 строк · 2.3 Кб
1
import type { Knex } from 'knex';
2
import type { FnHelperOptions } from '../types.js';
3
import { FnHelper } from '../types.js';
4

5
const parseLocaltime = (columnType?: string) => {
6
	if (columnType === 'timestamp') {
7
		return ` AT TIME ZONE 'UTC'`;
8
	}
9

10
	return '';
11
};
12

13
export class FnHelperPostgres extends FnHelper {
14
	year(table: string, column: string, options: FnHelperOptions): Knex.Raw {
15
		return this.knex.raw(`EXTRACT(YEAR FROM ??.??${parseLocaltime(options?.type)})`, [table, column]);
16
	}
17

18
	month(table: string, column: string, options: FnHelperOptions): Knex.Raw {
19
		return this.knex.raw(`EXTRACT(MONTH FROM ??.??${parseLocaltime(options?.type)})`, [table, column]);
20
	}
21

22
	week(table: string, column: string, options: FnHelperOptions): Knex.Raw {
23
		return this.knex.raw(`EXTRACT(WEEK FROM ??.??${parseLocaltime(options?.type)})`, [table, column]);
24
	}
25

26
	day(table: string, column: string, options: FnHelperOptions): Knex.Raw {
27
		return this.knex.raw(`EXTRACT(DAY FROM ??.??${parseLocaltime(options?.type)})`, [table, column]);
28
	}
29

30
	weekday(table: string, column: string, options: FnHelperOptions): Knex.Raw {
31
		return this.knex.raw(`EXTRACT(DOW FROM ??.??${parseLocaltime(options?.type)})`, [table, column]);
32
	}
33

34
	hour(table: string, column: string, options: FnHelperOptions): Knex.Raw {
35
		return this.knex.raw(`EXTRACT(HOUR FROM ??.??${parseLocaltime(options?.type)})`, [table, column]);
36
	}
37

38
	minute(table: string, column: string, options: FnHelperOptions): Knex.Raw {
39
		return this.knex.raw(`EXTRACT(MINUTE FROM ??.??${parseLocaltime(options?.type)})`, [table, column]);
40
	}
41

42
	second(table: string, column: string, options: FnHelperOptions): Knex.Raw {
43
		return this.knex.raw(`EXTRACT(SECOND FROM ??.??${parseLocaltime(options?.type)})`, [table, column]);
44
	}
45

46
	count(table: string, column: string, options?: FnHelperOptions): Knex.Raw {
47
		const collectionName = options?.originalCollectionName || table;
48
		const type = this.schema.collections?.[collectionName]?.fields?.[column]?.type ?? 'unknown';
49

50
		if (type === 'json') {
51
			const { dbType } = this.schema.collections[table]!.fields[column]!;
52

53
			return this.knex.raw(dbType === 'jsonb' ? 'jsonb_array_length(??.??)' : 'json_array_length(??.??)', [
54
				table,
55
				column,
56
			]);
57
		}
58

59
		if (type === 'alias') {
60
			return this._relationalCount(table, column, options);
61
		}
62

63
		throw new Error(`Couldn't extract type from ${table}.${column}`);
64
	}
65
}
66

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

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

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

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