This release contains backwards incompatible changes:
- schema changes to the
dolt_schemas
anddolt_procedures
system tables to allow@@SQL_MODE
to be stored for schema fragments, as part of support for theANSI_QUOTES
parsing mode. Existing databases will have their system tables automatically upgraded to the new schema. - The stored procedures for
dolt_clone()
anddolt_remote()
no longer support for the optional flags related to AWS (--aws-region, --aws-creds-type, --aws-creds-file, --aws-creds-profile). There is no longer a mechanism to set these values on a running server.
Per Dolt’s versioning policy, this is a minor version bump because of the schema changes for these two system tables. For safety, this release also updates the Dolt feature version to version 4, meaning that once a database is upgraded by using this release, interacting with that database through the dolt
CLI requires version 1.11.0 or higher.
Merged PRs
dolt
- 6515: Prevent
dolt sql
from allowingLOAD_FILE
from directories outside of working directory - 6513: dolt sql-server: Add a system_variables: key to config.yaml, which allows setting global system variables.
For example, this can be used to setsecure_file_priv
when the server starts up. That variable is non-dynamic, so it cannot be set withSET @@GLOBAL...
- 6511: Bug fix: panic in schema merge when schema contains BLOB columns
When processing a schema merge, we need to update existing, stored data in the primary index. We weren't updating the value descriptor in the prolly map to the new version from the changed schema, which started causing a problem withBLOB
/TEXT
types since validation checked that the value stored in those fields was a valid address pointing outside of the table to the real data.
Related to #6496 – the reason that PR wasn't able to cleanly repro the exact failure was because the merge was getting short circuited, since the right and left sides weren't both making changes, so essentially the merge was getting fast-forwarded instead. - 6506: Drop the aws flags from the
dolt_remote()
procedure
Apparently there are no tests for these flags because the tests don't blow up if I remove them. We still allow the flags in the CLI context though. - 6505: Create SECURITY.md
- 6485: Fixed Full-Text merge bug, removed pseudo-index tables from view
This does two primary things. First, it removes the pseudo-index tables fromdolt status
, the status table, merge, and diff outputs. This allows them to match the other index tables, which don't show up in those views anyway. Second, it fixes a bug during merge where the pseudo-index tables are the only ones that have been renamed. The setup is very unlikely, but it's been fixed nonetheless. - 6465:
ANSI_QUOTES
support
Adds support for honoring theANSI_QUOTES
SQL mode. When this SQL mode is enabled, anything in double quotes is assumed to be an identifier, and not a string literal.
Corresponding GMS PR: dolthub/go-mysql-server#1915
Fixes: #6305
go-mysql-server
- 1942: Full-Text Fixes Pt. 3
- 1941: Bug fix for JSON_ARRAY function with binary arguments
Binary args are now treated as character strings
Also added a testing path to ScriptTests that let you inject Vitess bindvars to exercise more server logic
Fixes dolthub/go-mysql-server#1855 - 1940: Add SECURITY.md.
- 1937: Remove do-nothing logic from
pushdown.go
This code is for an optimization that "pushes" filters deeper into the tree so that they're adjacent to the tables they modify.
I've simplified the logic in two ways:- Removed handling of
IndexedTableAccess
nodes. This analysis pass used to run after these nodes were generated, but now runs before, so this code path will never be hit. Removing this logic makes it easier to make future changes toIndexedTableAccess
- Removed the
withTable
subfunction, which never actually does anything, because the only table it will attempt to assign to a ResolvedTable is the table already on the node. This was likely leftover from a previous cleanup.
- Removed handling of
- 1935: Allow timestamps when encoding json
As reported on discord, Nautobot, through DJango, puts time stamp data into a json object. This fails because:
This change enables the encoding of a time stamp into a string.db> select JSON_OBJECT("a", Now()); unsupported type: time.Time
vitess
- 264: Revert dolthub/vitess#261
Change in description breaks prepared statements that send a value with character data above the max size of a CHAR column (256 bytes).
Fixes dolthub/dolthub-issues#489 - 263: Add SECURITY.md.
- 261: Preserving bind var type for sqltypes.Char params
When a caller executes a prepared statement, they send the parameters as well as parameter type information to the sql-server. Vitess populates bindvars type information that go-mysql-server uses to execute the query. Vitess is currently converting many SQL types toVARBINARY
, includingCHAR
, which makes it look like binary data was sent and not a char string, like the caller indicated.
This change stops convertingsqltypes.Char
bind var type info intoVARBINARY
, which enables go-mysql-server to see that a char string was passed. Without this type information, go-mysql-server doesn't seem able to differentiate between legitimate binary data sent by the client versus a character string. Since these types need to be handled differently, and we can't assume that allVARBINARY
types can be converted into strings, it seems like we need to respect the SQL type the caller indicated for the bind var and pass that up to integrators.
It seems like this change could be helpful for other SQL types, too, but I wanted to start with justsqltypes.Char
to see if this approach causes any other issues.
Fixes: dolthub/go-mysql-server#1855
Related go-mysql-server PR: dolthub/go-mysql-server#1919
Related Dolt PR: #6441