Download Latest Version doltgresql-windows-amd64.zip (46.1 MB) Google Add to Preferred Sources
Home / v1.3.2
Name Modified Size InfoDownloads / Week
Parent folder
install.sh 2026-09-12 3.4 kB
doltgresql-windows-amd64.7z 2026-09-12 27.1 MB
doltgresql-windows-amd64.zip 2026-09-12 46.0 MB
doltgresql-darwin-arm64.tar.gz 2026-09-12 46.7 MB
doltgresql-darwin-amd64.tar.gz 2026-09-12 49.6 MB
doltgresql-linux-arm64.tar.gz 2026-09-12 46.3 MB
doltgresql-linux-amd64.tar.gz 2026-09-12 50.2 MB
1.3.2 source code.tar.gz 2026-09-11 12.8 MB
1.3.2 source code.zip 2026-09-11 14.6 MB
README.md 2026-09-11 111.8 kB
Totals: 10 Items   293.6 MB 0

Merged PRs

dolt

Commits


Dependabot compatibility score 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 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 <dependency name> 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).
Commits


Dependabot compatibility score 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 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 <dependency name> 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).
Changelog

Sourced from mysql2's changelog.

3.23.1 (2026-07-19)

Bug Fixes

3.23.0 (2026-07-13)

Features

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
Maintainer changes

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


Dependabot compatibility score 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 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 <dependency name> 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).
Changelog

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

0.24.0

Build Process

... (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 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 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 <dependency name> 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 https://github.com/dolthub/doltgresql/pull/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.
  • 11303: sql: fix empty/comment-only query handling in interactive shell ## What In the interactive dolt sql shell, two related edge cases around empty/comment-only statements produced confusing output instead of clear, MySQL-consistent behavior:
  • A bare empty query (e.g. typing just ;) silently printed Empty set, 1 warning with a warning body of query was empty after trimming comments, instead of a clear client-side error.
  • A comment-only query (e.g. -- foo ;) behaved the same way — a spurious "empty" warning — instead of being silently skipped the way dolt sql < file.sql (batch mode) already treats it. This PR makes the shell branch on sqlparser.ErrEmpty explicitly in execShell's Uninterpreted callback (go/cmd/dolt/commands/sql.go):
  • A truly empty statement (nothing left after ; is stripped) now prints a MySQL-style No query specified error, matching how the real mysql CLI responds to a bare ;.
  • A comment-only statement (non-empty input that parses to ErrEmpty because it's all comment) is now skipped silently — no output, no warning — which mirrors the existing behavior of execBatchMode, where err == sqlparser.ErrEmpty is already a silent continue. ## Why Batch mode (execBatchMode, sql.go) and processQuery (used by scripting/non-interactive paths) both already treat sqlparser.ErrEmpty as "silently skip." The interactive shell was the only place papering over this with a fake Empty set, 1 warning result, which is misleading — there's no result set, and the "warning" concept here doesn't correspond to anything the query actually did. This change brings the shell in line with the rest of the codebase's handling of empty statements while adding a genuinely useful error for the truly-empty case (bare ;), since that's a real MySQL client-side error dolt users would expect to see. Closes [#10864] Closes [#10863] Thanks to angelamayxie for the original reports. ## Test plan
  • [x] go build ./cmd/dolt/... — passes
  • [x] go vet ./cmd/dolt/... — passes
  • [x] gofmt -l go/cmd/dolt/commands/sql.go — clean
  • [x] New bats regression tests added in integration-tests/bats/sql-shell.bats:
  • sql-shell: bare empty query gives MySQL-style error, not a warning (uses new sql-shell-empty-query.expect)
  • sql-shell: comment-only query is skipped silently, no warning (uses new sql-shell-comment-only-query.expect)
  • [x] Both new bats tests run locally against a freshly built dolt binary and pass: ok 1 sql-shell: bare empty query gives MySQL-style error, not a warning ok 1 sql-shell: comment-only query is skipped silently, no warning
  • Full sql-shell.bats suite regression run was kicked off locally to check for unrelated breakage; not gating this PR description on it since the two new/targeted cases already passed cleanly and no other test in the file touches this code path.
  • 11193: -C flag Implements -C with behavior matching git. Fixes https://github.com/dolthub/dolt/issues/11720

doltgresql

  • 3343: Enforce authorization for CREATE DATABASE and DROP DATABASE Requires SUPERUSER or CREATEDB for CREATE DATABASE and SUPERUSER for DROP DATABASE, with Go and Bats regression tests.
  • 3342: Support Dolt virtual ref indexes in the catalog Uses Dolt’s exported branch and tag index types for catalog naming, consuming the changes in https://github.com/dolthub/dolt/pull/11790. Fixes https://github.com/dolthub/dolt/issues/10365
  • 3340: Added regression test for issue 3083 This is for the following issue:
  • https://github.com/dolthub/doltgresql/issues/3083 This appears to have been fixed already, so this is just adding a test for regression purposes.
  • 3320: Limit test server logging to warnings and errors Limits test server logging to warnings and errors across Go helpers, integration runners, and shell configurations while preserving captured debug logs required by auto-GC assertions.
  • 3313: Reject DISTINCT window aggregates with PostgreSQL error Returns PostgreSQL's 0A000 feature-not-supported error for DISTINCT aggregate window calls, including COUNT, SUM, AVG, MIN, and MAX. Adds native Doltgres integration coverage validated against PostgreSQL 15.17 and pins the supporting GMS planner override. Depends on: go-mysql-server [#3852]
  • 3312: Fixes issues Fixes https://github.com/dolthub/doltgresql/issues/3267 Fixes https://github.com/dolthub/doltgresql/issues/3268 Partially addresses https://github.com/dolthub/doltgresql/issues/3283 (Gap 4 and 7)
  • 3311: Fix numeric SUM over COALESCE Numeric SUM(COALESCE(amount, 0)) can return unknown type received *apd.Decimal result over the PostgreSQL protocol. The aggregate resolves to numeric after plan construction, but its projected GetField retains the earlier unknown type. Although the aggregate correctly produces an *apd.Decimal, wire encoding consequently routes that value through unknownout. Refresh unknown projected aggregate fields during the existing final OptimizeFunctions project pass when their matching aggregate ColumnId has acquired a concrete type. Projection changes use Project.WithExpressions so the cached schema is invalidated. Regression coverage includes grouped, ungrouped, all-NULL, windowed, and correlated scalar-subquery forms.
  • 3310: Support DO statements Adds PostgreSQL-compatible DO statements for executing anonymous PL/pgSQL blocks. Supports the default language and LANGUAGE plpgsql before or after the body, propagates PostgreSQL SQLSTATEs, and executes blocks atomically. Includes integration coverage for top-level session execution, PostgreSQL's documented dynamic GRANT example, errors and rollback, dynamic EXECUTE, and nested DO blocks in stored PL/pgSQL functions. Transaction control inside PL/pgSQL remains unsupported by the existing interpreter. Fixes [#3279]
  • 3308: README update
  • 3306: Change Doltgres status from Beta to 1.0 Updated the README to reflect the release of Doltgres 1.0, including changes to the quality status and test results.
  • 3300: Evaluate UPDATE assignments against the pre-update row Evaluates UPDATE assignments against the pre-update row using the engine override from https://github.com/dolthub/go-mysql-server/pull/3840. Fixes https://github.com/dolthub/doltgresql/issues/3092
  • 3299: server/plpgsql: Fix regression introduced by 3743010a5 which could break previously compiled triggers. Previously compiled triggers would compile and persist bytecode which encoded references to special variables like NEW, OLD and TG_OP by the casing in which they appeared in the source code. In 3743010a5, doltgres was changed to correctly fold unquoted identifiers at both declaration time and when they appear as variable references. This had the unintended side effect of breaking existing compiled triggers which referenced these special variables --- the variables started being introduced by the interpret in their folded form, but the references to them existed as compiled opcodes that already had the variable name persisted, and that name was not going through folding again as part of interpretation. This adds a backup lookup path for these special variables, so that previously compiled triggers continue to work.
  • 3291: [6/6] Adopt the expression string stack in Doltgres Updates catalog plan expectations for https://github.com/dolthub/go-mysql-server/pull/3836 and https://github.com/dolthub/dolt/pull/11753, replacing [#3277].
  • 3289: Map shared integer overflow errors Maps the shared engine's integer arithmetic overflow error to PostgreSQL SQLSTATE 22003 and adds native int8 addition, subtraction, and multiplication overflow coverage. The shared GMS correction is now included through Doltgres main's Dolt dependency.
  • 3287: Fix and test PostgreSQL default insert compatibility Expand insert integration coverage for PostgreSQL default-row semantics, including DEFAULT VALUES, stored generated and identity columns, equal-width multi-row defaults, empty-tuple syntax errors, exact SQLSTATEs, extended-protocol execution, and statement atomicity.
  • 3286: Test upsert RETURNING with CHECK constraints Adds wire-level regression coverage for INSERT ... ON CONFLICT DO UPDATE ... RETURNING on a table with a CHECK constraint. The test covers both the conflicting update arm and the non-conflicting insert arm. The underlying expression-slice aliasing bug was fixed by the merged go-mysql-server change in dolthub/go-mysql-server#3753 and is already present on main. Fixes [#3280]
  • 3285: DESC indexes, NULL ordering, and default opclasses This is a fix for:
  • https://github.com/dolthub/doltgresql/issues/3229 This implements the default opclasses (such as varchar_pattern_ops), DESC indexes, and NULL ordering (nulls can be set to be first or last). Related PRs:
  • https://github.com/dolthub/vitess/pull/491
  • https://github.com/dolthub/go-mysql-server/pull/3820
  • https://github.com/dolthub/dolt/pull/11746
  • 3274: Support wrapped create tables in CTAS Expose the underlying create-table name through the standard sql.Nameable contract so GMS TableCopier can create and populate CTAS destinations without bypassing Doltgres context handling. Adds regression coverage for aggregate EXISTS CTAS results and transactional rollback, and pins the companion GMS change. Part of [dolthub/dolt#11489](https://github.com/dolthub/dolt/issues/11489) Depends on: [dolthub/go-mysql-server#3780](https://github.com/dolthub/go-mysql-server/issues/3780)
  • 3269: Handle search_path quoting and report only searchable schemas. SET now renders a list-quote parameter like search_path with Postgres's identifier quoting, so quoting that carries meaning (case, a reserved word, the "$user" placeholder) survives into the stored value while unnecessary quoting is dropped. current_schema() and current_schemas() now report only the schemas named by the path that actually exist, in path order and without repeats, with "$user" expanded to the session's user.
  • 3263: Support targetless ON CONFLICT DO NOTHING Support PostgreSQL INSERT ... ON CONFLICT DO NOTHING without a conflict target. The execution path skips unique-key conflicts while continuing to report foreign-key, check, and NOT NULL violations, with regression coverage for multi-row and targeted cases. Depends on:
  • https://github.com/dolthub/vitess/pull/485
  • https://github.com/dolthub/dolt/pull/11668
  • https://github.com/dolthub/go-mysql-server/pull/3758 Fixes [#3091]

go-mysql-server

  • 3858: Cover vector index nullability across DDL paths Extends vector-index nullability regression coverage to JSON columns and ALTER TABLE, complementing Dolt's engine coverage in https://github.com/dolthub/dolt/pull/11785. Fixes https://github.com/dolthub/dolt/issues/10448
  • 3857: Set return type for population statistic aggregate functions Fixes dolthub/dolt#11391
  • 3855: Implement Numeric to Date conversions Implements conversions from numeric types (int, float, decimal) to DATETIME types. Partially addresses: https://github.com/dolthub/dolt/issues/10278 Fixes: https://github.com/dolthub/dolt/issues/10088
  • 3852: Reject unsupported DISTINCT window aggregates Rejects DISTINCT window aggregates with MySQL 8.4-compatible error 1235 / SQLSTATE 42000 for COUNT, SUM, and AVG, including multi-argument COUNT, while preserving accepted MIN and MAX behavior. Adds engine coverage for the exact customer reproduction and adjacent aggregate behavior. Fixes dolthub/dolt#11392
  • 3847: Remove schema length check when analyzing subquery aliases Fixes dolthub/dolt#11501 When analyzing subquery aliases, checking if the child schema length matched the ColumnNames length was too strict. In nested subqueries, it's possible the child schema length was already reduced due to table pruning when the child subquery was analyzed. This check was removed altogether because we don't have any tests that actually rely on this check happening.
  • 3845: Fix CHAR values differing only in trailing space to be equal Fix dolthub/dolt#11464
  • 3841: Delimit window partition and order expressions in PartitionId Fix dolthub/dolt#11461
  • 3840: Support pluggable UPDATE assignment evaluation Adds an UpdateExpressionApplier engine override for PostgreSQL assignment semantics in https://github.com/dolthub/doltgresql/pull/3300 while preserving MySQL evaluation by default. Fixes https://github.com/dolthub/doltgresql/issues/3092
  • 3836: [4/6] Test grouped windows and iterator cleanup Adds regression coverage for grouped windows, HAVING order, and iterator cleanup already fixed on main, stacked on [#3835] with compatibility in https://github.com/dolthub/dolt/pull/11753 and https://github.com/dolthub/doltgresql/pull/3291.
  • 3835: [3/6] Fix user-variable strings and prepared bindings Fixes UserVar SQL quoting and prepared lookup by variable name, stacked on [#3834] with compatibility in https://github.com/dolthub/dolt/pull/11753 and https://github.com/dolthub/doltgresql/pull/3291.
  • 3834: [2/6] Fix subquery strings and scalar alias resolution Fixes Subquery and InSubquery SQL strings while preserving scalar alias resolution, stacked on [#3833] with compatibility in https://github.com/dolthub/dolt/pull/11753 and https://github.com/dolthub/doltgresql/pull/3291.
  • 3833: [1/6] Fix independent expression strings and descriptions Fixes independent expression SQL strings and descriptions from [#3803], with follow-ups starting at [#3834] and compatibility in https://github.com/dolthub/dolt/pull/11753 and https://github.com/dolthub/doltgresql/pull/3291.
  • 3832: Always return transform.NewTree when replacing GetField with aliased projection expression Fixes dolthub/dolt#11407 When pushing filters below a subquery alias, we were only returning transform.NewTree when an aliased expression mapped to a GetField has been recursively transformed. However the GetField gets replaced with the aliased expression regardless if it gets transformed recursively, this is incorrect, and we should always be returning transform.NewTree. Not returning transform.NewTree was causing us to not be able to find the correct field index for certain expressions.
  • 3825: Support multi-byte strings and collation derivation in LPAD and RPAD
  • Derive output collation and coercibility from string operand.
  • Replace byte-level padding with code-point counting.
  • Add CharSetHandler for multi-byte handling.
  • Fix invalid Go error formatting when during evaluation. Fix dolthub/dolt#11380 Blocked by dolthub/go-mysql-server#3824
  • 3824: Fix collation coercibility resolution and binary collation detection
  • Add CollationID.IsBinary
  • Align coercibility resolution to MySQL precedence rules for explicit conflicts, binary precedence, and charset conversion.
  • Add ResolveCoercibilityExpressions for future correctness and reduce boilerplate. Block dolthub/go-mysql-server#3825
  • 3823: Fix BIGINT arithmetic overflow handling Dolt currently allows BIGINT arithmetic to wrap at signed and unsigned boundaries. This applies MySQL integer result typing, performs checked native addition, subtraction, and multiplication, and honors NO_UNSIGNED_SUBTRACTION. MySQL-only engine scripts cover literal, stored-column, mixed-sign, SQL mode, and prepared execution paths, while protocol errors preserve MySQL error 1690 and SQLSTATE 22003. Fixes dolthub/dolt#11411
  • 3822: Fix empty inserts with generated columns Preserve implicit all-empty VALUES rows as zero-width sources so insert analysis materializes defaults and generated expressions against the complete destination schema. Reject mixed empty and non-empty tuple widths to match MySQL, with coverage for generated, invisible, auto-increment, atomic, and prepared cases. Fixes dolthub/dolt#11388
  • 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 dolthub/dolt#11419 Fixes dolthub/dolt#11460
  • 3820: 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 integrators. Related PRs:
  • https://github.com/dolthub/vitess/pull/491
  • https://github.com/dolthub/dolt/pull/11746
  • https://github.com/dolthub/doltgresql/pull/3285
  • 3816: Make sure window framer end is never after the partition start fixes dolthub/dolt#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 dolthub/dolt#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 dolthub/dolt#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 dolthub/dolt#11500
  • 3809: Count nonnumeric strings as non-null in window AVG and SUM Fix dolthub/dolt#11470
  • 3807: Fix SELECT list alias resolution in window clauses Fixes an issue where window function clauses could incorrectly resolve or shadow column references using SELECT list aliases.
  • Allow expressions in window clauses to reference SELECT list aliases while preserving resolution to underlying table columns.
  • Normalizes SELECT list alias lookup keys to lower case for consistent case-insensitive matching. Fix dolthub/dolt#11502
  • 3804: Omit INVISIBLE columns projections from wildcard projections and default inserts Fix dolthub/dolt#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 https://github.com/dolthub/dolt/issues/11543
  • 3800: Validate set ops for aggregations in ORDER BY clause fixes dolthub/dolt#11462
  • 3798: Fix count distinct tuple hashing Fix dolthub/dolt#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 dolthub/dolt#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 dolthub/dolt#11478
  • 3794: Return ROW_NUMBER values as INT64 Aligns ROW_NUMBER runtime values with its declared INT64 type. Fixes https://github.com/dolthub/dolt/issues/11420
  • 3793: Support TIME values in HOUR Supports valid time-only values in the HOUR function. Fixes https://github.com/dolthub/dolt/issues/11512
  • 3792: Mark FIRST_VALUE results nullable Marks FIRST_VALUE nullable because legal window frames may be empty. Fixes https://github.com/dolthub/dolt/issues/11471
  • 3791: Distinguish window frame ending bounds Preserves distinct ending bounds when identifying sibling window frames. Fixes https://github.com/dolthub/dolt/issues/11395
  • 3790: Enable bitwise window aggregates Enables BIT_AND, BIT_OR, and BIT_XOR as window aggregates. Fixes https://github.com/dolthub/dolt/issues/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 dolthub/dolt#11480
  • 3788: Return NULL for all-NULL window sums Returns NULL when a window SUM frame contains no non-NULL values. Fixes https://github.com/dolthub/dolt/issues/11410
  • 3786: Include bucket count in NTILE identity Keeps sibling NTILE expressions with different bucket counts distinct. Fixes https://github.com/dolthub/dolt/issues/11466
  • 3785: Preserve literal case in window expression identity Preserves case-sensitive literals when deduplicating window expressions. Fixes https://github.com/dolthub/dolt/issues/11497
  • 3784: Preserve LIKE escape clauses in window expressions Preserves distinct LIKE escape clauses when identifying window expressions. Fixes https://github.com/dolthub/dolt/issues/11498
  • 3783: Fix CURRENT_TIME precision in window expressions Fixes CURRENT_TIME precision handling in cloned window expressions. Fixes https://github.com/dolthub/dolt/issues/11543
  • 3780: Fix EXISTS over ungrouped aggregate subqueries Ungrouped aggregates produce one row even when their input is empty. Preserve that cardinality when simplifying EXISTS subqueries so correlated forms retain correct results without suppressing aggregate expression evaluation. Teach TableCopier to expose its independently analyzed create and source trees, accept integrator-owned create destinations through the standard sql.Nameable contract, and close the create iterator before copying rows. Adds coverage for SELECT and write statements, including CTAS, plus HAVING / LIMIT / OFFSET boundaries. Companion: https://github.com/dolthub/doltgresql/pull/3274 Fixes dolthub/dolt#11489 Fixes https://github.com/dolthub/dolt/issues/11477 Fixes https://github.com/dolthub/dolt/issues/11508
  • 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](https://github.com/dolthub/dolt/issues/11521)
  • 3778: Add MAKEDATE function Fix dolthub/dolt#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: https://github.com/dolthub/dolt/pull/11680.
  • 3774: Preserve empty strings in GROUP_CONCAT Fixes GROUP_CONCAT to preserve empty non-NULL strings while continuing to skip NULL values. Fixes https://github.com/dolthub/dolt/issues/11561 Fixes https://github.com/dolthub/dolt/issues/11427
  • 3773: Fix TIME_FORMAT hour specifiers Fixes TIME_FORMAT to preserve extended hours and support the non-padded hour specifier. Fixes https://github.com/dolthub/dolt/issues/11413
  • 3772: Support extended hours in TIME_TO_SEC Fixes TIME_TO_SEC to preserve valid TIME values with more than 24 hours. Fixes https://github.com/dolthub/dolt/issues/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 https://github.com/dolthub/dolt/issues/11544
  • 3770: Fix INET_NTOA for unsigned IPv4 values Fixes INET_NTOA conversion for IPv4 values above the signed 32-bit range. Fixes https://github.com/dolthub/dolt/issues/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 dolthub/dolt#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 dolthub/dolt#11563
  • 3765: Reject ABS of minimum BIGINT Returns an out-of-range error for ABS of the minimum signed BIGINT. Fixes https://github.com/dolthub/dolt/issues/11412
  • 3764: Preserve non-ASCII Soundex initial case Preserves the case of non-ASCII initial characters in SOUNDEX results. Fixes https://github.com/dolthub/dolt/issues/11546
  • 3763: Support binary values in CRC32 Adds CRC32 support for binary string values. Fixes https://github.com/dolthub/dolt/issues/11507
  • 3762: Allow REGEXP_REPLACE position after source Allows REGEXP_REPLACE to start immediately after the source string. Fixes https://github.com/dolthub/dolt/issues/11547
  • 3761: Fix STR_TO_DATE NULL propagation Propagates NULL arguments through STR_TO_DATE. Fixes https://github.com/dolthub/dolt/issues/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 dolthub/dolt#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 [#3091] Depends on: https://github.com/dolthub/vitess/pull/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: https://github.com/dolthub/dolt/pull/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:
  • https://github.com/dolthub/dolt/issues/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 dolthub/dolt#11414, reported by @Yibo-Dong. sql 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 dolthub/dolt#11306

vitess

  • 491: Added NULLs ordering This implements NULL ordering (nulls can be set to be first or last) Related PRs:
  • https://github.com/dolthub/go-mysql-server/pull/3820
  • https://github.com/dolthub/dolt/pull/11746
  • https://github.com/dolthub/doltgresql/pull/3285
  • 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 dolthub/dolt#8058 Fix dolthub/dolt#11722 Block dolthub/go-mysql-server#3806
  • 488: Support directed TRIM without removal string pattern Fix dolthub/dolt#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 dolthub/dolt#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 [#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.
  • sql.y: Update FIRST_VALUE and LAST_VALUE rules to require expression. Fix dolthub/dolt#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 carry ON CONFLICT DO UPDATE ... WHERE behavior through the shared parser boundary. Adds formatting and AST-walk coverage for the predicate. Supports [#3235].

Closed Issues

  • 3083: CREATE INDEX ... WHERE (partial index) on a non-empty table fails: unable to find field with index N in row of N columns
  • 2018: JSON merge support
  • 3268: DROP COLUMN ... CASCADE will not drop a foreign key on that column
  • 3267: A foreign key loses its backing index — regression in 1.2.0
  • 3279: Support for DO keyword
  • 2609: Doltgres MCP support
  • 2732: dolt_patch() fails with "expected string, got string" for any non-NULL JSONB column value
  • 2922: Document if supported: doltgresql master for rich update(set)s with postgres replica(s) for readonly traffic?
  • 2973: Silent data corruption: int4 parameter bound to BIGINT column is misread as int8 when the same statement contains an untyped NULL parameter (extended query protocol)
  • 3173: generate_subscripts(...) AS alias inside a correlated ARRAY(SELECT ...) subquery: "column could not be found in any table in scope"
  • 3174: Compatibility: function length(varbit) should exist
  • 3235: ON CONFLICT ... DO UPDATE ... WHERE (conditional upsert) is rejected as unsupported
  • 3280: INSERT … ON CONFLICT DO UPDATE … RETURNING fails on a table with a CHECK constraint: "unexpected type for io output, expected string, got bool"
  • 3229: CREATE INDEX succeeds but ignores operator classes and descending sort order
  • 3092: UPDATE ... SET evaluates assignments sequentially (MySQL semantics) instead of from the pre-update row
  • 2298: Error: expression index attribute is not yet supported
  • 3091: INSERT ... ON CONFLICT DO NOTHING silently swallows foreign-key violations
  • 11391: Dolt computes population statistical aggregates incorrectly for INT input.
  • 10448: VECTOR INDEX: batch inserts fail with NULL embeddings after ~83 rows
  • 10088: allow for times between 0000-00-00 and 0000-01-01
  • 11445: dolt diff -r sql emits statements that assign generated columns
  • 10867: Dolt shell doesn't handle \c
  • 10863: Do not emit warnings for empty query after trimming comments
  • 10864: MySQL has error for empty delimited queries whereas Dolt has misleading warning
  • 11411: Dolt arithmetic on BIGINT UNSIGNED values wraps into signed negative values.
  • 11388: Dolt raises an internal row-index error for emptyINSERT ()
  • 11392: Dolt silently ignores DISTINCT for COUNT and SUM window aggregates.
  • 11747: sql-server auto-GC published a manifest whose root chunk was not preserved; only dolt_ignore'd (working-set-only) tables were lost
  • 11501: Nested multi-column VIEW + self EXISTS → ERROR 1105 column-count mismatch
  • 11464: CHAR PAD SPACE values split a window partition
  • 11502: Dolt reaches an internal error on invalid window ORDER BY alias.
  • 11407: if(<cond>, <literal>, <column>) in a WHERE over a view raises internal error
  • 11741: git remotes: a cancelled push/fetch wedges sql-server indefinitely — CommandContext kills only the direct git child, and the orphaned transport holds the pipe Wait() reads
  • 11508: Correlated EXISTS loses an empty aggregate row
  • 11477: Wrong results: EXISTS/NOT EXISTS over an un-grouped aggregate subquery is mis-evaluated in a WHERE filter
  • 11489: Silent data loss: EXISTS/NOT EXISTS over an un-grouped aggregate subquery corrupts DELETE/UPDATE/INSERT-SELECT/CREATE-TABLE-AS write paths (uncorrelated form deletes the whole table)
  • 11380: RPAD()/LPAD() has unexpected behvior
  • 11461: Distinct window partition/order shapes collide in PartitionId
  • 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
Source: README.md, updated 2026-09-11