directus

Форк
0
44 строки · 1.4 Кб
1
import type { Field, RawField } from '@directus/types';
2
import type { Knex } from 'knex';
3
import type { GeoJSONGeometry } from 'wellknown';
4
import { GeometryHelper } from '../types.js';
5

6
export class GeometryHelperMSSQL extends GeometryHelper {
7
	override isTrue(expression: Knex.Raw) {
8
		return expression.wrap(``, ` = 1`);
9
	}
10

11
	override isFalse(expression: Knex.Raw) {
12
		return expression.wrap(``, ` = 0`);
13
	}
14

15
	override createColumn(table: Knex.CreateTableBuilder, field: RawField | Field) {
16
		if (field.type.split('.')[1]) {
17
			field.meta!.special = [field.type];
18
		}
19

20
		return table.specificType(field.field, 'geometry');
21
	}
22

23
	override asText(table: string, column: string): Knex.Raw {
24
		return this.knex.raw('??.??.STAsText() as ??', [table, column, column]);
25
	}
26

27
	override fromText(text: string): Knex.Raw {
28
		return this.knex.raw('geometry::STGeomFromText(?, 4326)', text);
29
	}
30

31
	override _intersects(key: string, geojson: GeoJSONGeometry): Knex.Raw {
32
		const geometry = this.fromGeoJSON(geojson);
33
		return this.knex.raw('??.STIntersects(?)', [key, geometry]);
34
	}
35

36
	override _intersects_bbox(key: string, geojson: GeoJSONGeometry): Knex.Raw {
37
		const geometry = this.fromGeoJSON(geojson);
38
		return this.knex.raw('??.STEnvelope().STIntersects(?.STEnvelope())', [key, geometry]);
39
	}
40

41
	override collect(table: string, column: string): Knex.Raw {
42
		return this.knex.raw('geometry::CollectionAggregate(??.??).STAsText()', [table, column]);
43
	}
44
}
45

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

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

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

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