knex/src/util/make-knex.js

147 lines
3.3 KiB
JavaScript
Raw Normal View History

2015-05-09 13:58:18 -04:00
import { EventEmitter } from 'events';
2015-05-09 13:58:18 -04:00
import Migrator from '../migrate';
import Seeder from '../seed';
import FunctionHelper from '../functionhelper';
import QueryInterface from '../query/methods';
import * as helpers from '../helpers';
import { assign } from 'lodash'
import batchInsert from './batchInsert';
2015-05-09 13:58:18 -04:00
export default function makeKnex(client) {
2015-05-09 13:58:18 -04:00
// The object we're potentially using to kick off an initial chain.
function knex(tableName, options) {
const qb = knex.queryBuilder()
if (!tableName) helpers.warn(
'calling knex without a tableName is deprecated. Use knex.queryBuilder() instead.'
);
return tableName ? qb.table(tableName, options) : qb
2015-05-09 13:58:18 -04:00
}
assign(knex, {
2015-07-02 18:28:34 -04:00
Promise: require('bluebird'),
2015-05-09 13:58:18 -04:00
// A new query builder instance.
queryBuilder() {
2015-05-09 13:58:18 -04:00
return client.queryBuilder()
},
raw() {
2015-05-09 13:58:18 -04:00
return client.raw.apply(client, arguments)
},
batchInsert(table, batch, chunkSize = 1000) {
return batchInsert(this, table, batch, chunkSize);
},
2015-05-09 13:58:18 -04:00
// Runs a new transaction, taking a container and returning a promise
// for when the transaction is resolved.
transaction(container, config) {
2015-05-09 13:58:18 -04:00
return client.transaction(container, config)
},
// Typically never needed, initializes the pool for a knex client.
initialize(config) {
2015-05-09 13:58:18 -04:00
return client.initialize(config)
},
// Convenience method for tearing down the pool.
destroy(callback) {
2015-05-09 13:58:18 -04:00
return client.destroy(callback)
},
ref(ref) {
return client.ref(ref);
2015-05-09 13:58:18 -04:00
}
})
// Hook up the "knex" object as an EventEmitter.
const ee = new EventEmitter()
for (const key in ee) {
2015-05-09 13:58:18 -04:00
knex[key] = ee[key]
}
// Allow chaining methods from the root object, before
// any other information is specified.
QueryInterface.forEach(function(method) {
knex[method] = function() {
const builder = knex.queryBuilder()
2015-05-09 13:58:18 -04:00
return builder[method].apply(builder, arguments)
}
})
2015-07-02 18:28:34 -04:00
2015-05-09 13:58:18 -04:00
knex.client = client
2016-10-19 15:12:54 -04:00
const VERSION = '0.12.6'
2016-09-12 18:11:56 -04:00
2015-05-09 13:58:18 -04:00
Object.defineProperties(knex, {
2016-09-12 18:11:56 -04:00
__knex__: {
get() {
helpers.warn(
'knex.__knex__ is deprecated, you can get the module version' +
"by running require('knex/package').version"
)
return VERSION
}
},
VERSION: {
get() {
helpers.warn(
'knex.VERSION is deprecated, you can get the module version' +
"by running require('knex/package').version"
)
return VERSION
}
2016-09-12 18:26:49 -04:00
},
2016-09-12 18:11:56 -04:00
2015-05-09 13:58:18 -04:00
schema: {
get() {
2015-05-09 13:58:18 -04:00
return client.schemaBuilder()
}
},
migrate: {
get() {
2015-05-09 13:58:18 -04:00
return new Migrator(knex)
}
},
seed: {
get() {
2015-05-09 13:58:18 -04:00
return new Seeder(knex)
}
},
fn: {
get() {
2015-05-09 13:58:18 -04:00
return new FunctionHelper(client)
}
}
})
// Passthrough all "start" and "query" events to the knex object.
client.on('start', function(obj) {
knex.emit('start', obj)
})
client.on('query', function(obj) {
knex.emit('query', obj)
})
client.on('query-error', function(err, obj) {
knex.emit('query-error', err, obj)
})
client.on('query-response', function(response, obj, builder) {
knex.emit('query-response', response, obj, builder)
})
2016-05-18 20:09:51 +10:00
client.makeKnex = makeKnex
2015-05-09 13:58:18 -04:00
return knex
2015-11-02 14:54:38 +11:00
}