diff --git a/e2e/adapter/test/adapter-factory/basic.ts b/e2e/adapter/test/adapter-factory/basic.ts index 7fcce563789..15dd776f03f 100644 --- a/e2e/adapter/test/adapter-factory/basic.ts +++ b/e2e/adapter/test/adapter-factory/basic.ts @@ -3314,6 +3314,30 @@ export const getNormalTestSuiteTests = ( expect(neIds).toContain(targetImage.id); expect(neIds).toContain(otherImage.id); }, + + "update - should return updated record when where condition uses null value": + async () => { + const withNull = await adapter.create({ + model: "user", + data: { ...(await generate("user")), image: null }, + forceAllowId: true, + }); + + // Update WHERE image IS NULL AND id = withNull.id + const result = await adapter.update({ + model: "user", + where: [ + { field: "id", value: withNull.id }, + { field: "image", operator: "eq", value: null }, + ], + update: { name: "null-where-updated" }, + }); + + // On MySQL the re-fetch after UPDATE must use IS NULL, not = NULL + expect(result).toBeDefined(); + expect(result!.id).toBe(withNull.id); + expect(result!.name).toBe("null-where-updated"); + }, }; }; diff --git a/packages/kysely-adapter/src/kysely-adapter.ts b/packages/kysely-adapter/src/kysely-adapter.ts index 1e46b29ce78..e73bcfaad64 100644 --- a/packages/kysely-adapter/src/kysely-adapter.ts +++ b/packages/kysely-adapter/src/kysely-adapter.ts @@ -122,12 +122,17 @@ export const kyselyAdapter = ( return res; } - const value = values[field] || where[0]?.value; + const value = + values[field] !== undefined ? values[field] : where[0]?.value; res = await db .selectFrom(model) .selectAll() .orderBy(getFieldName({ model, field }), "desc") - .where(getFieldName({ model, field }), "=", value) + .where( + getFieldName({ model, field }), + value === null ? "is" : "=", + value, + ) .limit(1) .executeTakeFirst(); return res;