| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| dolt-2.6.0-1.aarch64.rpm | < 20 hours ago | 40.8 MB | |
| dolt-2.6.0-1.x86_64.rpm | < 20 hours ago | 44.0 MB | |
| install.sh | < 20 hours ago | 3.2 kB | |
| dolt-windows-amd64.7z | < 20 hours ago | 23.3 MB | |
| dolt-windows-amd64.zip | < 20 hours ago | 40.0 MB | |
| dolt-darwin-arm64.tar.gz | < 20 hours ago | 41.1 MB | |
| dolt-darwin-amd64.tar.gz | < 20 hours ago | 43.6 MB | |
| dolt-linux-arm64.tar.gz | < 20 hours ago | 40.7 MB | |
| dolt-linux-amd64.tar.gz | < 20 hours ago | 44.0 MB | |
| 2.6.0 source code.tar.gz | < 20 hours ago | 12.6 MB | |
| 2.6.0 source code.zip | < 20 hours ago | 14.4 MB | |
| README.md | < 20 hours ago | 35.9 kB | |
| Totals: 12 Items | 344.5 MB | 0 | |
Minor Version Bump
This change introduces changes to the dolt_merge() operation which will alter the merge behavior for long running branches
which have multiple merges. The previous behavior would incorrectly choose merge results without fully walking the commit graph.
The new behavior more correctly matches Git's merge behavior for this rare scenarios.
Applications which automatically merge may run into conflicts in your merge which were previously not raised. The previous behavior would incorrectly choose the newest change, and it's possible an application depends on that behavior. As this behavior is not backwards compatible, we have opted to perform a minor version bump.
Merged PRs
dolt
- 12192: dtables: mark
commit_hashindex non-unique indolt_commit_ancestorsFix [#12178] - 12182: Warn on three-dot diffs with several merge bases; fix three-dot log
This is the third and final fix for 12050, related to
dolt diff FOO...BARwarning when there are multiple merge bases. Fixes: https://github.com/dolthub/dolt/issues/12050 - 12174: go: remotesrv: Fix some warts in uploaded file handling.
- Fix MD5 upload verification so that it happens before the table file is added to the store. We do this by verifying on the Read() path once we hit EOF or expected-size bytes.
- Fix the upload path to never overwrite a table file that's already in the store. Dolt keeps an invariant when the table file is added to the store that it was able to be opened. Overwriting with new contents can break that invariant.
- Verify that chunk addresses as they appear in indexes match the content-based hash of the uploaded chunks.
- 12168: Do not warn on persisted sqlserver.cluster global config options Fix [#12127] Close [#12144]
- 12154: Bump Go to 1.27.3
Bumps the Go SDK from 1.26.2 to 1.27.3 in go.mods, Bazel, Dockerfiles, and release/build scripts. Also brings the stale SysbenchDockerfile (1.23.3) up to date.
Also adds a direct
apple_supportdep inproto/MODULE.bazelso macOS uses its cc toolchain. Xcode 27's clang listsSDKSettings.jsonin depfiles, which therules_ccauto-configured toolchain rejects as an absolute path inclusion. - 12153: Unset branch upstream tracking when removing remote Fix [#11529] Close [#12151]
- 12151: Clear branch upstreams when a remote is removed
Fixes [#11529].
dolt remote removedeleted the remote but leftbranches.<name>entries inrepo_state.jsonthat still carried theheadmerge ref. Thedolt_remoteprocedure (which the CLI goes through) first rewrote every branch tracking the remote toremote: ""and then removed the remote, so the entry survived with an empty remote. That looks like an upstream on the local repository, which Git expresses with.. Git instead dropsbranch.<name>.remoteand.mergewhen the remote is removed. This removes the loop indolt_remote.gothat blanked the remote name, and clears the branch entries whoseremoteis the removed one inRepoState.RemoveRemote(CLI path) andSessionStateAdapter.RemoveRemote(in memory and the persisted file), through a nil-safe helperClearBranchUpstreamsForRemote. Branches that track a different remote are kept. Testing: a Go test inenvforRemoveRemoteand one for a nil branch map; a bats case inremote-cmd.batsthat follows the repro from the issue (push -u origin b1:other,remote remove origin, no"b1"entry left inrepo_state.json). The bats case fails with the previousdolt_remote.goand passes with this change;remote-cmd.batspasses as a whole andgo vetis clean. The rest of the suites were not run. This change was made with Claude Code. - 12149: go: Run the dolt CLI and sql-server on engine-owned variables. Part of a body of work to remove the global SystemVariables and StatusVariables registries and make them state on the Engine itself.
- The dolt CLI and sql-server run their engines on engine-owned variable bundles instead of the global registries. Persisted globals load into the bundle from the root environment.
dolt sqlanddolt debugrestrict LOAD_FILE by settingsecure_file_privin the engine they run.dolt_log_levelkeeps its value in the server's engine; the logrus level it sets is still process-wide.- Persisted variable load errors print once. Split out of [#12134] together with the runtime consumers it builds on in [#12148].
- 12148: sql: Bind Dolt runtime to engine variables. Part of a body of work to remove the global SystemVariables and StatusVariables registries and make them state on the Engine itself.
- Runtime consumers read the executing engine's bundle: sessions, transactions, merge, rebase, stats, binlog, nested engines, CREATE DATABASE hooks, engine bootstrap and test harnesses.
- Adds
sqle.NewEngineVariablesForEnv,sqle.AssignSystemVariablesandsqle.DoltSystemVariableNames. - Callers that pass no bundle keep main's behavior on the global registries. The dolt CLI and sql-server still pass none, so their behavior is unchanged here; [#12149] switches them over. doltgresql, driver and ld keep working after the auto-bump. Split out of [#12134] together with the CLI and sql-server switch-on in [#12149].
- 12147: go/cmd/dolt/commands: Close filter-branch's per-commit database. filter-branch creates a new database for each commit it replays and never closed them, so their sequence trackers could still be reading the store when dolt closed it. That panic made filter-branch.bats fail intermittently. The rebased engine now closes the databases it owns, and filter-branch closes the engine. Adds a unit regression test.
- 12146: Stopped quoting extended type column defaults Builds on top of:
- https://github.com/dolthub/go-mysql-server/pull/4045
- 12144: go/cmd/dolt: Don't warn on persisted sqlserver.cluster config options
## Summary
When sql-server runs with a
clusterconfig, it persists the cluster role and epoch to the config json undersqlserver.cluster.*(for example afterCALL dolt_assume_cluster_role('standby', 1)). The CLI's config validator only allowed known options and thesqlserver.globalprefix, so every laterdoltcommand printed warnings like:Warning: Unknown global config option 'sqlserver.cluster.dolt_cluster_role'. Use `dolt config --global --unset sqlserver.cluster.dolt_cluster_role` to remove.Fixes [#12127] ## Changes - Add
env.SqlServerClusterPrefix(sqlserver.cluster) and use it forcluster.PersistentConfigPrefix, so the two can't drift apart. - Add
env.IsKnownConfigOption, which accepts the known options plus thesqlserver.globalandsqlserver.clusternamespaces, and use it for both the local and global config warnings incmd/dolt/dolt.go. dolt config --add/--setvalidation is unchanged. ## Testing- New unit test
TestIsKnownConfigOptioninlibraries/doltcore/env. - New bats test in
config.batsthat writes persisted cluster keys to the global config and checks thatdolt versionprints no warning. It fails onmainand passes with this change. The fullconfig.batsfile passes. - Checked by hand: with a global config containing
sqlserver.cluster.dolt_cluster_role,sqlserver.cluster.dolt_cluster_role_epochand a bogus key, only the bogus key still produces a warning. go test ./libraries/doltcore/env ./libraries/doltcore/sqle/cluster,go vet,gofmt.- 12137: dolt assist: default to gpt-5.6-terra before gpt-3.5-turbo shuts down on 2026-10-23
dolt assistfalls back togpt-3.5-turbowhen--modelisn't given. OpenAI shuts that model down on the API on October 23, 2026, and its deprecations page listsgpt-5.6-terraas the replacement. After that date,dolt assiststops working for OpenAI users who rely on the default. This changesopenAiDefaultModeland the--modelhelp text togpt-5.6-terra. The request body only sendsmodelandmessages, so nothing else needs to change.--modelstill overrides the default, and the OrcaRouter provider isn't touched. Close [#12161] - 12133: sql: Bind Dolt bootstrap to engine variables. Part of a body of work to remove the global SystemVariables and StatusVariables registries and make them state on the Engine itself.
- Engine, server and CLI bootstrap can carry an engine-owned bundle through variable definition, persisted settings and config application.
- Includes the listener-timeout fix and isolated test-server grants.
- 12132: sql: Add registry-aware Dolt variable bootstrap helpers. Part of a body of work to remove the global SystemVariables and StatusVariables registries and make them state on the Engine itself.
- Add registry-aware Dolt variable definition, persistence and replication-hook helpers alongside the existing global ones.
- 12125: Implement git's ORT merge mechanism Related: https://github.com/dolthub/dolt/issues/12050
go-mysql-server
- 4056: Fix accidentally dropping filters in complex joins Dolt PR: https://github.com/dolthub/dolt/pull/12193 The join order planner did not properly check that all joins were actually included in the new plan. This PR fixes that. There's potential room for improvement here, both in detecting when filters are redundant and what to do when the current join order planning fails. But this fixes a potential correctness issue.
- 4052: Use CharSetHandler for character offsets in
INSERT()Fix [#4050] Close [#4051] - 4051: Count characters instead of bytes in INSERT()
INSERT(str, pos, len, newstr)slicedstrby byte offsets, soposandlenwere treated as byte counts. On strings with multibyte characters this replaces the wrong range and can cut a character in half, returning invalid UTF-8:sql SELECT INSERT('héllo', 2, 1, 'X'); -- MySQL 8.4: hXllo -- before: hX\xA9llo (invalid UTF-8) SELECT INSERT('日本語テキスト', 3, 2, 'ab'); -- MySQL 8.4: 日本abキストThis change convertsstrto runes before computing the replaced range, the same waySUBSTRING,LEFT, andRIGHTin this package already count characters. ASCII behavior is unchanged. ## Tests sql/expression/function/insert_test.go: multibyte cases (accented, CJK, negative length, position past the character length). Four of them fail before the fix.enginetest/queries/function_queries.go: two end-to-end queries. Both fail before the fix. Expected values were checked against MySQL 8.4. Fixes [#4050]- 4049: go.mod: Bump to 1.27.3. Fix some COMPRESS() tests where the behavior changed.
- 4048: build(deps): bump github.com/klauspost/compress from 1.17.8 to 1.18.7 in /_integration/go
Bumps github.com/klauspost/compress from 1.17.8 to 1.18.7.
Release notes
Sourced from github.com/klauspost/compress's releases.
v1.18.7
- Fix s2.NewDict OOB read.
Security release without other changes.
Full Changelog: https://github.com/klauspost/compress/compare/v1.18.6...v1.18.7
v1.18.6
What's Changed
- s2: Fix amd64 stack frame corruption by
@klauspostin klauspost/compress#1145](https://github.com/href="https://redirect.github.com/klauspost/compress/pull/1145">klauspost/compress/issues/1145) - gzhttp: Canonicalize ETag header by
@justinmayhewin klauspost/compress#1139](https://github.com/href="https://redirect.github.com/klauspost/compress/pull/1139">klauspost/compress/issues/1139) - perf: pool hash tables in Go encode paths to reduce allocations by
@huynhanx03in klauspost/compress#1143](https://github.com/href="https://redirect.github.com/klauspost/compress/pull/1143">klauspost/compress/issues/1143)
New Contributors
@justinmayhewmade their first contribution in klauspost/compress#1139](https://github.com/href="https://redirect.github.com/klauspost/compress/pull/1139">klauspost/compress/issues/1139)@huynhanx03made their first contribution in klauspost/compress#1143](https://github.com/href="https://redirect.github.com/klauspost/compress/pull/1143">klauspost/compress/issues/1143)@thaJeztahmade their first contribution in klauspost/compress#1144](https://github.com/href="https://redirect.github.com/klauspost/compress/pull/1144">klauspost/compress/issues/1144)
Full Changelog: https://github.com/klauspost/compress/compare/v1.18.5...v1.18.6
v1.18.5
What's Changed
- zstd: Fix crash when changing encoder dictionary with same ID by
@klauspostin klauspost/compress#1135](https://github.com/href="https://redirect.github.com/klauspost/compress/pull/1135">klauspost/compress/issues/1135) - zstd: Default to full zero frames by
@klauspostin klauspost/compress#1134](https://github.com/href="https://redirect.github.com/klauspost/compress/pull/1134">klauspost/compress/issues/1134) - flate: Clean up histogram order by
@klauspostin klauspost/compress#1133](https://github.com/href="https://redirect.github.com/klauspost/compress/pull/1133">klauspost/compress/issues/1133)
Full Changelog: https://github.com/klauspost/compress/compare/v1.18.4...v1.18.5
v1.18.4
What's Changed
- gzhttp: Add zstandard to server handler wrapper by
@klauspostin klauspost/compress#1121](https://github.com/href="https://redirect.github.com/klauspost/compress/pull/1121">klauspost/compress/issues/1121) - zstd: Add ResetWithOptions to encoder/decoder by
@klauspostin klauspost/compress#1122](https://github.com/href="https://redirect.github.com/klauspost/compress/pull/1122">klauspost/compress/issues/1122) - gzhttp: preserve qvalue when extra parameters follow in Accept-Encoding by
@analyticallyin klauspost/compress#1116](https://github.com/href="https://redirect.github.com/klauspost/compress/pull/1116">klauspost/compress/issues/1116)
New Contributors
@analyticallymade their first contribution in klauspost/compress#1116](https://github.com/href="https://redirect.github.com/klauspost/compress/pull/1116">klauspost/compress/issues/1116)@ethaizonemade their first contribution in klauspost/compress#1124](https://github.com/href="https://redirect.github.com/klauspost/compress/pull/1124">klauspost/compress/issues/1124)@zwassmade their first contribution in klauspost/compress#1125](https://github.com/href="https://redirect.github.com/klauspost/compress/pull/1125">klauspost/compress/issues/1125)
Full Changelog: https://github.com/klauspost/compress/compare/v1.18.2...v1.18.4
v1.18.3
Downstream CVE-2025-61728
Full Changelog: https://github.com/klauspost/compress/compare/v1.18.2...v1.18.3
... (truncated)
Commits
8668e35Merge commit from forkac2f5e8docs: use unix line-endings for markdown files (#1144](https://github.com/href="https://redirect.github.com/klauspost/compress/issues/1144">/issues/1144))620d7b5s2: Fix amd64 stack frame corruption (#1145](https://github.com/href="https://redirect.github.com/klauspost/compress/issues/1145">/issues/1145))1b63f2fbuild(deps): bump the github-actions group with 2 updates (#1141](https://github.com/href="https://redirect.github.com/klauspost/compress/issues/1141">/issues/1141))3d86b89s2: pool hash tables in Go encode paths to reduce allocations (#1143](https://github.com/href="https://redirect.github.com/klauspost/compress/issues/1143">/issues/1143))15967degzhttp: Canonicalize ETag header (#1139](https://github.com/href="https://redirect.github.com/klauspost/compress/issues/1139">/issues/1139))c5e0077zstd: Fix encoder changing dictionary with same ID (#1135](https://github.com/href="https://redirect.github.com/klauspost/compress/issues/1135">/issues/1135))fd3f23ezstd: Default to full zero frames (#1134](https://github.com/href="https://redirect.github.com/klauspost/compress/issues/1134">/issues/1134))8233c58flate: Clean up histogram order (#1133](https://github.com/href="https://redirect.github.com/klauspost/compress/issues/1133">/issues/1133))bcf0d12build(deps): bump the github-actions group with 3 updates (#1132](https://github.com/href="https://redirect.github.com/klauspost/compress/issues/1132">/issues/1132))- Additional commits viewable in compare view
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/go-mysql-server/network/alerts).
- 4045: Converted extended type column defaults with assignment casts Fixes an issue integrators were running into, as they don't necessarily follow MySQL's rules.
- 4044: Assign column IDs to "Unreferenceable" columns
Fixes [#12141]
"Unreferenceable" columns (columns that have internal names that don't match their aliases) were added to the outscope via
addColumninstead ofnewColumn, which meant they were never assigned a column ID. As a result, view/subquery scopes were not being mapped to the correct columns, causing the wrong filters to be pushed down. Query plan tests changed due to more columns being added to ColSet. - 4041: Clear sign on negative zero during
DecimalModFixes [#12124] This is done inDecimalDiv, but it seems like the step was skipped forDecimalMod. - 4039: GROUP_CONCAT: concatenate BIT values as raw bytes
GROUP_CONCAT over a BIT column concatenated the decimal text of each value instead of its raw bytes, so
HEX(GROUP_CONCAT(v))returned3335where MySQL returns0305. Root cause:evalExprsonly keepsretTypeasBlobwhen every expression isBlob. A BIT column isBitType, so the result type becameTextandgroupConcatValuestringified each value throughConvertToCollatedString. BIT now takes its own raw big-endian byte form. Fixes [#11422] Test:TestGroupConcat_BitConcatsRawBytesfails before this change ("35") and passes after ("\x03\x05"). - 4033: Build information_schema column defaults without the parser Package initialization parsed the SQL text of 237 column defaults, each twice, through a context that copies every system variable, to build the literals 0 and "". The package was the most expensive to initialize in a native program (6.6 ms, 20,000 allocations), and a program compiled to JavaScript spent over a second there before its first statement. The schemas now build those literals directly, and a test checks that they equal what the parser returns.
- 4023: Added AggregateCallResolver for functions that share a name with an aggregate
- 4011: Prune unselected columns from
Columns()Doltgres PR: https://github.com/dolthub/doltgresql/pull/3631 There's a potential problem with the plan tree that can lead to correctness issues, and it has to do with how nodes report their ColumnSet (their list of column IDs) and their schema, and how these both interact in the presence of ProjectedTables (table nodes that contain a projection stating which columns are selected). Currently, if a table contains a projection, thenSchema()will return a projected schema with the unselected columns removed, butColumns()will still report the entire column set. This is ostensibly done because we rely on having the full set of columns when computing functional dependencies and when checking if an index can be used for a lookup, although I'm not 100% certain whether this is actually necessary in practice. This descrepency can cause some problems: there are multiple places in the code where we assume that these functions will return results with the same number of elements. In some cases, we detect when there's a mismatch and fetch the Schema of the table's underlying primary key index and use that instead. There are a few cases where we failed to do this check and could panic: I've already submitted a PR that fixes one of these. The reason I've been doing all this is because of an optimization we do that may not be correct. We have an optimization that replaces trivial subqueries with the underlying table. For example:SELECT a from (SELECT a, b FROM table)becomesSELECT a from table. In the plan tree, this means transforming a SubqueryAlias into a TableAlias. Currently, the TableAlias uses the same columnIds as the underlying table, while GetFields in the top-level query will refer to the now non-existent subquery columns. This can theoretically lead to problems in subsequent passes. For example, GetFields that referred to the subqueries now have ColumnIds that no longer appear in the table, and will be resolved by name instead. This is probably safe because I don't think it's possible for the table to have multiple columns with the same name in this specific circumstance. But it does mean that any optimization pass that looks at columnIds to match GetFields to tables will no longer work here, which can inhibit future optimization. This was the problem I initially encountered: I'm rewriting the rowIter to work like a register-machine that uses the columnId as the register number. This meant that these GetFields were reading from a different register than the one being written to. But the bigger problem with the current behavior is what happens when we have a CTE that gets referenced multiple times in the same query. For example:WITH SELECT * FROM test_table AS cte SELECT cte a JOIN cte b ON ...After the optimization runs, the plan will contain two TableAlias nodes that contain the same columnIds, which isn't supposed to happen. GetFields that resolve based on the ColumnId are now ambiguous, and a subsequent analysis pass might behave incorrectly. In order to fix this, we need to ensure that every column in the query has a unique ColumnId after the subquery is inlined. There's a couple ways we could do this: ## Use the ColumnIds from the original Subquery in the generated TableAlias and the underlying ResolvedTable. This was my initial approach, but it ran into a problem with ProjectedTables. TableAlias nodes use the same ColumnIds as the underlying table, which means the entire column set even for ProjectedTables. (So, the TableAlias forSELECT x, y FROM x_y_zwould have three ColumnIds, for the above-mentioned reasons.) But the subquery has a ColumnId for each column in the Subquery's schema, so the subquery would only have two ColumnIds. Because of this mismatch, we can't reuse the Subquery ColumnIds for the TableAlias. This PR attempts to make that possible by removing the requirement that tablesColumns()method returns a value for unselected columns. During thepruneColsanalysis pass, it rewrites tables' ColSet to remove columns that aren't actually selected. This simplifies logic in many places and generates different plans with lower costs and row-estimates. However, I have a gut feeling that this may impede functional dependency analysis in some cases and prevent us from selecting an index if we are only selecting a prefix of that index's columns. Some more testing is required. This PR also breaks Dolt because the implementations for Dolt-specific system tables like DoltLog need to be updated for this. It seems like DoltLog implements ProjectedTable but always returns the full schema in calls toDoltLog.Schema(), which is inconsistent with other table implementations. This may be a bug that should be fixed anyway, and I need to understand what's actually happening here. ## Use the ColumnIds from the original Subquery only in the generated TableAlias, and not the underlying ResolvedTable. Basically prune ColumnIds from TableAlias but not the underlying table. This allows both ColSets to exist in the plan, and analysis passes can access them both if needed. However this will likely complicate the logic of other optimizations, since it's no longer possible to treat the two node types identically. This PR doesn't attempt this solution, but it's an alternate option. - 4002: Preserve column metadata for parenthesized GROUP BY references Resolve parenthesized GROUP BY column references through the existing column-resolution path, preserving the metadata needed by HAVING. Adds regressions for nested/qualified references, aliases, NULLs, and constant grouping. Found while fixing the HAVING regression in GMS [#4001].
- 3932: When replacing a subquery with a table alias, push the subquery columnIds into the underlying table.
When parsing a query, Dolt assigns an ID to every column in the query. These IDs are meant to be unique. But due to an oversight, there are some queries that contain duplicate column IDs.
Dolt attempts to remove trivial subqueries by inlining them into the parent query.
If a common table expression expression is referenced multiple times and inlined multiple times, then each of the inlined Table nodes will have the same column Ids. If a subsequent analysis pass assumes that every table node has unique IDs, it may behave incorrectly. I don't think that this oversight actually results in incorrect behavior: we only inline trivial subqueries that don't contain any filters or projections, so there won't be any GetField expressions referencing any of the columns with duplicate IDs.
However, there's another downside to this operation: By erasing the SubqueryAlias node, we erase the map that maps ColumnIds on the SubqueryAlias to the ColumnIds in the subquery. GetField expressions that referred to columns on the subquery alias will still use those Ids, and subsequent analysis passes won't be able to connect them to the columns in the new TableAlias nodes.
The fix for both of these issues is to modify the set of the ColumnIds in the inlined tables to use the ColumnIds originally assigned to the removed SubqueryAlias. This both prevents the query from containing duplicate IDs while also maintaining the mapping between GetFields in the parent query and the columns they reference.
This PR results in improvements to several PlanTests.
One thing I still need to investigate before merging is what happens if only some of the columns are selected from the table being inlined. It looks like previously the Table node's ColSet contained a element for every column in the table, even the ones that aren't selected, but after this change, it is rewritten to only have an element for every column in the subquery alias. It's not clear what impact this has on analysis passes and needs to be understood before merging.This was fixed with https://github.com/dolthub/go-mysql-server/pull/4011
Closed Issues
- 12178: sql-server:
dolt_commit_ancestorslookup bycommit_hashfails with "max1Row iterator returned more than one row" for a merge commit - 12050: Merge and three-dot diff use only the tallest of several merge bases, which breaks the schema-branch pattern
- 11422: Dolt
GROUP_CONCAT(BIT)concatenates numeric text instead of BIT bytes. - 12127:
dolt sqlwarns on persistedsqlserver.cluster.*global config options - 11529:
dolt remote removeleaves an upstream config behind - 12141: Column field indexes don't seem to be correctly assigned in views
- 4050: INSERT() counts bytes instead of characters on multibyte strings