Skip to content

Commit 2ce4f8d

Browse files
authored
fix(sql-tools): null default (#20796)
1 parent 538d5c8 commit 2ce4f8d

File tree

4 files changed

+34
-3
lines changed

4 files changed

+34
-3
lines changed

server/src/sql-tools/comparers/column.comparer.spec.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,23 @@ describe('compareColumns', () => {
6262
]);
6363
});
6464

65+
it('should detect a change in default', () => {
66+
const source: DatabaseColumn = { ...testColumn, nullable: true };
67+
const target: DatabaseColumn = { ...testColumn, nullable: true, default: "''" };
68+
const reason = `default is different (null vs '')`;
69+
expect(compareColumns.onCompare(source, target)).toEqual([
70+
{
71+
columnName: 'test',
72+
tableName: 'table1',
73+
type: 'ColumnAlter',
74+
changes: {
75+
default: 'NULL',
76+
},
77+
reason,
78+
},
79+
]);
80+
});
81+
6582
it('should detect a comment change', () => {
6683
const source: DatabaseColumn = { ...testColumn, comment: 'new comment' };
6784
const target: DatabaseColumn = { ...testColumn, comment: 'old comment' };

server/src/sql-tools/comparers/column.comparer.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,9 @@ export const compareColumns = {
7272
tableName: source.tableName,
7373
columnName: source.name,
7474
changes: {
75-
default: String(source.default),
75+
default: String(source.default ?? 'NULL'),
7676
},
77-
reason: `default is different (${source.default} vs ${target.default})`,
77+
reason: `default is different (${source.default ?? 'null'} vs ${target.default})`,
7878
});
7979
}
8080

server/src/sql-tools/helpers.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ export const isDefaultEqual = (source: DatabaseColumn, target: DatabaseColumn) =
175175

176176
if (
177177
withTypeCast(source.default, getColumnType(source)) === target.default ||
178-
source.default === withTypeCast(target.default, getColumnType(target))
178+
withTypeCast(target.default, getColumnType(target)) === source.default
179179
) {
180180
return true;
181181
}

server/src/sql-tools/transformers/column.transformer.spec.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,20 @@ describe(transformColumns.name, () => {
116116
}),
117117
).toEqual([`ALTER TABLE "table1" ALTER COLUMN "column1" SET DEFAULT uuid_generate_v4();`]);
118118
});
119+
120+
it('should update the default value to NULL', () => {
121+
expect(
122+
transformColumns(ctx, {
123+
type: 'ColumnAlter',
124+
tableName: 'table1',
125+
columnName: 'column1',
126+
changes: {
127+
default: 'NULL',
128+
},
129+
reason: 'unknown',
130+
}),
131+
).toEqual([`ALTER TABLE "table1" ALTER COLUMN "column1" SET DEFAULT NULL;`]);
132+
});
119133
});
120134

121135
describe('ColumnDrop', () => {

0 commit comments

Comments
 (0)