extractUpdateColumns(sql: string): ReadonlySet<string> | null
Parse the column names assigned by an UPDATE SET clause.
Returns a lower-cased Set, or null if the SET clause cannot be found.
Each col = expr left-hand side is extracted; commas inside parentheses
are skipped so subexpressions don't split assignments. If extraction yields
no columns the caller falls back to unconditional invalidation.
Exported for unit testing; not part of the public db-client API.