directus
1import type { KNEX_TYPES } from '@directus/constants';
2import type { Options } from '../types.js';
3import { SchemaHelper } from '../types.js';
4import { useEnv } from '@directus/env';
5
6const env = useEnv();
7
8export class SchemaHelperCockroachDb extends SchemaHelper {
9override async changeToType(
10table: string,
11column: string,
12type: (typeof KNEX_TYPES)[number],
13options: Options = {},
14): Promise<void> {
15await this.changeToTypeByCopy(table, column, type, options);
16}
17
18override constraintName(existingName: string): string {
19const suffix = '_replaced';
20
21// CockroachDB does not allow for dropping/creating constraints with the same
22// name in a single transaction. reference issue #14873
23if (existingName.endsWith(suffix)) {
24return existingName.substring(0, existingName.length - suffix.length);
25} else {
26return existingName + suffix;
27}
28}
29
30override async getDatabaseSize(): Promise<number | null> {
31try {
32const result = await this.knex
33.select(this.knex.raw('round(SUM(range_size_mb) * 1024 * 1024, 0) AS size'))
34.from(this.knex.raw('[SHOW RANGES FROM database ??]', [env['DB_DATABASE']]));
35
36return result[0]?.['size'] ? Number(result[0]?.['size']) : null;
37} catch {
38return null;
39}
40}
41}
42