From 816c998291ecb1fceb7b7f867f94290896a3435f Mon Sep 17 00:00:00 2001 From: ian Date: Tue, 30 Aug 2022 03:19:23 +0800 Subject: [PATCH] Detect autoincrement for CockroachDB --- .../database/helpers/schema/dialects/cockroachdb.ts | 12 ++++++++++++ api/src/database/helpers/schema/dialects/oracle.ts | 12 +++++------- api/src/database/helpers/schema/types.ts | 6 +++--- api/src/services/fields.ts | 2 +- 4 files changed, 21 insertions(+), 11 deletions(-) diff --git a/api/src/database/helpers/schema/dialects/cockroachdb.ts b/api/src/database/helpers/schema/dialects/cockroachdb.ts index 573156cf41..6547d15c6d 100644 --- a/api/src/database/helpers/schema/dialects/cockroachdb.ts +++ b/api/src/database/helpers/schema/dialects/cockroachdb.ts @@ -1,4 +1,5 @@ import { KNEX_TYPES } from '@directus/shared/constants'; +import { Field } from '@directus/shared/types'; import { Options, SchemaHelper } from '../types'; export class SchemaHelperCockroachDb extends SchemaHelper { @@ -10,4 +11,15 @@ export class SchemaHelperCockroachDb extends SchemaHelper { ): Promise { await this.changeToTypeByCopy(table, column, type, options); } + + processField(field: Field): void { + if ( + field.schema?.default_value && + ['integer', 'bigInteger'].includes(field.type) && + typeof field.schema.default_value === 'string' && + field.schema.default_value.startsWith('nextval(') + ) { + field.schema.has_auto_increment = true; + } + } } diff --git a/api/src/database/helpers/schema/dialects/oracle.ts b/api/src/database/helpers/schema/dialects/oracle.ts index 6310132894..4c79c5e1fb 100644 --- a/api/src/database/helpers/schema/dialects/oracle.ts +++ b/api/src/database/helpers/schema/dialects/oracle.ts @@ -1,5 +1,5 @@ import { KNEX_TYPES } from '@directus/shared/constants'; -import { Field, Type } from '@directus/shared/types'; +import { Field } from '@directus/shared/types'; import { Options, SchemaHelper } from '../types'; export class SchemaHelperOracle extends SchemaHelper { @@ -12,17 +12,15 @@ export class SchemaHelperOracle extends SchemaHelper { await this.changeToTypeByCopy(table, column, type, options); } - processFieldType(field: Field): Type { + processField(field: Field): void { if (field.type === 'integer') { if (field.schema?.numeric_precision === 20) { - return 'bigInteger'; + field.type = 'bigInteger'; } else if (field.schema?.numeric_precision === 1) { - return 'boolean'; + field.type = 'boolean'; } else if (field.schema?.numeric_precision || field.schema?.numeric_scale) { - return 'decimal'; + field.type = 'decimal'; } } - - return field.type; } } diff --git a/api/src/database/helpers/schema/types.ts b/api/src/database/helpers/schema/types.ts index ad042732b9..ac239e734c 100644 --- a/api/src/database/helpers/schema/types.ts +++ b/api/src/database/helpers/schema/types.ts @@ -1,7 +1,7 @@ import { getDatabaseClient } from '../../index'; import { DatabaseHelper } from '../types'; import { KNEX_TYPES } from '@directus/shared/constants'; -import { Field, Type } from '@directus/shared/types'; +import { Field } from '@directus/shared/types'; type Clients = 'mysql' | 'postgres' | 'cockroachdb' | 'sqlite' | 'oracle' | 'mssql' | 'redshift'; @@ -92,7 +92,7 @@ export abstract class SchemaHelper extends DatabaseHelper { return; } - processFieldType(field: Field): Type { - return field.type; + processField(_field: Field): void { + return; } } diff --git a/api/src/services/fields.ts b/api/src/services/fields.ts index bd09b1a49c..504e550e8b 100644 --- a/api/src/services/fields.ts +++ b/api/src/services/fields.ts @@ -178,7 +178,7 @@ export class FieldsService { field.type = 'dateTime'; } - field.type = this.helpers.schema.processFieldType(field); + this.helpers.schema.processField(field); } return result;