Merged PRs
dolt
- 12016: /{go,integration-tests}: use a more specific cache key
Use the local database cache root, remote URL, and effective Git ref as the cache key so databases and custom refs cannot incorrectly share a remote handle. The SQL provider and Git remote factory share key construction, and remote opens and cache lookups share parameter construction.
Validated with all eight SQL Git-remote integration tests and targeted remote configuration, factory, and database provider Go tests.
Fixes #12011. - 12002: Fix
CREATE TABLErejected on the target branch of a nonlocal table rule- Add
checkNonlocalTableNameforDatabase.CreateTableandDatabase.CreateIndexedTableto allow a table name where the nonlocal rule resolves it locally.
Fix #11995
- Add
- 11993: /go/{cmd,libraries,store}: allow configuring git remotes
Addgit-remote.max-history-commitsandgit-remote.reset-history-on-prunesettings so users can trade disk usage for faster incremental transfers. Support local/globaldolt config, environment overrides, and typed options for embedders.
Defaults remain unchanged. A history limit of0means unlimited; disabling prune-triggered resets allows obsolete data to remain reachable until the history limit is reached. - 11991: /go/store/blobstore: use fetch anchor ref
Preserve a persistent Git fetch anchor during teardown so subsequent pulls can negotiate incremental transfers instead of re-downloading the database. Compare-and-swap protects the anchor from overlapping sessions while allowing private refs to be cleaned up. - 11990: significantly faster implementation of dolt log
With these optimizations,dolt logis now anO(N)operation rather than anO(N^2).
Optimizations:- Only query
dolt_branches,dolt_tags,dolt_log()once instead of for every commit CommitInfois passed as a pointer
Potential improvements:- There are places where we can now add concurrency for long running queryist calls
- Pagination can now be properly implemented, but it is left as a TODO
Before:
After:james@macbook beads_sample % time dolt log -n 5000 > out.txt dolt log -n 5000 > out.txt 97.62s user 2.81s system 157% cpu 1:03.60 total
About a 1000x improvement, which scales exponentially as number of commits increase.james@macbook beads_sample % time dolt log -n 5000 > out.txt dolt log -n 5000 > out.txt 0.09s user 0.13s system 15% cpu 1.422 total
Fixes: #9315 - Only query
- 11989: /go/store/nbs: cover missing spooling paths
Newly persisted Git-backed tables and conjoin input reads bypassed NBS spooling, causing redundant Git reads and decompression. This change spools persisted tables from bytes already in memory and makes conjoin reuse existing source readers.
Adds regression coverage for chunk correctness, blob read counts, and spool cleanup. Full NBS tests and focused race tests pass.
Fixes #11916. - 11985: Fix License Link
- 11980: Test update triggers during CSV imports
Adds CSV import regression coverage for update triggers alongside dolthub/go-mysql-server#3947 and dolthub/doltgresql#3469.
Fixes #5925 - 11756: Bump google.golang.org/grpc from 1.83.1 to 1.83.2 in /go
Bumps google.golang.org/grpc from 1.83.1 to 1.83.2.Release notes
Sourced from google.golang.org/grpc's releases.
Release 1.83.2
Security
- server: Reject requests missing both
:authorityandHostheaders with HTTP 400 and statusInternal. (grpc/grpc-go#9365)- Special Thanks:
@winklemad
- Special Thanks:
Commits
- server: Reject requests missing both
go-mysql-server
- 3979: Preserve decimal precision in GREATEST and LEAST
Preserves exact decimal values and result types in GREATEST and LEAST.
Fixes #10567 - 3976: Test EXISTS and NOT EXISTS with window functions
Adds regression coverage for NOT EXISTS and multiple window functions inside EXISTS subqueries.
Fixes #11421 - 3975: Test EXISTS over empty scalar aggregate inputs
Adds regression coverage for EXISTS and NOT EXISTS over scalar SUM aggregates with empty inputs and grouped controls.
Fixes #11489 - 3974: Test listener shutdown with pending connections
Adds regression coverage for TCP and Unix listener shutdown races and Accept after Close. - 3973: Preserve literal defaults during ALTER table rewrites
ALTER rewrites starting from persisted schema could reclassify literal defaults as expressions, causing datetime COLUMN_DEFAULT values to gain quotes after subsequent column changes. Resolve defaults in the current schema before rewriting, preserving literal metadata and existing multi-column ALTER behavior.
Adds shared engine coverage for metadata, SHOW CREATE, and default insertion. All 50 Dolt default-value BATS cases, Dolt MODIFY tests, and relevant GMS suites pass; expectations were checked against MySQL 8.4.11.
Addresses the Lambda BATS failure in Dolt #11994. - 3970: Support PostgreSQL UPDATE row counts
Add an engine override to support PostgreSQL UPDATE row count behavior, where all matched rows are counted. Also simplifies INSERT ON DUPLICATE UPDATE handling.
Addresses dolthub/doltgresql#3113.
Doltgres PR: dolthub/doltgresql#3468. - 3967:
INexpr: compare every element of the right tuple
this changes the previous assumption of all tuple elements being of the same type.
Fixes: #11968 - 3965: Reject out-of-range INET_NTOA arguments
Returns NULL with a warning for INET_NTOA arguments outside the IPv4 range.
Fixes #11510 - 3964: Validate twelve-hour STR_TO_DATE inputs
Validates twelve-hour STR_TO_DATE inputs and normalizes midnight and noon consistently with MySQL.
Fixes #11544 - 3963: Reset regular expressions between window partitions
Reinitializes disposed regular expressions when they are reused across window partitions.
Fixes #11550 - 3962: Clamp unsigned MEDIUMINT serialization to its maximum value
Clamps unsigned MEDIUMINT serialization to 16777215. - 3961: Store binary collation metadata explicitly
Stores binary collation metadata explicitly instead of deriving it from collation names.
Fixes dolthub/go-mysql-server#3838 - 3960: Preserve NULL semantics for indexed NOT IN subqueries
Avoids lookup and merge joins that discard NULL semantics in nullable NOT IN subqueries. - 3959: Recompute stored generated columns after definition changes
Recomputes stored generated columns and their dependents when MODIFY or CHANGE alters their definitions.
Fixes #11781 - 3958: Reject malformed UTF-8 in CONVERT USING utf8mb4
Returns NULL with a warning when CONVERT USING utf8mb4 receives malformed UTF-8.
Fixes dolthub/go-mysql-server#3837 - 3957: Preserve unsigned bits when casting to SIGNED
Reinterprets BIGINT UNSIGNED values as signed integers when evaluating CAST AS SIGNED.
Fixes #11906 - 3956: Preserve NOT IN predicates that cannot be unnested
Preserves negation on residual NOT IN predicates when sibling subqueries become anti joins.
Fixes #11913 - 3955: Convert STR_TO_DATE arguments to strings
Accepts binary and numeric arguments to STR_TO_DATE using MySQL-compatible string conversion.
Fixes #11919 - 3954: Respect context cancellation errors during group by aggregation
Cancels blocked grouping producers when the grouping consumer returns an error. - 3953: Allow grouped expressions without column dependencies
Allows column-free expressions and correlated subqueries that reference only grouped columns under ONLY_FULL_GROUP_BY. - 3952: Account for COUNT DISTINCT memory usage
Tracks COUNT DISTINCT allocations through the session memory manager after the grouping cancellation fix in #3954. - 3951: Validate temporal cast precision
Validates temporal cast precision before constructing the target type. - 3950: Fix correlated subquery dependencies in grouped joins
Preserves correlated subquery column dependencies when grouping over joins. - 3949: Fix column statistics queries without initialized privileges
Returns an empty iterator when column statistics are queried without initialized session privileges. - 3948: Implement numeric converts to
TIMEwith precision
Implement conversion for numeric types toTIMEincluding precision parameters.
Also includes conversion logic forbooleantypes and small fixes for string conversions. - 3947: Execute duplicate-key update triggers
Executes duplicate-key update triggers, with import regression coverage in #11980 and DoltgreSQL compatibility changes in dolthub/doltgresql#3469.
Fixes #5925 - 3941: Resolved table and CTE authorization
Fixes a bug where subqueries could bypass permissions in some instances (test cases are now returning errors), and also adds an interface for: - 3940: Require UPDATE privileges for duplicate-key inserts
INSERT ... ON DUPLICATE KEY UPDATE could rewrite rows without UPDATE privileges. Require UPDATE authorization and return the MySQL-compatible error code when access is denied. - 3918: Support escaped
LIKEwildcard in analyzer prefix extraction and pattern matching
Fix #11903
Fix #11910
Blocked by dolthub/vitess#497
Block #11937
Close dolthub/go-mysql-server#3972
vitess
- 498: Removed parse-time CTE authorization
CTEs are properly handled in GMS now, so this removes the check. Is a dependency of: - 494: Support Dolt executable SQL comments
Parses DOLT executable comments for the SQL integration in #11851.
Fixes #3096
Closed Issues
- 11911: ONLY_FULL_GROUP_BY: uncorrelated scalar subqueries in grouped SELECT lists — intended behavior or oversight?
- 11995: Creating a table that matches a dolt_nonlocal_tables rule fails on the rule's target branch, depending on how the primary key is declared
- 12011: sql-server: git remotes with the same URL but different
--refshare one ref — a push from one database overwrites another database's data - 11558: Dolt ignores default backslash escaping for wildcard characters in a window child
- 11907: IN predicate ignores utf8mb4_unicode_ci for accent-insensitive comparisons
- 5925: Update triggers do not fire on
INSERT INTO...ON DUPLICATE KEY UPDATE... - 11968: WHERE returns a row for an IN predicate that evaluates to FALSE
- 10567:
GREATESTandLEASTfunctions should return decimal type when args are decimal types - 8961: Generated Columns deleted the VECTOR index.
- 11949: git remote: since v2.1.2 a pull can re-download the whole database, because each process deletes its fetch ref
- 11910: LIKE does not honor MySQL's default backslash escape
- 11903: String literals drop the backslash in % and _, so LIKE '%_%' matches every row (differs from MySQL)
- 9315:
dolt logtakes really long time. - 11916: GitBlobstore: every ranged read re-inflates the git object from byte 0 — pulls from git remotes are O(reads × part size) (40 min → 2 min with an OID cache)
- 11781: ALTER TABLE MODIFY COLUMN does not recompute a STORED generated column, leaving rows and indexes stale
- 11984: License link is broken
- 11550: Dolt returns a wrong result for REGEXP_LIKE across partitions
- 11913: Planner drops the NOT from the first of two ANDed NOT IN (subquery) predicates when its subquery is a UNION — query returns exactly the excluded rows
- 11919: STR_TO_DATE() with BLOB argument errors with "invalid type: []uint8"
- 11906: Incorrect CAST from BIGINT UNSIGNED to SIGNED
- 8657: Vector index lookup errors when index is non-covering.
- 3838: Add explicit metadata flag on
Collationfor binary collations - 3837: Emit
ER_INVALID_CHARACTER_STRINGon malformed multi-byte character strings instead of returningErrCollationMalformedString