Skip to content

Commit 86ee44f

Browse files
committed
fix(default): table default for string values
* add test for empty string and string default
1 parent d9dfe83 commit 86ee44f

File tree

5 files changed

+30
-9
lines changed

5 files changed

+30
-9
lines changed

__tests__/fixtures/table.datamodel.ts

+8
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,11 @@ export const datamodelSingleTable = /* Prisma */ `
55
age Int?
66
}
77
`;
8+
9+
export const datamodelTableWithStringDefaults = /* Prisma */ `
10+
model Post {
11+
id Int @id @default(autoincrement())
12+
title String @default("")
13+
color String @default("blue")
14+
}
15+
`;

__tests__/table.test.ts

+18-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
import { datamodelSingleTable } from './fixtures/table.datamodel';
1+
import {
2+
datamodelSingleTable,
3+
datamodelTableWithStringDefaults,
4+
} from './fixtures/table.datamodel';
25
import { generateDMMF } from './utils/generateDMMF';
36
import { generateTables } from '../src/generator/table';
47

@@ -16,4 +19,18 @@ describe('Tables', () => {
1619
expect(enums.length).toEqual(1);
1720
expect(enums[0]).toMatch(expected);
1821
});
22+
23+
test('generate a table with empty string default', async () => {
24+
const dmmf = await generateDMMF(datamodelTableWithStringDefaults);
25+
26+
const expected = `Table Post {
27+
id Int [pk, increment]
28+
title String [not null, default: '']
29+
color String [not null, default: 'blue']
30+
}`;
31+
const enums = generateTables(dmmf.datamodel.models);
32+
33+
expect(enums.length).toEqual(1);
34+
expect(enums[0]).toMatch(expected);
35+
});
1936
});

prisma/dbml/schema.dbml

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ Table Profile {
2424

2525
Table Post {
2626
id Int [pk, increment]
27-
title String [not null]
27+
title String [not null, default: '']
2828
content String
2929
published Boolean [not null, default: false]
3030
author User

prisma/schema.prisma

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ model Profile {
3636

3737
model Post {
3838
id Int @id @default(autoincrement())
39-
title String
39+
title String @default("")
4040
content String?
4141
published Boolean @default(false)
4242
author User? @relation(fields: [authorId], references: [id])

src/generator/table.ts

+2-6
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,8 @@ const generateColumnDefinition = (field: DMMF.Field): string => {
4646
columnDefinition.push('not null');
4747
}
4848

49-
if (
50-
typeof field.default === 'string' ||
51-
typeof field.default === 'boolean' ||
52-
typeof field.default === 'number'
53-
) {
54-
if (field.kind === 'enum') {
49+
if (field.hasDefaultValue && typeof field.default != 'object') {
50+
if (field.type === 'String' || field.kind === 'enum') {
5551
columnDefinition.push(`default: '${field.default}'`);
5652
} else {
5753
columnDefinition.push(`default: ${field.default}`);

0 commit comments

Comments
 (0)