File name
Commit message
Commit date

Changes#

This file is a manually maintained list of changes for each release. Feel free
to add your changes here when sending pull requests. Also send corrections if
you spot any mistakes.

v2.18.1 (2020-01-23)#

  • Fix Amazon RDS profile for yaSSL MySQL servers with 2019 CA #2292

v2.18.0 (2020-01-21)#

  • Add localInfile option to control LOAD DATA LOCAL INFILE
  • Add new Amazon RDS Root 2019 CA to Amazon RDS SSL profile #2280
  • Add new error codes up to MySQL 5.7.29
  • Fix early detection of bad callback to connection.query
  • Support Node.js 12.x #2211
  • Support Node.js 13.x
  • Support non-enumerable properties in object argument to connection.query #2253
  • Update bignumber.js to 9.0.0
  • Update readable-stream to 2.3.7

v2.17.1 (2019-04-18)#

  • Update bignumber.js to 7.2.1 #2206
    • Fix npm deprecation warning

v2.17.0 (2019-04-17)#

  • Add reverse type lookup for small performance gain #2170
  • Fix connection.threadId missing on handshake failure
  • Fix duplicate packet name in debug output
  • Fix no password support for old password protocol
  • Remove special case for handshake in determine packet code
  • Small performance improvement starting command sequence
  • Support auth switch in change user flow #1776
  • Support Node.js 11.x
  • Update bignumber.js to 6.0.0

v2.16.0 (2018-07-17)#

  • Add Amazon RDS GovCloud SSL certificates #1876
  • Add new error codes up to MySQL 5.7.21
  • Include connection ID in debug output
  • Support Node.js 9.x
  • Support Node.js 10.x #2003 #2024 #2026 #2034
  • Update Amazon RDS SSL certificates
  • Update bignumber.js to 4.1.0
  • Update readable-stream to 2.3.6
  • Update sqlstring to 2.3.1
    • Fix incorrectly replacing non-placeholders in SQL

v2.15.0 (2017-10-05)#

  • Add new Amazon RDS ca-central-1 certificate CA to Amazon RDS SSL profile #1809
  • Add new error codes up to MySQL 5.7.19
  • Add mysql.raw() to generate pre-escaped values #877 #1821
  • Fix "changedRows" to work on non-English servers #1819
  • Fix error when server sends RST on QUIT #1811
  • Fix typo in insecure auth error message
  • Support mysql_native_password auth switch request for Azure #1396 #1729 #1730
  • Update sqlstring to 2.3.0
    • Add .toSqlString() escape overriding
    • Small performance improvement on escapeId
  • Update bignumber.js to 4.0.4

v2.14.1 (2017-08-01)#

  • Fix holding first closure for lifetime of connection #1785

v2.14.0 (2017-07-25)#

  • Add new Amazon RDS ap-south-1 certificate CA to Amazon RDS SSL profile #1780
  • Add new Amazon RDS eu-west-2 certificate CA to Amazon RDS SSL profile #1770
  • Add sql property to query Error objects #1462 #1628 #1629
  • Add sqlMessage property to Error objects #1714
  • Fix the MySQL 5.7.17 error codes
  • Support Node.js 8.x
  • Update bignumber.js to 4.0.2
  • Update readable-stream to 2.3.3
  • Use safe-buffer for improved Buffer API

v2.13.0 (2017-01-24)#

  • Accept regular expression as pool cluster pattern #1572
  • Accept wildcard anywhere in pool cluster pattern #1570
  • Add acquire and release events to Pool for tracking #1366 #1449 #1528 #1625
  • Add new error codes up to MySQL 5.7.17
  • Fix edge cases when determing Query result packets #1547
  • Fix memory leak when using long-running domains #1619 #1620
  • Remove unnecessary buffer copies when receiving large packets
  • Update bignumber.js to 3.1.2
  • Use a simple buffer list to improve performance #566 #1590

v2.12.0 (2016-11-02)#

  • Accept array of type names to dateStrings option #605 #1481
  • Add query method to PoolNamespace #1256 #1505 #1506
    • Used as cluster.of(...).query(...)
  • Add new error codes up to MySQL 5.7.16
  • Fix edge cases writing certain length coded values
  • Fix typo in HANDSHAKE_NO_SSL_SUPPORT error message #1534
  • Support Node.js 7.x
  • Update bignumber.js to 2.4.0
  • Update sqlstring to 2.2.0
    • Accept numbers and other value types in escapeId
    • Escape invalid Date objects as NULL
    • Run buffer.toString() through escaping

v2.11.1 (2016-06-07)#

  • Fix writing truncated packets starting with large string/buffer #1438

v2.11.0 (2016-06-06)#

  • Add POOL_CLOSED code to "Pool is closed." error
  • Add POOL_CONNLIMIT code to "No connections available." error #1332
  • Bind underlying connections in pool to same domain as pool #1242
  • Bind underlying socket to same domain as connection #1243
  • Fix allocation errors receiving many result rows #918 #1265 #1324 #1415
  • Fix edge cases constructing long stack traces #1387
  • Fix handshake inactivity timeout on Node.js v4.2.0 #1223 #1236 #1239 #1240 #1241 #1252
  • Fix Query stream to emit close after ending #1349 #1350
  • Fix type cast for BIGINT columns when number is negative #1376
  • Performance improvements for array/object escaping in SqlString #1331
  • Performance improvements for formatting in SqlString #1431
  • Performance improvements for string escaping in SqlString #1390
  • Performance improvements for writing packets to network
  • Support Node.js 6.x
  • Update bignumber.js to 2.3.0
  • Update readable-stream to 1.1.14
  • Use the sqlstring module for SQL escaping and formatting

v2.10.2 (2016-01-12)#

  • Fix exception/hang from certain SSL connection errors #1153
  • Update bignumber.js to 2.1.4

v2.10.1 (2016-01-11)#

  • Add new Amazon RDS ap-northeast-2 certificate CA to Amazon RDS SSL profile #1329

v2.10.0 (2015-12-15)#

  • Add new error codes up to MySQL 5.7.9 #1294
  • Add new JSON type constant #1295
  • Add types for fractional seconds support
  • Fix connection.destroy() on pool connection creating sequences #1291
  • Fix error code 139 HA_ERR_TO_BIG_ROW to be HA_ERR_TOO_BIG_ROW
  • Fix error when call site error is missing stack #1179
  • Fix reading password from MySQL URL that has bare colon #1278
  • Handle MySQL servers not closing TCP connection after QUIT -> OK exchange #1277
  • Minor SqlString Date to string performance improvement #1233
  • Support Node.js 4.x
  • Support Node.js 5.x
  • Update bignumber.js to 2.1.2

v2.9.0 (2015-08-19)#

  • Accept the ciphers property in connection ssl option #1185
  • Fix bad timezone conversion from Date to string for certain times #1045 #1155

v2.8.0 (2015-07-13)#

  • Add connect event to Connection #1129
  • Default timeout for connection.end to 30 seconds #1057
  • Fix a sync callback when sequence enqueue fails #1147
  • Provide static require analysis
  • Re-use connection from pool after conn.changeUser is used #837 #1088

v2.7.0 (2015-05-27)#

  • Destroy/end connections removed from the pool on error
  • Delay implied connect until after .query argument validation
  • Do not remove connections with non-fatal errors from the pool
  • Error early if callback argument to .query is not a function #1060
  • Lazy-load modules from many entry point; reduced memory use

v2.6.2 (2015-04-14)#

  • Fix Connection.createQuery for no SQL #1058
  • Update bignumber.js to 2.0.7

v2.6.1 (2015-03-26)#

  • Update bignumber.js to 2.0.5 #1037 #1038

v2.6.0 (2015-03-24)#

  • Add poolCluster.remove to remove pools from the cluster #1006 #1007
  • Add optional callback to poolCluster.end
  • Add restoreNodeTimeout option to PoolCluster #880 #906
  • Fix LOAD DATA INFILE handling in multiple statements #1036
  • Fix poolCluster.add to throw if PoolCluster has been closed
  • Fix poolCluster.add to throw if id already defined
  • Fix un-catchable error from PoolCluster when MySQL server offline #1033
  • Improve speed formatting SQL #1019
  • Support io.js

v2.5.5 (2015-02-23)#

  • Store SSL presets in JS instead of JSON #959
  • Support Node.js 0.12
  • Update Amazon RDS SSL certificates #1001

v2.5.4 (2014-12-16)#

  • Fix error if falsy error thrown in callback handler #960
  • Fix various error code strings #954

v2.5.3 (2014-11-06)#

  • Fix pool.query streaming interface not emitting connection errors #941

v2.5.2 (2014-10-10)#

  • Fix receiving large text fields #922

v2.5.1 (2014-09-22)#

  • Fix pool.end race conditions #915
  • Fix pool.getConnection race conditions

v2.5.0 (2014-09-07)#

  • Add code POOL_ENQUEUELIMIT to error reaching queueLimit
  • Add enqueue event to pool #716
  • Add enqueue event to protocol and connection #381
  • Blacklist unsupported connection flags #881
  • Make only column names enumerable in RowDataPacket #549 #895
  • Support Node.js 0.6 #718

v2.4.3 (2014-08-25)#

  • Fix pool.query to use typeCast configuration

v2.4.2 (2014-08-03)#

  • Fix incorrect sequence packet errors to be catchable #867
  • Fix stray protocol packet errors to be catchable #867
  • Fix timing of fatal protocol errors bubbling to user #879

v2.4.1 (2014-07-17)#

  • Fix pool.query not invoking callback on connection error #872

v2.4.0 (2014-07-13)#

  • Add code POOL_NOEXIST in PoolCluster error #846
  • Add acquireTimeout pool option to specify a timeout for acquiring a connection #821 #854
  • Add connection.escapeId
  • Add pool.escapeId
  • Add timeout option to all sequences #855 #863
  • Default connectTimeout to 10 seconds
  • Fix domain binding with conn.connect
  • Fix packet.default to actually be a string
  • Fix PARSER_* errors to be catchable
  • Fix PROTOCOL_PACKETS_OUT_OF_ORDER error to be catchable #844
  • Include packets that failed parsing under debug
  • Return Query object from pool.query like conn.query #830
  • Use EventEmitter.listenerCount when possible for faster counting

v2.3.2 (2014-05-29)#

  • Fix pool leaking connections after conn.changeUser #833

v2.3.1 (2014-05-26)#

  • Add database errors to error constants
  • Add global errors to error constants
  • Throw when calling conn.release multiple times #824 #827
  • Update known error codes

v2.3.0 (2014-05-16)#

  • Accept MySQL charset (like UTF8 or UTF8MB4) in charset option #808
  • Accept pool options in connection string to mysql.createPool #811
  • Clone connection config for new pool connections
  • Default connectTimeout to 2 minutes
  • Reject unauthorized SSL connections (use ssl.rejectUnauthorized to override) #816
  • Return last error when PoolCluster exhausts connection retries #818
  • Remove connection from pool after conn.changeUser is released #806
  • Throw on unknown SSL profile name #817
  • User newer TLS functions when available #809

v2.2.0 (2014-04-27)#

  • Use indexOf instead of for loops removing conn from pool #611
  • Make callback to pool.query optional like conn.query #585
  • Prevent enqueuing sequences after fatal error #400
  • Fix geometry parser for empty fields #742
  • Accept lower-case charset option
  • Throw on unknown charset option #789
  • Update known charsets
  • Remove console.warn from PoolCluster #744
  • Fix pool.end to handle queued connections #797
  • Fix pool.releaseConnection to keep connection queue flowing #797
  • Fix SSL handshake error to be catchable #800
  • Add connection.threadId to get MySQL connection ID #602
  • Ensure pool.getConnection retrieves good connections #434 #557 #778
  • Fix pool cluster wildcard matching #627
  • Pass query values through to SqlString.format #590

v2.1.1 (2014-03-13)#

  • fix authentication w/password failure for node.js 0.10.5 #746 #752
  • fix authentication w/password TypeError exception for node.js 0.10.0-0.10.4 #747
  • fix specifying values in conn.query({...}).on(...) pattern #755
  • fix long stack trace to include the pool.query(...) call #715

v2.1.0 (2014-02-20)#

  • crypto.createHash fix for node.js < 11 #735
  • Add connectTimeout option to specify a timeout for establishing a connection #726
  • SSL support #481

v2.0.1#

  • internal parser speed improvement #702
  • domains support
  • 'trace' connection option to control if long stack traces are generated #713 #710 #439

v2.0.0 (2014-01-09)#

  • stream improvements:
    • node 0.8 support #692
    • Emit 'close' events from query streams #688
  • encoding fix in streaming LOAD DATA LOCAL INFILE #670
  • Doc improvements

v2.0.0-rc2 (2013-12-07)#

  • Streaming LOAD DATA LOCAL INFILE #668
  • Doc improvements

v2.0.0-rc1 (2013-11-30)#

  • Transaction support
  • Expose SqlString.format as mysql.format()
  • Many bug fixes
  • Better support for dates in local time zone
  • Doc improvements

v2.0.0-alpha9 (2013-08-27)#

  • Add query to pool to execute queries directly using the pool
  • Add sqlState property to Error objects #556
  • Pool option to set queue limit
  • Pool sends 'connection' event when it opens a new connection
  • Added stringifyObjects option to treat input as strings rather than objects (#501)
  • Support for poolClusters
  • Datetime improvements
  • Bug fixes

v2.0.0-alpha8 (2013-04-30)#

  • Switch to old mode for Streams 2 (Node.js v 0.10.x)
  • Add stream method to Query Wraps events from the query object into a node v0.10.x Readable stream
  • DECIMAL should also be treated as big number
  • Removed slow unnecessary stack access
  • Added charsets
  • Added bigNumberStrings option for forcing BIGINT columns as strings
  • Changes date parsing to return String if not a valid JS Date
  • Adds support for ?? escape sequence to escape identifiers
  • Changes Auth.token() to force password to be in binary, not utf8 (#378)
  • Restrict debugging by packet types
  • Add 'multipleStatements' option tracking to ConnectionConfig. Fixes GH-408
  • Changes Pool to handle 'error' events and dispose connection
  • Allows db.query({ sql: "..." }, [ val1, ... ], cb); (#390)
  • Improved documentation
  • Bug fixes

v2.0.0-alpha7 (2013-02-03)#

  • Add connection pooling (#351)

v2.0.0-alpha6 (2013-01-31)#

  • Add supportBigNumbers option (#381, #382)
  • Accept prebuilt Query object in connection.query
  • Bug fixes

v2.0.0-alpha5 (2012-12-03)#

  • Add mysql.escapeId to escape identifiers (closes #342)
  • Allow custom escaping mode (config.queryFormat)
  • Convert DATE columns to configured timezone instead of UTC (#332)
  • Convert LONGLONG and NEWDECIMAL to numbers (#333)
  • Fix Connection.escape() (fixes #330)
  • Changed Readme ambiguity about custom type cast fallback
  • Change typeCast to receive Connection instead of Connection.config.timezone
  • Fix drain event having useless err parameter
  • Add Connection.statistics() back from v0.9
  • Add Connection.ping() back from v0.9

v2.0.0-alpha4 (2012-10-03)#

  • Fix some OOB errors on resume()
  • Fix quick pause() / resume() usage
  • Properly parse host denied / similar errors
  • Add Connection.ChangeUser functionality
  • Make sure changeUser errors are fatal
  • Enable formatting nested arrays for bulk inserts
  • Add Connection.escape functionality
  • Renamed 'close' to 'end' event
  • Return parsed object instead of Buffer for GEOMETRY types
  • Allow nestTables inline (using a string instead of a boolean)
  • Check for ZEROFILL_FLAG and format number accordingly
  • Add timezone support (default: local)
  • Add custom typeCast functionality
  • Export mysql column types
  • Add connection flags functionality (#237)
  • Exports drain event when queue finishes processing (#272, #271, #306)

v2.0.0-alpha3 (2012-06-12)#

  • Implement support for LOAD DATA LOCAL INFILE queries (#182).
  • Support OLD_PASSWORD() accounts like 0.9.x did. You should still upgrade any
    user accounts in your your MySQL user table that has short (16 byte) Password
    values. Connecting to those accounts is not secure. (#204)
  • Ignore function values when escaping objects, allows to use RowDataPacket
    objects as query arguments. (Alex Gorbatchev, #213)
  • Handle initial error packets from server such as ER_HOST_NOT_PRIVILEGED.
  • Treat utf8\_bin as a String, not Buffer. (#214)
  • Handle empty strings in first row column value. (#222)
  • Honor Connection#nestTables setting for queries. (#221)
  • Remove CLIENT_INTERACTIVE flag from config. Improves #225.
  • Improve docs for connections settings.
  • Implement url string support for Connection configs.

v2.0.0-alpha2 (2012-05-31)#

  • Specify escaping before for NaN / Infinity (they are as unquoted constants).
  • Support for unix domain socket connections (use: {socketPath: '...'}).
  • Fix type casting for NULL values for Date/Number fields
  • Add fields argument to query() as well as 'fields' event. This is
    similar to what was available in 0.9.x.
  • Support connecting to the sphinx searchd daemon as well as MariaDB (#199).
  • Implement long stack trace support, will be removed / disabled if the node
    core ever supports it natively.
  • Implement nestTables option for queries, allows fetching JOIN result sets
    with overlapping column names.
  • Fix ? placeholder mechanism for values containing '?' characters (#205).
  • Detect when connect() is called more than once on a connection and provide
    the user with a good error message for it (#204).
  • Switch to UTF8_GENERAL_CI (previously UTF8_UNICODE_CI) as the default
    charset for all connections to avoid strange MySQL performance issues (#200),
    and also make the charset user configurable.
  • Fix BLOB type casting for TINY_BLOB, MEDIUM_BLOB and LONG_BLOB.
  • Add support for sending and receiving large (> 16 MB) packets.

v2.0.0-alpha (2012-05-15)#

This release is a rewrite. You should carefully test your application after
upgrading to avoid problems. This release features many improvements, most
importantly:

  • ~5x faster than v0.9.x for parsing query results
  • Support for pause() / resume() (for streaming rows)
  • Support for multiple statement queries
  • Support for stored procedures
  • Support for transactions
  • Support for binary columns (as blobs)
  • Consistent & well documented error handling
  • A new Connection class that has well defined semantics (unlike the old Client class).
  • Convenient escaping of objects / arrays that allows for simpler query construction
  • A significantly simpler code base
  • Many bug fixes & other small improvements (Closed 62 out of 66 GitHub issues)

Below are a few notes on the upgrade process itself:

The first thing you will run into is that the old Client class is gone and
has been replaced with a less ambitious Connection class. So instead of
mysql.createClient(), you now have to:

var mysql      = require('mysql');
var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'me',
  password : 'secret',
});

connection.query('SELECT 1', function(err, rows) {
  if (err) throw err;

  console.log('Query result: ', rows);
});

connection.end();

The new Connection class does not try to handle re-connects, please study the
Server disconnects section in the new Readme.

Other than that, the interface has stayed very similar. Here are a few things
to check out so:

  • BIGINT's are now cast into strings
  • Binary data is now cast to buffers
  • The 'row' event on the Query object is now called 'result' and will
    also be emitted for queries that produce an OK/Error response.
  • Error handling is consistently defined now, check the Readme
  • Escaping has become more powerful which may break your code if you are
    currently using objects to fill query placeholders.
  • Connections can now be established explicitly again, so you may wish to do so
    if you want to handle connection errors specifically.

That should be most of it, if you run into anything else, please send a patch
or open an issue to improve this document.

v0.9.6 (2012-03-12)#

  • Escape array values so they produce sql arrays (Roger Castells, Colin Smith)
  • docs: mention mysql transaction stop gap solution (Blake Miner)
  • docs: Mention affectedRows in FAQ (Michael Baldwin)

v0.9.5 (2011-11-26)#

  • Fix #142 Driver stalls upon reconnect attempt that's immediately closed
  • Add travis build
  • Switch to urun as a test runner
  • Switch to utest for unit tests
  • Remove fast-or-slow dependency for tests
  • Split integration tests into individual files again

v0.9.4 (2011-08-31)#

  • Expose package.json as mysql.PACKAGE (#104)

v0.9.3 (2011-08-22)#

  • Set default client.user to root
  • Fix #91: Client#format should not mutate params array
  • Fix #94: TypeError in client.js
  • Parse decimals as string (vadimg)

v0.9.2 (2011-08-07)#

  • The underlaying socket connection is now managed implicitly rather than explicitly.
  • Check the [upgrading guide][] for a full list of changes.

v0.9.1 (2011-02-20)#

  • Fix issue #49 / client.escape() throwing exceptions on objects. (Nick Payne)
  • Drop < v0.4.x compatibility. From now on you need node v0.4.x to use this module.

Older releases#

These releases were done before maintaining this file: