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';
6
export class GeometryHelperOracle extends GeometryHelper {
7
override isTrue(expression: Knex.Raw) {
8
return expression.wrap(``, ` = 'TRUE'`);
11
override isFalse(expression: Knex.Raw) {
12
return expression.wrap(``, ` = 'FALSE'`);
15
override createColumn(table: Knex.CreateTableBuilder, field: RawField | Field) {
16
if (field.type.split('.')[1]) {
17
field.meta!.special = [field.type];
20
return table.specificType(field.field, 'sdo_geometry');
23
override asText(table: string, column: string): Knex.Raw {
24
return this.knex.raw('sdo_util.to_wktgeometry(??.??) as ??', [table, column, column]);
27
asGeoJSON(table: string, column: string): Knex.Raw {
28
return this.knex.raw('sdo_util.to_geojson(??.??) as ??', [table, column, column]);
31
override fromText(text: string): Knex.Raw {
32
return this.knex.raw('sdo_geometry(?, 4326)', text);
35
override _intersects(key: string, geojson: GeoJSONGeometry): Knex.Raw {
36
const geometry = this.fromGeoJSON(geojson);
37
return this.knex.raw(`sdo_overlapbdyintersect(??, ?)`, [key, geometry]);
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]);
45
override collect(table: string, column: string): Knex.Raw {
46
return this.knex.raw(`concat('geometrycollection(', listagg(?, ', '), ')'`, this.asText(table, column));