From c26e43a34f7e7d2aca620f2163a5b433711fa281 Mon Sep 17 00:00:00 2001 From: chenos Date: Sat, 20 Apr 2024 22:01:09 +0800 Subject: [PATCH] feat(database): improve text field --- .../src/__tests__/fields/text-field.test.ts | 47 +++++++++++++++++++ .../core/database/src/fields/text-field.ts | 10 ++++ 2 files changed, 57 insertions(+) create mode 100644 packages/core/database/src/__tests__/fields/text-field.test.ts diff --git a/packages/core/database/src/__tests__/fields/text-field.test.ts b/packages/core/database/src/__tests__/fields/text-field.test.ts new file mode 100644 index 0000000000..24956dadc0 --- /dev/null +++ b/packages/core/database/src/__tests__/fields/text-field.test.ts @@ -0,0 +1,47 @@ +import { mockDatabase } from '../'; +import { Database } from '../../database'; + +describe('text field', () => { + let db: Database; + + beforeEach(async () => { + db = mockDatabase(); + await db.clean({ drop: true }); + }); + + afterEach(async () => { + await db.close(); + }); + + it('should create text field type', async () => { + const Test = db.collection({ + name: 'tests', + fields: [ + { + type: 'text', + name: 'text1', + defaultValue: 'a', + }, + { + type: 'text', + name: 'text2', + length: 'tiny', + defaultValue: 'a', + }, + { + type: 'text', + name: 'text3', + length: 'medium', + defaultValue: 'a', + }, + { + type: 'text', + name: 'text4', + length: 'long', + defaultValue: 'a', + }, + ], + }); + await Test.sync(); + }); +}); diff --git a/packages/core/database/src/fields/text-field.ts b/packages/core/database/src/fields/text-field.ts index c1d15e4e41..c6da240414 100644 --- a/packages/core/database/src/fields/text-field.ts +++ b/packages/core/database/src/fields/text-field.ts @@ -3,10 +3,20 @@ import { BaseColumnFieldOptions, Field } from './field'; export class TextField extends Field { get dataType() { + if (this.database.inDialect('mysql', 'mariadb') && this.options.length) { + return DataTypes.TEXT(this.options.length); + } return DataTypes.TEXT; } + + init() { + if (this.database.inDialect('mysql', 'mariadb')) { + this.options.defaultValue = null; + } + } } export interface TextFieldOptions extends BaseColumnFieldOptions { type: 'text'; + length?: 'tiny' | 'medium' | 'long'; }