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 owngit fetchof 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 totaskkill /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 rangeold...new, and when forced are explicitly marked(forced update).- Inspects the remote reference state before transferring chunks in
actions.Push. to captureOldHash,NewHash, and existence. - Add
PushRefResultto distinguish new branches, fast-forward, updates, forced updates, deletions, and tags. - Add
formatPushSuccessto format push success messages.
Fix #11352
Close #11590
- Inspects the remote reference state before transferring chunks in
- 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
PrincipalorPermissionrules with:schemeorgrpc-prefixed header matchers were not rejected, which could cause DENY rules to fail open. (#9258)- Special Thanks:
@nvxbug
- Special Thanks:
- xds/rbac: Fix a bug where the
hostheader matcher was not being replaced with:authorityin nestedPrincipalorPermissionrules. (#9258)- Special Thanks:
@nvxbug
- Special Thanks:
- 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)- Special Thanks:
@alimony
- Special Thanks:
- xds/rbac: Fix a bug where a
:schemeorgrpc-prefixed header matcher was accepted when its name was not lowercase. (#9332)- Special Thanks:
@alimony
- Special Thanks:
- xds/rbac: Fix a bug where a
Hostheader matcher was not replaced with:authority. (#9332)- Special Thanks:
@alimony
- Special Thanks:
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
MetadataandRequestedServerNamepermissions 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/NotIdpermissions. - xds/rbac: Support the deprecated
source_ipprincipal identifier by treating it as equivalent todirect_remote_ip. - xds: Fix panic when parsing route header matchers configured with empty
exact_match,prefix_match, orsuffix_matchstrings. (#9223)
New Features
- xds/googlec2p: Enable DirectPath over Interconnect support for on-premises clients via the
force-xdstarget 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
OnPolicyUpdatecallback toFileWatcherOptionsto notify when an authz policy is loaded or updated. (#9142)- Special Thanks:
@hnefatl
- Special Thanks:
- 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)
- This feature can be enabled by setting environment variable
- 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)
- This feature can be enabled by setting environment variable
- xds: Add support for
contains_matchin 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)- Special Thanks:
@Yusufihsangorgel
- Special Thanks:
Release 1.82.2
Security
- server: Reject requests missing both
:authorityandHostheaders with HTTP 400 and statusInternal. (grpc/grpc-go#9365)
... (truncated)
Commits
1550d9eChange version to 1.83.1 (#9336)ebba6f3Cherry-pick #9258 and #9332 into v1.83.x (#9335)8cfeca0Cherry-pick #9331 to v1.83.x (#9333)dec6951Change version to 1.83.1-dev (#9229)4c226daChange version to 1.83.0 (#9228)c198988Cherrypick 9223 into v1.83.x (#9279)8ce3ebfCherrypick PR 9255 into v1.83.x (#9263)e393849Cherry-pick recent changes from master (#9240)2a112a8authz: add onPolicyUpdate callback to authz file watcher (#9142)1a80fcavet: adds a check to disallow usage of regex.Compile in xDS code (#9216)- Additional commits viewable in compare view
[](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). - xds/rbac: Fix a bug where nested
- 11687: Fix keyless COUNT column projection
Keyless value tuples store row cardinality before user columns. Advance non-primary-keyCOUNTfield ordinals past that hidden value soCOUNT(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
v3.22.5
3.22.5 (2026-06-06)
Bug Fixes
v3.22.4
3.22.4 (2026-05-24)
Bug Fixes
v3.22.3
3.22.3 (2026-04-24)
Bug Fixes
... (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
3.22.5 (2026-06-06)
Bug Fixes
3.22.4 (2026-05-26)
Bug Fixes
3.22.3 (2026-04-24)
Bug Fixes
3.22.2 (2026-04-21)
Bug Fixes
... (truncated)
Commits
3de28fbchore(master): release 3.23.1 (#4408)01f1092fix(parser): call typeCast for NULL values in the binary protocol (#3368) (#4...534c552build(deps): bump lucide-react from 1.24.0 to 1.25.0 in /website (#4407)7c48343Merge commit from fork3e13d7bdocs: establish security charter (#4404)26c135bbuild(deps): bump websocket-driver from 0.7.4 to 0.7.5 in /website (#4403)f86cfb1chore(master): release 3.23.0 (#4387)6316492build(deps): bump the docusaurus group in /website with 2 updates (#4396)6b933f6feat(sql-escaper): add Temporal support when escaping values (#4392)457c316build(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.
[](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
6d2ec95Tune make dist: drop generated/build artifacts, add missing sources4f303a2Strip node_modules from dist to fix make dist symlink recursion270b81eFix stale EXTRA_DIST references that broke make distc1df044Fix Go and Rust version detection for multi-digit version numbers342a803updated CHANGES.md0d66913bump doap & debian changelogf961cdbfix info-header string bound check in THeaderTransport::readString0ab16e3enforce max_string_size on non-strict binary message name817e0f1Bump rubygems/release-gem from 1.2.0 to 1.4.06dfb0b2THRIFT-6073: Allow injecting external SSL_CTX into C++ SSLContext- Additional commits viewable in compare view
[](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.localhostresolves through DNS on MacOS but not on Ubuntu, which doesn't have this problem. This PR changes alllocalhostdefinitions 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 forFIRST_VALUEandLAST_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
StandaloneINTERVALexpressions can reachInterval.Eval, whose placeholder implementation panics. Return the shared invalid-use error instead, centralize that error in thesqlpackage, 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
INVISIBLEcolumns 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 BYclause
fixes #11462 -
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 absentORDER BYas 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 correlatedCOUNTandSUMalongside 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 forCOUNT(column)on nullable keyless columns, including duplicate rows.
Part of dolthub/dolt#11521 -
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_DATEfrom@@SQL_MODE
Because we don't properly support 0 Month and 0 Day for DATE/DATETIME types, we throw a warning when removing theNO_ZERO_IN_DATEsql_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
DecimalCEILandFLOORnow 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 defaultSQL_MODEmatch 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 inInsertInto.Expressions()instead of appending checks into backing storage owned byOnDupExprs.
Analyzer index assignment can store duplicate-update, predicate, andRETURNINGexpressions in slices backed by the same array. Reusing that capacity while enumerating expressions can overwrite the predicate orRETURNINGexpressions 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
DATEparsing andSQL_MODEhandling
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_MODEmatches MySQL. - The
time.Timepackage does not fully supportZERO_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.
- Default
-
3675: sql/types: trim whitespace before parsing date/datetime strings
MySQL trims leading and trailing whitespace before parsing a string
literal into aDATE/DATETIME/TIMESTAMPvalue.datetimeType.ConvertWithoutRangeCheck
(sql/types/datetime.go) did not, so passing a whitespace-padded string
throughCAST(... AS DATE)orDATE(...)caused every layout in
parseDatetime'stime.Parseattempts to fail, and the caller silently
converted that parse failure intoNULL(with a1292warning 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, anddate_funcwere
allNULL; MySQL returns2024-01-01for all four columns.Root cause
ConvertWithoutRangeCheck'scase string:branch (sql/types/datetime.go)
passed the raw string straight intoIsZeroTimestampStrandparseDatetime.
None of the fixed layouts inTimestampDatetimeLayoutsthatparseDatetime
tries viatime.Parsetolerate leading/trailing whitespace, so parsing
failed andConvertWithoutRangeCheckreturnedErrConvertingToTime. Both
CAST(... AS DATE/DATETIME/TIMESTAMP)(viadatetimeType.Convert->
ConvertToTime->ConvertWithoutRangeCheck) and theDATE()function
(via itsgetDatehelper, which calls the sameConvertWithoutRangeCheck)
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 beforeparseDatetime, so downstream parsing
behaves the same as MySQL. Usesstrings.Trim(value, " \t\n\r\v\f")
rather thanstrings.TrimSpacedeliberately: MySQL'smy_isspaceonly
treats ASCII whitespace as significant for this purpose, while Go's
unicode.IsSpace(whatTrimSpaceuses) 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
TestDatetimeConverttable
insql/types/datetime_test.go, matching the repo's own test-table
style for this function:Datewith leading (" 2010-06-03"),
trailing ("2010-06-03 "), and surrounding (" 2010-06-03 ",
"\t2010-06-03\n") whitespace; aDatetimeMaxPrecisioncase 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
enginetestquery case (enginetest/queries/queries.go)
reproducing the exact issue repro:CAST(' 2024-01-01 ' AS DATE),
CAST(CONCAT(' ', '2024-01-01') AS DATE), andDATE(' 2024-01-01 '),
all asserting the correct (non-NULL) date. - Verified all 6 new
TestDatetimeConvertcases and the newTestQueries
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, becauseparseDatetime's
findDatetimeEndloop shrinks the parse window and finds a match on
"2010-06-03". But that path also returns a non-nilErrTruncatedIncorrect
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_goto 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.393sgofmtandgo vetreport no issues on the changed files. - Added padded-string cases to the existing
-
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
BITresult columns
MySQL marksBITresult columns with the binary charset (63) in the wire protocol. We were sendingutf8mb4(255), so clients like themysqlCLI printedBITvalues as raw bytes instead of hex.schemaToFieldsnow sets the binary charset forBITcolumns
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_expressionfor CTEs and derived tables - Add
paren_subqueryforEXISTS - Add
PREFER_PARENTHESESprecedence token to disambiguate lookahead on shift/reduce conflicts.
Fix #8058
Fix #11722
Block dolthub/go-mysql-server#3806
- Add
- 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 whensql-serverreaps 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_VALUEandLAST_VALUEwindow functions
Fix queries containingFIRST_VALUE(*)orLAST_VALUE(*)to not be accepted by the MySQL parser.sql.y: UpdateFIRST_VALUEandLAST_VALUErules to requireexpression.
Fix #11468
Block dolthub/go-mysql-server#3756
- 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 carryON CONFLICT DO UPDATE ... WHEREbehavior 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
AVGdrops a non-NULL nonnumericVARCHAR - 11720: Global-args gate rejects -C on the nine unmigrated commands, which is the case -C exists for
- 11460: Dolt forms incorrect
RANGEboundaries for a correlated computed order key - 11419: Dolt misorders a window when
ORDER BYcontains a correlated scalar subquery. - 11465:
MINpanics on a legal empty leadingROWSframe - 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, whileIN ((subquery))and scalar((subquery))succeed - 11452: Dolt panics with
Interval.Evalwithin standaloneINTERVALexpression - 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()returnsNULLfor 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
SUMreturns0for an all-NULL frame. - 11471: Empty value-window frame is incorrectly non-nullable in CTAS
- 11390: Dolt supports
BIT_AND,BIT_OR, andBIT_XORas ordinary aggregates, but the same functions fail when used as window aggregates. - 11462: Final window
ORDER BYon 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 ondolt 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 ondolt sql-server - 11581: DOLT_RESET('--hard') permanently returns "context canceled" on a fraction of freshly created databases (regression in 2.3.0)
- 11510:
INET_NTOAcorrupts valid IPv4 values above signed 32-bit - 11413: Dolt
TIME_FORMATmishandles hour format specifiers forTIMEvalues. - 11595: Feature Request:
MAKEDATEfunction - 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/FLOORof a windowedDECIMALreturns 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 fetchfail with "incorrect old value provided" - 11509:
STR_TO_DATE()errors instead of propagatingNULL - 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)