Repository navigation
Releases: jonbaldie/database
Release list
v0.2.19
Changed
- Built with Go 1.26.9 to fix standard library vulnerabilities.
- Streamed result rows during
EXPLAIN ANALYZElike ordinarySELECTqueries to stay within session memory limits.
Fixed
- Used the linked build version for
SELECT VERSION(),@@version, andEXPLAIN FORMAT=JSONreports instead of a development default. - Wrote the
serveready lifecycle record, with theUNSAFE_NON_TLS_LISTENERwarning, to standard error at ready time in operator result mode, instead of reporting the warning only after shutdown. - Returned MySQL 8.4 error 1146 (
ER_NO_SUCH_TABLE, SQLSTATE42S02) forCREATE INDEX,ALTER TABLE,DROP INDEX, andRENAME TABLEon missing tables. - Preserved declared column types on
information_schemaviews so numeric columns sort and compare as integers. - Exposed contracted metadata columns for
information_schema.TABLESandinformation_schema.COLUMNS. - Permitted
ALTER TABLE ... ALTER INDEXto change visibility of unique constraint keys, and persisted index visibility changes across restarts. - Prevented races between statement execution registration and live query explanation reporting.
- Kept
database serveprogress reporting within its closed vocabulary and included instance identity, ready and stopping timestamps, and shutdown reason in success details. - Returned specific MySQL 8.4 error numbers (1091, 1176, 1070, 3822, 1826, 6125, 1824, 3734, 3820) for schema-change and constraint definition failures.
- Merged
LEASTandGREATESTresult types so return values match planned column metadata.
v0.2.18
Changed
- Sped up predicate evaluation on stored numeric row values.
Fixed
- Returned MySQL error 1153 (
ER_NET_PACKET_TOO_LARGE, SQLSTATE08S01) for an inbound command larger thanmax_allowed_packetbefore closing the session, instead of resetting the connection.
v0.2.17
Added
- Added the MySQL 8.4 columns to the constraint and
STATISTICSviews ininformation_schema.
Changed
- Routed
--formatand--resultoperator output through one result builder, so JSON results frominit,config, andserveare completedatabase.operator.result/v1objects.
Fixed
- Enforced
--idle-session-timeout-msand--idle-in-transaction-timeout-ms, and reported their values in the matching session variables. - Reported a missing or uninitialized data directory for
database serveas a precondition failure with the same exit code in each output mode. - Printed a
database.operator.result/v1failure result for an invaliddatabase initwith--result=json, and a human result without it. - Reported
"state": "stopped"and thepreflight,initializing, andvalidatingphases fordatabase init. - Emitted the
preflightandvalidatingphases fordatabase data validateinstead ofreading. - Rejected
SET time_zone='-14:00'with MySQL error 1298. - Returned SQLSTATE
42000with error 1461 when the prepared statement limit is reached. - Rejected a column-level
CHECKthat references another column with MySQL error 3813. - Rejected foreign keys with incompatible child and parent column types with MySQL error 3780.
- Let
DROP INDEXremove aUNIQUEkey defined inCREATE TABLE. - Listed
PRIMARYfirst, then unique keys, then other keys inSHOW INDEXandinformation_schema.STATISTICS. - Reported the
Nullcolumn ofSHOW INDEXcorrectly and filteredSHOW INDEX ... WHEREon displayed values. - Merged
IFresult argument types so all rows share one type. - Kept temporal kind and collation across subquery boundaries in comparisons.
- Keyed row locks and point lookups by the canonical table identity instead of the statement spelling.
v0.2.16
Fixed
- Registered
SIGINTandSIGTERMhandlers before reporting the server ready, so an immediate stop still completes a clean shutdown. - Normalized access failures from online backup and shutdown operations to a single
connection faileddiagnostic. - Replaced physical file names, paths, and hashes in data inspection and validation results with logical component names, and added
checked_atto validation results.
v0.2.15
v0.2.14
Added
• Supported catalog SHOW statements with FROM, IN, FULL, and WHERE clauses.
• Supported SHOW CHARACTER SET and SHOW COLLATION.
• Supported FOR GROUP BY clauses in index hints.
Fixed
• Enforced the CREATE USER credential policy at instance initialization (database init).
• Rejected passwords outside 12 through 1,024 bytes and invalid account names before modifying the data directory.
• Rejected non-ASCII characters after the first character in account names for CREATE USER.
• Resolved namespace visibility consistently across authentication, USE, schema metadata, grants, and DDL statements.
• Returned MySQL error 1044 or 1049 for hidden and missing namespaces.
• Read point lookups from the active transaction snapshot rather than only durable store indexes.
• Preserved visibility of staged updates and deletes for primary key queries.
• Resolved SHOW INDEX FROM
• Validated existing rows when CREATE UNIQUE INDEX or ALTER TABLE ... ADD UNIQUE INDEX creates a unique index.
• Merged argument types for IFNULL and COALESCE expressions so column metadata matches subsequent row values.
• Computed outer expression metadata for composed aggregate projections.
• Skipped quoted string literals when parsing aggregate and window function calls in SQL clauses.
• Matched substrings by active collation in REPLACE for non-binary string arguments.
• Formatted ordering directions as lowercase asc or desc in EXPLAIN output.
Removed
• Removed the unused internal/engine package so all SQL execution uses the unified MySQL wire engine.
See CHANGELOG.md for the complete release history.
v0.2.13
Fixed
- Return MySQL error 1064 for incomplete target keywords or a trailing dotted identifier instead of stopping the server.
- Check statement deadlines during scalar LIKE evaluation so long inputs and wildcards respond to cancellation.
See CHANGELOG.md for the complete release history.
v0.2.12
Added
- Supported AUTO_INCREMENT on one indexed integer column per table. An omitted value, NULL, or DEFAULT takes the next value, starting at 1. An explicit positive value at or above the next value advances the sequence. Deletes do not reuse values, and TRUNCATE TABLE resets the sequence.
- Supported the column-introspection statements SHOW [FULL] COLUMNS FROM|IN, SHOW [FULL] FIELDS FROM|IN, DESCRIBE, and DESC, and supported SHOW [SESSION|GLOBAL] STATUS with LIKE filtering. SHOW FULL COLUMNS reports the session account's namespace grants in the Privileges column.
Fixed
- Accepted double-quoted string literals in projections, predicates, and INSERT ... VALUES instead of failing with MySQL error 1064.
- Preserved bytewise LOCATE matching and byte offsets for binary operands.
- Preserved binary semantics through REPLACE, REVERSE, LTRIM, RTRIM, TRIM, UPPER, LOWER, and CHAR_LENGTH.
- Made SUBSTRING byte-exact for binary arguments while keeping character semantics for text.
- Returned NULL from database functions when no database is selected.
- Advanced the auto-increment counter when UPDATE or an ON DUPLICATE KEY UPDATE conflict sets an explicit positive value, instead of allocating a duplicate value on a later INSERT.
- Updated every foreign key's referenced table name when a parent table is renamed, including self-referencing and cross-namespace references.
See CHANGELOG.md for the complete release history.
v0.2.11
Fixed
- Accepted carriage returns at SQL keyword boundaries, including CRLF input.
- Ignored locking marker text inside quoted strings when detecting read-only statements.
- Preserved bytewise semantics for CAST AS BINARY comparisons, distinct values, aggregate keys, and set or subquery comparisons.
- Preserved bytewise LIKE matching for binary values instead of folding case.
- Preserved temporal type metadata for current-time projections.
- Preserved binary result semantics through CONCAT and SUBSTRING.
See CHANGELOG.md for the complete release history.
v0.2.10
What changed since v0.2.9
v0.2.10 adds the remaining MySQL CAST and CONVERT destinations and fixes durability, parsing, arithmetic, and DDL behaviour so it matches the documented MySQL 8.4 contracts.
New SQL capabilities
- Accepted the remaining MySQL cast destinations in
CASTandCONVERT:BINARYwith its optional length,DOUBLE,REAL,FLOAT,DATE,DATETIMEandTIMEwith their optional fractional-second precision, andYEAR. A temporal or approximate-numeric result advertises the target family's wire metadata, a temporal source contributes its date or clock part to a narrower target, and a malformed or out-of-range value still fails with the family's MySQL error identity.
Durability and DDL
- Dropped a table's durable rows and indexes with
DROP TABLEinstead of keeping them until a laterCREATE TABLEof the same name adopted them. - Persisted
ALTER TABLEchanges that modify only a column type or nullability so they survive a graceful restart. - Renamed the column references held by
PRIMARY KEY,UNIQUE, andFOREIGN KEYconstraints whenALTER TABLE ... RENAME COLUMNorCHANGE COLUMNrenames a column, instead of failing with MySQL error 1072 or publishing constraints that name a column that no longer exists. - Rejected
DROP DATABASEwith MySQL error 3730 when a table in the database is referenced by a foreign key constraint in another database, instead of dropping it and leaving the child table's constraint pointing at an unknown database. - Reported MySQL error 1452 for foreign key violations on new or changed child rows in self-referencing tables, including orphan
INSERTvalues, instead of MySQL error 1451, which stays reserved for deleted or updated parent rows.
SQL parsing and expressions
- Accepted
LIKE 'pattern' ESCAPE ''as disabling the escape character instead of failing with error 1064. - Returned the BIGINT result for
DIVby a floating-point value when the truncated quotient equalsMaxInt64, instead of a false overflow error 1690. - Prevented the overflow guard for
MinInt64 * -1from trapping on x86_64; the expression now returnsMinInt64as MySQL does. - Negated unsigned values in the signed
BIGINTdomain: a value at or belowMaxInt64 + 1negates to a signed result, and only a value above that fails with MySQL error 1690, instead of rejecting every unary minus on an unsigned value.
The release includes native binaries for macOS Apple Silicon, Linux amd64, and Linux arm64. It also includes a multi-architecture OCI image archive for linux/amd64 and linux/arm64/v8.
See the full changelog.