Open hrueger opened 2 months ago
Can reproduce:
prisma:query -- Implicit "BEGIN" query via underlying driver
prisma:query INSERT INTO `main`.`User` (`email`, `name`) VALUES (?,?) RETURNING `id` AS `id`
prisma:query UPDATE `main`.`Post` SET `authorId` = ? WHERE ((`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1) OR (`main`.`Post`.`id` = ? AND 1=1))
prisma:query -- Implicit "ROLLBACK" query via underlying driver
prisma:error
Invalid `prisma.user.create()` invocation:
Error occurred during query execution:
ConnectorError(ConnectorError { user_facing_error: None, kind: QueryError(SqliteError { extended_code: 1, message: Some("D1_ERROR: Expression tree is too large (maximum depth 100)") }), transient: false })
✘ [ERROR] Error in performIO: Error: D1_ERROR: Expression tree is too large (maximum depth 100)
at D1Database._sendOrThrow (cloudflare-internal:d1-api:66:19)
at async D1PreparedStatement.run (cloudflare-internal:d1-api:178:29)
... 2 lines matching cause stack trace ...
at null.<anonymous> (async
file:///workspace/prisma-d1-variables-bug/.wrangler/tmp/dev-iVxUPq/index.js:1703:18) {
[cause]: Error: Expression tree is too large (maximum depth 100)
at D1Database._sendOrThrow (cloudflare-internal:d1-api:67:24)
at async D1PreparedStatement.run (cloudflare-internal:d1-api:178:29)
at async D1Transaction.performIO
(file:///workspace/prisma-d1-variables-bug/node_modules/@prisma/adapter-d1/dist/index.mjs:233:19)
at async D1Transaction.executeRaw
(file:///workspace/prisma-d1-variables-bug/node_modules/@prisma/adapter-d1/dist/index.mjs:225:17)
at null.<anonymous> (async
file:///workspace/prisma-d1-variables-bug/.wrangler/tmp/dev-iVxUPq/index.js:1703:18)
}
[wrangler:err] PrismaClientUnknownRequestError:
Invalid `prisma.user.create()` invocation:
Error occurred during query execution:
ConnectorError(ConnectorError { user_facing_error: None, kind: QueryError(SqliteError { extended_code: 1, message: Some("D1_ERROR: Expression tree is too large (maximum depth 100)") }), transient: false })
at or.handleRequestError (file:///workspace/prisma-d1-variables-bug/node_modules/@prisma/client/runtime/wasm.js:22:7318)
at or.handleAndLogRequestError (file:///workspace/prisma-d1-variables-bug/node_modules/@prisma/client/runtime/wasm.js:22:6462)
at or.request (file:///workspace/prisma-d1-variables-bug/node_modules/@prisma/client/runtime/wasm.js:22:6176)
at async f (file:///workspace/prisma-d1-variables-bug/node_modules/@prisma/client/runtime/wasm.js:27:11094)
at async Object.fetch (file:///workspace/prisma-d1-variables-bug/src/index.ts:23:17)
at async jsonError (file:///workspace/prisma-d1-variables-bug/node_modules/wrangler/templates/middleware/middleware-miniflare3-json-error.ts:22:10)
at async drainBody (file:///workspace/prisma-d1-variables-bug/node_modules/wrangler/templates/middleware/middleware-ensure-req-body-drained.ts:5:10)
[wrangler:inf] GET / 500 Internal Server Error (1346ms)
The query triggering the failure here seems to be the one for the connect
in the Prisma Client query.
We need to chunk this query as well.
See full reproduction: https://github.com/janpio/prisma-d1-variables-bug/tree/janpio/23919 (Based on reproduction from https://github.com/prisma/prisma/issues/23743)
Bug description
When using
connect: string[]
in an update or create query and connecting more than 100 items, it breaks when using Cloudflare D1. The error message is:Here's the full sql query being generated:
How to reproduce
Connect more than 100 items in a relation when using the D1 adapter.
Expected behavior
It works fine and does not throw any error.
Prisma information
Environment & setup
Prisma Version