From fd43d7b358de91f923f0594372cc02a07fb1b159 Mon Sep 17 00:00:00 2001 From: sanny-io Date: Sat, 18 Jul 2026 05:31:54 +0000 Subject: [PATCH 1/5] fix: rename native type mappings to match datasource --- packages/sdk/src/prisma/prisma-schema-generator.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/sdk/src/prisma/prisma-schema-generator.ts b/packages/sdk/src/prisma/prisma-schema-generator.ts index f15422678..08cf9c122 100644 --- a/packages/sdk/src/prisma/prisma-schema-generator.ts +++ b/packages/sdk/src/prisma/prisma-schema-generator.ts @@ -260,6 +260,10 @@ export class PrismaSchemaGenerator { return attr.decl.ref.attributes.some((a) => a.decl.ref?.name === '@@@prisma'); } + private isNativeTypeMappingAttribute(attr: DataFieldAttribute) { + return attr.decl.$refText.startsWith('@db.'); + } + private getUnsupportedFieldType(fieldType: DataFieldType) { if (fieldType.unsupported) { const value = getStringLiteral(fieldType.unsupported.value); @@ -337,7 +341,13 @@ export class PrismaSchemaGenerator { } private makeFieldAttribute(attr: DataFieldAttribute) { - const attrName = attr.decl.ref!.name; + let attrName = attr.decl.ref!.name; + if (this.isNativeTypeMappingAttribute(attr)) { + const dataSource = this.zmodel.declarations.find(isDataSource); + if (dataSource) { + attrName = attrName.replace('@db', `@${dataSource.name}`) + } + } return new PrismaFieldAttribute( attrName, attr.args.map((arg) => this.makeAttributeArg(arg)), From ecd582cef40a17205792f0490b41d88d3398731f Mon Sep 17 00:00:00 2001 From: sanny-io Date: Sat, 18 Jul 2026 05:31:58 +0000 Subject: [PATCH 2/5] chore: add test --- packages/cli/test/prisma-schema-gen.test.ts | 45 +++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/packages/cli/test/prisma-schema-gen.test.ts b/packages/cli/test/prisma-schema-gen.test.ts index 34aed5d6f..0abc5e4f2 100644 --- a/packages/cli/test/prisma-schema-gen.test.ts +++ b/packages/cli/test/prisma-schema-gen.test.ts @@ -46,4 +46,49 @@ model User { expect(prismaSchemaText.includes('nanoid(12)')).toBe(true); expect(prismaSchemaText.includes('nanoid12_%s')).toBe(false); }); + + it('renames native type mappings to match the datasource', async () => { + const model = await loadSchema(` +datasource ds { + provider = 'postgresql' + url = env('POSTGRES_URL') +} + +model User { + id String @id + string String @db.Text + boolean Boolean @db.Boolean + int Int @db.Integer + bigInt BigInt @db.BigInt + float Float @db.Real + decimal Decimal @db.Money + dateTime DateTime @db.Timestamptz(3) + json Json @db.JsonB + bytes Bytes @db.ByteA +} + `); + + const generator = new PrismaSchemaGenerator(model); + const prismaSchemaText = await generator.generate(); + + expect(prismaSchemaText.includes('@db.Text')).toBe(false); + expect(prismaSchemaText.includes('@db.Boolean')).toBe(false); + expect(prismaSchemaText.includes('@db.Integer')).toBe(false); + expect(prismaSchemaText.includes('@db.BigInt')).toBe(false); + expect(prismaSchemaText.includes('@db.Real')).toBe(false); + expect(prismaSchemaText.includes('@db.Money')).toBe(false); + expect(prismaSchemaText.includes('@db.Timestamptz(3)')).toBe(false); + expect(prismaSchemaText.includes('@db.JsonB')).toBe(false); + expect(prismaSchemaText.includes('@db.ByteA')).toBe(false); + + expect(prismaSchemaText.includes('@ds.Text')).toBe(true); + expect(prismaSchemaText.includes('@ds.Boolean')).toBe(true); + expect(prismaSchemaText.includes('@ds.Integer')).toBe(true); + expect(prismaSchemaText.includes('@ds.BigInt')).toBe(true); + expect(prismaSchemaText.includes('@ds.Real')).toBe(true); + expect(prismaSchemaText.includes('@ds.Money')).toBe(true); + expect(prismaSchemaText.includes('@ds.Timestamptz(3)')).toBe(true); + expect(prismaSchemaText.includes('@ds.JsonB')).toBe(true); + expect(prismaSchemaText.includes('@ds.ByteA')).toBe(true); + }); }); \ No newline at end of file From a35cb3f1e505ec92b11b5ecca60f44751908baf8 Mon Sep 17 00:00:00 2001 From: sanny-io Date: Sat, 18 Jul 2026 05:32:59 +0000 Subject: [PATCH 3/5] chore: add newline to EOF --- packages/cli/test/prisma-schema-gen.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli/test/prisma-schema-gen.test.ts b/packages/cli/test/prisma-schema-gen.test.ts index 0abc5e4f2..b5a8ce733 100644 --- a/packages/cli/test/prisma-schema-gen.test.ts +++ b/packages/cli/test/prisma-schema-gen.test.ts @@ -91,4 +91,4 @@ model User { expect(prismaSchemaText.includes('@ds.JsonB')).toBe(true); expect(prismaSchemaText.includes('@ds.ByteA')).toBe(true); }); -}); \ No newline at end of file +}); From 2c26e6e2ecf29293afda698b7d70ff0bf3c805e2 Mon Sep 17 00:00:00 2001 From: sanny-io Date: Sat, 18 Jul 2026 05:45:50 +0000 Subject: [PATCH 4/5] chore: add semi-colon --- packages/sdk/src/prisma/prisma-schema-generator.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sdk/src/prisma/prisma-schema-generator.ts b/packages/sdk/src/prisma/prisma-schema-generator.ts index 08cf9c122..541cdb0fc 100644 --- a/packages/sdk/src/prisma/prisma-schema-generator.ts +++ b/packages/sdk/src/prisma/prisma-schema-generator.ts @@ -345,7 +345,7 @@ export class PrismaSchemaGenerator { if (this.isNativeTypeMappingAttribute(attr)) { const dataSource = this.zmodel.declarations.find(isDataSource); if (dataSource) { - attrName = attrName.replace('@db', `@${dataSource.name}`) + attrName = attrName.replace('@db', `@${dataSource.name}`); } } return new PrismaFieldAttribute( From 6b48f0ae5ab62ddebe03efd2205a1ee3c33dfa3d Mon Sep 17 00:00:00 2001 From: sanny-io Date: Sat, 18 Jul 2026 07:02:41 +0000 Subject: [PATCH 5/5] fix: explicitly check attribute for Prisma support --- packages/sdk/src/prisma/prisma-schema-generator.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sdk/src/prisma/prisma-schema-generator.ts b/packages/sdk/src/prisma/prisma-schema-generator.ts index 541cdb0fc..0eefb28c8 100644 --- a/packages/sdk/src/prisma/prisma-schema-generator.ts +++ b/packages/sdk/src/prisma/prisma-schema-generator.ts @@ -261,7 +261,7 @@ export class PrismaSchemaGenerator { } private isNativeTypeMappingAttribute(attr: DataFieldAttribute) { - return attr.decl.$refText.startsWith('@db.'); + return attr.decl.$refText.startsWith('@db.') && this.isPrismaAttribute(attr); } private getUnsupportedFieldType(fieldType: DataFieldType) {