github dolthub/dolt v2.4.2
2.4.2

2 hours ago

Merged PRs

dolt

  • 12025: Fixed foreign keys referencing a renamed index
    This fixes the issue presented in:
    • dolthub/doltgresql#3517
      This moves the index renaming logic so that it also covers ALTER INDEX instead of only RENAME INDEX.
  • 12024: Quoted dolt_blame view identifiers with the engine's schema formatter
    This moves quoting for the dolt_blame_* tables to use the quoting function so that Doltgres uses its quotes. Previously we were hardcoding MySQL quotes, which caused parsing errors on Doltgres.
  • 12023: docs: document the NBS storage lock contract
    Closes #11262
    go/store/nbs/README.md described NBS's on-disk layout but never mentioned the advisory file lock, so operators had nothing to read when a restart raced a running server.
    The new "Storage locking" section documents the lock's path (<database dir>/.dolt/noms/LOCK), that it goes through github.com/dolthub/file-locks (flock(2) on unix, LockFileEx on Windows), and that it is advisory. It covers the lifetime (newJournalLock acquires, NomsBlockStore.Close releases; there is no maximum hold time), the 100 ms lockFileTimeout and what happens after it (a silent read-only open by default, ErrDatabaseLocked with fail_on_journal_lock_timeout, a single non-blocking attempt with skip_journal_lock_timeout), that a kill -9 cannot leave a stale lock because the kernel releases flocks, that the LOCK file itself always remains and its presence says nothing about lock state, and that deleting the LOCK file while a process holds the lock silently breaks mutual exclusion.
    Everything stated here was read out of go/store/nbs/file_manifest.go, go/store/nbs/journal_manifest.go and the github.com/dolthub/file-locks API (lockFileTimeout, ErrDatabaseLocked, the fail_on_journal_lock_timeout / skip_journal_lock_timeout options). The caveat that the guarantees are only as good as the mount over NFS/SMB is stated as such rather than as a tested claim.
    Documentation only - no Go code changed.

    This pull request was prepared with the assistance of an AI coding agent and
    has not yet been reviewed by a human.

  • 12018: Allow schema overrides with ignored nonlocal tables
    Nonlocal tables now retain their own schema when absent from the schema-override commit. Existing overrides still apply, and ordinary local lookups remain strict.
    Resolve nonlocal targets through user-table lookup and keep conflict backing tables on the same root, preventing conflict updates from being redirected to another branch. Adds focused regression coverage for ignored tables, cross-branch aliases, committed targets, and conflict updates.
    Validated normal/prepared nonlocal and rebase engine suites, plus schema-override suites with standard and adaptive encoding.
    Fixes #11997

go-mysql-server

  • 3971: Delegate IN element evaluation to comparison expressions and apply coercibility to HashInTuple
    IN predicates respect character set and collation comparison rules (such as accent-insensitivity in utf8mb4_unicode_ci and utf8mb4_0900_ai_ci) for both sequential tuple evaluations and in-memory hash lookups.
    Fix #11907
  • 3947: Execute duplicate-key update triggers
    Executes duplicate-key update triggers, with import regression coverage in #11980 and DoltgreSQL compatibility changes in dolthub/doltgresql#3469.
    Fixes #5925
  • 3936: Convert ANY_VALUE from an aggregate to a scalar function
    Unaggregated queries containing ANY_VALUE no longer synthesize a whole-table GroupBy node or collapse rows, and windows invocations like ANY_VALUE(a) OVER () are properly rejected as a syntax error.
    • Add function.AnyValue as a scalar sql.FunctionExpression to avoid artificial GroupBy node and collapsing rows.
    • Remove aggregate and window patches now that there's no aggregate function nesting errors.
    • Exempt ANY_VALUE arguments from ONLY_FULL_GROUP_BY validation in validateGroupBy.
      Fix #11911
      Fix #3944

Closed Issues

  • 11262: Document the noms LOCK contract (<data_dir>//.dolt/noms/LOCK): acquire timeout, lifetime/staleness, external-waiter flock safety
  • 11739: conjoin opens unbounded concurrent connections — exceeds sshd MaxStartups on git+ssh remotes, so conjoin never completes
  • 11997: unable to find global table at overridden schema root
  • 3944: ErrIndexOutOfBounds evaluating correlated scalar subquery in joined GROUP BY

Don't miss a new dolt release

NewReleases is sending notifications on new releases.