Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Error calling enhanced Prisma method with strictUndefinedCheck #1964

Open
iksemot opened this issue Jan 14, 2025 · 0 comments
Open

Error calling enhanced Prisma method with strictUndefinedCheck #1964

iksemot opened this issue Jan 14, 2025 · 0 comments

Comments

@iksemot
Copy link

iksemot commented Jan 14, 2025

Description and expected behavior

Enhanced client errors on nested operations when strictUndefinedCheck is turned on.

Given data model:

generator client {
  provider = "prisma-client-js"
  previewFeatures = ["views", "strictUndefinedChecks"]

}

datasource db {
  provider = "sqlite"
  url      = "file:./dev.db"
}

view User {
  id    Int    @id
  orgId String
}

model Author {
  id    Int    @id @default(autoincrement())
  orgId String
  name  String
  posts Post[]

  @@unique([orgId, name])
  @@allow('all', auth().orgId == orgId)
}

model Post {
  id       Int     @id @default(autoincrement())
  orgId    String
  title    String
  author   Author  @relation(fields: [authorId], references: [id])
  authorId Int

  @@allow('all', auth().orgId == orgId)
}

Running following code:

import { PrismaClient } from '@prisma/client'
import { enhance } from '@zenstackhq/runtime'

;(async function main() {
    const _prisma = new PrismaClient({ log: ['info']  })
    const user = { id: 123, orgId: 'org' }
    const prisma = enhance(_prisma,
        { user },
        { logPrismaQuery: false }
    )
    
    const newauthor = await prisma.author.create({
        data: {
            name: `Foo ${Date.now()}`,
            orgId: user.orgId,
            posts: {
                createMany: { data: [{ title: 'Hello', orgId: user.orgId }] }
            }
        },
        include: { posts: true }
    })

    await prisma.author.update({
        where: { orgId_name: { orgId: 'org', name: newauthor.name } },
        data: {
            name: `Bar ${Date.now()}`,
            posts: { deleteMany: { id: { equals: newauthor.posts[0].id } } }
        },
    })
})()

Fails with:

prisma:info Starting a sqlite pool with 9 connections.
Error calling enhanced Prisma method `author.update`: 
Invalid `prisma.post.deleteMany()` invocation:

{
  where: {
    AND: [
      {
        id: {
          equals: 3
        },
        authorId: undefined
                  ~~~~~~~~~
      },
      {
        orgId: {
          equals: "org"
        }
      }
    ]
  }
}

Invalid value for argument `0`: explicitly `undefined` values are not allowed.
    at C:\Users\tomas\workspace\mindfuel\try-prisma-fastify\src\main.ts:23:25,
    at step (C:\Users\tomas\workspace\mindfuel\try-prisma-fastify\src\main.ts:33:23),
    at Object.next (C:\Users\tomas\workspace\mindfuel\try-prisma-fastify\src\main.ts:14:53),
    at fulfilled (C:\Users\tomas\workspace\mindfuel\try-prisma-fastify\src\main.ts:5:58) {
  name: 'PrismaClientValidationError',
  clientVersion: '6.1.0',
  internalStack: 'PrismaClientValidationError: \n' +
    'Invalid `prisma.post.deleteMany()` invocation:\n' +
    '\n' +
    '{\n' +
    '  where: {\n' +
    '    AND: [\n' +
    '      {\n' +
    '        id: {\n' +
    '          equals: 3\n' +
    '        },\n' +
    '        authorId: undefined\n' +
    '                  ~~~~~~~~~\n' +
    '      },\n' +
    '      {\n' +
    '        orgId: {\n' +
    '          equals: "org"\n' +
    '        }\n' +
    '      }\n' +
    '    ]\n' +
    '  }\n' +
    '}\n' +
    '\n' +
    'Invalid value for argument `0`: explicitly `undefined` values are not allowed.\n' +
    '    at wn (C:\\Users\\tomas\\workspace\\mindfuel\\try-prisma-fastify\\node_modules\\@prisma\\client\\runtime\\library.js:29:1363)\n' +
    '    at e.throwValidationError (C:\\Users\\tomas\\workspace\\mindfuel\\try-prisma-fastify\\node_modules\\@prisma\\client\\runtime\\library.js:29:10254)\n' +
    '    at da (C:\\Users\\tomas\\workspace\\mindfuel\\try-prisma-fastify\\node_modules\\@prisma\\client\\runtime\\library.js:29:9013)\n' +
    '    at pa (C:\\Users\\tomas\\workspace\\mindfuel\\try-prisma-fastify\\node_modules\\@prisma\\client\\runtime\\library.js:29:8487)\n' +
    '  }\n' +
    '}\n' +
    '\n' +
    'Invalid value for argument `0`: explicitly `undefined` values are not allowed.\n' +
    '    at wn (C:\\Users\\tomas\\workspace\\mindfuel\\try-prisma-fastify\\node_modules\\@prisma\\client\\runtime\\library.js:29:1363)\n' +
    '    at e.throwValidationError (C:\\Users\\tomas\\workspace\\mindfuel\\try-prisma-fastify\\node_modules\\@prisma\\client\\runtime\\library.js:29:10254)\n' +
    '    at da (C:\\Users\\tomas\\workspace\\mindfuel\\try-prisma-fastify\\node_modules\\@prisma\\client\\runtime\\library.js:29:9013)\n' +
    '    at pa (C:\\Users\\tomas\\workspace\\mindfuel\\try-prisma-fastify\\node_modules\\@prisma\\client\\runtime\\library.js:29:8487)\n' +
    '    at wn (C:\\Users\\tomas\\workspace\\mindfuel\\try-prisma-fastify\\node_modules\\@prisma\\client\\runtime\\library.js:29:1363)\n' +
    '    at e.throwValidationError (C:\\Users\\tomas\\workspace\\mindfuel\\try-prisma-fastify\\node_modules\\@prisma\\client\\runtime\\library.js:29:10254)\n' +
    '    at da (C:\\Users\\tomas\\workspace\\mindfuel\\try-prisma-fastify\\node_modules\\@prisma\\client\\runtime\\library.js:29:9013)\n' +
    '    at pa (C:\\Users\\tomas\\workspace\\mindfuel\\try-prisma-fastify\\node_modules\\@prisma\\client\\runtime\\library.js:29:8487)\n' +
    '    at da (C:\\Users\\tomas\\workspace\\mindfuel\\try-prisma-fastify\\node_modules\\@prisma\\client\\runtime\\library.js:29:9013)\n' +
    '    at pa (C:\\Users\\tomas\\workspace\\mindfuel\\try-prisma-fastify\\node_modules\\@prisma\\client\\runtime\\library.js:29:8487)\n' +
    '    at pa (C:\\Users\\tomas\\workspace\\mindfuel\\try-prisma-fastify\\node_modules\\@prisma\\client\\runtime\\library.js:29:8487)\n' +
    '    at md (C:\\Users\\tomas\\workspace\\mindfuel\\try-prisma-fastify\\node_modules\\@prisma\\client\\runtime\\library.js:29:9660)\n' +
    '    at pa (C:\\Users\\tomas\\workspace\\mindfuel\\try-prisma-fastify\\node_modules\\@prisma\\client\\runtime\\library.js:29:8076)\n' +
    '    at da (C:\\Users\\tomas\\workspace\\mindfuel\\try-prisma-fastify\\node_modules\\@prisma\\client\\runtime\\library.js:29:8956)\n' +
    '    at pa (C:\\Users\\tomas\\workspace\\mindfuel\\try-prisma-fastify\\node_modules\\@prisma\\client\\runtime\\library.js:29:8487)\n' +
    '    at da (C:\\Users\\tomas\\workspace\\mindfuel\\try-prisma-fastify\\node_modules\\@prisma\\client\\runtime\\library.js:29:8956)\n' +
    '    at mr (C:\\Users\\tomas\\workspace\\mindfuel\\try-prisma-fastify\\node_modules\\@prisma\\client\\runtime\\library.js:29:6038)'
}

Environment (please complete the following information):

  • ZenStack version: 2.10.2, 2.11.3
  • Prisma version: 6.1.0
  • Database type: SQLite, PostgreSQL

Additional context

  • Issue seem to be linked with the usage of composite key in the update({ where call. If where is using PK then above code works fine.
  • The same as in the example for update+deleteMany happens with update+upsert.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant