github dolthub/dolt v2.3.3
2.3.3

3 hours ago

Merged PRs

dolt

  • 11757: go/store/nbs: byte_sink.go: Fix an error in non-archive push and GC paths which could result in table files with missing indexes.
    Failure to properly handle a boundary condition in BufferedFileByteSink meant that a table file writer that was producing a large table file could end up writing it out with a broken index. All chunk data made it to the file, but the file itself was unusable without manual recovery because the index portion of the file was wrong.
  • 11746: Added DESC indexes and NULL ordering
    This implements DESC indexes and NULL ordering (nulls can be set to be first or last). NULL ordering is primarily used by Doltgres. This is a feature version bump for Dolt because, now that we support DESC indexes, old databases trying to read a DESC index would read it incorrectly and return incorrect results.
    Related PRs:
  • 11745: Coalesce git remote read fetches, answer absent keys from the cache.
    A cache-missing Get or Exists ran its own git fetch of the whole data ref, so a burst of concurrent readers opened a connection each and every probe for a key that does not exist fetched again. Concurrent read-path fetches now share one fetch, and a key missing from a cache already merged from a commit is reported absent without fetching. A fetch that finds the head unchanged now also refreshes the dedup window, which previously never renewed against a quiet remote.
  • 11744: go: git remotes: kill the process group on cancel, bound the wait on inherited pipes.
    A cancelled DOLT_PUSH/DOLT_FETCH wedged sql-server indefinitely (#11741): exec.CommandContext's default Cancel kills only the direct git child, so the transport it spawned survives holding the write end of the pipe Run reads from, and cmd.Wait() waits on an EOF nobody will send. Set cmd.Cancel to kill the whole group -- CmdSetsid already makes git the group leader, and Windows shells out to taskkill /T -- and set cmd.WaitDelay as a backstop for a holder that left the group, such as an ssh ControlMaster. Cancellation and expired-wait errors now report ctx.Err() rather than a bare kill signal, and skip the credential hints NormalizeError appends.
  • 11743: integration-tests/mysql-client-tests/Dockerfile: Bump java_clients_build off EOL Debian bullseye to maven:3.9-eclipse-temurin-17-noble.
  • 11742: go/store/nbs: Clone table file sources which are already open on Conjoin, instead of always opening them anew.
  • 11710: Fix misleading paths in multiple .doltcfg error message
    Fix #10688
  • 11697: Report branch update, force push, and tag status on dolt push
    Dolt now prints standard status messages when pushing branches and tags to a remote database. Update display the commit transition range old...new, and when forced are explicitly marked (forced update).
    • Inspects the remote reference state before transferring chunks in actions.Push. to capture OldHash, NewHash, and existence.
    • Add PushRefResult to distinguish new branches, fast-forward, updates, forced updates, deletions, and tags.
    • Add formatPushSuccess to format push success messages.
      Fix #11352
      Close #11590
  • 11693: Name the conflicting ref in ExistingRefError
    Include the full conflicting ref in ExistingRefError messages, and give tag and workspace creation their own already-exists errors.
    Fixes #11434
    Close #11708
  • 11692: build(deps): bump google.golang.org/grpc from 1.82.1 to 1.83.1 in /go
    Bumps google.golang.org/grpc from 1.82.1 to 1.83.1.
    Release notes

    Sourced from google.golang.org/grpc's releases.

    Release 1.83.1

    Security

    • xds/rbac: Fix a bug where nested Principal or Permission rules with :scheme or grpc- prefixed header matchers were not rejected, which could cause DENY rules to fail open. (#9258)
    • xds/rbac: Fix a bug where the host header matcher was not being replaced with :authority in nested Principal or Permission rules. (#9258)
    • xds/rbac: Fix a bug where a header matcher whose name was not lowercase, such as X-Role, matched no header, which could cause DENY rules to fail open. (#9332)
    • xds/rbac: Fix a bug where a :scheme or grpc- prefixed header matcher was accepted when its name was not lowercase. (#9332)
    • xds/rbac: Fix a bug where a Host header matcher was not replaced with :authority. (#9332)

    Performance

    • transport: Restrict memory overhead of buffering small data frames. (#9331)

    Release 1.83.0

    Security

    • server: Stop reading from connections when flooded by HTTP/2 frames to mitigate resource exhaustion. The default value for this limit is 100 frames, excluding DATA and HEADERS, and may be changed by setting environment variable GRPC_GO_EXPERIMENTAL_CONTROL_BUFFER_THROTTLE_LIMIT.
    • xds/rbac: Support Metadata and RequestedServerName permissions matcher fields. If present in a DENY rule, previously these would be ignored and fail-open.
    • xds/rbac: Fix panic when parsing unsupported fields in NotRule/NotId permissions.
    • xds/rbac: Support the deprecated source_ip principal identifier by treating it as equivalent to direct_remote_ip.
    • xds: Fix panic when parsing route header matchers configured with empty exact_match, prefix_match, or suffix_match strings. (#9223)

    New Features

    • xds/googlec2p: Enable DirectPath over Interconnect support for on-premises clients via the force-xds target URI query parameter. (#9133)
    • xds: Enable xDS configuration to control which fields get propagated from ORCA backend metric reports to LRS load reports. (#9145)
    • authz: Add OnPolicyUpdate callback to FileWatcherOptions to notify when an authz policy is loaded or updated. (#9142)
    • xds: Add support for the GCP Authentication HTTP Filter, which automatically fetches and attaches GCP Service Account Identity JWT tokens to outgoing RPCs.
      • This feature can be enabled by setting environment variable GRPC_EXPERIMENTAL_XDS_GCP_AUTHENTICATION_FILTER=true. (#9119)
    • xds: Add support for xDS-based HTTP CONNECT proxies.
      • This feature can be enabled by setting environment variable GRPC_EXPERIMENTAL_XDS_HTTP_CONNECT=true. (#9151)
    • xds: Add support for contains_match in route header matchers. (#9223)

    Bug Fixes

    • credentials/alts: Fix panic when processing malformed frames by validating that the message frame length exceeds the message type field size. (#9197)
    • grpc: Fix compilation on Plan 9 targets (GOOS=plan9), broken since v1.81.0. (#9255)

    Release 1.82.2

    Security

    • server: Reject requests missing both :authority and Host headers with HTTP 400 and status Internal. (grpc/grpc-go#9365)

    ... (truncated)

    Commits

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=google.golang.org/grpc&package-manager=go_modules&previous-version=1.82.1&new-version=1.83.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/dolthub/dolt/network/alerts).
  • 11687: Fix keyless COUNT column projection
    Keyless value tuples store row cardinality before user columns. Advance non-primary-key COUNT field ordinals past that hidden value so COUNT(column) examines the requested column.
    Fixes #11521
    Depends on: go-mysql-server #3779
  • 11669: build(deps): bump mysql2 from 3.22.0 to 3.23.1 in /integration-tests/mysql-client-tests/node
    Bumps mysql2 from 3.22.0 to 3.23.1.
    Release notes

    Sourced from mysql2's releases.

    v3.23.1

    3.23.1 (2026-07-19)

    Bug Fixes

    • security: fix unbounded decompression of server-supplied compressed packets, reported by alanturing881 (7c48343)
    • parser: call typeCast for NULL values in the binary protocol (#4394) (01f1092)

    v3.23.0

    3.23.0 (2026-07-13)

    Features

    • return unsafe integers inside JSON columns as exact strings with supportBigNumbers (#4388) (a26ff14)
    • sql-escaper: add Temporal support when escaping values (#4392) (6b933f6)
    • support MariaDB data types (UUID, INET4, INET6, VECTOR, JSON) via extended type metadata; run CI against MariaDB (#4373) (5034e57)

    v3.22.6

    3.22.6 (2026-07-07)

    Bug Fixes

    • sql-escaper: resolve multi statement and expand object regressions (#4380) (1b927a9)

    v3.22.5

    3.22.5 (2026-06-06)

    Bug Fixes

    • keep 00:00:00 time for TIMESTAMP in binary protocol with dateStrings (#4327) (2af33a1)

    v3.22.4

    3.22.4 (2026-05-24)

    Bug Fixes

    v3.22.3

    3.22.3 (2026-04-24)

    Bug Fixes

    • allow resetOnRelease in connection config validation (#4278) (e72f923)

    ... (truncated)

    Changelog

    Sourced from mysql2's changelog.

    3.23.1 (2026-07-19)

    Bug Fixes

    • security: fix unbounded decompression of server-supplied compressed packets, reported by alanturing881 (7c48343)
    • parser: call typeCast for NULL values in the binary protocol (#4394) (01f1092)

    3.23.0 (2026-07-13)

    Features

    • return unsafe integers inside JSON columns as exact strings with supportBigNumbers (#4388) (a26ff14)
    • sql-escaper: add Temporal support when escaping values (#4392) (6b933f6)
    • support MariaDB data types (UUID, INET4, INET6, VECTOR, JSON) via extended type metadata; run CI against MariaDB (#4373) (5034e57)

    3.22.6 (2026-07-07)

    Bug Fixes

    • sql-escaper: resolve multi statement and expand object regressions (#4380) (1b927a9)

    3.22.5 (2026-06-06)

    Bug Fixes

    • keep 00:00:00 time for TIMESTAMP in binary protocol with dateStrings (#4327) (2af33a1)

    3.22.4 (2026-05-26)

    Bug Fixes

    3.22.3 (2026-04-24)

    Bug Fixes

    • allow resetOnRelease in connection config validation (#4278) (e72f923)

    3.22.2 (2026-04-21)

    Bug Fixes

    ... (truncated)

    Commits
    • 3de28fb chore(master): release 3.23.1 (#4408)
    • 01f1092 fix(parser): call typeCast for NULL values in the binary protocol (#3368) (#4...
    • 534c552 build(deps): bump lucide-react from 1.24.0 to 1.25.0 in /website (#4407)
    • 7c48343 Merge commit from fork
    • 3e13d7b docs: establish security charter (#4404)
    • 26c135b build(deps): bump websocket-driver from 0.7.4 to 0.7.5 in /website (#4403)
    • f86cfb1 chore(master): release 3.23.0 (#4387)
    • 6316492 build(deps): bump the docusaurus group in /website with 2 updates (#4396)
    • 6b933f6 feat(sql-escaper): add Temporal support when escaping values (#4392)
    • 457c316 build(deps): bump lucide-react from 1.23.0 to 1.24.0 in /website (#4391)
    • Additional commits viewable in compare view
    Maintainer changes

    This version was pushed to npm by GitHub Actions, a new releaser for mysql2 since your current version.


    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=mysql2&package-manager=npm_and_yarn&previous-version=3.22.0&new-version=3.23.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/dolthub/dolt/network/alerts).
  • 11668: Probe pending unique key conflicts
    Add writer support for checking pending unique-key conflicts before inserting a row. This gives the query engine the storage-layer information needed to implement PostgreSQL conflict handling without suppressing unrelated errors.
    Part of dolthub/doltgresql#3091
    Depends on: dolthub/go-mysql-server#3758
  • 11664: build(deps): bump github.com/apache/thrift from 0.23.0 to 0.24.0 in /go
    Bumps github.com/apache/thrift from 0.23.0 to 0.24.0.
    Release notes

    Sourced from github.com/apache/thrift's releases.

    Version 0.24.0

    Please head over to the official release download source: http://thrift.apache.org/download

    The assets listed below are added by Github based on the release tag and they will therefore not match the checkums published on the Thrift project website.

    Changelog

    Sourced from github.com/apache/thrift's changelog.

    0.24.0

    Build Process

    • THRIFT-5000 - Thrift docker image publish on releases
    • THRIFT-5855 - Improve fuzzing support
    • THRIFT-5952 - Optimize MSVC Docker image to reduce size and speed up CI
    • THRIFT-5965 - Add zizmor for GitHub Actions workflows security analysis
    • THRIFT-5967 - Refactor SCA GitHub workflow for better extensibility
    • THRIFT-5973 - Automated CHANGELOG creation
    • THRIFT-6002 - Add netstd codegen test script and GitHub Actions CI matrix job (.NET 8/9/10)
    • THRIFT-6003 - Add Haxe codegen test script and GitHub Actions CI job
    • THRIFT-6077 - improve CHANGES.md generator section assignment
    • #3613 - Bump rubygems/release-gem from 1.2.0 to 1.4.0
    • #3616 - Bump ruby/setup-ruby from 1.310.0 to 1.314.0
    • #3617 - Bump rust-lang/crates-io-auth-action from 1.0.4 to 1.0.5
    • #3618 - Bump jvm from 2.3.21 to 2.4.0 in /lib/kotlin
    • #3619 - Bump com.diffplug.spotless from 8.5.1 to 8.7.0 in /lib/kotlin
    • #3615 - Bump actions/setup-go from 6.4.0 to 6.5.0
    • THRIFT-6092 - fix off-by-ten header bounds check in readHeaderFormat
    • #3593 - Bump shell-quote from 1.7.3 to 1.8.4 in /lib/js
    • #3591 - Bump shell-quote from 1.7.3 to 1.8.4 in /lib/ts
    • #3589 - Update MSVC CI to windows-2025-vs2026 runner and start Docker service explicitly
    • #3581 - Run the Haxe library unit tests (neko) in CI
    • #3576 - Bump ruby/setup-ruby from 1.306.0 to 1.310.0
    • #3575 - Bump zizmorcore/zizmor-action from 0.5.3 to 0.5.6
    • #3577 - Bump actions/setup-dotnet from 4.3.1 to 5.2.0
    • #3574 - Bump com.diffplug.spotless from 8.4.0 to 8.5.1 in /lib/kotlin
    • #3572 - Bump org.jetbrains.kotlinx:kotlinx-coroutines-jdk8 in /lib/kotlin
    • #3578 - Harden the MSVC build workflow against transient Docker daemon unavailability
    • #3564 - Enable Copilot reviews
    • #3565 - Allow CI to fail on ruby-head
    • #3517 - Bump uuid and nyc
    • #3513 - Remove Ruby known failures from cross-test list
    • #3501 - Fix netstd CI .NET SDK setup
    • #3496 - Add generator paths to mergeable labels
    • #3430 - Updated projects settings in .asf.yaml (features, merge buttons, Jira autolinking)
    • #3487 - Update to setup-php 2.37.1
    • #3471 - Update build.yml
    • #3461 - Migration *.sln to *.slnx (except c++ libs)
    • #3454 - Fixing bundler on ruby-head build
    • #3440 - Removed deprecated 'publish' workflow
    • #3439 - Pin all actions to a specific SHA consistently
    • #3437 - Validate GitHub workflows against the ASF allowlist
    • #3433 - Pin actions/upload-artifact to a specific SHA consistently
    • #3433 - Bump actions/upload-artifact from 7.0.0 to 7.0.1
    • #3434 - Bump jvm from 2.3.20 to 2.3.21 in /lib/kotlin
    • #3423 - Bump uuid from 13.0.0 to 14.0.0
    • #3424 - Bump json from 2.18.1 to 2.19.2 in /lib/rb
    • #3404 - Cleanup Adobe Flex SDK installation following AS3 library removal

    ... (truncated)

    Commits
    • 6d2ec95 Tune make dist: drop generated/build artifacts, add missing sources
    • 4f303a2 Strip node_modules from dist to fix make dist symlink recursion
    • 270b81e Fix stale EXTRA_DIST references that broke make dist
    • c1df044 Fix Go and Rust version detection for multi-digit version numbers
    • 342a803 updated CHANGES.md
    • 0d66913 bump doap & debian changelog
    • f961cdb fix info-header string bound check in THeaderTransport::readString
    • 0ab16e3 enforce max_string_size on non-strict binary message name
    • 817e0f1 Bump rubygems/release-gem from 1.2.0 to 1.4.0
    • 6dfb0b2 THRIFT-6073: Allow injecting external SSL_CTX into C++ SSLContext
    • Additional commits viewable in compare view

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=github.com/apache/thrift&package-manager=go_modules&previous-version=0.23.0&new-version=0.24.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/dolthub/dolt/network/alerts).
  • 11663: Add Doltgres transaction lifecycle callback
    Adds Doltgres transaction lifecycle notifications required by dolthub/doltgresql#3256.
  • 11482: SECURITY.md: Update documentation to reflect this project's stance on panics as security issues.
  • 11359: Enable replication tests on MacOS
    DNS lookups on GitHub MacOS runners are very slow, which makes some of these test expectations fail. localhost resolves through DNS on MacOS but not on Ubuntu, which doesn't have this problem. This PR changes all localhost definitions in the test to the loopback address instead.
  • 11193: -C flag
    Implements -C with behavior matching git.
    Fixes #11720

go-mysql-server

  • 3821: Fix correlated subqueries in window sorting
    Window execution appended each row's original position directly to the SQL row before evaluating partition and ordering expressions. Correlated scalar subqueries could observe that synthetic field and produce incorrect window sort keys.
    Track original positions in a parallel slice that is swapped alongside rows and cached sort keys, keeping bookkeeping outside the SQL-visible row. Add the reported regression and exact row-to-position invariants for reordered partitions, NULL keys, and stable duplicate keys.
    Fixes #11419
    Fixes #11460

  • 3816: Make sure window framer end is never after the partition start
    fixes #11465

  • 3813: Fix merging nondeterministic window expressions
    The window planner currently deduplicates identical expressions by their rendered SQL. Preserve that optimization for deterministic expressions, but emit separate window outputs when an expression tree contains a nondeterministic function.
    Evaluate each source-row value once per partition for FIRST_VALUE and LAST_VALUE, including NULL values and changing frame boundaries. Adds engine and focused unit regressions for both planner and executor behavior.
    Fixes #11499

  • 3811: Return error for standalone interval expressions
    Standalone INTERVAL expressions can reach Interval.Eval, whose placeholder implementation panics. Return the shared invalid-use error instead, centralize that error in the sql package, and cover the public query behavior with an engine regression.
    Fixes #11452

  • 3810: Fix windows over grouped inputs
    Build grouped window evaluation after aggregation and HAVING, preserving the grouped fields and aggregate results needed by window definitions and derived aliases. Allow aggregate and window expressions to coexist regardless of projection order while continuing to reject windows nested inside aggregate arguments. Also close the wrapped child iterator when a window iterator closes. Adds coverage for grouping, filtering, ordering, NULL groups, mixed aggregate/window aliases, invalid nesting, and iterator cleanup.
    Fixes #11500

  • 3809: Count nonnumeric strings as non-null in window AVG and SUM
    Fix #11470

  • 3804: Omit INVISIBLE columns projections from wildcard projections and default inserts
    Fix #11551
    Blocked by dolthub/vitess#487

  • 3802: Add non-window CURRENT_TIME precision regression test
    Adds non-window engine coverage for CURRENT_TIME precision.
    Fixes #11543

  • 3800: Validate set ops for aggregations in ORDER BY clause
    fixes #11462

  • 3798: Fix count distinct tuple hashing
    Fix #11562

  • 3796: Fix constant window expression partitions
    Constant-only window expressions can leave zero-width projected rows. Partition and peer-group detection treated those rows as uninitialized, splitting every input row into its own partition or peer group.
    Use nil as the uninitialized-row sentinel and treat an absent ORDER BY as one peer group. Add current script-suite coverage for constant aggregate, partition, and ordering expressions, validated against MySQL 8.0.45 and PostgreSQL 15.17.
    This adapts and supersedes the core fix contributed by @vishnujayvel in #3684. Credit also goes to @wanteatfruit for the report.
    Fixes #11409

  • 3795: Fix correlated subqueries alongside window functions
    Window planning preserves ordinary projection dependencies, but did not preserve outer columns referenced only through a correlated scalar subquery. This left the subquery reading a stale post-window ordinal and silently producing empty-match results.
    Carry correlated outer columns through the window node using the same column-ID dependency handling already used by aggregation planning. Add engine regressions for correlated COUNT and SUM alongside two different window functions.
    Fixes #11478

  • 3794: Return ROW_NUMBER values as INT64
    Aligns ROW_NUMBER runtime values with its declared INT64 type.
    Fixes #11420

  • 3793: Support TIME values in HOUR
    Supports valid time-only values in the HOUR function.
    Fixes #11512

  • 3792: Mark FIRST_VALUE results nullable
    Marks FIRST_VALUE nullable because legal window frames may be empty.
    Fixes #11471

  • 3791: Distinguish window frame ending bounds
    Preserves distinct ending bounds when identifying sibling window frames.
    Fixes #11395

  • 3790: Enable bitwise window aggregates
    Enables BIT_AND, BIT_OR, and BIT_XOR as window aggregates.
    Fixes #11390

  • 3789: Fix tuple IN comparisons containing NULL
    Track scalar NULL values separately from tuples that contain NULL when building hash-optimized IN expressions. Definite non-NULL matches continue to use constant-time hash lookup, while ambiguous tuple-NULL misses fall back to componentwise three-valued comparison.
    Add unit and engine coverage that distinguishes an UNKNOWN partial tuple match from a definite FALSE mismatch and verifies nullable tuple metadata.
    Fixes #11480

  • 3788: Return NULL for all-NULL window sums
    Returns NULL when a window SUM frame contains no non-NULL values.
    Fixes #11410

  • 3786: Include bucket count in NTILE identity
    Keeps sibling NTILE expressions with different bucket counts distinct.
    Fixes #11466

  • 3785: Preserve literal case in window expression identity
    Preserves case-sensitive literals when deduplicating window expressions.
    Fixes #11497

  • 3784: Preserve LIKE escape clauses in window expressions
    Preserves distinct LIKE escape clauses when identifying window expressions.
    Fixes #11498

  • 3783: Fix CURRENT_TIME precision in window expressions
    Fixes CURRENT_TIME precision handling in cloned window expressions.
    Fixes #11543

  • 3779: enginetest: cover keyless count column projection
    Adds shared engine coverage for COUNT(column) on nullable keyless columns, including duplicate rows.
    Part of dolthub/dolt#11521

  • 3778: Add MAKEDATE function
    Fix #11595

  • 3777: String inputs to integer division should be treated as decimals to match MySQL
    This is necessary to return the correct results. Because integer division takes the floor of the result, floating point error on a div operation that appears to divide evenly might even up returning a value one lower than expected.
    This PR also fixes a related issue, where a division operation that converts its input to a decimal will silently convert the input to 0 when the input must be truncated, without emitting a warning. This changes the behavior to match MySQL, producing a result from the truncated input and emitting a warning.

  • 3776: Warn when removing NO_ZERO_IN_DATE from @@SQL_MODE
    Because we don't properly support 0 Month and 0 Day for DATE/DATETIME types, we throw a warning when removing the NO_ZERO_IN_DATE sql_mode and behave as if it were enabled.

  • 3775: fix: change INFORMATION_SCHEMA default collation from utf8mb3 to utf8mb4
    Changes INFORMATION_SCHEMA's default collation from utf8mb3 to utf8mb4; companion Dolt PR: #11680.

  • 3774: Preserve empty strings in GROUP_CONCAT
    Fixes GROUP_CONCAT to preserve empty non-NULL strings while continuing to skip NULL values.
    Fixes #11561
    Fixes #11427

  • 3773: Fix TIME_FORMAT hour specifiers
    Fixes TIME_FORMAT to preserve extended hours and support the non-padded hour specifier.
    Fixes #11413

  • 3772: Support extended hours in TIME_TO_SEC
    Fixes TIME_TO_SEC to preserve valid TIME values with more than 24 hours.
    Fixes #11560

  • 3771: Apply AM and PM in STR_TO_DATE
    Fixes STR_TO_DATE to apply AM and PM markers to 12-hour times.
    Fixes #11544

  • 3770: Fix INET_NTOA for unsigned IPv4 values
    Fixes INET_NTOA conversion for IPv4 values above the signed 32-bit range.
    Fixes #11510

  • 3769: Fix decimal CEIL and FLOOR input mutation
    Decimal CEIL and FLOOR now write their results to fresh values instead of mutating their inputs. This prevents shared decimal results, including window aggregate outputs, from being corrupted during projection.
    Adds direct input-immutability coverage and an engine regression for positive and negative decimal window peers.
    Fixes #11542

  • 3768: Match MySQL default SQL_MODE
    This PR changes the default SQL_MODE match MySQL's default, but does not change any query behavior associated with the new default modes.
    Additionally, throws warnings for invalid combinations of "strict" modes.

  • 3766: Fix recursive CTE result type coercion
    Recursive CTEs establish their output schema from the non-recursive term, but the executor previously hashed, buffered, and returned raw child values. This allowed a recursive boolean true to remain distinct from an existing integer 1 under UNION DISTINCT.
    Coerce the CTE-result suffix to the established schema before deduplication and buffering while preserving any correlated outer-row prefix. Add the reported windowed recursive UNION regression. Full GMS sql and enginetest suites, focused Dolt normal and prepared engine tests, MySQL 8.0.45 differential validation, and diff checks pass.
    Fixes #11563

  • 3765: Reject ABS of minimum BIGINT
    Returns an out-of-range error for ABS of the minimum signed BIGINT.
    Fixes #11412

  • 3764: Preserve non-ASCII Soundex initial case
    Preserves the case of non-ASCII initial characters in SOUNDEX results.
    Fixes #11546

  • 3763: Support binary values in CRC32
    Adds CRC32 support for binary string values.
    Fixes #11507

  • 3762: Allow REGEXP_REPLACE position after source
    Allows REGEXP_REPLACE to start immediately after the source string.
    Fixes #11547

  • 3761: Fix STR_TO_DATE NULL propagation
    Propagates NULL arguments through STR_TO_DATE.
    Fixes #11509

  • 3760: Fix aggregate reuse across scalar subquery scopes
    Prevents aggregate functions in scalar subqueries from reusing matching aggregate references from an outer query scope. Aggregate deduplication now considers only the current grouping scope, preserving same-query-block reuse while keeping subqueries independent.
    Adds regression coverage for MAX, MIN, SUM, COUNT, and AVG across numeric and datetime values.
    Fixes #11638

  • 3758: Limit PostgreSQL conflict ignores to duplicate keys
    Add a row-inserter contract for probing unique-key conflicts and use it to implement targetless ON CONFLICT DO NOTHING semantics. Duplicate-key conflicts are skipped while foreign-key, check, and NOT NULL errors remain errors, preserving the existing MySQL INSERT IGNORE path.
    Part of dolthub/doltgresql#3091
    Depends on: dolthub/vitess#485

  • 3753: Prevent insert expression slice aliasing
    Allocate an independent result slice in InsertInto.Expressions() instead of appending checks into backing storage owned by OnDupExprs.
    Analyzer index assignment can store duplicate-update, predicate, and RETURNING expressions in slices backed by the same array. Reusing that capacity while enumerating expressions can overwrite the predicate or RETURNING expressions before execution. The regression test verifies both the complete expression order and that enumeration leaves the insert plan unchanged.

  • 3748: sql.ValueRows: Correctly handle NULLs in comparisons.

    This fixes a correctness issue running a query against a Dolt MySQL server:
    The test currently passes prior to this PR. This is because the test harness needs to be updated to more accurately reflect running against a Dolt MySQL server, but this currently causes other tests to fail. Instead, this change was tested locally to with the new test harness, and I confirmed that this PR fixes some of the failing tests and does not introduce any new failures.

  • 3723: Refactor and improve DATE parsing and SQL_MODE handling
    This PR improves support for parsing various strings into DATETIME.
    There are a few improvements to converting DATETIME types to other types, but just enough to get exist tests to pass. Improvements to that area will come in future PRs.
    Warnings have also been improved to match MySQL, but we are currently ignoring the delimiter ones.
    Dolt bump: #11584
    Changes:

    • Default SQL_MODE matches MySQL.
    • The time.Time package does not fully support ZERO_IN_DATE, so that SQL_MODE isn't supported for now.
    • Refactor datetimeType.Convert()
    • Tests
      Fixes:
    • #11414
      Possibly a breaking change, because of SQL_MODE changes.
  • 3675: sql/types: trim whitespace before parsing date/datetime strings
    MySQL trims leading and trailing whitespace before parsing a string
    literal into a DATE/DATETIME/TIMESTAMP value. datetimeType.ConvertWithoutRangeCheck
    (sql/types/datetime.go) did not, so passing a whitespace-padded string
    through CAST(... AS DATE) or DATE(...) caused every layout in
    parseDatetime's time.Parse attempts to fail, and the caller silently
    converted that parse failure into NULL (with a 1292 warning from the
    DATE() path).
    Fixes #11414, reported by @Yibo-Dong.

    SELECT CAST('2024-01-01' AS DATE) AS plain_date,
    CAST(' 2024-01-01 ' AS DATE) AS spaced_date,
    CAST(CONCAT(' ', '2024-01-01') AS DATE) AS leading_date,
    DATE(' 2024-01-01 ') AS date_func;

    Before this change, spaced_date, leading_date, and date_func were
    all NULL; MySQL returns 2024-01-01 for all four columns.

    Root cause

    ConvertWithoutRangeCheck's case string: branch (sql/types/datetime.go)
    passed the raw string straight into IsZeroTimestampStr and parseDatetime.
    None of the fixed layouts in TimestampDatetimeLayouts that parseDatetime
    tries via time.Parse tolerate leading/trailing whitespace, so parsing
    failed and ConvertWithoutRangeCheck returned ErrConvertingToTime. Both
    CAST(... AS DATE/DATETIME/TIMESTAMP) (via datetimeType.Convert ->
    ConvertToTime -> ConvertWithoutRangeCheck) and the DATE() function
    (via its getDate helper, which calls the same ConvertWithoutRangeCheck)
    go through this one function, so a single fix covers both.

    Fix

    Trim the string at the top of the case string: branch, before the
    zero-timestamp check and before parseDatetime, so downstream parsing
    behaves the same as MySQL. Uses strings.Trim(value, " \t\n\r\v\f")
    rather than strings.TrimSpace deliberately: MySQL's my_isspace only
    treats ASCII whitespace as significant for this purpose, while Go's
    unicode.IsSpace (what TrimSpace uses) also strips Unicode whitespace
    (e.g. U+00A0 NO-BREAK SPACE) that MySQL does not trim and would reject.

    Test plan

    • Added padded-string cases to the existing TestDatetimeConvert table
      in sql/types/datetime_test.go, matching the repo's own test-table
      style for this function: Date with leading (" 2010-06-03"),
      trailing ("2010-06-03 "), and surrounding (" 2010-06-03 ",
      "\t2010-06-03\n") whitespace; a DatetimeMaxPrecision case with a
      fractional-second value padded on both sides; and a padded zero-date
      case (" 0000-00-00 ") to pin the trim-before-IsZeroTimestampStr
      ordering.
    • Added an end-to-end enginetest query case (enginetest/queries/queries.go)
      reproducing the exact issue repro: CAST(' 2024-01-01 ' AS DATE),
      CAST(CONCAT(' ', '2024-01-01') AS DATE), and DATE(' 2024-01-01 '),
      all asserting the correct (non-NULL) date.
    • Verified all 6 new TestDatetimeConvert cases and the new TestQueries
      case fail without the fix, then pass with it (reverted the fix,
      confirmed 6 --- FAIL: lines plus the query-test failure, restored the
      fix, confirmed all pass).
      Note on the trailing-only case ("2010-06-03 "): the value MySQL
      expects is recoverable even pre-fix, because parseDatetime's
      findDatetimeEnd loop shrinks the parse window and finds a match on
      "2010-06-03". But that path also returns a non-nil ErrTruncatedIncorrect
      alongside the (correct) value, and the test harness's
      require.NoError(t, err) treats that as a failure — so this case is
      genuinely red pre-fix under the existing assertion style, not just
      wrong-by-value. Confirmed by isolating this single case against the
      pre-fix code with the real test harness (not a value-only probe).
      Commands run (from a go-mysql-server worktree, CGO_ENABLED=0, -tags gms_pure_go to avoid the icu4c/cgo regex dependency, matching how this
      package already gates cgo-free builds):
    go test -tags gms_pure_go ./sql/types/... -run TestDatetimeConvert -v
    go test -tags gms_pure_go ./sql/types/... -count=1 -timeout 10m
    go test -tags gms_pure_go ./enginetest/... -run "TestQueries$" -timeout 20m
    gofmt -l sql/types/datetime.go sql/types/datetime_test.go enginetest/queries/queries.go
    go vet -tags gms_pure_go ./sql/types/...
    

    All green:

    ok  	github.com/dolthub/go-mysql-server/sql/types	0.649s
    ok  	github.com/dolthub/go-mysql-server/sql/types/jsontests	1.196s
    ok  	github.com/dolthub/go-mysql-server/enginetest	12.393s
    

    gofmt and go vet report no issues on the changed files.

  • 3630: server/listener.go: Fix a race on listener shutdown where an Accept goroutine could try to send on a closed conns channel.

  • 3625: Advertise binary charset for BIT result columns
    MySQL marks BIT result columns with the binary charset (63) in the wire protocol. We were sending utf8mb4 (255), so clients like the mysql CLI printed BIT values as raw bytes instead of hex.

    • schemaToFields now sets the binary charset for BIT columns
      Block #11306

vitess

  • 491: Added NULLs ordering
    This implements NULL ordering (nulls can be set to be first or last)
    Related PRs:
  • 489: Support nested parentheses around subqueries, CTEs, and derived tables
    • Add paren_query_expression for CTEs and derived tables
    • Add paren_subquery for EXISTS
    • Add PREFER_PARENTHESES precedence token to disambiguate lookahead on shift/reduce conflicts.
      Fix #8058
      Fix #11722
      Block dolthub/go-mysql-server#3806
  • 488: Support directed TRIM without removal string pattern
    Fix #11511
    Block dolthub/go-mysql-server#3805
  • 486: Suppress idle connection timeout errors
    Suppress expected error logging when sql-server reaps idle connections after their read deadline. Timeout identity remains available to shared packet-reader callers; only the server command-loop error log is suppressed.
    Fixes #11658
  • 485: Add insert conflict target to AST
    Expose the parsed INSERT conflict target so downstream query engines can distinguish targetless ON CONFLICT DO NOTHING from targeted conflict handling.
    Part of dolthub/doltgresql#3091
  • 484: Disallow star expressions in FIRST_VALUE and LAST_VALUE window functions
    Fix queries containing FIRST_VALUE(*) or LAST_VALUE(*) to not be accepted by the MySQL parser.
  • 483: Add conditional duplicate update metadata
    Add insert AST metadata for a duplicate-update predicate and single-row affected-count semantics. This lets PostgreSQL dialect translation carry ON CONFLICT DO UPDATE ... WHERE behavior through the shared parser boundary.
    Adds formatting and AST-walk coverage for the predicate.
    Supports dolthub/doltgresql#3235.

Closed Issues

  • 11434: ExistingRefError.Error() omits the ref name and type
  • 11500: Dolt reaches an internal error on grouped one-column input.
  • 11470: Window AVG drops a non-NULL nonnumeric VARCHAR
  • 11720: Global-args gate rejects -C on the nine unmigrated commands, which is the case -C exists for
  • 11460: Dolt forms incorrect RANGE boundaries for a correlated computed order key
  • 11419: Dolt misorders a window when ORDER BY contains a correlated scalar subquery.
  • 11465: MIN panics on a legal empty leading ROWS frame
  • 11425: Dolt reports an internal row-index bug for invalid NTILE(column).
  • 8580: Error importing mysqldump with incorrect string value
  • 9534: Panic or no results for information_schema query
  • 11722: EXISTS ((subquery)) fails to parse, while IN ((subquery)) and scalar ((subquery)) succeed
  • 11452: Dolt panics with Interval.Evalwithin standalone INTERVAL expression
  • 8058: Double parentheses ie. ((...)) do not parse in Dolt
  • 11721: Nine commands reject --data-dir, so they cannot be run against a database from outside its directory
  • 11545: Dolt swallows a child-expression evaluation error in SUM
  • 11499: Identical nondeterministic window expressions are incorrectly merged
  • 11559: Dolt loses expression-index metadata in a windowed information_schema projection
  • 11551: Dolt exposes a user INVISIBLE column through SELECT *
  • 11511: Windowed TRIM(LEADING FROM str) is rejected by the parser
  • 11562: Dolt collides distinct text tuples in COUNT(DISTINCT ...) before a window wrapper
  • 10688: dolt sql auto-creates .doltcfg/privileges.db in CWD, causing multiple .doltcfg errors
  • 11512: Windowed HOUR() returns NULL for a valid time-only value
  • 11420: Dolt rejects unary negation of a ROW_NUMBER() window result.
  • 11497: Window expression de-duplication folds case-sensitive literals
  • 11352: dolt push prints '[new branch]' for every successful push of an existing branch
  • 11395: Dolt sibling window aggregates with different explicit frames reuse the wrong frame.
  • 11410: Dolt window SUM returns 0 for an all-NULL frame.
  • 11471: Empty value-window frame is incorrectly non-nullable in CTAS
  • 11390: Dolt supports BIT_AND, BIT_OR, and BIT_XOR as ordinary aggregates, but the same functions fail when used as window aggregates.
  • 11462: Final window ORDER BY on a set operation panics
  • 11466: Dolt sibling NTILE expressions reuse the first bucket count
  • 11498: Dolt window expression omits LIKE ESCAPE
  • 11543: Dolt raises an internal child-count error for CURRENT_TIME(precision)
  • 11409: COUNT(*) OVER () returns 1 instead of the partition size
  • 11478: Wrong results: a window function makes a correlated scalar subquery in the same SELECT collapse to its empty-match value (0/NULL)
  • 11521: COUNT(<column>) counts the wrong column on dolt sql-server
  • 11480: Wrong results: row-value (tuple) IN treats NULL = NULL as TRUE (three-valued-logic violation)
  • 11473: WHERE <col> <= <expr> and >= return rows where IS NULL on dolt sql-server
  • 11581: DOLT_RESET('--hard') permanently returns "context canceled" on a fraction of freshly created databases (regression in 2.3.0)
  • 11510: INET_NTOA corrupts valid IPv4 values above signed 32-bit
  • 11413: Dolt TIME_FORMAT mishandles hour format specifiers for TIME values.
  • 11595: Feature Request: MAKEDATE function
  • 11427: Dolt GROUP_CONCAT(expr1, expr2, ...) ignores later expressions.
  • 11561: Dolt skips empty strings in GROUP_CONCAT before a window wrapper
  • 11560: Dolt returns NULL for a 25-hour TIME in a windowed TIME_TO_SEC call
  • 11563: Dolt keeps boolean true separate from integer 1 in recursive UNION DISTINCT
  • 11542: CEIL/FLOOR of a windowed DECIMAL returns unexpected results
  • 11544: Dolt ignores the PM marker in STR_TO_DATE
  • 11414: Dolt converts valid date strings with leading or trailing whitespace to NULL
  • 11546: Dolt uppercases a lowercase non-ASCII initial in SOUNDEX
  • 11638: Wrong results: a scalar subquery's aggregate returns the OUTER query's aggregate when both use the same aggregate expression on the same table
  • 11412: Dolt returns a negative value for ABS(-9223372036854775808).
  • 11547: Dolt rejects a legal REGEXP_REPLACE position after the source
  • 11507: CRC32 rejects a legal binary value produced by a window
  • 11648: git-remote: dolt_remote_info under refs/heads/ makes concurrent git fetch fail with "incorrect old value provided"
  • 11509: STR_TO_DATE() errors instead of propagating NULL
  • 11589: Incorrect NULL filtering with nullable projection and ORDER BY
  • 11658: sql-server logs expected idle-connection reaps at ERROR (6565 lines/day on a healthy server)

Don't miss a new dolt release

NewReleases is sending notifications on new releases.