Match the enum-whitelist CHECK sweep to the YugabyteDB rendering

FixInitializerService
Ya
14 Agosti 2026, 17:06 UTC
Mwandishi
Kamo
Ahadi ya
2aef5d6

dropStaleEnumWhitelistChecks() looked for '% IN (%', which is how CockroachDB stored a @Enumerated(EnumType.STRING) whitelist. PostgreSQL and YugabyteDB normalize the identical constraint to '(col)::text = ANY ((ARRAY[...])::text[])', so since the cutover the sweep has matched ZERO rows while logging success — 495 live whitelists frozen at whatever values existed when their table was made. The failure surfaces far from here. TimecardEventType.PUNCH_VOIDED was appended after hr_timecard_audit_event was created, so every void's audit insert failed the stale CHECK with SQLState 23514; because that insert flushed inside a nested @Transactional the tx went rollback-only and the caller saw an opaque UnexpectedRollbackException, surfacing in the timecard editor as "editor void failed" with nothing actually saved. Verified against the live database: the widened predicate matches 495 stale whitelists (including **************** and zero of the hand-written invariant CHECKs this runner declares — those all carry AND/OR/IS NULL and stay excluded. '=' deliberately is NOT an exclusion; the ANY-ARRAY rendering contains one.

Mabadiliko yote

Je, unaona nini kuhusu usafiri?

Kila moja ya hizi updates ardhi katika nafasi yako ya kazi moja kwa moja. Kuanza bure na kuangalia kukua wiki baada ya wiki.

Kuwa Huru MileleMtazamo wa bei