1
import type { KNEX_TYPES } from '@directus/constants';
2
import type { Field, Relation, Type } from '@directus/types';
3
import type { Options } from '../types.js';
4
import { SchemaHelper } from '../types.js';
6
export class SchemaHelperOracle extends SchemaHelper {
7
override async changeToType(
10
type: (typeof KNEX_TYPES)[number],
11
options: Options = {},
13
await this.changeToTypeByCopy(table, column, type, options);
16
override castA2oPrimaryKey(): string {
17
return 'CAST(?? AS VARCHAR2(255))';
20
override preRelationChange(relation: Partial<Relation>): void {
21
if (relation.collection === relation.related_collection) {
22
// Constraints are not allowed on self referencing relationships
23
// Setting NO ACTION throws - ORA-00905: missing keyword
24
if (relation.schema?.on_delete) {
25
relation.schema.on_delete = null;
30
override processFieldType(field: Field): Type {
31
if (field.type === 'integer') {
32
if (field.schema?.numeric_precision === 20) {
34
} else if (field.schema?.numeric_precision === 1) {
36
} else if (field.schema?.numeric_precision || field.schema?.numeric_scale) {
44
override async getDatabaseSize(): Promise<number | null> {
46
const result = await this.knex.raw('select SUM(bytes) from dba_segments');
48
return result[0]?.['SUM(BYTES)'] ? Number(result[0]?.['SUM(BYTES)']) : null;