function Client() {
  var config = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
  this.config = config;
  //Client is a required field, so throw error if it's not supplied.
  //If 'this.dialect' is set, then this is a 'super()' call, in which case
  //'client' does not have to be set as it's already assigned on the client prototype.
  if (!this.config.client && !this.dialect) {
    throw new Error('knex: Required configuration option \'client\' is missing.');
  }
  this.connectionSettings = (0, _cloneDeep3.default)(config.connection || {});
  if (this.driverName && config.connection) {
    this.initializeDriver();
    if (!config.pool || config.pool && config.pool.max !== 0) {
      this.__cid = clientId();
      this.initializePool(config);
    }
  }
  this.valueForUndefined = this.raw('DEFAULT');
  if (config.useNullAsDefault) {
    this.valueForUndefined = null;
  }
}n/a
function Formatter(client) {
  (0, _classCallCheck3.default)(this, Formatter);
  this.client = client;
  this.bindings = [];
}...
return this.toQuery();
  },
  // Returns the raw sql for the query.
  toSQL: function toSQL(method, tz) {
var obj = void 0;
var formatter = this.client.formatter();
if (Array.isArray(this.bindings)) {
  obj = replaceRawArrBindings(this, formatter);
} else if (this.bindings && (0, _isPlainObject3.default)(this.bindings)) {
  obj = replaceKeyBindings(this, formatter);
} else {
  obj = {
...function FunctionHelper(client) {
  this.client = client;
}n/a
function Migrator(knex) {
  (0, _classCallCheck3.default)(this, Migrator);
  this.knex = knex;
  this.config = this.setConfig(knex.client.config.migrations);
}n/a
raw = function (sql, bindings) {
  (0, _helpers.warn)('global Knex.raw is deprecated, use knex.raw (chain off an initialized knex object)');
  return new _raw2.default().set(sql, bindings);
}...
// FunctionHelper
// -------
function FunctionHelper(client) {
  this.client = client;
}
FunctionHelper.prototype.now = function () {
  return this.client.raw('CURRENT_TIMESTAMP');
};
exports.default = FunctionHelper;
module.exports = exports['default'];
...function Runner(client, builder) {
  this.client = client;
  this.builder = builder;
  this.queries = [];
  // The "connection" object is set on the runner when
  // "run" is called.
  this.connection = void 0;
}...
  return (0, _map3.default)(data, function (statement) {
    return _this.client._formatQuery(statement.sql, statement.bindings, tz);
  }).join(';\n');
};
// Create a new instance of the `Runner`, passing in the current object.
Target.prototype.then = function () /* onFulfilled, onRejected */{
  var result = this.client.runner(this).run();
  return result.then.apply(result, arguments);
};
// Add additional "options" to the builder. Typically used for client specific
// items, like the `mysql` and `sqlite3` drivers.
Target.prototype.options = function (opts) {
  this._options = this._options || [];
...function Seeder(knex) {
  this.knex = knex;
  this.config = this.setConfig(knex.client.config.seeds);
}n/a
function Transaction(client, container, config, outerTx) {
  (0, _classCallCheck3.default)(this, Transaction);
  var _this = (0, _possibleConstructorReturn3.default)(this, _EventEmitter.call(this));
  var txid = _this.txid = (0, _uniqueId3.default)('trx');
  _this.client = client;
  _this.outerTx = outerTx;
  _this.trxClient = undefined;
  _this._debug = client.config && client.config.debug;
  debug('%s: Starting %s transaction', txid, outerTx ? 'nested' : 'top level');
  _this._promise = _bluebird2.default.using(_this.acquireConnection(client, config, txid), function (connection) {
    var trxClient = _this.trxClient = makeTxClient(_this, client, connection);
    var init = client.transacting ? _this.savepoint(connection) : _this.begin(connection);
    init.then(function () {
      return makeTransactor(_this, connection, trxClient);
    }).then(function (transactor) {
      // If we've returned a "thenable" from the transaction container, assume
      // the rollback and commit are chained to this object's success / failure.
      // Directly thrown errors are treated as automatic rollbacks.
      var result = void 0;
      try {
        result = container(transactor);
      } catch (err) {
        result = _bluebird2.default.reject(err);
      }
      if (result && result.then && typeof result.then === 'function') {
        result.then(function (val) {
          return transactor.commit(val);
        }).catch(function (err) {
          return transactor.rollback(err);
        });
      }
      return null;
    }).catch(function (e) {
      return _this._rejecter(e);
    });
    return new _bluebird2.default(function (resolver, rejecter) {
      _this._resolver = resolver;
      _this._rejecter = rejecter;
    });
  });
  _this._completed = false;
  // If there's a wrapping transaction, we need to wait for any older sibling
  // transactions to settle (commit or rollback) before we can start, and we
  // need to register ourselves with the parent transaction so any younger
  // siblings can wait for us to complete before they can start.
  _this._previousSibling = _bluebird2.default.resolve(true);
  if (outerTx) {
    if (outerTx._lastChild) _this._previousSibling = outerTx._lastChild;
    outerTx._lastChild = _this._promise;
  }
  return _this;
}...
exports.default = Transaction;
function makeTransactor(trx, connection, trxClient) {
var transactor = (0, _makeKnex2.default)(trxClient);
transactor.transaction = function (container, options) {
  return trxClient.transaction(container, options, trx);
};
transactor.savepoint = function (container, options) {
  return transactor.transaction(container, options);
};
if (trx.client.transacting) {
  transactor.commit = function (value) {
...function Client() {
  var config = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
  this.config = config;
  //Client is a required field, so throw error if it's not supplied.
  //If 'this.dialect' is set, then this is a 'super()' call, in which case
  //'client' does not have to be set as it's already assigned on the client prototype.
  if (!this.config.client && !this.dialect) {
    throw new Error('knex: Required configuration option \'client\' is missing.');
  }
  this.connectionSettings = (0, _cloneDeep3.default)(config.connection || {});
  if (this.driverName && config.connection) {
    this.initializeDriver();
    if (!config.pool || config.pool && config.pool.max !== 0) {
      this.__cid = clientId();
      this.initializePool(config);
    }
  }
  this.valueForUndefined = this.raw('DEFAULT');
  if (config.useNullAsDefault) {
    this.valueForUndefined = null;
  }
}n/a
function EventEmitter() {
  EventEmitter.init.call(this);
}n/a
function finalEscape(val) {
  var ctx = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
  return escapeFn(val, finalEscape, ctx);
}n/a
function _formatQuery(sql, bindings, timeZone) {
  var _this = this;
  bindings = bindings == null ? [] : [].concat(bindings);
  var index = 0;
  return sql.replace(/\\?\?/g, function (match) {
    if (match === '\\?') {
      return '?';
    }
    if (index === bindings.length) {
      return match;
    }
    var value = bindings[index++];
    return _this._escapeBinding(value, { timeZone: timeZone });
  });
}...
Target.prototype.toQuery = function (tz) {
  var _this = this;
  var data = this.toSQL(this._method, tz);
  if (!(0, _isArray3.default)(data)) data = [data];
  return (0, _map3.default)(data, function (statement) {
    return _this.client._formatQuery(statement.sql, statement.bindings, tz);
  }).join(';\n');
};
// Create a new instance of the `Runner`, passing in the current object.
Target.prototype.then = function () /* onFulfilled, onRejected */{
  var result = this.client.runner(this).run();
  return result.then.apply(result, arguments);
...function acquireConnection() {
  var _this4 = this;
  return new _bluebird2.default(function (resolver, rejecter) {
    if (!_this4.pool) {
      return rejecter(new Error('Unable to acquire a connection'));
    }
    var wasRejected = false;
    var t = setTimeout(function () {
      wasRejected = true;
      rejecter(new _bluebird2.default.TimeoutError('Knex: Timeout acquiring a connection. The pool is probably full. ' + 'Are you
 missing a .transacting(trx) call?'));
    }, _this4.config.acquireConnectionTimeout || 60000);
    _this4.pool.acquire(function (err, connection) {
      clearTimeout(t);
      if (err) {
        return rejecter(err);
      }
      if (wasRejected) {
        _this4.pool.release(connection);
      } else {
        debug('acquired connection from pool: %s', connection.__knexUid);
        resolver(connection);
      }
    });
  });
}...
  // Check whether there's a transaction flag, and that it has a connection.
  ensureConnection: function ensureConnection() {
var _this2 = this;
return _bluebird2.default.try(function () {
  return _this2.connection || new _bluebird2.default(function (resolver, rejecter) {
    // need to return promise or null from handler to prevent warning from bluebird
    return _this2.client.acquireConnection().then(resolver).catch(_bluebird2.default.
TimeoutError, function (error) {
      if (_this2.builder) {
        error.sql = _this2.builder.sql;
        error.bindings = _this2.builder.bindings;
      }
      throw error;
    }).catch(rejecter);
  });
...function assertCanCancelQuery() {
  if (!this.canCancelQuery) {
    throw new Error("Query cancelling not supported for this dialect");
  }
}...
  var _ref = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
  var cancel = _ref.cancel;
  if ((0, _isNumber3.default)(ms) && ms > 0) {
    this._timeout = ms;
    if (cancel) {
      this.client.assertCanCancelQuery();
      this._cancelOnTimeout = true;
    }
  }
  return this;
},
...function cancelQuery() {
  throw new Error("Query cancelling not supported for this dialect");
}...
var timeout = obj.timeout;
var sql = obj.sql;
var bindings = obj.bindings;
var cancelQuery = void 0;
if (obj.cancelOnTimeout) {
  cancelQuery = _this.client.cancelQuery(_this.connection);
} else {
  cancelQuery = _bluebird2.default.resolve();
}
return cancelQuery.catch(function (cancelError) {
  // cancellation failed
  throw (0, _assign3.default)(cancelError, {
...function columnBuilder(tableBuilder, type, args) {
  return new _columnbuilder2.default(this, tableBuilder, type, args);
}n/a
function columnCompiler(tableBuilder, columnBuilder) {
  return new _columncompiler2.default(this, tableBuilder, columnBuilder);
}n/a
function database() {
  return this.connectionSettings.database;
}n/a
function destroy(callback) {
  var _this6 = this;
  var promise = new _bluebird2.default(function (resolver) {
    if (!_this6.pool) {
      return resolver();
    }
    _this6.pool.drain(function () {
      _this6.pool.destroyAllNow(function () {
        _this6.pool = undefined;
        resolver();
      });
    });
  });
  // Allow either a callback or promise interface for destruction.
  if (typeof callback === 'function') {
    promise.asCallback(callback);
  } else {
    return promise;
  }
}n/a
function formatter() {
  return new _formatter2.default(this);
}...
return this.toQuery();
  },
  // Returns the raw sql for the query.
  toSQL: function toSQL(method, tz) {
var obj = void 0;
var formatter = this.client.formatter();
if (Array.isArray(this.bindings)) {
  obj = replaceRawArrBindings(this, formatter);
} else if (this.bindings && (0, _isPlainObject3.default)(this.bindings)) {
  obj = replaceKeyBindings(this, formatter);
} else {
  obj = {
...function initializeDriver() {
  try {
    this.driver = this._driver();
  } catch (e) {
    helpers.exit('Knex: run\n$ npm install ' + this.driverName + ' --save\n' + e.stack);
  }
}n/a
function initializePool(config) {
  if (this.pool) {
    helpers.warn('The pool has already been initialized');
    return;
  }
  this.pool = new _genericPool.Pool((0, _assign3.default)(this.poolDefaults(config.pool || {}), config.pool));
}n/a
function poolDefaults(poolConfig) {
  var _this3 = this;
  var name = this.dialect + ':' + this.driverName + ':' + this.__cid;
  return {
    min: 2,
    max: 10,
    name: name,
    log: function log(str, level) {
      if (level === 'info') {
        debugPool(level.toUpperCase() + ' pool ' + name + ' - ' + str);
      }
    },
    create: function create(callback) {
      _this3.acquireRawConnection().tap(function (connection) {
        connection.__knexUid = (0, _uniqueId3.default)('__knexUid');
        if (poolConfig.afterCreate) {
          return _bluebird2.default.promisify(poolConfig.afterCreate)(connection);
        }
      }).asCallback(callback);
    },
    destroy: function destroy(connection) {
      if (poolConfig.beforeDestroy) {
        helpers.warn('\n            beforeDestroy is deprecated, please open an issue if you use this\n            to discuss alternative
 apis\n          ');
        poolConfig.beforeDestroy(connection, function () {});
      }
      if (connection !== void 0) {
        _this3.destroyRawConnection(connection);
      }
    },
    validate: function validate(connection) {
      if (connection.__knex__disposed) {
        helpers.warn('Connection Error: ' + connection.__knex__disposed);
        return false;
      }
      return _this3.validateConnection(connection);
    }
  };
}n/a
function prepBindings(bindings) {
  return bindings;
}n/a
function query(connection, obj) {
  var _this2 = this;
  if (typeof obj === 'string') obj = { sql: obj };
  obj.bindings = this.prepBindings(obj.bindings);
  debugQuery(obj.sql);
  this.emit('query', (0, _assign3.default)({ __knexUid: connection.__knexUid }, obj));
  debugBindings(obj.bindings);
  return this._query(connection, obj).catch(function (err) {
    err.message = _this2._formatQuery(obj.sql, obj.bindings) + ' - ' + err.message;
    _this2.emit('query-error', err, (0, _assign3.default)({ __knexUid: connection.__knexUid }, obj));
    throw err;
  });
}...
  if (runner.builder._debug) {
    helpers.debugLog(sql);
  }
  if ((0, _isArray3.default)(sql)) {
    return runner.queryArray(sql);
  }
  return runner.query(sql);
})
// If there are any "error" listeners, we fire an error event
// and then re-throw the error to be eventually handled by
// the promise chain. Useful if you're wrapping in a custom `Promise`.
.catch(function (err) {
  if (runner.builder._events && runner.builder._events.error) {
...function queryBuilder() {
  return new _builder2.default(this);
}...
  Formatter.prototype.compileCallback = function compileCallback(callback, method) {
var client = this.client;
// Build the callback
var builder = client.queryBuilder();
callback.call(builder, builder);
// Compile the callback, using the current formatter (to track all bindings).
var compiler = client.queryCompiler(builder);
compiler.formatter = this;
// Return the compiled & parameterized sql.
...function queryCompiler(builder) {
  return new _compiler2.default(this, builder);
}...
  }
  return this.unwrapRaw(value, true) || '?';
};
Formatter.prototype.unwrapRaw = function unwrapRaw(value, isParameter) {
  var query = void 0;
  if (value instanceof _builder2.default) {
    query = this.client.queryCompiler(value).toSQL();
    if (query.bindings) {
      this.bindings = this.bindings.concat(query.bindings);
    }
    return this.outputQuery(query, isParameter);
  }
  if (value instanceof _raw2.default) {
    value.client = this.client;
...function raw() {
  var _ref;
  return (_ref = new _raw2.default(this)).set.apply(_ref, arguments);
}...
// FunctionHelper
// -------
function FunctionHelper(client) {
  this.client = client;
}
FunctionHelper.prototype.now = function () {
  return this.client.raw('CURRENT_TIMESTAMP');
};
exports.default = FunctionHelper;
module.exports = exports['default'];
...function releaseConnection(connection) {
  var _this5 = this;
  return new _bluebird2.default(function (resolver) {
    debug('releasing connection to pool: %s', connection.__knexUid);
    _this5.pool.release(connection);
    resolver();
  });
}...
            error.bindings = _this2.builder.bindings;
          }
          throw error;
        }).catch(rejecter);
      });
    }).disposer(function () {
      // need to return promise or null from handler to prevent warning from bluebird
      return _this2.client.releaseConnection(_this2.connection);
    });
  }
});
exports.default = Runner;
module.exports = exports['default'];
...function runner(connection) {
  return new _runner2.default(this, connection);
}...
  return (0, _map3.default)(data, function (statement) {
    return _this.client._formatQuery(statement.sql, statement.bindings, tz);
  }).join(';\n');
};
// Create a new instance of the `Runner`, passing in the current object.
Target.prototype.then = function () /* onFulfilled, onRejected */{
  var result = this.client.runner(this).run();
  return result.then.apply(result, arguments);
};
// Add additional "options" to the builder. Typically used for client specific
// items, like the `mysql` and `sqlite3` drivers.
Target.prototype.options = function (opts) {
  this._options = this._options || [];
...function schemaBuilder() {
  return new _builder4.default(this);
}n/a
function schemaCompiler(builder) {
  return new _compiler4.default(this, builder);
}n/a
function stream(connection, obj, _stream, options) {
  if (typeof obj === 'string') obj = { sql: obj };
  this.emit('query', (0, _assign3.default)({ __knexUid: connection.__knexUid }, obj));
  debugQuery(obj.sql);
  obj.bindings = this.prepBindings(obj.bindings);
  debugBindings(obj.bindings);
  return this._stream(connection, obj, _stream, options);
}...
    }
  }
  return this;
};
// Initializes a stream.
Target.prototype.stream = function (options) {
  return this.client.runner(this).stream(options);
};
// Initialize a stream & pipe automatically.
Target.prototype.pipe = function (writable, options) {
  return this.client.runner(this).pipe(writable, options);
};
...function tableBuilder(type, tableName, fn) {
  return new _tablebuilder2.default(this, type, tableName, fn);
}n/a
function tableCompiler(tableBuilder) {
  return new _tablecompiler2.default(this, tableBuilder);
}n/a
function toString() {
  return '[object KnexClient]';
}n/a
function transaction(container, config, outerTx) {
  return new _transaction2.default(this, container, config, outerTx);
}...
exports.default = Transaction;
function makeTransactor(trx, connection, trxClient) {
var transactor = (0, _makeKnex2.default)(trxClient);
transactor.transaction = function (container, options) {
  return trxClient.transaction(container, options, trx);
};
transactor.savepoint = function (container, options) {
  return transactor.transaction(container, options);
};
if (trx.client.transacting) {
  transactor.commit = function (value) {
...function validateConnection(connection) {
  return true;
}n/a
function wrapIdentifier(value) {
  return value !== '*' ? '"' + value.replace(/"/g, '""') + '"' : '*';
}...
  var raw = this.unwrapRaw(value);
  if (raw) return raw;
  if (typeof value === 'number') return value;
  return this._wrapString(value + '');
};
Formatter.prototype.wrapAsIdentifier = function wrapAsIdentifier(value) {
  return this.client.wrapIdentifier((value || '').trim());
};
Formatter.prototype.alias = function alias(first, second) {
  return first + ' as ' + second;
};
// The operator method takes a value and returns something or other.
...function Formatter(client) {
  (0, _classCallCheck3.default)(this, Formatter);
  this.client = client;
  this.bindings = [];
}...
return this.toQuery();
  },
  // Returns the raw sql for the query.
  toSQL: function toSQL(method, tz) {
var obj = void 0;
var formatter = this.client.formatter();
if (Array.isArray(this.bindings)) {
  obj = replaceRawArrBindings(this, formatter);
} else if (this.bindings && (0, _isPlainObject3.default)(this.bindings)) {
  obj = replaceKeyBindings(this, formatter);
} else {
  obj = {
...function _wrapString(value) {
  var asIndex = value.toLowerCase().indexOf(' as ');
  if (asIndex !== -1) {
    var first = value.slice(0, asIndex);
    var second = value.slice(asIndex + 4);
    return this.alias(this.wrap(first), this.wrapAsIdentifier(second));
  }
  var wrapped = [];
  var i = -1;
  var segments = value.split('.');
  while (++i < segments.length) {
    value = segments[i];
    if (i === 0 && segments.length > 1) {
      wrapped.push(this.wrap((value || '').trim()));
    } else {
      wrapped.push(this.client.wrapIdentifier((value || '').trim()));
    }
  }
  return wrapped.join('.');
}...
Formatter.prototype.wrap = function wrap(value) {
  if (typeof value === 'function') {
    return this.outputQuery(this.compileCallback(value), true);
  }
  var raw = this.unwrapRaw(value);
  if (raw) return raw;
  if (typeof value === 'number') return value;
  return this._wrapString(value + '');
};
Formatter.prototype.wrapAsIdentifier = function wrapAsIdentifier(value) {
  return this.client.wrapIdentifier((value || '').trim());
};
Formatter.prototype.alias = function alias(first, second) {
...function alias(first, second) {
  return first + ' as ' + second;
}...
Formatter.prototype.outputQuery = function outputQuery(compiled, isParameter) {
  var sql = compiled.sql || '';
  if (sql) {
    if ((compiled.method === 'select' || compiled.method === 'first') && (isParameter || compiled.
as)) {
      sql = '(' + sql + ')';
      if (compiled.as) return this.alias(sql, this.wrap(compiled.as));
    }
  }
  return sql;
};
// Coerce to string to prevent strange errors when it's not a string.
...function columnize(target) {
  var columns = typeof target === 'string' ? [target] : target;
  var str = '',
      i = -1;
  while (++i < columns.length) {
    if (i > 0) str += ', ';
    str += this.wrap(columns[i]);
  }
  return str;
}...
  if (match === '\\?') {
    return match;
  }
  var value = values[index++];
  if (match === '??') {
    return formatter.columnize(value);
  }
  return formatter.parameter(value);
});
if (expectedBindings !== index) {
  throw new Error('Expected ' + expectedBindings + ' bindings, saw ' + index);
}
...function compileCallback(callback, method) {
  var client = this.client;
  // Build the callback
  var builder = client.queryBuilder();
  callback.call(builder, builder);
  // Compile the callback, using the current formatter (to track all bindings).
  var compiler = client.queryCompiler(builder);
  compiler.formatter = this;
  // Return the compiled & parameterized sql.
  return compiler.toSQL(method || 'select');
}...
// Checks whether a value is a function... if it is, we compile it
// otherwise we check whether it's a raw
Formatter.prototype.parameter = function parameter(value) {
  if (typeof value === 'function') {
    return this.outputQuery(this.compileCallback(value), true);
  }
  return this.unwrapRaw(value, true) || '?';
};
Formatter.prototype.unwrapRaw = function unwrapRaw(value, isParameter) {
  var query = void 0;
  if (value instanceof _builder2.default) {
...function direction(value) {
  var raw = this.unwrapRaw(value);
  if (raw) return raw;
  return orderBys.indexOf((value || '').toLowerCase()) !== -1 ? value : 'asc';
}n/a
function operator(value) {
  var raw = this.unwrapRaw(value);
  if (raw) return raw;
  if (operators[(value || '').toLowerCase()] !== true) {
    throw new TypeError('The operator "' + value + '" is not permitted');
  }
  return value;
}n/a
function outputQuery(compiled, isParameter) {
  var sql = compiled.sql || '';
  if (sql) {
    if ((compiled.method === 'select' || compiled.method === 'first') && (isParameter || compiled.as)) {
      sql = '(' + sql + ')';
      if (compiled.as) return this.alias(sql, this.wrap(compiled.as));
    }
  }
  return sql;
}...
// Checks whether a value is a function... if it is, we compile it
// otherwise we check whether it's a raw
Formatter.prototype.parameter = function parameter(value) {
  if (typeof value === 'function') {
    return this.outputQuery(this.compileCallback(value), true);
  }
  return this.unwrapRaw(value, true) || '?';
};
Formatter.prototype.unwrapRaw = function unwrapRaw(value, isParameter) {
  var query = void 0;
  if (value instanceof _builder2.default) {
...function parameter(value) {
  if (typeof value === 'function') {
    return this.outputQuery(this.compileCallback(value), true);
  }
  return this.unwrapRaw(value, true) || '?';
}...
};
// Turns a list of values into a list of ?'s, joining them with commas unless
// a "joining" value is specified (e.g. ' and ')
Formatter.prototype.parameterize = function parameterize(values, notSetValue) {
  if (typeof values === 'function') return this.parameter(values);
  values = Array.isArray(values) ? values : [values];
  var str = '',
      i = -1;
  while (++i < values.length) {
    if (i > 0) str += ', ';
    str += this.parameter(values[i] === undefined ? notSetValue : values[i]);
  }
...function parameterize(values, notSetValue) {
  if (typeof values === 'function') return this.parameter(values);
  values = Array.isArray(values) ? values : [values];
  var str = '',
      i = -1;
  while (++i < values.length) {
    if (i > 0) str += ', ';
    str += this.parameter(values[i] === undefined ? notSetValue : values[i]);
  }
  return str;
}n/a
function rawOrFn(value, method) {
  if (typeof value === 'function') {
    return this.outputQuery(this.compileCallback(value, method));
  }
  return this.unwrapRaw(value) || '';
}n/a
function unwrapRaw(value, isParameter) {
  var query = void 0;
  if (value instanceof _builder2.default) {
    query = this.client.queryCompiler(value).toSQL();
    if (query.bindings) {
      this.bindings = this.bindings.concat(query.bindings);
    }
    return this.outputQuery(query, isParameter);
  }
  if (value instanceof _raw2.default) {
    value.client = this.client;
    query = value.toSQL();
    if (query.bindings) {
      this.bindings = this.bindings.concat(query.bindings);
    }
    return query.sql;
  }
  if (isParameter) {
    this.bindings.push(value);
  }
}...
// otherwise we check whether it's a raw
Formatter.prototype.parameter = function parameter(value) {
  if (typeof value === 'function') {
    return this.outputQuery(this.compileCallback(value), true);
  }
  return this.unwrapRaw(value, true) || '?';
};
Formatter.prototype.unwrapRaw = function unwrapRaw(value, isParameter) {
  var query = void 0;
  if (value instanceof _builder2.default) {
    query = this.client.queryCompiler(value).toSQL();
    if (query.bindings) {
...function wrap(value) {
  if (typeof value === 'function') {
    return this.outputQuery(this.compileCallback(value), true);
  }
  var raw = this.unwrapRaw(value);
  if (raw) return raw;
  if (typeof value === 'number') return value;
  return this._wrapString(value + '');
}...
Formatter.prototype.columnize = function columnize(target) {
  var columns = typeof target === 'string' ? [target] : target;
  var str = '',
      i = -1;
  while (++i < columns.length) {
    if (i > 0) str += ', ';
    str += this.wrap(columns[i]);
  }
  return str;
};
// Turns a list of values into a list of ?'s, joining them with commas unless
// a "joining" value is specified (e.g. ' and ')
...function wrapAsIdentifier(value) {
  return this.client.wrapIdentifier((value || '').trim());
}...
  Formatter.prototype._wrapString = function _wrapString(value) {
var asIndex = value.toLowerCase().indexOf(' as ');
if (asIndex !== -1) {
  var first = value.slice(0, asIndex);
  var second = value.slice(asIndex + 4);
  return this.alias(this.wrap(first), this.wrapAsIdentifier(second));
}
var wrapped = [];
var i = -1;
var segments = value.split('.');
while (++i < segments.length) {
  value = segments[i];
  if (i === 0 && segments.length > 1) {
...function FunctionHelper(client) {
  this.client = client;
}n/a
now = function () {
  return this.client.raw('CURRENT_TIMESTAMP');
}n/a
function containsUndefined(mixed) {
  var argContainsUndefined = false;
  if ((0, _isTypedArray3.default)(mixed)) return false;
  if (mixed && (0, _isFunction3.default)(mixed.toSQL)) {
    //Any QueryBuilder or Raw will automatically be validated during compile.
    return argContainsUndefined;
  }
  if ((0, _isArray3.default)(mixed)) {
    for (var i = 0; i < mixed.length; i++) {
      if (argContainsUndefined) break;
      argContainsUndefined = this.containsUndefined(mixed[i]);
    }
  } else if ((0, _isObject3.default)(mixed)) {
    for (var key in mixed) {
      if (argContainsUndefined) break;
      argContainsUndefined = this.containsUndefined(mixed[key]);
    }
  } else {
    argContainsUndefined = (0, _isUndefined3.default)(mixed);
  }
  return argContainsUndefined;
}...
  //Any QueryBuilder or Raw will automatically be validated during compile.
  return argContainsUndefined;
}
if ((0, _isArray3.default)(mixed)) {
  for (var i = 0; i < mixed.length; i++) {
    if (argContainsUndefined) break;
    argContainsUndefined = this.containsUndefined(mixed[i]);
  }
} else if ((0, _isObject3.default)(mixed)) {
  for (var key in mixed) {
    if (argContainsUndefined) break;
    argContainsUndefined = this.containsUndefined(mixed[key]);
  }
} else {
...function debugLog(msg) {
  console.log(msg);
}...
  runner.connection = connection;
  runner.client.emit('start', runner.builder);
  runner.builder.emit('start', runner.builder);
  var sql = runner.builder.toSQL();
  if (runner.builder._debug) {
    helpers.debugLog(sql);
  }
  if ((0, _isArray3.default)(sql)) {
    return runner.queryArray(sql);
  }
  return runner.query(sql);
})
...function deprecate(method, alternate) {
  warn(method + ' is deprecated, please use ' + alternate);
}n/a
function error(msg) {
  console.log(_chalk2.default.red('Knex:Error ' + msg));
}...
// .map over the results
.map(function(row) {
  console.log(row);
})
// Finally, add a .catch handler for the promise chain
.catch(function(e) {
  console.error(e);
});
```
...function exit(msg) {
  console.log(_chalk2.default.red(msg));
  process.exit(1);
}...
// Used to warn about incorrect use, without error'ing
function warn(msg) {
console.log(_chalk2.default.yellow('Knex:warning - ' + msg));
}
function exit(msg) {
console.log(_chalk2.default.red(msg));
process.exit(1);
}
function containsUndefined(mixed) {
var argContainsUndefined = false;
if ((0, _isTypedArray3.default)(mixed)) return false;
...function normalizeArr() {
  var args = new Array(arguments.length);
  for (var i = 0; i < args.length; i++) {
    args[i] = arguments[i];
  }
  if (Array.isArray(args[0])) {
    return args[0];
  }
  return args;
}n/a
function skim(data) {
  return (0, _map3.default)(data, function (obj) {
    return (0, _pick3.default)(obj, (0, _keys3.default)(obj));
  });
}n/a
function warn(msg) {
  console.log(_chalk2.default.yellow('Knex:warning - ' + msg));
}...
  return this;
};
// Set the transaction object for this query.
Target.prototype.transacting = function (t) {
  if (t && t.client) {
    if (!t.client.transacting) {
      helpers.warn('Invalid transaction value: ' + t.client);
    } else {
      this.client = t.client;
    }
  }
  return this;
};
...function Migrator(knex) {
  (0, _classCallCheck3.default)(this, Migrator);
  this.knex = knex;
  this.config = this.setConfig(knex.client.config.migrations);
}n/a
function _absoluteConfigDir() {
  return _path2.default.resolve(process.cwd(), this.config.directory);
}n/a
function _createMigrationLockTable(tableName) {
  return this.knex.schema.createTableIfNotExists(tableName, function (t) {
    t.integer('is_locked');
  });
}n/a
function _createMigrationTable(tableName) {
  return this.knex.schema.createTableIfNotExists(tableName, function (t) {
    t.increments();
    t.string('name');
    t.integer('batch');
    t.timestamp('migration_time');
  });
}n/a
function _ensureFolder() {
  var dir = this._absoluteConfigDir();
  return _bluebird2.default.promisify(_fs2.default.stat, { context: _fs2.default })(dir).catch(function () {
    return _bluebird2.default.promisify(_mkdirp2.default)(dir);
  });
}n/a
function _ensureTable() {
  var _this5 = this;
  var table = this.config.tableName;
  var lockTable = this._getLockTableName();
  return this.knex.schema.hasTable(table).then(function (exists) {
    return !exists && _this5._createMigrationTable(table);
  }).then(function () {
    return _this5.knex.schema.hasTable(lockTable);
  }).then(function (exists) {
    return !exists && _this5._createMigrationLockTable(lockTable);
  }).then(function () {
    return _this5.knex(lockTable).select('*');
  }).then(function (data) {
    return !data.length && _this5.knex(lockTable).insert({ is_locked: 0 });
  });
}n/a
function _freeLock() {
  var tableName = this._getLockTableName();
  return this.knex(tableName).update({ is_locked: 0 });
}n/a
function _generateStubTemplate() {
  var stubPath = this.config.stub || _path2.default.join(__dirname, 'stub', this.config.extension + '.stub');
  return _bluebird2.default.promisify(_fs2.default.readFile, { context: _fs2.default })(stubPath).then(function (stub) {
    return (0, _template3.default)(stub.toString(), { variable: 'd' });
  });
}n/a
function _getLastBatch() {
  var tableName = this.config.tableName;
  return this.knex(tableName).where('batch', function (qb) {
    qb.max('batch').from(tableName);
  }).orderBy('id', 'desc');
}n/a
function _getLock() {
  var _this6 = this;
  return this.knex.transaction(function (trx) {
    return _this6._isLocked(trx).then(function (isLocked) {
      if (isLocked) {
        throw new Error("Migration table is already locked");
      }
    }).then(function () {
      return _this6._lockMigrations(trx);
    });
  }).catch(function (err) {
    throw new LockError(err.message);
  });
}n/a
function _getLockTableName() {
  return this.config.tableName + '_lock';
}n/a
function _isLocked(trx) {
  var tableName = this._getLockTableName();
  return this.knex(tableName).transacting(trx).forUpdate().select('*').then(function (data) {
    return data[0].is_locked;
  });
}n/a
function _latestBatchNumber() {
  return this.knex(this.config.tableName).max('batch as max_batch').then(function (obj) {
    return obj[0].max_batch || 0;
  });
}n/a
function _listAll(config) {
  this.config = this.setConfig(config);
  return _bluebird2.default.promisify(_fs2.default.readdir, { context: _fs2.default })(this._absoluteConfigDir()).then(function (
migrations) {
    return (0, _filter3.default)(migrations, function (value) {
      var extension = _path2.default.extname(value);
      return (0, _includes3.default)(SUPPORTED_EXTENSIONS, extension);
    }).sort();
  });
}n/a
function _listCompleted() {
  var _this8 = this;
  var tableName = this.config.tableName;
  return this._ensureTable(tableName).then(function () {
    return _this8.knex(tableName).orderBy('id').select('name');
  }).then(function (migrations) {
    return (0, _map3.default)(migrations, 'name');
  });
}n/a
function _lockMigrations(trx) {
  var tableName = this._getLockTableName();
  return this.knex(tableName).transacting(trx).update({ is_locked: 1 });
}n/a
function _migrationData() {
  return _bluebird2.default.all([this._listAll(), this._listCompleted()]);
}n/a
function _runBatch(migrations, direction) {
  var _this7 = this;
  return this._getLock().then(function () {
    return _bluebird2.default.all((0, _map3.default)(migrations, (0, _bind3.default)(_this7._validateMigrationStructure, _this7)));
  }).then(function () {
    return _this7._latestBatchNumber();
  }).then(function (batchNo) {
    if (direction === 'up') batchNo++;
    return batchNo;
  }).then(function (batchNo) {
    return _this7._waterfallBatch(batchNo, migrations, direction);
  }).tap(function () {
    return _this7._freeLock();
  }).catch(function (error) {
    var cleanupReady = _bluebird2.default.resolve();
    if (error instanceof LockError) {
      // If locking error do not free the lock.
      helpers.warn('Can\'t take lock to run migrations: ' + error.message);
      helpers.warn('If you are sure migrations are not running you can release the ' + 'lock manually by deleting all the rows from
 migrations lock ' + 'table: ' + _this7._getLockTableName());
    } else {
      helpers.warn('migrations failed with error: ' + error.message);
      // If the error was not due to a locking issue, then remove the lock.
      cleanupReady = _this7._freeLock();
    }
    return cleanupReady.finally(function () {
      throw error;
    });
  });
}n/a
function _transaction(migration, direction, name) {
  return this.knex.transaction(function (trx) {
    return warnPromise(migration[direction](trx, _bluebird2.default), name, function () {
      trx.commit();
    });
  });
}n/a
function _useTransaction(migration, allTransactionsDisabled) {
  var singleTransactionValue = (0, _get3.default)(migration, 'config.transaction');
  return (0, _isBoolean3.default)(singleTransactionValue) ? singleTransactionValue : !allTransactionsDisabled;
}n/a
function _validateMigrationStructure(name) {
  var migration = require(_path2.default.join(this._absoluteConfigDir(), name));
  if (typeof migration.up !== 'function' || typeof migration.down !== 'function') {
    throw new Error('Invalid migration: ' + name + ' must have both an up and down function');
  }
  return name;
}n/a
function _waterfallBatch(batchNo, migrations, direction) {
  var _this9 = this;
  var knex = this.knex;
  var _config = this.config;
  var tableName = _config.tableName;
  var disableTransactions = _config.disableTransactions;
  var directory = this._absoluteConfigDir();
  var current = _bluebird2.default.bind({ failed: false, failedOn: 0 });
  var log = [];
  (0, _each3.default)(migrations, function (migration) {
    var name = migration;
    migration = require(directory + '/' + name);
    // We're going to run each of the migrations in the current "up".
    current = current.then(function () {
      if (_this9._useTransaction(migration, disableTransactions)) {
        return _this9._transaction(migration, direction, name);
      }
      return warnPromise(migration[direction](knex, _bluebird2.default), name);
    }).then(function () {
      log.push(_path2.default.join(directory, name));
      if (direction === 'up') {
        return knex(tableName).insert({
          name: name,
          batch: batchNo,
          migration_time: new Date()
        });
      }
      if (direction === 'down') {
        return knex(tableName).where({ name: name }).del();
      }
    });
  });
  return current.thenReturn([batchNo, log]);
}n/a
function _writeNewMigration(name, tmpl) {
  var config = this.config;
  var dir = this._absoluteConfigDir();
  if (name[0] === '-') name = name.slice(1);
  var filename = yyyymmddhhmmss() + '_' + name + '.' + config.extension;
  return _bluebird2.default.promisify(_fs2.default.writeFile, { context: _fs2.default })(_path2.default.join(dir, filename), tmpl
(config.variables || {})).return(_path2.default.join(dir, filename));
}n/a
function currentVersion(config) {
  this.config = this.setConfig(config);
  return this._listCompleted(config).then(function (completed) {
    var val = (0, _max3.default)((0, _map3.default)(completed, function (value) {
      return value.split('_')[0];
    }));
    return (0, _isUndefined3.default)(val) ? 'none' : val;
  });
}n/a
function forceFreeMigrationsLock(config) {
  var _this3 = this;
  this.config = this.setConfig(config);
  var lockTable = this._getLockTableName();
  return this.knex.schema.hasTable(lockTable).then(function (exist) {
    return exist && _this3._freeLock();
  });
}n/a
function latest(config) {
  var _this = this;
  this.config = this.setConfig(config);
  return this._migrationData().tap(validateMigrationList).spread(function (all, completed) {
    return _this._runBatch((0, _difference3.default)(all, completed), 'up');
  });
}n/a
function make(name, config) {
  var _this4 = this;
  this.config = this.setConfig(config);
  if (!name) {
    return _bluebird2.default.reject(new Error('A name must be specified for the generated migration'));
  }
  return this._ensureFolder(config).then(function (val) {
    return _this4._generateStubTemplate(val);
  }).then(function (val) {
    return _this4._writeNewMigration(name, val);
  });
}n/a
function rollback(config) {
  var _this2 = this;
  return _bluebird2.default.try(function () {
    _this2.config = _this2.setConfig(config);
    return _this2._migrationData().tap(validateMigrationList).then(function (val) {
      return _this2._getLastBatch(val);
    }).then(function (migrations) {
      return _this2._runBatch((0, _map3.default)(migrations, 'name'), 'down');
    });
  });
}...
  } catch (err) {
    result = _bluebird2.default.reject(err);
  }
  if (result && result.then && typeof result.then === 'function') {
    result.then(function (val) {
      return transactor.commit(val);
    }).catch(function (err) {
      return transactor.rollback(err);
    });
  }
  return null;
}).catch(function (e) {
  return _this._rejecter(e);
});
...function setConfig(config) {
  return (0, _assign3.default)({}, CONFIG_DEFAULT, this.config || {}, config);
}n/a
function status(config) {
  this.config = this.setConfig(config);
  return _bluebird2.default.all([this.knex(this.config.tableName).select('*'), this._listAll()]).spread(function (db, code) {
    return db.length - code.length;
  });
}n/a
function Raw() {
  var client = arguments.length <= 0 || arguments[0] === undefined ? fakeClient : arguments[0];
  this.client = client;
  this.sql = '';
  this.bindings = [];
  // Todo: Deprecate
  this._wrappedBefore = undefined;
  this._wrappedAfter = undefined;
  this._debug = client && client.config && client.config.debug;
}...
// FunctionHelper
// -------
function FunctionHelper(client) {
  this.client = client;
}
FunctionHelper.prototype.now = function () {
  return this.client.raw('CURRENT_TIMESTAMP');
};
exports.default = FunctionHelper;
module.exports = exports['default'];
...function EventEmitter() {
  EventEmitter.init.call(this);
}n/a
asCallback = function () {
  var promise = this.then();
  return promise[method].apply(promise, arguments);
}n/a
bind = function () {
  var promise = this.then();
  return promise[method].apply(promise, arguments);
}...
    throw error;
  });
}),
// In the case of the "schema builder" we call `queryArray`, which runs each
// of the queries in sequence.
queryArray: function queryArray(queries) {
  return queries.length === 1 ? this.query(queries[0]) : _bluebird2.default.bind(this
).return(queries).reduce(function (memo, query) {
    return this.query(query).then(function (resp) {
      memo.push(resp);
      return memo;
    });
  }, []);
},
...catch = function () {
  var promise = this.then();
  return promise[method].apply(promise, arguments);
}...
// .map over the results
.map(function(row) {
  console.log(row);
})
// Finally, add a .catch handler for the promise chain
.catch(function(e) {
  console.error(e);
});
```
...connection = function (connection) {
  this._connection = connection;
  return this;
}n/a
debug = function (enabled) {
  this._debug = arguments.length ? enabled : true;
  return this;
}n/a
delay = function () {
  var promise = this.then();
  return promise[method].apply(promise, arguments);
}n/a
ensure = function () {
  var promise = this.then();
  return promise[method].apply(promise, arguments);
}n/a
finally = function () {
  var promise = this.then();
  return promise[method].apply(promise, arguments);
}n/a
get = function () {
  var promise = this.then();
  return promise[method].apply(promise, arguments);
}n/a
map = function () {
  var promise = this.then();
  return promise[method].apply(promise, arguments);
}...
.then(function() {
  return knex('users')
    .join('accounts', 'users.id', 'accounts.user_id')
    .select('users.user_name as user', 'accounts.account_name as account');
})
// .map over the results
.map(function(row) {
  console.log(row);
})
// Finally, add a .catch handler for the promise chain
.catch(function(e) {
  console.error(e);
});
...mapSeries = function () {
  var promise = this.then();
  return promise[method].apply(promise, arguments);
}n/a
options = function (opts) {
  this._options = this._options || [];
  this._options.push((0, _clone3.default)(opts) || {});
  return this;
}n/a
pipe = function (writable, options) {
  return this.client.runner(this).pipe(writable, options);
}...
// Initializes a stream.
Target.prototype.stream = function (options) {
  return this.client.runner(this).stream(options);
};
// Initialize a stream & pipe automatically.
Target.prototype.pipe = function (writable, options) {
  return this.client.runner(this).pipe(writable, options);
};
// Creates a method which "coerces" to a promise, by calling a
// "then" method on the current `Target`
(0, _each3.default)(['bind', 'catch', 'finally', 'asCallback', 'spread', '
;map', 'reduce', 'tap', 'thenReturn', 'return', 'yield', 'ensure'
;, 'reflect', 'get', 'mapSeries', 'delay'], function (method) {
  Target.prototype[method] = function () {
    var promise = this.then();
...reduce = function () {
  var promise = this.then();
  return promise[method].apply(promise, arguments);
}...
    throw error;
  });
}),
// In the case of the "schema builder" we call `queryArray`, which runs each
// of the queries in sequence.
queryArray: function queryArray(queries) {
  return queries.length === 1 ? this.query(queries[0]) : _bluebird2.default.bind(this).return(queries).reduce(function (memo, query) {
    return this.query(query).then(function (resp) {
      memo.push(resp);
      return memo;
    });
  }, []);
},
...reflect = function () {
  var promise = this.then();
  return promise[method].apply(promise, arguments);
}n/a
return = function () {
  var promise = this.then();
  return promise[method].apply(promise, arguments);
}...
    throw error;
  });
}),
// In the case of the "schema builder" we call `queryArray`, which runs each
// of the queries in sequence.
queryArray: function queryArray(queries) {
  return queries.length === 1 ? this.query(queries[0]) : _bluebird2.default.bind(this).return
(queries).reduce(function (memo, query) {
    return this.query(query).then(function (resp) {
      memo.push(resp);
      return memo;
    });
  }, []);
},
...function set(sql, bindings) {
  this.sql = sql;
  this.bindings = (0, _isObject3.default)(bindings) && !bindings.toSQL || (0, _isUndefined3.default)(bindings) ? bindings : [bindings
];
  return this;
}n/a
spread = function () {
  var promise = this.then();
  return promise[method].apply(promise, arguments);
}n/a
stream = function (options) {
  return this.client.runner(this).stream(options);
}...
    }
  }
  return this;
};
// Initializes a stream.
Target.prototype.stream = function (options) {
  return this.client.runner(this).stream(options);
};
// Initialize a stream & pipe automatically.
Target.prototype.pipe = function (writable, options) {
  return this.client.runner(this).pipe(writable, options);
};
...tap = function () {
  var promise = this.then();
  return promise[method].apply(promise, arguments);
}...
      runner.builder.emit('error', err);
    }
    throw err;
  })
  // Fire a single "end" event on the builder when
  // all queries have successfully completed.
  .tap(function () {
    runner.builder.emit('end');
  });
},
// Stream the result set, by passing through to the dialect's streaming
// capabilities. If the options are
...then = function () /* onFulfilled, onRejected */{
  var result = this.client.runner(this).run();
  return result.then.apply(result, arguments);
}...
.createTable('accounts', function(table) {
  table.increments('id');
  table.string('account_name');
  table.integer('user_id').unsigned().references('users.id');
})
// Then query the table...
.then(function() {
  return knex.insert({user_name: 'Tim'}).into('users');
})
// ...and using the insert id, insert into the other table.
.then(function(rows) {
  return knex.table('accounts').insert({account_name: 'knex', user_id: rows[0]});
})
...thenReturn = function () {
  var promise = this.then();
  return promise[method].apply(promise, arguments);
}n/a
function timeout(ms) {
  var _ref = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
  var cancel = _ref.cancel;
  if ((0, _isNumber3.default)(ms) && ms > 0) {
    this._timeout = ms;
    if (cancel) {
      this.client.assertCanCancelQuery();
      this._cancelOnTimeout = true;
    }
  }
  return this;
}...
var _this = this;
this.builder.emit('query', (0, _assign3.default)({ __knexUid: this.connection.__knexUid }, obj));
var runner = this;
var queryPromise = this.client.query(this.connection, obj);
if (obj.timeout) {
  queryPromise = queryPromise.timeout(obj.timeout);
}
return queryPromise.then(function (resp) {
  var processedResponse = _this.client.processResponse(resp, runner);
  _this.builder.emit('query-response', processedResponse, (0, _assign3.default)({ __knexUid: _this.connection.__knexUid
 }, obj), _this.builder);
  _this.client.emit('query-response', processedResponse, (0, _assign3.default)({ __knexUid: _this.connection.__knexUid
 }, obj), _this.builder);
  return processedResponse;
...toQuery = function (tz) {
  var _this = this;
  var data = this.toSQL(this._method, tz);
  if (!(0, _isArray3.default)(data)) data = [data];
  return (0, _map3.default)(data, function (statement) {
    return _this.client._formatQuery(statement.sql, statement.bindings, tz);
  }).join(';\n');
}...
  this._wrappedAfter = after;
  return this;
},
// Calls `toString` on the Knex object.
toString: function toString() {
  return this.toQuery();
},
// Returns the raw sql for the query.
toSQL: function toSQL(method, tz) {
  var obj = void 0;
  var formatter = this.client.formatter();
...function toSQL(method, tz) {
  var obj = void 0;
  var formatter = this.client.formatter();
  if (Array.isArray(this.bindings)) {
    obj = replaceRawArrBindings(this, formatter);
  } else if (this.bindings && (0, _isPlainObject3.default)(this.bindings)) {
    obj = replaceKeyBindings(this, formatter);
  } else {
    obj = {
      method: 'raw',
      sql: this.sql,
      bindings: (0, _isUndefined3.default)(this.bindings) ? [] : [this.bindings]
    };
  }
  if (this._wrappedBefore) {
    obj.sql = this._wrappedBefore + obj.sql;
  }
  if (this._wrappedAfter) {
    obj.sql = obj.sql + this._wrappedAfter;
  }
  obj.options = (0, _reduce3.default)(this._options, _assign3.default, {});
  if (this._timeout) {
    obj.timeout = this._timeout;
    if (this._cancelOnTimeout) {
      obj.cancelOnTimeout = this._cancelOnTimeout;
    }
  }
  obj.bindings = obj.bindings || [];
  if (helpers.containsUndefined(obj.bindings)) {
    debugBindings(obj.bindings);
    throw new Error('Undefined binding(s) detected when compiling RAW query: ' + obj.sql);
  }
  obj.__knexQueryUid = _uuid2.default.v4();
  return obj;
}...
  }
  return this.unwrapRaw(value, true) || '?';
};
Formatter.prototype.unwrapRaw = function unwrapRaw(value, isParameter) {
  var query = void 0;
  if (value instanceof _builder2.default) {
    query = this.client.queryCompiler(value).toSQL();
    if (query.bindings) {
      this.bindings = this.bindings.concat(query.bindings);
    }
    return this.outputQuery(query, isParameter);
  }
  if (value instanceof _raw2.default) {
    value.client = this.client;
...function toString() {
  return this.toQuery();
}n/a
transacting = function (t) {
  if (t && t.client) {
    if (!t.client.transacting) {
      helpers.warn('Invalid transaction value: ' + t.client);
    } else {
      this.client = t.client;
    }
  }
  return this;
}n/a
function wrap(before, after) {
  this._wrappedBefore = before;
  this._wrappedAfter = after;
  return this;
}...
Formatter.prototype.columnize = function columnize(target) {
  var columns = typeof target === 'string' ? [target] : target;
  var str = '',
      i = -1;
  while (++i < columns.length) {
    if (i > 0) str += ', ';
    str += this.wrap(columns[i]);
  }
  return str;
};
// Turns a list of values into a list of ?'s, joining them with commas unless
// a "joining" value is specified (e.g. ' and ')
...yield = function () {
  var promise = this.then();
  return promise[method].apply(promise, arguments);
}n/a
function Runner(client, builder) {
  this.client = client;
  this.builder = builder;
  this.queries = [];
  // The "connection" object is set on the runner when
  // "run" is called.
  this.connection = void 0;
}...
  return (0, _map3.default)(data, function (statement) {
    return _this.client._formatQuery(statement.sql, statement.bindings, tz);
  }).join(';\n');
};
// Create a new instance of the `Runner`, passing in the current object.
Target.prototype.then = function () /* onFulfilled, onRejected */{
  var result = this.client.runner(this).run();
  return result.then.apply(result, arguments);
};
// Add additional "options" to the builder. Typically used for client specific
// items, like the `mysql` and `sqlite3` drivers.
Target.prototype.options = function (opts) {
  this._options = this._options || [];
...function ensureConnection() {
  var _this2 = this;
  return _bluebird2.default.try(function () {
    return _this2.connection || new _bluebird2.default(function (resolver, rejecter) {
      // need to return promise or null from handler to prevent warning from bluebird
      return _this2.client.acquireConnection().then(resolver).catch(_bluebird2.default.TimeoutError, function (error) {
        if (_this2.builder) {
          error.sql = _this2.builder.sql;
          error.bindings = _this2.builder.bindings;
        }
        throw error;
      }).catch(rejecter);
    });
  }).disposer(function () {
    // need to return promise or null from handler to prevent warning from bluebird
    return _this2.client.releaseConnection(_this2.connection);
  });
}...
(0, _assign3.default)(Runner.prototype, {
  // "Run" the target, calling "toSQL" on the builder, returning
  // an object or array of queries to run, each of which are run on
  // a single connection.
  run: function run() {
    var runner = this;
    return _bluebird2.default.using(this.ensureConnection(), function (connection) {
runner.connection = connection;
runner.client.emit('start', runner.builder);
runner.builder.emit('start', runner.builder);
var sql = runner.builder.toSQL();
if (runner.builder._debug) {
...function pipe(writable, options) {
  return this.stream(options).pipe(writable);
}...
// Initializes a stream.
Target.prototype.stream = function (options) {
  return this.client.runner(this).stream(options);
};
// Initialize a stream & pipe automatically.
Target.prototype.pipe = function (writable, options) {
  return this.client.runner(this).pipe(writable, options);
};
// Creates a method which "coerces" to a promise, by calling a
// "then" method on the current `Target`
(0, _each3.default)(['bind', 'catch', 'finally', 'asCallback', 'spread', '
;map', 'reduce', 'tap', 'thenReturn', 'return', 'yield', 'ensure'
;, 'reflect', 'get', 'mapSeries', 'delay'], function (method) {
  Target.prototype[method] = function () {
    var promise = this.then();
...query = function () {
    var ret = new Promise(INTERNAL);
    ret._captureStackTrace();
    ret._pushContext();
    var value = tryCatch(fn).apply(this, arguments);
    var promiseCreated = ret._popContext();
    debug.checkForgottenReturns(
        value, promiseCreated, "Promise.method", ret);
    ret._resolveFromSyncValue(value);
    return ret;
}...
  if (runner.builder._debug) {
    helpers.debugLog(sql);
  }
  if ((0, _isArray3.default)(sql)) {
    return runner.queryArray(sql);
  }
  return runner.query(sql);
})
// If there are any "error" listeners, we fire an error event
// and then re-throw the error to be eventually handled by
// the promise chain. Useful if you're wrapping in a custom `Promise`.
.catch(function (err) {
  if (runner.builder._events && runner.builder._events.error) {
...function queryArray(queries) {
  return queries.length === 1 ? this.query(queries[0]) : _bluebird2.default.bind(this).return(queries).reduce(function (memo, query
) {
    return this.query(query).then(function (resp) {
      memo.push(resp);
      return memo;
    });
  }, []);
}...
  var sql = runner.builder.toSQL();
  if (runner.builder._debug) {
    helpers.debugLog(sql);
  }
  if ((0, _isArray3.default)(sql)) {
    return runner.queryArray(sql);
  }
  return runner.query(sql);
})
// If there are any "error" listeners, we fire an error event
// and then re-throw the error to be eventually handled by
// the promise chain. Useful if you're wrapping in a custom `Promise`.
...function run() {
  var runner = this;
  return _bluebird2.default.using(this.ensureConnection(), function (connection) {
    runner.connection = connection;
    runner.client.emit('start', runner.builder);
    runner.builder.emit('start', runner.builder);
    var sql = runner.builder.toSQL();
    if (runner.builder._debug) {
      helpers.debugLog(sql);
    }
    if ((0, _isArray3.default)(sql)) {
      return runner.queryArray(sql);
    }
    return runner.query(sql);
  })
  // If there are any "error" listeners, we fire an error event
  // and then re-throw the error to be eventually handled by
  // the promise chain. Useful if you're wrapping in a custom `Promise`.
  .catch(function (err) {
    if (runner.builder._events && runner.builder._events.error) {
      runner.builder.emit('error', err);
    }
    throw err;
  })
  // Fire a single "end" event on the builder when
  // all queries have successfully completed.
  .tap(function () {
    runner.builder.emit('end');
  });
}...
  return (0, _map3.default)(data, function (statement) {
    return _this.client._formatQuery(statement.sql, statement.bindings, tz);
  }).join(';\n');
};
// Create a new instance of the `Runner`, passing in the current object.
Target.prototype.then = function () /* onFulfilled, onRejected */{
  var result = this.client.runner(this).run();
  return result.then.apply(result, arguments);
};
// Add additional "options" to the builder. Typically used for client specific
// items, like the `mysql` and `sqlite3` drivers.
Target.prototype.options = function (opts) {
  this._options = this._options || [];
...function stream(options, handler) {
  // If we specify stream(handler).then(...
  if (arguments.length === 1) {
    if (typeof options === 'function') {
      handler = options;
      options = {};
    }
  }
  // Determines whether we emit an error or throw here.
  var hasHandler = typeof handler === 'function';
  // Lazy-load the "PassThrough" dependency.
  PassThrough = PassThrough || require('readable-stream').PassThrough;
  var runner = this;
  var stream = new PassThrough({ objectMode: true });
  var promise = _bluebird2.default.using(this.ensureConnection(), function (connection) {
    runner.connection = connection;
    var sql = runner.builder.toSQL();
    var err = new Error('The stream may only be used with a single query statement.');
    if ((0, _isArray3.default)(sql)) {
      if (hasHandler) throw err;
      stream.emit('error', err);
    }
    return runner.client.stream(runner.connection, sql, stream, options);
  });
  // If a function is passed to handle the stream, send the stream
  // there and return the promise, otherwise just return the stream
  // and the promise will take care of itsself.
  if (hasHandler) {
    handler(stream);
    return promise;
  }
  // This promise is unreachable since no handler was given, so noop any
  // exceptions. Errors should be handled in the stream's 'error' event.
  promise.catch(_noop3.default);
  return stream;
}...
    }
  }
  return this;
};
// Initializes a stream.
Target.prototype.stream = function (options) {
  return this.client.runner(this).stream(options);
};
// Initialize a stream & pipe automatically.
Target.prototype.pipe = function (writable, options) {
  return this.client.runner(this).pipe(writable, options);
};
...function Seeder(knex) {
  this.knex = knex;
  this.config = this.setConfig(knex.client.config.seeds);
}n/a
_absoluteConfigDir = function () {
  return _path2.default.resolve(process.cwd(), this.config.directory);
}n/a
_ensureFolder = function () {
  var dir = this._absoluteConfigDir();
  return _bluebird2.default.promisify(_fs2.default.stat, { context: _fs2.default })(dir).catch(function () {
    return _bluebird2.default.promisify(_mkdirp2.default)(dir);
  });
}n/a
_generateStubTemplate = function () {
  var stubPath = this.config.stub || _path2.default.join(__dirname, 'stub', this.config.extension + '.stub');
  return _bluebird2.default.promisify(_fs2.default.readFile, { context: _fs2.default })(stubPath).then(function (stub) {
    return (0, _template3.default)(stub.toString(), { variable: 'd' });
  });
}n/a
_listAll = function () {
    var ret = new Promise(INTERNAL);
    ret._captureStackTrace();
    ret._pushContext();
    var value = tryCatch(fn).apply(this, arguments);
    var promiseCreated = ret._popContext();
    debug.checkForgottenReturns(
        value, promiseCreated, "Promise.method", ret);
    ret._resolveFromSyncValue(value);
    return ret;
}n/a
_runSeeds = function (seeds) {
  return _bluebird2.default.all((0, _map3.default)(seeds, (0, _bind3.default)(this._validateSeedStructure, this))).bind(this).then
(function (seeds) {
    return _bluebird2.default.bind(this).then(function () {
      return this._waterfallBatch(seeds);
    });
  });
}n/a
_seedData = function () {
  return _bluebird2.default.join(this._listAll());
}n/a
_validateSeedStructure = function (name) {
  var seed = require(_path2.default.join(this._absoluteConfigDir(), name));
  if (typeof seed.seed !== 'function') {
    throw new Error('Invalid seed file: ' + name + ' must have a seed function');
  }
  return name;
}n/a
_waterfallBatch = function (seeds) {
  var knex = this.knex;
  var seedDirectory = this._absoluteConfigDir();
  var current = _bluebird2.default.bind({ failed: false, failedOn: 0 });
  var log = [];
  (0, _each3.default)(seeds, function (seed) {
    var name = _path2.default.join(seedDirectory, seed);
    seed = require(name);
    // Run each seed file.
    current = current.then(function () {
      return seed.seed(knex, _bluebird2.default);
    }).then(function () {
      log.push(name);
    });
  });
  return current.thenReturn([log]);
}n/a
_writeNewSeed = function (name) {
  var config = this.config;
  var dir = this._absoluteConfigDir();
  return function (tmpl) {
    if (name[0] === '-') name = name.slice(1);
    var filename = name + '.' + config.extension;
    return _bluebird2.default.promisify(_fs2.default.writeFile, { context: _fs2.default })(_path2.default.join(dir, filename), tmpl
(config.variables || {})).return(_path2.default.join(dir, filename));
  };
}n/a
make = function (name, config) {
  this.config = this.setConfig(config);
  if (!name) _bluebird2.default.rejected(new Error('A name must be specified for the generated seed'));
  return this._ensureFolder(config).bind(this).then(this._generateStubTemplate).then(this._writeNewSeed(name));
}n/a
run = function () {
    var ret = new Promise(INTERNAL);
    ret._captureStackTrace();
    ret._pushContext();
    var value = tryCatch(fn).apply(this, arguments);
    var promiseCreated = ret._popContext();
    debug.checkForgottenReturns(
        value, promiseCreated, "Promise.method", ret);
    ret._resolveFromSyncValue(value);
    return ret;
}...
  return (0, _map3.default)(data, function (statement) {
    return _this.client._formatQuery(statement.sql, statement.bindings, tz);
  }).join(';\n');
};
// Create a new instance of the `Runner`, passing in the current object.
Target.prototype.then = function () /* onFulfilled, onRejected */{
  var result = this.client.runner(this).run();
  return result.then.apply(result, arguments);
};
// Add additional "options" to the builder. Typically used for client specific
// items, like the `mysql` and `sqlite3` drivers.
Target.prototype.options = function (opts) {
  this._options = this._options || [];
...setConfig = function (config) {
  return (0, _extend3.default)({
    extension: 'js',
    directory: './seeds'
  }, this.config || {}, config);
}n/a
function Transaction(client, container, config, outerTx) {
  (0, _classCallCheck3.default)(this, Transaction);
  var _this = (0, _possibleConstructorReturn3.default)(this, _EventEmitter.call(this));
  var txid = _this.txid = (0, _uniqueId3.default)('trx');
  _this.client = client;
  _this.outerTx = outerTx;
  _this.trxClient = undefined;
  _this._debug = client.config && client.config.debug;
  debug('%s: Starting %s transaction', txid, outerTx ? 'nested' : 'top level');
  _this._promise = _bluebird2.default.using(_this.acquireConnection(client, config, txid), function (connection) {
    var trxClient = _this.trxClient = makeTxClient(_this, client, connection);
    var init = client.transacting ? _this.savepoint(connection) : _this.begin(connection);
    init.then(function () {
      return makeTransactor(_this, connection, trxClient);
    }).then(function (transactor) {
      // If we've returned a "thenable" from the transaction container, assume
      // the rollback and commit are chained to this object's success / failure.
      // Directly thrown errors are treated as automatic rollbacks.
      var result = void 0;
      try {
        result = container(transactor);
      } catch (err) {
        result = _bluebird2.default.reject(err);
      }
      if (result && result.then && typeof result.then === 'function') {
        result.then(function (val) {
          return transactor.commit(val);
        }).catch(function (err) {
          return transactor.rollback(err);
        });
      }
      return null;
    }).catch(function (e) {
      return _this._rejecter(e);
    });
    return new _bluebird2.default(function (resolver, rejecter) {
      _this._resolver = resolver;
      _this._rejecter = rejecter;
    });
  });
  _this._completed = false;
  // If there's a wrapping transaction, we need to wait for any older sibling
  // transactions to settle (commit or rollback) before we can start, and we
  // need to register ourselves with the parent transaction so any younger
  // siblings can wait for us to complete before they can start.
  _this._previousSibling = _bluebird2.default.resolve(true);
  if (outerTx) {
    if (outerTx._lastChild) _this._previousSibling = outerTx._lastChild;
    outerTx._lastChild = _this._promise;
  }
  return _this;
}...
exports.default = Transaction;
function makeTransactor(trx, connection, trxClient) {
var transactor = (0, _makeKnex2.default)(trxClient);
transactor.transaction = function (container, options) {
  return trxClient.transaction(container, options, trx);
};
transactor.savepoint = function (container, options) {
  return transactor.transaction(container, options);
};
if (trx.client.transacting) {
  transactor.commit = function (value) {
...function acquireConnection(client, config, txid) {
  var configConnection = config && config.connection;
  return _bluebird2.default.try(function () {
    return configConnection || client.acquireConnection();
  }).disposer(function (connection) {
    if (!configConnection) {
      debug('%s: releasing connection', txid);
      client.releaseConnection(connection);
    } else {
      debug('%s: not releasing external connection', txid);
    }
  });
}...
  // Check whether there's a transaction flag, and that it has a connection.
  ensureConnection: function ensureConnection() {
var _this2 = this;
return _bluebird2.default.try(function () {
  return _this2.connection || new _bluebird2.default(function (resolver, rejecter) {
    // need to return promise or null from handler to prevent warning from bluebird
    return _this2.client.acquireConnection().then(resolver).catch(_bluebird2.default.
TimeoutError, function (error) {
      if (_this2.builder) {
        error.sql = _this2.builder.sql;
        error.bindings = _this2.builder.bindings;
      }
      throw error;
    }).catch(rejecter);
  });
...asCallback = function () {
  return this._promise = this._promise[method].apply(this._promise, arguments);
}n/a
function begin(conn) {
  return this.query(conn, 'BEGIN;');
}...
    _this._debug = client.config && client.config.debug;
    debug('%s: Starting %s transaction', txid, outerTx ? 'nested' : 'top level');
    _this._promise = _bluebird2.default.using(_this.acquireConnection(client, config, txid), function (connection) {
var trxClient = _this.trxClient = makeTxClient(_this, client, connection);
var init = client.transacting ? _this.savepoint(connection) : _this.begin(connection);
init.then(function () {
  return makeTransactor(_this, connection, trxClient);
}).then(function (transactor) {
  // If we've returned a "thenable" from the transaction container, assume
  // the rollback and commit are chained to this object's success / failure.
  // Directly thrown errors are treated as automatic rollbacks.
...bind = function () {
  return this._promise = this._promise[method].apply(this._promise, arguments);
}...
    throw error;
  });
}),
// In the case of the "schema builder" we call `queryArray`, which runs each
// of the queries in sequence.
queryArray: function queryArray(queries) {
  return queries.length === 1 ? this.query(queries[0]) : _bluebird2.default.bind(this
).return(queries).reduce(function (memo, query) {
    return this.query(query).then(function (resp) {
      memo.push(resp);
      return memo;
    });
  }, []);
},
...catch = function () {
  return this._promise = this._promise[method].apply(this._promise, arguments);
}...
// .map over the results
.map(function(row) {
  console.log(row);
})
// Finally, add a .catch handler for the promise chain
.catch(function(e) {
  console.error(e);
});
```
...function commit(conn, value) {
  return this.query(conn, 'COMMIT;', 1, value);
}...
  try {
    result = container(transactor);
  } catch (err) {
    result = _bluebird2.default.reject(err);
  }
  if (result && result.then && typeof result.then === 'function') {
    result.then(function (val) {
      return transactor.commit(val);
    }).catch(function (err) {
      return transactor.rollback(err);
    });
  }
  return null;
}).catch(function (e) {
  return _this._rejecter(e);
...function debug(enabled) {
  this._debug = arguments.length ? enabled : true;
  return this;
}n/a
delay = function () {
  return this._promise = this._promise[method].apply(this._promise, arguments);
}n/a
ensure = function () {
  return this._promise = this._promise[method].apply(this._promise, arguments);
}n/a
exec = function () {
  return this._promise = this._promise[method].apply(this._promise, arguments);
}n/a
finally = function () {
  return this._promise = this._promise[method].apply(this._promise, arguments);
}n/a
get = function () {
  return this._promise = this._promise[method].apply(this._promise, arguments);
}n/a
function isCompleted() {
  return this._completed || this.outerTx && this.outerTx.isCompleted() || false;
}...
    if (outerTx._lastChild) _this._previousSibling = outerTx._lastChild;
    outerTx._lastChild = _this._promise;
  }
  return _this;
}
Transaction.prototype.isCompleted = function isCompleted() {
  return this._completed || this.outerTx && this.outerTx.isCompleted() || false
;
};
Transaction.prototype.begin = function begin(conn) {
  return this.query(conn, 'BEGIN;');
};
Transaction.prototype.savepoint = function savepoint(conn) {
...map = function () {
  return this._promise = this._promise[method].apply(this._promise, arguments);
}...
.then(function() {
  return knex('users')
    .join('accounts', 'users.id', 'accounts.user_id')
    .select('users.user_name as user', 'accounts.account_name as account');
})
// .map over the results
.map(function(row) {
  console.log(row);
})
// Finally, add a .catch handler for the promise chain
.catch(function(e) {
  console.error(e);
});
...mapSeries = function () {
  return this._promise = this._promise[method].apply(this._promise, arguments);
}n/a
function query(conn, sql, status, value) {
  var _this4 = this;
  var q = this.trxClient.query(conn, sql).catch(function (err) {
    status = 2;
    value = err;
    _this4._completed = true;
    debug('%s error running transaction query', _this4.txid);
  }).tap(function () {
    if (status === 1) {
      _this4._resolver(value);
    }
    if (status === 2) {
      if ((0, _isUndefined3.default)(value)) {
        value = new Error('Transaction rejected with non-error: ' + value);
      }
      _this4._rejecter(value);
    }
  });
  if (status === 1 || status === 2) {
    this._completed = true;
  }
  return q;
}...
  if (runner.builder._debug) {
    helpers.debugLog(sql);
  }
  if ((0, _isArray3.default)(sql)) {
    return runner.queryArray(sql);
  }
  return runner.query(sql);
})
// If there are any "error" listeners, we fire an error event
// and then re-throw the error to be eventually handled by
// the promise chain. Useful if you're wrapping in a custom `Promise`.
.catch(function (err) {
  if (runner.builder._events && runner.builder._events.error) {
...reduce = function () {
  return this._promise = this._promise[method].apply(this._promise, arguments);
}...
    throw error;
  });
}),
// In the case of the "schema builder" we call `queryArray`, which runs each
// of the queries in sequence.
queryArray: function queryArray(queries) {
  return queries.length === 1 ? this.query(queries[0]) : _bluebird2.default.bind(this).return(queries).reduce(function (memo, query) {
    return this.query(query).then(function (resp) {
      memo.push(resp);
      return memo;
    });
  }, []);
},
...reflect = function () {
  return this._promise = this._promise[method].apply(this._promise, arguments);
}n/a
function release(conn, value) {
  return this.query(conn, 'RELEASE SAVEPOINT ' + this.txid + ';', 1, value);
}...
};
transactor.savepoint = function (container, options) {
  return transactor.transaction(container, options);
};
if (trx.client.transacting) {
  transactor.commit = function (value) {
    return trx.release(connection, value);
  };
  transactor.rollback = function (error) {
    return trx.rollbackTo(connection, error);
  };
} else {
  transactor.commit = function (value) {
    return trx.commit(connection, value);
...return = function () {
  return this._promise = this._promise[method].apply(this._promise, arguments);
}...
    throw error;
  });
}),
// In the case of the "schema builder" we call `queryArray`, which runs each
// of the queries in sequence.
queryArray: function queryArray(queries) {
  return queries.length === 1 ? this.query(queries[0]) : _bluebird2.default.bind(this).return
(queries).reduce(function (memo, query) {
    return this.query(query).then(function (resp) {
      memo.push(resp);
      return memo;
    });
  }, []);
},
...function rollback(conn, error) {
  var _this2 = this;
  return this.query(conn, 'ROLLBACK;', 2, error).timeout(5000).catch(_bluebird2.default.TimeoutError, function () {
    _this2._resolver();
  });
}...
  } catch (err) {
    result = _bluebird2.default.reject(err);
  }
  if (result && result.then && typeof result.then === 'function') {
    result.then(function (val) {
      return transactor.commit(val);
    }).catch(function (err) {
      return transactor.rollback(err);
    });
  }
  return null;
}).catch(function (e) {
  return _this._rejecter(e);
});
...function rollbackTo(conn, error) {
  var _this3 = this;
  return this.query(conn, 'ROLLBACK TO SAVEPOINT ' + this.txid, 2, error).timeout(5000).catch(_bluebird2.default.TimeoutError, function
 () {
    _this3._resolver();
  });
}...
};
if (trx.client.transacting) {
  transactor.commit = function (value) {
    return trx.release(connection, value);
  };
  transactor.rollback = function (error) {
    return trx.rollbackTo(connection, error);
  };
} else {
  transactor.commit = function (value) {
    return trx.commit(connection, value);
  };
  transactor.rollback = function (error) {
    return trx.rollback(connection, error);
...function savepoint(conn) {
  return this.query(conn, 'SAVEPOINT ' + this.txid + ';');
}...
    _this._debug = client.config && client.config.debug;
    debug('%s: Starting %s transaction', txid, outerTx ? 'nested' : 'top level');
    _this._promise = _bluebird2.default.using(_this.acquireConnection(client, config, txid), function (connection) {
var trxClient = _this.trxClient = makeTxClient(_this, client, connection);
var init = client.transacting ? _this.savepoint(connection) : _this.begin(connection);
init.then(function () {
  return makeTransactor(_this, connection, trxClient);
}).then(function (transactor) {
  // If we've returned a "thenable" from the transaction container, assume
  // the rollback and commit are chained to this object's success / failure.
  // Directly thrown errors are treated as automatic rollbacks.
...spread = function () {
  return this._promise = this._promise[method].apply(this._promise, arguments);
}n/a
tap = function () {
  return this._promise = this._promise[method].apply(this._promise, arguments);
}...
      runner.builder.emit('error', err);
    }
    throw err;
  })
  // Fire a single "end" event on the builder when
  // all queries have successfully completed.
  .tap(function () {
    runner.builder.emit('end');
  });
},
// Stream the result set, by passing through to the dialect's streaming
// capabilities. If the options are
...then = function () {
  return this._promise = this._promise[method].apply(this._promise, arguments);
}...
.createTable('accounts', function(table) {
  table.increments('id');
  table.string('account_name');
  table.integer('user_id').unsigned().references('users.id');
})
// Then query the table...
.then(function() {
  return knex.insert({user_name: 'Tim'}).into('users');
})
// ...and using the insert id, insert into the other table.
.then(function(rows) {
  return knex.table('accounts').insert({account_name: 'knex', user_id: rows[0]});
})
...thenReturn = function () {
  return this._promise = this._promise[method].apply(this._promise, arguments);
}n/a
yield = function () {
  return this._promise = this._promise[method].apply(this._promise, arguments);
}n/a