2014-06-27 Version 2.13.1

    * Expose thread_id method on database adapater

2014-06-09 Version 2.13.0

    * Move to DATETIME and client side UTC timestamps
    * Requires a full table migration for anything using sql_step_queue or sql_lock

2014-06-06 Version 2.12.2

    * Refactor SQLStepQueue into multiple files - still backwards compat from an import perspective
    * Allow user to pass in different TaskHandler class

2014-06-05 Version 2.12.1

    * When refreshing a SQLStepQueue task we need to parse step start/stop times as datetime's

2014-06-04 Version 2.12.0

    * Added update_count column to SQLStepQueue
        * this ensures that every update causes a return value of 1 changed row, so long as there is at least one row to change.
    * Return the task id from enqueue

2014-06-02 Version 2.11.2

    * Fixed bug in SQLStepQueue

2014-05-23 Version 2.11.1

    * Fixed bug in SQLStepQueue

2014-03-26 Version 2.11.0

    * Improved performance of the Row class
        * Semi-mutable
        * Mostly backwards compat, but certain delete key operations will fail

2014-03-12 Version 2.10.4

    * Added query_builder module to help write complex SQL queries.

2014-03-09 Version 2.10.3

    * Re-enabled _ensure_connected
    * Added select_db method to database connections

2014-03-09 Version 2.10.2

    * Made it easier to modify data on a task_handler
    * Better unicode support

2014-02-03 Version 2.10.1

    * 2.10.0 made certain queries go through the formatter even without
      params, this broke things like having single percents in queries.

2014-02-02 Version 2.10.0

    * Modified SQLStepQueue to work with MemSQL distributed
    * added tests
    * added extra_predicate (to pop/inspect different subsets of the queue)
    * exposed escaping in database.py
    * fixed some 2.6 compatibility issues
    * added requeue and bulk_finish to sql_step_queue

2014-01-03 Version 2.9.0

    * Implemented _mysql 1.2.5 compatability
        * All of the query methods now take lists and tuples as
          arguments.  They will expand into ','.join(escaped_sequence).
    * Public interface should be 100% backwards compatable
    * All of the query methods now take kwargs.  If you specify kwargs, your
      query will require %(arg_name)s blocks as opposed to %s blocks.  You
      can't pass both args and kwargs.

2013-11-26 Version 2.8.2

    * Fixed a random_aggregator_pool bug

2013-11-20 Version 2.8.1

    * Fixed a minor 2.6 deprecation warning

2013-10-29 Version 2.8.0

    * Extracted collectd plugin into a seperate library: memsql-collectd
        * https://github.com/memsql/memsql-collectd
    * Better make clean

2013-10-23 Version 2.7.2

    * Fixed Master node detection in certain situations

2013-10-18 Version 2.7.1

    * Tweaks to Network Testing module
        * Changed the API a bit to operate better in a distributed environment

2013-10-18 Version 2.7.0

    * Added Network Testing module
        * Kick off a bandwidth or latency test against a MemSQL server
        * Lots of little tweaks here and there
        * Refactored out some shared logic into sql_utility
    * Insert MemSQL variables into the Ops Facts system

2013-10-15 Version 2.6.0

    * Added a useful class called SQLLockManager
        * Produces SQLLock's attached to a database table
        * These provide the means to coordinate resource access in a distributed system
        * Locks timeout if they havn't been pinged in a configurable expiry time
            * Ensure deadlocks can't happen due to parts of the distributed architecture failing

2013-10-10 Version 2.5.0

    * The MemSQL collect plugin now flushes data using a thread
        * this helps stabalize insert timing
        * keeps collectd from falling behind by 40ms+ during a flush
    * Don't send diskinfo from the collectd plugin, the df plugin is now required for Ops

2013-10-07 Version 2.4.0

    * Added a useful class called SQLStepQueue
        * Requires MemSQL 2.5 to work due to using JSON under the hood.
        * Fully atomic queue, that is designed to also store data forever
        * Each enqueued item can be started, multiple steps can be executed on it, and then it can be stoped
        * Timing information for each step is stored on the item's execution row

2013-10-07 Version 2.3.4

    * Fixed a minor exception that was raised when a node isn't a MemSQL node

2013-09-26 Version 2.3.3

    * Implemented garbage collection for very old pending analytical rows

2013-09-26 Version 2.3.2

    * Removed test package from setup.py

2013-09-25 Version 2.3.1

    * Minor bug fix - NaN values are no longer sent to MemSQL

2013-09-16 Version 2.3.0

    * Send disk space usage from our plugin for memsql nodes.  We do
      this for only the disk that is used by the data directory.

2013-09-12 Version 2.2.0

    * Send certain MemSQL stats to the cluster as COUNTER types

2013-09-11 Version 2.1.1

    * Minor change to how analytics data is stored in MemSQL Ops

2013-09-09 Version 2.1.0

    * OperationalErrors are only raised when an actual connection issue has occurred.
        * All other non-fatal issues are raised as DatabaseErrors

2013-09-06 Version 2.0.0

    * Renamed database_mysqldb -> database
    * other minor changes
    * preparing for open source release

2013-09-04 Version 1.2.0

    * Lots of changes, primarily MemSQL Ops v2.2.0+ support
    * Auto-detect if the running collectd node is part of a MemSQL
      distributed cluster.  If so we track show_status and insert it
      into the analytics table.

2013-07-25 Version 1.0.0

    * Initial release.
