CHANGELOG.md 14 KB

Version 1.8.1 (2024-03-26)

Bugfixes:

  • fix race condition when context is canceled in #1562 and #1570

Version 1.8.0 (2024-03-09)

Major Changes:

  • Use SET NAMES charset COLLATE collation. by @methane in #1437
    • Older go-mysql-driver used collation_id in the handshake packet. But it caused collation mismatch in some situation.
    • If you don't specify charset nor collation, go-mysql-driver sends SET NAMES utf8mb4 for new connection. This uses server's default collation for utf8mb4.
    • If you specify charset, go-mysql-driver sends SET NAMES <charset>. This uses the server's default collation for <charset>.
    • If you specify collation and/or charset, go-mysql-driver sends SET NAMES charset COLLATE collation.
  • PathEscape dbname in DSN. by @methane in #1432
    • This is backward incompatible in rare case. Check your DSN.
  • Drop Go 1.13-17 support by @methane in #1420
    • Use Go 1.18+
  • Parse numbers on text protocol too by @methane in #1452
    • When text protocol is used, go-mysql-driver passed bare []byte to database/sql for avoid unnecessary allocation and conversion.
    • If user specified *any to Scan(), database/sql passed the []byte into the target variable.
    • This confused users because most user doesn't know when text/binary protocol used.
    • go-mysql-driver 1.8 converts integer/float values into int64/double even in text protocol. This doesn't increase allocation compared to []byte and conversion cost is negatable.
  • New options start using the Functional Option Pattern to avoid increasing technical debt in the Config object. Future version may introduce Functional Option for existing options, but not for now.

Other changes:

Version 1.7.1 (2023-04-25)

Changes:

  • bump actions/checkout@v3 and actions/setup-go@v3 (#1375)
  • Add go1.20 and mariadb10.11 to the testing matrix (#1403)
  • Increase default maxAllowedPacket size. (#1411)

Bugfixes:

  • Use SET syntax as specified in the MySQL documentation (#1402)

Version 1.7 (2022-11-29)

Changes:

  • Drop support of Go 1.12 (#1211)
  • Refactoring (*textRows).readRow in a more clear way (#1230)
  • util: Reduce boundary check in escape functions. (#1316)
  • enhancement for mysqlConn handleAuthResult (#1250)

New Features:

  • support Is comparison on MySQLError (#1210)
  • return unsigned in database type name when necessary (#1238)
  • Add API to express like a --ssl-mode=PREFERRED MySQL client (#1370)
  • Add SQLState to MySQLError (#1321)

Bugfixes:

  • Fix parsing 0 year. (#1257)

Version 1.6 (2021-04-01)

Changes:

  • Migrate the CI service from travis-ci to GitHub Actions (#1176, #1183, #1190)
  • NullTime is deprecated (#960, #1144)
  • Reduce allocations when building SET command (#1111)
  • Performance improvement for time formatting (#1118)
  • Performance improvement for time parsing (#1098, #1113)

New Features:

  • Implement driver.Validator interface (#1106, #1174)
  • Support returning uint64 from Valuer in ConvertValue (#1143)
  • Add json.RawMessage for converter and prepared statement (#1059)
  • Interpolate json.RawMessage as string (#1058)
  • Implements CheckNamedValue (#1090)

Bugfixes:

  • Stop rounding times (#1121, #1172)
  • Put zero filler into the SSL handshake packet (#1066)
  • Fix checking cancelled connections back into the connection pool (#1095)
  • Fix remove last 0 byte for mysql_old_password when password is empty (#1133)

Version 1.5 (2020-01-07)

Changes:

  • Dropped support Go 1.9 and lower (#823, #829, #886, #1016, #1017)
  • Improve buffer handling (#890)
  • Document potentially insecure TLS configs (#901)
  • Use a double-buffering scheme to prevent data races (#943)
  • Pass uint64 values without converting them to string (#838, #955)
  • Update collations and make utf8mb4 default (#877, #1054)
  • Make NullTime compatible with sql.NullTime in Go 1.13+ (#995)
  • Removed CloudSQL support (#993, #1007)
  • Add Go Module support (#1003)

New Features:

Bugfixes:

  • Mark connections as bad on error during ping (#875)
  • Mark connections as bad on error during dial (#867)
  • Fix connection leak caused by rapid context cancellation (#1024)
  • Mark connections as bad on error during Conn.Prepare (#1030)

Version 1.4.1 (2018-11-14)

Bugfixes:

  • Fix TIME format for binary columns (#818)
  • Fix handling of empty auth plugin names (#835)
  • Fix caching_sha2_password with empty password (#826)
  • Fix canceled context broke mysqlConn (#862)
  • Fix OldAuthSwitchRequest support (#870)
  • Fix Auth Response packet for cleartext password (#887)

Version 1.4 (2018-06-03)

Changes:

  • Documentation fixes (#530, #535, #567)
  • Refactoring (#575, #579, #580, #581, #603, #615, #704)
  • Cache column names (#444)
  • Sort the DSN parameters in DSNs generated from a config (#637)
  • Allow native password authentication by default (#644)
  • Use the default port if it is missing in the DSN (#668)
  • Removed the strict mode (#676)
  • Do not query max_allowed_packet by default (#680)
  • Dropped support Go 1.6 and lower (#696)
  • Updated ConvertValue() to match the database/sql/driver implementation (#760)
  • Document the usage of 0000-00-00T00:00:00 as the time.Time zero value (#783)
  • Improved the compatibility of the authentication system (#807)

New Features:

  • Multi-Results support (#537)
  • rejectReadOnly DSN option (#604)
  • context.Context support (#608, #612, #627, #761)
  • Transaction isolation level support (#619, #744)
  • Read-Only transactions support (#618, #634)
  • NewConfig function which initializes a config with default values (#679)
  • Implemented the ColumnType interfaces (#667, #724)
  • Support for custom string types in ConvertValue (#623)
  • Implemented NamedValueChecker, improving support for uint64 with high bit set (#690, #709, #710)
  • caching_sha2_password authentication plugin support (#794, #800, #801, #802)
  • Implemented driver.SessionResetter (#779)
  • sha256_password authentication plugin support (#808)

Bugfixes:

  • Use the DSN hostname as TLS default ServerName if tls=true (#564, #718)
  • Fixed LOAD LOCAL DATA INFILE for empty files (#590)
  • Removed columns definition cache since it sometimes cached invalid data (#592)
  • Don't mutate registered TLS configs (#600)
  • Make RegisterTLSConfig concurrency-safe (#613)
  • Handle missing auth data in the handshake packet correctly (#646)
  • Do not retry queries when data was written to avoid data corruption (#302, #736)
  • Cache the connection pointer for error handling before invalidating it (#678)
  • Fixed imports for appengine/cloudsql (#700)
  • Fix sending STMT_LONG_DATA for 0 byte data (#734)
  • Set correct capacity for []bytes read from length-encoded strings (#766)
  • Make RegisterDial concurrency-safe (#773)

Version 1.3 (2016-12-01)

Changes:

  • Go 1.1 is no longer supported
  • Use decimals fields in MySQL to format time types (#249)
  • Buffer optimizations (#269)
  • TLS ServerName defaults to the host (#283)
  • Refactoring (#400, #410, #437)
  • Adjusted documentation for second generation CloudSQL (#485)
  • Documented DSN system var quoting rules (#502)
  • Made statement.Close() calls idempotent to avoid errors in Go 1.6+ (#512)

New Features:

  • Enable microsecond resolution on TIME, DATETIME and TIMESTAMP (#249)
  • Support for returning table alias on Columns() (#289, #359, #382)
  • Placeholder interpolation, can be activated with the DSN parameter interpolateParams=true (#309, #318, #490)
  • Support for uint64 parameters with high bit set (#332, #345)
  • Cleartext authentication plugin support (#327)
  • Exported ParseDSN function and the Config struct (#403, #419, #429)
  • Read / Write timeouts (#401)
  • Support for JSON field type (#414)
  • Support for multi-statements and multi-results (#411, #431)
  • DSN parameter to set the driver-side max_allowed_packet value manually (#489)
  • Native password authentication plugin support (#494, #524)

Bugfixes:

  • Fixed handling of queries without columns and rows (#255)
  • Fixed a panic when SetKeepAlive() failed (#298)
  • Handle ERR packets while reading rows (#321)
  • Fixed reading NULL length-encoded integers in MySQL 5.6+ (#349)
  • Fixed absolute paths support in LOAD LOCAL DATA INFILE (#356)
  • Actually zero out bytes in handshake response (#378)
  • Fixed race condition in registering LOAD DATA INFILE handler (#383)
  • Fixed tests with MySQL 5.7.9+ (#380)
  • QueryUnescape TLS config names (#397)
  • Fixed "broken pipe" error by writing to closed socket (#390)
  • Fixed LOAD LOCAL DATA INFILE buffering (#424)
  • Fixed parsing of floats into float64 when placeholders are used (#434)
  • Fixed DSN tests with Go 1.7+ (#459)
  • Handle ERR packets while waiting for EOF (#473)
  • Invalidate connection on error while discarding additional results (#513)
  • Allow terminating packets of length 0 (#516)

Version 1.2 (2014-06-03)

Changes:

  • We switched back to a "rolling release". go get installs the current master branch again
  • Version v1 of the driver will not be maintained anymore. Go 1.0 is no longer supported by this driver
  • Exported errors to allow easy checking from application code
  • Enabled TCP Keepalives on TCP connections
  • Optimized INFILE handling (better buffer size calculation, lazy init, ...)
  • The DSN parser also checks for a missing separating slash
  • Faster binary date / datetime to string formatting
  • Also exported the MySQLWarning type
  • mysqlConn.Close returns the first error encountered instead of ignoring all errors
  • writePacket() automatically writes the packet size to the header
  • readPacket() uses an iterative approach instead of the recursive approach to merge split packets

New Features:

  • RegisterDial allows the usage of a custom dial function to establish the network connection
  • Setting the connection collation is possible with the collation DSN parameter. This parameter should be preferred over the charset parameter
  • Logging of critical errors is configurable with SetLogger
  • Google CloudSQL support

Bugfixes:

  • Allow more than 32 parameters in prepared statements
  • Various old_password fixes
  • Fixed TestConcurrent test to pass Go's race detection
  • Fixed appendLengthEncodedInteger for large numbers
  • Renamed readLengthEnodedString to readLengthEncodedString and skipLengthEnodedString to skipLengthEncodedString (fixed typo)

Version 1.1 (2013-11-02)

Changes:

  • Go-MySQL-Driver now requires Go 1.1
  • Connections now use the collation utf8_general_ci by default. Adding &charset=UTF8 to the DSN should not be necessary anymore
  • Made closing rows and connections error tolerant. This allows for example deferring rows.Close() without checking for errors
  • []byte(nil) is now treated as a NULL value. Before, it was treated like an empty string / []byte("")
  • DSN parameter values must now be url.QueryEscape'ed. This allows text values to contain special characters, such as '&'.
  • Use the IO buffer also for writing. This results in zero allocations (by the driver) for most queries
  • Optimized the buffer for reading
  • stmt.Query now caches column metadata
  • New Logo
  • Changed the copyright header to include all contributors
  • Improved the LOAD INFILE documentation
  • The driver struct is now exported to make the driver directly accessible
  • Refactored the driver tests
  • Added more benchmarks and moved all to a separate file
  • Other small refactoring

New Features:

  • Added old_passwords support: Required in some cases, but must be enabled by adding allowOldPasswords=true to the DSN since it is insecure
  • Added a clientFoundRows parameter: Return the number of matching rows instead of the number of rows changed on UPDATEs
  • Added TLS/SSL support: Use a TLS/SSL encrypted connection to the server. Custom TLS configs can be registered and used

Bugfixes:

  • Fixed MySQL 4.1 support: MySQL 4.1 sends packets with lengths which differ from the specification
  • Convert to DB timezone when inserting time.Time
  • Split packets (more than 16MB) are now merged correctly
  • Fixed false positive io.EOF errors when the data was fully read
  • Avoid panics on reuse of closed connections
  • Fixed empty string producing false nil values
  • Fixed sign byte for positive TIME fields

Version 1.0 (2013-05-14)

Initial Release