Skip to content

Releases: jonbaldie/database

v0.2.19

Choose a tag to compare

@jonbaldie jonbaldie released this 11 Oct 19:56
8039491

Changed

  • Built with Go 1.26.9 to fix standard library vulnerabilities.
  • Streamed result rows during EXPLAIN ANALYZE like ordinary SELECT queries to stay within session memory limits.

Fixed

  • Used the linked build version for SELECT VERSION(), @@version, and EXPLAIN FORMAT=JSON reports instead of a development default.
  • Wrote the serve ready lifecycle record, with the UNSAFE_NON_TLS_LISTENER warning, 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, SQLSTATE 42S02) for CREATE INDEX, ALTER TABLE, DROP INDEX, and RENAME TABLE on missing tables.
  • Preserved declared column types on information_schema views so numeric columns sort and compare as integers.
  • Exposed contracted metadata columns for information_schema.TABLES and information_schema.COLUMNS.
  • Permitted ALTER TABLE ... ALTER INDEX to 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 serve progress 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 LEAST and GREATEST result types so return values match planned column metadata.

v0.2.18

Choose a tag to compare

@jonbaldie jonbaldie released this 07 Oct 20:01
83624ee

Changed

  • Sped up predicate evaluation on stored numeric row values.

Fixed

  • Returned MySQL error 1153 (ER_NET_PACKET_TOO_LARGE, SQLSTATE 08S01) for an inbound command larger than max_allowed_packet before closing the session, instead of resetting the connection.

v0.2.17

Choose a tag to compare

@jonbaldie jonbaldie released this 04 Oct 21:37
c0bb8c4

Added

  • Added the MySQL 8.4 columns to the constraint and STATISTICS views in information_schema.

Changed

  • Routed --format and --result operator output through one result builder, so JSON results from init, config, and serve are complete database.operator.result/v1 objects.

Fixed

  • Enforced --idle-session-timeout-ms and --idle-in-transaction-timeout-ms, and reported their values in the matching session variables.
  • Reported a missing or uninitialized data directory for database serve as a precondition failure with the same exit code in each output mode.
  • Printed a database.operator.result/v1 failure result for an invalid database init with --result=json, and a human result without it.
  • Reported "state": "stopped" and the preflight, initializing, and validating phases for database init.
  • Emitted the preflight and validating phases for database data validate instead of reading.
  • Rejected SET time_zone='-14:00' with MySQL error 1298.
  • Returned SQLSTATE 42000 with error 1461 when the prepared statement limit is reached.
  • Rejected a column-level CHECK that references another column with MySQL error 3813.
  • Rejected foreign keys with incompatible child and parent column types with MySQL error 3780.
  • Let DROP INDEX remove a UNIQUE key defined in CREATE TABLE.
  • Listed PRIMARY first, then unique keys, then other keys in SHOW INDEX and information_schema.STATISTICS.
  • Reported the Null column of SHOW INDEX correctly and filtered SHOW INDEX ... WHERE on displayed values.
  • Merged IF result 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

Choose a tag to compare

@jonbaldie jonbaldie released this 30 Sep 21:57
686ca09

Fixed

  • Registered SIGINT and SIGTERM handlers 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 failed diagnostic.
  • Replaced physical file names, paths, and hashes in data inspection and validation results with logical component names, and added checked_at to validation results.

v0.2.15

Choose a tag to compare

@jonbaldie jonbaldie released this 27 Sep 21:48
35da118

Changed

  • Improved MySQL packet framing and streaming for text and binary result rows.

Fixed

  • Classified unreadable or corrupt backups as invalid_artifact during JSON restore and reported the target state.

v0.2.14

Choose a tag to compare

@jonbaldie jonbaldie released this 23 Sep 21:40
6f6bd55

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

FROM and SHOW COLUMNS FROM
FROM against the specified database.
• 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

Choose a tag to compare

@jonbaldie jonbaldie released this 23 Sep 08:52
6d1781e

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

Choose a tag to compare

@jonbaldie jonbaldie released this 13 Sep 21:44
5c43fc5

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

Choose a tag to compare

@jonbaldie jonbaldie released this 10 Sep 21:49
2940d31

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

Choose a tag to compare

@jonbaldie jonbaldie released this 09 Sep 21:34
2a8b33e

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 CAST and CONVERT: BINARY with its optional length, DOUBLE, REAL, FLOAT, DATE, DATETIME and TIME with their optional fractional-second precision, and YEAR. 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 TABLE instead of keeping them until a later CREATE TABLE of the same name adopted them.
  • Persisted ALTER TABLE changes that modify only a column type or nullability so they survive a graceful restart.
  • Renamed the column references held by PRIMARY KEY, UNIQUE, and FOREIGN KEY constraints when ALTER TABLE ... RENAME COLUMN or CHANGE COLUMN renames a column, instead of failing with MySQL error 1072 or publishing constraints that name a column that no longer exists.
  • Rejected DROP DATABASE with 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 INSERT values, 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 DIV by a floating-point value when the truncated quotient equals MaxInt64, instead of a false overflow error 1690.
  • Prevented the overflow guard for MinInt64 * -1 from trapping on x86_64; the expression now returns MinInt64 as MySQL does.
  • Negated unsigned values in the signed BIGINT domain: a value at or below MaxInt64 + 1 negates 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.