extractUpdateColumns(sql: string): ReadonlySet<string> | null
The lower-cased column names an UPDATE's SET clause assigns, or null when none
can be read. Commas inside parentheses are skipped, so a coalesce(x, 0) does
not split one assignment into two. Null means the caller invalidates
unconditionally — safe over stale.