directus

Форк
0
48 строк · 1.6 Кб
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 GeometryHelperOracle extends GeometryHelper {
7
	override isTrue(expression: Knex.Raw) {
8
		return expression.wrap(``, ` = 'TRUE'`);
9
	}
10

11
	override isFalse(expression: Knex.Raw) {
12
		return expression.wrap(``, ` = 'FALSE'`);
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, 'sdo_geometry');
21
	}
22

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

27
	asGeoJSON(table: string, column: string): Knex.Raw {
28
		return this.knex.raw('sdo_util.to_geojson(??.??) as ??', [table, column, column]);
29
	}
30

31
	override fromText(text: string): Knex.Raw {
32
		return this.knex.raw('sdo_geometry(?, 4326)', text);
33
	}
34

35
	override _intersects(key: string, geojson: GeoJSONGeometry): Knex.Raw {
36
		const geometry = this.fromGeoJSON(geojson);
37
		return this.knex.raw(`sdo_overlapbdyintersect(??, ?)`, [key, geometry]);
38
	}
39

40
	override _intersects_bbox(key: string, geojson: GeoJSONGeometry): Knex.Raw {
41
		const geometry = this.fromGeoJSON(geojson);
42
		return this.knex.raw(`sdo_overlapbdyintersect(sdo_geom.sdo_mbr(??), sdo_geom.sdo_mbr(?))`, [key, geometry]);
43
	}
44

45
	override collect(table: string, column: string): Knex.Raw {
46
		return this.knex.raw(`concat('geometrycollection(', listagg(?, ', '), ')'`, this.asText(table, column));
47
	}
48
}
49

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

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

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

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