code: function flush() {
          var args = this.dequeue();
          var sql = args[0];
          var callback = args[1];
          // when there's no callback, this is a standard, one-query migration
          // command (addColumn, dropColumn)
          if (!callback)
            runQuery.call(null, sql, this.checkDone.bind(this));
          
          // if it's a complex query, flush again after hitting the callback
          // because there's a likely chance it queued up another query.
          else {
            runQuery.call(null, sql, function (err, result) {
              callback(err, result);
              this.flush();
            }.bind(this));
          }
        }
docs: Process a query from the queue. Replaces the last argument (presumed) to be the callback) with `checkDone()`, which either calls `flush` again or emits the `done` event if the queue is empty or an error has occured. #XXX: this might be fragile -- it works because all of the method signatures for the migration helper methods expect a callback as the last parameter, so we always have one extra 'undefined' element in the arguments array.