diff --git a/packages/knex/src/schema/SchemaComparator.ts b/packages/knex/src/schema/SchemaComparator.ts index 339d8ca1aae5..dddd13c6743d 100644 --- a/packages/knex/src/schema/SchemaComparator.ts +++ b/packages/knex/src/schema/SchemaComparator.ts @@ -566,6 +566,18 @@ export class SchemaComparator { return simplify(expr1) !== simplify(expr2); } + parseJsonDefault(defaultValue?: string | null): Dictionary | string | null { + if (!defaultValue) { + return null; + } + + const val = defaultValue + .replace(/^(_\w+\\)?'(.*?)\\?'$/, '$2') + .replace(/^\(?'(.*?)'\)?$/, '$1'); + + return parseJsonSafe(val); + } + hasSameDefaultValue(from: Column, to: Column): boolean { if (from.default == null || from.default.toString().toLowerCase() === 'null' || from.default.toString().startsWith('nextval(')) { return to.default == null || to.default!.toLowerCase() === 'null'; @@ -579,8 +591,8 @@ export class SchemaComparator { } if (to.mappedType instanceof JsonType) { - const defaultValueFrom = parseJsonSafe(from.default.replace(/^(_\w+\\)?'(.*?)\\?'$/, '$2')); - const defaultValueTo = parseJsonSafe(to.default?.replace(/^\(?'(.*?)'\)?$/, '$1')); + const defaultValueFrom = this.parseJsonDefault(from.default); + const defaultValueTo = this.parseJsonDefault(to.default); return Utils.equals(defaultValueFrom, defaultValueTo); } diff --git a/tests/features/schema-generator/json-diffing.mysql.test.ts b/tests/features/schema-generator/json-diffing.mysql.test.ts index 131d242ddd2b..89ace188865b 100644 --- a/tests/features/schema-generator/json-diffing.mysql.test.ts +++ b/tests/features/schema-generator/json-diffing.mysql.test.ts @@ -29,6 +29,9 @@ beforeAll(async () => { afterAll(() => orm.close(true)); test('default values on json columns', async () => { - const diff1 = await orm.schema.getUpdateSchemaSQL({ wrap: false }); - expect(diff1).toBe(''); + const diff1 = await orm.schema.getUpdateSchemaMigrationSQL({ wrap: false }); + expect(diff1).toEqual({ + up: '', + down: '', + }); });