From 95f68f7ec67a538ca9dcf6d921faa2f71bf20e61 Mon Sep 17 00:00:00 2001 From: Bereket Engida <86073083+Bekacru@users.noreply.github.com> Date: Wed, 9 Oct 2024 12:30:44 +0300 Subject: [PATCH] fix: drizzle mysql unsupported returning (#128) fix: drizzle mysql unsupported returning (#128) --------- Co-authored-by: Riley Barabash --- packages/better-auth/package.json | 2 +- .../src/adapters/drizzle-adapter/index.ts | 20 +++++++++++++---- .../better-auth/src/api/routes/session.ts | 22 +------------------ .../src/cli/utils/get-migration.ts | 9 ++++++++ packages/better-auth/src/db/field.ts | 15 +++++++++---- packages/better-auth/src/db/to-zod.ts | 6 +++++ 6 files changed, 44 insertions(+), 30 deletions(-) diff --git a/packages/better-auth/package.json b/packages/better-auth/package.json index 8198591764..35274c5a7b 100644 --- a/packages/better-auth/package.json +++ b/packages/better-auth/package.json @@ -6,7 +6,7 @@ "scripts": { "build": "NODE_OPTIONS='--max-old-space-size=4000' tsup --clean --dts", "dev": "NODE_OPTIONS='--max-old-space-size=4000' tsup --watch --sourcemap", - "dev:dts": "NODE_OPTIONS='--max-old-space-size=4000' tsup --watch --dts", + "dev:dts": "NODE_OPTIONS='--max-old-space-size=8192' tsup --watch --dts", "test": "pnpm prisma:push && pnpm typecheck && vitest", "prisma:push": "prisma db push --schema src/adapters/prisma-adapter/test/schema.prisma", "test:adapters": "pnpm prisma:push && vitest adapters", diff --git a/packages/better-auth/src/adapters/drizzle-adapter/index.ts b/packages/better-auth/src/adapters/drizzle-adapter/index.ts index 05e8d65795..b2f352b04b 100644 --- a/packages/better-auth/src/adapters/drizzle-adapter/index.ts +++ b/packages/better-auth/src/adapters/drizzle-adapter/index.ts @@ -90,8 +90,14 @@ export const drizzleAdapter = ( schema, usePlural: options.usePlural, }); - const res = await db.insert(schemaModel).values(val).returning(); + const mutation = db.insert(schemaModel).values(val); + if (databaseType !== "mysql") return (await mutation.returning())[0]; + await mutation; + const res = await db + .select() + .from(schemaModel) + .where(eq(schemaModel.id, (data.data as { id: string }).id)); return res[0]; }, async findOne(data) { @@ -150,11 +156,17 @@ export const drizzleAdapter = ( usePlural: options.usePlural, }); const wheres = whereConvertor(where, schemaModel); - const res = await db + const mutation = db .update(schemaModel) .set(update) - .where(...wheres) - .returning(); + .where(...wheres); + if (databaseType !== "mysql") return (await mutation.returning())[0]; + + await mutation; + const res = await db + .select() + .from(schemaModel) + .where(eq(schemaModel.id, (data.update as { id: string }).id)); return res[0]; }, async delete(data) { diff --git a/packages/better-auth/src/api/routes/session.ts b/packages/better-auth/src/api/routes/session.ts index 6323c23b97..661b7e0813 100644 --- a/packages/better-auth/src/api/routes/session.ts +++ b/packages/better-auth/src/api/routes/session.ts @@ -12,25 +12,6 @@ import type { Prettify, } from "../../types"; -/** - * Generate a unique key for the request to cache the - * request for 5 seconds for this specific request. - * - * This is to prevent reaching to database if getSession is - * called multiple times for the same request - */ -function getRequestUniqueKey(ctx: Context, token: string): string { - if (!ctx.request) { - return ""; - } - const { method, url, headers } = ctx.request; - const userAgent = ctx.request.headers.get("User-Agent") || ""; - const ip = getIp(ctx.request) || ""; - const headerString = JSON.stringify(headers); - const uniqueString = `${method}:${url}:${headerString}:${userAgent}:${ip}:${token}`; - return uniqueString; -} - export const getSession =