Skip to main content
Glama

Prisma MCP Server

Official
by prisma
Apache 2.0
4
44,213
  • Linux
  • Apple
tests.ts9.07 kB
import { copycat } from '@snaplet/copycat' import { Providers } from '../../_utils/providers' import testMatrix from './_matrix' // @ts-ignore import type * as $ from './generated/prisma/client' declare let prisma: $.PrismaClient declare let Prisma: typeof $.Prisma // ported from: blog testMatrix.setupTestSuite( ({ provider, driverAdapter }) => { const isD1DriverAdapter = driverAdapter === 'js_d1' beforeAll(async () => { await prisma.user.create({ data: { id: copycat.uuid(1).replaceAll('-', '').slice(-24), email: copycat.email(1), age: 20, }, }) await prisma.user.create({ data: { id: copycat.uuid(2).replaceAll('-', '').slice(-24), email: copycat.email(2), age: 45, }, }) await prisma.user.create({ data: { id: copycat.uuid(3).replaceAll('-', '').slice(-24), email: copycat.email(3), age: 60, }, }) await prisma.user.create({ data: { id: copycat.uuid(4).replaceAll('-', '').slice(-24), email: copycat.email(4), age: 63, }, }) }) // TODO snapshot for planetscale is `":vtg1 /* INT64 */": 1n` while mysql is `"1": 1n`, maybe it's normal? test('select 1 via queryRaw', async () => { const result: any = await prisma.$queryRaw` SELECT 1 ` const results = { postgresql: [{ '?column?': 1 }], cockroachdb: [{ '?column?': BigInt('1') }], mysql: [{ '1': BigInt('1') }], sqlite: [{ '1': isD1DriverAdapter ? 1 : BigInt('1') }], sqlserver: [{ '': 1 }], } const resultsByDriverAdapter = { js_planetscale: [{ ':vtg1 /* INT64 */': BigInt('1') }], } if (driverAdapter && resultsByDriverAdapter[driverAdapter]) { expect(result).toStrictEqual(resultsByDriverAdapter[driverAdapter]) } else { expect(result).toStrictEqual(results[provider]) } }) test('select 1 via queryRawUnsafe', async () => { const result: any = await prisma.$queryRawUnsafe(` SELECT 1 as "number" `) const results = { postgresql: [{ number: 1 }], cockroachdb: [{ number: BigInt('1') }], mysql: [{ number: BigInt('1') }], sqlite: [{ number: isD1DriverAdapter ? 1 : BigInt('1') }], sqlserver: [{ number: 1 }], } expect(result).toStrictEqual(results[provider]) }) test('select with alias via queryRaw', async () => { const result: any = await prisma.$queryRaw` SELECT 1 as "number" ` const results = { postgresql: [{ number: 1 }], cockroachdb: [{ number: BigInt('1') }], mysql: [{ number: BigInt('1') }], sqlite: [{ number: isD1DriverAdapter ? 1 : BigInt('1') }], sqlserver: [{ number: 1 }], } expect(result).toStrictEqual(results[provider]) }) // TODO snapshot for planetscale is `":vtg1 /* INT64 */": 1n` while mysql is `"1": 1n`, maybe it's normal? test('select values via queryRawUnsafe', async () => { const result: any = await prisma.$queryRawUnsafe(` SELECT 1 `) const results = { postgresql: [{ '?column?': 1 }], cockroachdb: [{ '?column?': BigInt('1') }], mysql: [{ '1': BigInt('1') }], sqlite: [{ '1': isD1DriverAdapter ? 1 : BigInt('1') }], sqlserver: [{ '': 1 }], } const resultsByDriverAdapter = { js_planetscale: [{ ':vtg1 /* INT64 */': BigInt('1') }], } if (driverAdapter && resultsByDriverAdapter[driverAdapter]) { expect(result).toStrictEqual(resultsByDriverAdapter[driverAdapter]) } else { expect(result).toStrictEqual(results[provider]) } }) test('select * via queryRawUnsafe', async () => { let result: any[] = [] if (provider === Providers.MYSQL) { result = await prisma.$queryRawUnsafe(` SELECT * FROM User WHERE age >= ${45} AND age <= ${60} `) } else { result = await prisma.$queryRawUnsafe(` SELECT * FROM "User" WHERE age >= ${45} AND age <= ${60} `) } result.sort((a, b) => a.id.localeCompare(b.id)) expect(result).toMatchInlineSnapshot(` [ { "age": 60, "email": "Kyla_Crist96556@cancollaboration.biz", "id": "a7fe5dac91ab6b0f529430c5", "name": null, }, { "age": 45, "email": "Sam.Dickinson32909@memorableparticular.org", "id": "a85d5d75a3a886cb61eb3a0e", "name": null, }, ] `) }) test('select * via queryRawUnsafe with values', async () => { let result: any[] = [] if (provider === Providers.MYSQL || driverAdapter === 'js_better_sqlite3') { result = await prisma.$queryRawUnsafe(`SELECT * FROM User WHERE age >= ? AND age <= ?`, 45, 60) } else if (provider === Providers.SQLSERVER) { result = await prisma.$queryRawUnsafe(`SELECT * FROM "User" WHERE age >= @P1 AND age <= @P2`, 45, 60) } else { result = await prisma.$queryRawUnsafe(`SELECT * FROM "User" WHERE age >= $1 AND age <= $2`, 45, 60) } result.sort((a, b) => a.id.localeCompare(b.id)) expect(result).toMatchInlineSnapshot(` [ { "age": 60, "email": "Kyla_Crist96556@cancollaboration.biz", "id": "a7fe5dac91ab6b0f529430c5", "name": null, }, { "age": 45, "email": "Sam.Dickinson32909@memorableparticular.org", "id": "a85d5d75a3a886cb61eb3a0e", "name": null, }, ] `) }) test('select * via queryRaw', async () => { let result: any[] = [] if (provider === Providers.MYSQL) { result = await prisma.$queryRaw` SELECT * FROM User WHERE age >= ${45} AND age <= ${60} ` } else { result = await prisma.$queryRaw` SELECT * FROM "User" WHERE age >= ${45} AND age <= ${60} ` } result.sort((a, b) => a.id.localeCompare(b.id)) expect(result).toMatchInlineSnapshot(` [ { "age": 60, "email": "Kyla_Crist96556@cancollaboration.biz", "id": "a7fe5dac91ab6b0f529430c5", "name": null, }, { "age": 45, "email": "Sam.Dickinson32909@memorableparticular.org", "id": "a85d5d75a3a886cb61eb3a0e", "name": null, }, ] `) }) test('select fields via queryRaw using Prisma.join', async () => { let result: any[] = [] if (provider === Providers.MYSQL) { result = await prisma.$queryRaw` SELECT ${Prisma.join([ Prisma.raw('age'), Prisma.raw('email'), Prisma.raw('id'), ])} FROM User WHERE age IN (${Prisma.join([45, 60])}) ` } else { result = await prisma.$queryRaw` SELECT ${Prisma.join([ Prisma.raw('age'), Prisma.raw('email'), Prisma.raw('id'), ])} FROM "User" WHERE age IN (${Prisma.join([45, 60])}) ` } result.sort((a, b) => a.id.localeCompare(b.id)) expect(result).toMatchInlineSnapshot(` [ { "age": 60, "email": "Kyla_Crist96556@cancollaboration.biz", "id": "a7fe5dac91ab6b0f529430c5", }, { "age": 45, "email": "Sam.Dickinson32909@memorableparticular.org", "id": "a85d5d75a3a886cb61eb3a0e", }, ] `) }) test('select fields via queryRaw using Prisma.join and Prisma.sql', async () => { let result: any[] = [] if (provider === Providers.MYSQL) { result = await prisma.$queryRaw(Prisma.sql` SELECT ${Prisma.join([ Prisma.raw('age'), Prisma.raw('email'), Prisma.raw('id'), ])} FROM User WHERE age IN (${Prisma.join([45, 60])}) `) } else { result = await prisma.$queryRaw(Prisma.sql` SELECT ${Prisma.join([ Prisma.raw('age'), Prisma.raw('email'), Prisma.raw('id'), ])} FROM "User" WHERE age IN (${Prisma.join([45, 60])}) `) } result.sort((a, b) => a.id.localeCompare(b.id)) expect(result).toMatchInlineSnapshot(` [ { "age": 60, "email": "Kyla_Crist96556@cancollaboration.biz", "id": "a7fe5dac91ab6b0f529430c5", }, { "age": 45, "email": "Sam.Dickinson32909@memorableparticular.org", "id": "a85d5d75a3a886cb61eb3a0e", }, ] `) }) }, { optOut: { from: [Providers.MONGODB], reason: 'MongoDB does not support raw queries', }, }, )

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/prisma/prisma'

If you have feedback or need assistance with the MCP directory API, please join our Discord server