From ced300083d1ae86865ed83b6bac34a817a035979 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Thu, 20 Oct 2022 08:41:53 -1000 Subject: [PATCH] test(client): wrong error for multiple queries in tx #15433 --- packages/client/src/runtime/DataLoader.ts | 5 +++- .../15433-wrong-error-query-tx/_matrix.ts | 9 +++++++ .../prisma/_schema.ts | 20 ++++++++++++++++ .../15433-wrong-error-query-tx/tests.ts | 24 +++++++++++++++++++ 4 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 packages/client/tests/functional/issues/15433-wrong-error-query-tx/_matrix.ts create mode 100644 packages/client/tests/functional/issues/15433-wrong-error-query-tx/prisma/_schema.ts create mode 100644 packages/client/tests/functional/issues/15433-wrong-error-query-tx/tests.ts diff --git a/packages/client/src/runtime/DataLoader.ts b/packages/client/src/runtime/DataLoader.ts index 33b728ddf70c..8a2f82dea633 100644 --- a/packages/client/src/runtime/DataLoader.ts +++ b/packages/client/src/runtime/DataLoader.ts @@ -70,12 +70,14 @@ export class DataLoader { .then((results) => { if (results instanceof Error) { for (let i = 0; i < batch.length; i++) { - batch[i].reject(results) + console.log('HMMM') + batch[i].reject(results[i]) } } else { for (let i = 0; i < batch.length; i++) { const value = results[i] if (value instanceof Error) { + console.log('LEL') batch[i].reject(value) } else { batch[i].resolve(value) @@ -84,6 +86,7 @@ export class DataLoader { } }) .catch((e) => { + console.log('LOLOL') for (let i = 0; i < batch.length; i++) { batch[i].reject(e) } diff --git a/packages/client/tests/functional/issues/15433-wrong-error-query-tx/_matrix.ts b/packages/client/tests/functional/issues/15433-wrong-error-query-tx/_matrix.ts new file mode 100644 index 000000000000..6a962230983f --- /dev/null +++ b/packages/client/tests/functional/issues/15433-wrong-error-query-tx/_matrix.ts @@ -0,0 +1,9 @@ +import { defineMatrix } from '../../_utils/defineMatrix' + +export default defineMatrix(() => [ + [ + { + provider: 'sqlite', + }, + ], +]) diff --git a/packages/client/tests/functional/issues/15433-wrong-error-query-tx/prisma/_schema.ts b/packages/client/tests/functional/issues/15433-wrong-error-query-tx/prisma/_schema.ts new file mode 100644 index 000000000000..c2eabcccc012 --- /dev/null +++ b/packages/client/tests/functional/issues/15433-wrong-error-query-tx/prisma/_schema.ts @@ -0,0 +1,20 @@ +import { idForProvider } from '../../../_utils/idForProvider' +import testMatrix from '../_matrix' + +export default testMatrix.setupSchema(({ provider }) => { + return /* Prisma */ ` + generator client { + provider = "prisma-client-js" + } + + datasource db { + provider = "${provider}" + url = env("DATABASE_URI_${provider}") + } + + model User { + id ${idForProvider(provider)} + email String @unique + } + ` +}) diff --git a/packages/client/tests/functional/issues/15433-wrong-error-query-tx/tests.ts b/packages/client/tests/functional/issues/15433-wrong-error-query-tx/tests.ts new file mode 100644 index 000000000000..9d21809d67c1 --- /dev/null +++ b/packages/client/tests/functional/issues/15433-wrong-error-query-tx/tests.ts @@ -0,0 +1,24 @@ +import testMatrix from './_matrix' +// @ts-ignore +import type { PrismaClient } from './node_modules/@prisma/client' + +declare let prisma: PrismaClient + +testMatrix.setupTestSuite( + (suiteConfig, suiteMeta) => { + test('example', async () => { + await prisma.$transaction([ + prisma.user.create({ data: { email: 'john1@doe.io' } }), + prisma.user.create({ data: { email: 'john2@doe.io' } }), + prisma.user.create({ data: { email: 'john3@doe.io' } }), + prisma.user.create({ data: { email: 'john1@doe.io' } }), + ]) + }) + }, + { + optOut: { + from: ['postgresql', 'mysql', 'mongodb', 'cockroachdb', 'sqlserver'], + reason: 'this is something that is handled by the client', + }, + }, +)