Přeskočit na obsah

WHERE col != hodnota (Prisma not) tiše vynechá NULL řádky

import { Aside } from ‘@astrojs/starlight/components’;

Hromadná synchronizace „přepiš přiřazení všech podřízených záznamů kromě těch, co už mají novou hodnotu” funguje pro už přiřazené záznamy, ale nepřiřazené (NULL) záznamy tiše přeskočí. Žádná chyba, count v odpovědi prostě NULL řádky nezahrnuje. Odhaleno až E2E testem na reálných datech, unit testy měly všechny řádky vyplněné.

SQL tříhodnotová logika: NULL != 'x' není TRUE, ale NULL → řádek neprojde WHERE. Prisma { not: value } generuje <> value, takže má stejné chování:

// „všem leadům kromě těch, co už mají newOwner" — NULL leady se NIKDY nepropíšou
await prisma.lead.updateMany({
where: { clientId, assignedToId: { not: newOwner } },
data: { assignedToId: newOwner },
});
await prisma.lead.updateMany({
where: {
clientId,
OR: [{ assignedToId: null }, { assignedToId: { not: newOwner } }],
},
data: { assignedToId: newOwner },
});

V raw SQL ekvivalentně WHERE col IS DISTINCT FROM $1 (PostgreSQL) — IS DISTINCT FROM s NULL pracuje jako běžné porovnání.

Jak se tomu vyvarovat v jiných systémech

Sekce “Jak se tomu vyvarovat v jiných systémech”
  • Detection: grep { not: v Prisma where klauzulích a !=/<> v raw SQL nad nullable sloupci; test case s NULL hodnotou do každého testu bulk synchronizace.
  • Anti-pattern: „update všech kromě X” nad nullable sloupcem bez explicitního ošetření NULL.
  • Lepší přístup: PostgreSQL IS DISTINCT FROM; v Prisma explicitní OR s null; v code review se u nullable polí ptát na NULL větev.

Sister bugs / související

Sekce “Sister bugs / související”

Stejná past platí pro NOT IN (...) — jediná NULL hodnota v seznamu zneguje celou podmínku. A pro filtrování: WHERE col != 'x' v reportech tiše vyřadí NULL řádky ze statistik.

Přidal aiarchitekt.cz · 5. 7. 2026 2:00
Provozuje aiarchitekt.cz