diff --git a/packages/prisma-adapter/src/prisma-adapter.test.ts b/packages/prisma-adapter/src/prisma-adapter.test.ts index 21573e48e8..ea5162b61b 100644 --- a/packages/prisma-adapter/src/prisma-adapter.test.ts +++ b/packages/prisma-adapter/src/prisma-adapter.test.ts @@ -283,6 +283,12 @@ describe("prisma-adapter", () => { mode: "insensitive" as const, }, { field: "email", value: "a.c@x.io" }, + { + field: "name", + value: "a.c", + operator: "gte" as const, + mode: "insensitive" as const, + }, ]; await createAdapter("mongodb").findMany({ model: "user", where }); @@ -294,6 +300,7 @@ describe("prisma-adapter", () => { { email: { equals: "a\\.c@x\\.io", mode: "insensitive" } }, { email: { in: ["a\\+b@x\\.io"], mode: "insensitive" } }, { email: { equals: "a.c@x.io" } }, + { name: { gte: "a.c", mode: "insensitive" } }, ], }); @@ -306,6 +313,7 @@ describe("prisma-adapter", () => { { email: { equals: "a.c@x.io", mode: "insensitive" } }, { email: { in: ["a+b@x.io"], mode: "insensitive" } }, { email: { equals: "a.c@x.io" } }, + { name: { gte: "a.c", mode: "insensitive" } }, ], }); }); diff --git a/packages/prisma-adapter/src/prisma-adapter.ts b/packages/prisma-adapter/src/prisma-adapter.ts index e963c978c1..9e32ec2ea2 100644 --- a/packages/prisma-adapter/src/prisma-adapter.ts +++ b/packages/prisma-adapter/src/prisma-adapter.ts @@ -279,12 +279,18 @@ export const prismaAdapter = (prisma: PrismaClient, config: PrismaConfig) => { isInsensitive && providerSupportsMode ? "insensitive" : undefined; const modeFilter = prismaMode ? { mode: prismaMode } : {}; // Prisma's MongoDB connector builds `$regexMatch` patterns from these values unescaped. + // Range operators compare string order instead. const usesRegex = config.provider === "mongodb" && - (prismaMode !== undefined || - w.operator === "contains" || + (w.operator === "contains" || w.operator === "starts_with" || - w.operator === "ends_with"); + w.operator === "ends_with" || + (prismaMode !== undefined && + (!w.operator || + w.operator === "eq" || + w.operator === "ne" || + w.operator === "in" || + w.operator === "not_in"))); const toPrismaValue = (v: unknown) => usesRegex && typeof v === "string" ? v.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")