Skip to content

Invalid result when using take (LIMIT) #1519

@israelins85

Description

@israelins85

Description and expected behavior
Using take on enhanced prisma returns different result than prisma for the same expected result.

Exemple code:

  • usuarioId on Aluno table is the user id

`
export async function getPrismaEnhanced(req: NextApiRequest, res: NextApiResponse) {
const userId = await userIdFromRequest(req);
let user: auth.Usuario | null = null;

if (userId != null) {
    user = { id: userId };
} else {
    sendError(res, StatusCodes.LOCKED, "LOCKED");
    return;
}

const dispositivoId =
    req.headers["x-dispositivo-id"] ?? req.headers["x-device-id"];
if (dispositivoId != null) {
    prisma.$executeRawUnsafe(`SET var.device_id = '${dispositivoId}'`);
}

const teste = await prisma.aluno.findMany({
    take: 10,
    where: {
        usuarioId: userId,
    },
});

console.log("teste", teste);

const prismaEnhanced = enhance(
    prisma,
    { user: user ?? undefined },
    {
        logPrismaQuery: true,
    },
);

const teste2 = await prismaEnhanced.aluno.findMany({
    take: 10,
});

console.log("teste2", teste2);

return prismaEnhanced;

}`

Logging the statements at prisma level on pure prisma:
SELECT "public"."aluno"."id",
"public"."aluno"."usuarioid",
"public"."aluno"."dthrcriacao",
"public"."aluno"."dthratualizacao",
"public"."aluno"."nome",
"public"."aluno"."sobrenome",
"public"."aluno"."celular",
"public"."aluno"."email",
"public"."aluno"."observacoes",
"public"."aluno"."saldodeaulas",
"public"."aluno"."dtnascimento",
"public"."aluno"."peso",
"public"."aluno"."altura",
"public"."aluno"."removido"
FROM "public"."aluno"
WHERE "public"."aluno"."usuarioid" = $1
ORDER BY "public"."aluno"."id" ASC
LIMIT $2 offset $3

And on enhanced:

SELECT "public"."aluno"."id",
"public"."aluno"."usuarioid",
"public"."aluno"."dthrcriacao",
"public"."aluno"."dthratualizacao",
"public"."aluno"."nome",
"public"."aluno"."sobrenome",
"public"."aluno"."celular",
"public"."aluno"."email",
"public"."aluno"."observacoes",
"public"."aluno"."saldodeaulas",
"public"."aluno"."dtnascimento",
"public"."aluno"."peso",
"public"."aluno"."altura",
"public"."aluno"."removido"
FROM "public"."aluno"
WHERE 1 = 1
ORDER BY "public"."aluno"."id" ASC
LIMIT $1 offset $2

and some records are skipped:
prisma:info [policy] dropping aluno entity due to entity checker
prisma:info [policy] dropping aluno entity due to entity checker
prisma:info [policy] dropping aluno entity due to entity checker
prisma:info [policy] dropping aluno entity due to entity checker
prisma:info [policy] dropping aluno entity due to entity checker
prisma:info [policy] dropping aluno entity due to entity checker
prisma:info [policy] dropping aluno entity due to entity checker
prisma:info [policy] dropping aluno entity due to entity checker

the records from other user...

An workaround is using on enhanced the same where

Environment (please complete the following information):

  • ZenStack version: 2.2.3
  • Prisma version: 5.15.0
  • Database type: 16

Additional context
I guess need be highlighted the fact that the where need be still used;

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions