不要怂,就是干,撸起袖子干!

Commit a1432851 by Sascha Depold

refactored query-generator for multidatabase support

1 parent fe91e41c
var ConnectorManager = module.exports = function() {
var ConnectorManager = module.exports = function(sequelize, config) {
throw new Error('Define the constructor!')
}
ConnectorManager.prototype.getQueryGenerator = function() {
this.__QueryGenerator = this.__QueryGenerator || require(__dirname + '/' + this.sequelize.options.connector + '/query-generator')
return this.__QueryGenerator
}
ConnectorManager.prototype.query = function(sql, callee, options) {
throw new Error('Define the query method!')
}
......
......@@ -2,9 +2,10 @@ var Query = require("../../query")
, Utils = require("../../utils")
, without = function(arr, elem) { return arr.filter(function(e) { return e != elem }) }
var ConnectorManager = module.exports = function(config) {
var ConnectorManager = module.exports = function(sequelize, config) {
this.sequelize = sequelize
this.client = null
this.config = config
this.config = config || {}
this.disconnectTimeoutId = null
this.queue = []
this.activeQueue = []
......
var Utils = require("./utils")
var Utils = require("../../utils")
var QueryGenerator = module.exports = {
/*
......@@ -194,3 +194,4 @@ var QueryGenerator = module.exports = {
}).join(" AND ")
}
}
QueryGenerator = Utils._.extend(Utils._.clone(require("../query-generator")), QueryGenerator)
var Utils = require("../../utils")
var ConnectorManager = module.exports = function() {
}
var ConnectorManager = module.exports = function() {}
Utils._.extend(ConnectorManager.prototype, require("../connector-manager").prototype)
ConnectorManager.prototype.connect = function() {
return ''
}
var Utils = require("../../utils")
var QueryGenerator = module.exports = {}
QueryGenerator = Utils._.extend(Utils._.clone(require("../query-generator")), QueryGenerator)
var Utils = require("./utils")
, Model = require("./model")
, QueryGenerator = require("./query-generator")
, DataTypes = require("./data-types")
var ModelDefinition = module.exports = function(name, attributes, options) {
......@@ -21,6 +20,10 @@ var ModelDefinition = module.exports = function(name, attributes, options) {
}
Utils.addEventEmitter(ModelDefinition)
ModelDefinition.prototype.__defineGetter__('QueryGenerator', function() {
return this.modelManager.sequelize.connectorManager.getQueryGenerator()
})
ModelDefinition.prototype.addOptionalClassMethods = function() {
var self = this
Utils._.each(this.options.classMethods || {}, function(fct, name) { self[name] = fct })
......@@ -72,7 +75,7 @@ ModelDefinition.prototype.sync = function(options) {
var self = this
var doQuery = function() {
self.query(QueryGenerator.createTableQuery(self.tableName, self.attributes, options))
self.query(self.QueryGenerator.createTableQuery(self.tableName, self.attributes, options))
.on('success', function() { self.emit('success', self) })
.on('failure', function(err) { self.emit('failure', err) })
}
......@@ -89,18 +92,18 @@ ModelDefinition.prototype.sync = function(options) {
}
ModelDefinition.prototype.drop = function() {
return this.query(QueryGenerator.dropTableQuery(this.tableName, this.id))
return this.query(this.QueryGenerator.dropTableQuery(this.tableName, this.id))
}
ModelDefinition.prototype.__defineGetter__('all', function() {
return this.query(QueryGenerator.selectQuery(this.tableName))
return this.query(this.QueryGenerator.selectQuery(this.tableName))
})
ModelDefinition.prototype.count = function(options) {
var self = this
var emitter = new Utils.CustomEventEmitter(function() {
self.query(QueryGenerator.countQuery(self.tableName, options), self, {plain: true}).on('success', function(obj) {
self.query(self.QueryGenerator.countQuery(self.tableName, options), self, {plain: true}).on('success', function(obj) {
emitter.emit('success', obj['count(*)'])
})
})
......@@ -121,14 +124,14 @@ ModelDefinition.prototype.min = function(field, options) {
var self = this
var emitter = new Utils.CustomEventEmitter(function() {
self.query(QueryGenerator.minQuery(self.tableName, field,options), self, {plain: true}).on('success', function(obj) {
self.query(self.QueryGenerator.minQuery(self.tableName, field,options), self, {plain: true}).on('success', function(obj) {
emitter.emit('success', obj['min'])
})
})
return emitter.run()
}
ModelDefinition.prototype.findAll = function(options) {
return this.query(QueryGenerator.selectQuery(this.tableName, options))
return this.query(this.QueryGenerator.selectQuery(this.tableName, options))
}
ModelDefinition.prototype.find = function(options) {
......@@ -152,7 +155,7 @@ ModelDefinition.prototype.find = function(options) {
options.limit = 1
var query = QueryGenerator.selectQuery(this.tableName, options)
var query = this.QueryGenerator.selectQuery(this.tableName, options)
return this.query(query, this, {plain: true})
}
......
var Utils = require("./utils")
, Mixin = require("./associations/mixin")
, QueryGenerator = require("./query-generator")
var Model = module.exports = function(values, options) {
var self = this
......@@ -38,6 +37,10 @@ Model.Events = {
destroy: 'DestroyQuery'
}
Model.prototype.__defineGetter__('QueryGenerator', function() {
return this.__definition.QueryGenerator
})
Model.prototype.addAttribute = function(attribute, value) {
this[attribute] = value
this.attributes.push(attribute)
......@@ -60,7 +63,7 @@ Model.prototype.save = function() {
if(this.isNewRecord) {
var self = this
var eventEmitter = new Utils.CustomEventEmitter(function() {
self.query(QueryGenerator.insertQuery(self.__definition.tableName, self.values))
self.query(self.QueryGenerator.insertQuery(self.__definition.tableName, self.values))
.on('success', function(obj) {
obj.isNewRecord = false
eventEmitter.emit('success', obj)
......@@ -70,7 +73,7 @@ Model.prototype.save = function() {
return eventEmitter.run()
} else {
var identifier = this.__options.hasPrimaryKeys ? this.primaryKeyValues : this.id
return this.query(QueryGenerator.updateQuery(this.__definition.tableName, this.values, identifier))
return this.query(this.QueryGenerator.updateQuery(this.__definition.tableName, this.values, identifier))
}
}
......@@ -100,7 +103,7 @@ Model.prototype.destroy = function() {
return this.save()
} else {
var identifier = this.__options.hasPrimaryKeys ? this.primaryKeyValues : this.id
return this.query(QueryGenerator.deleteQuery(this.__definition.tableName, identifier))
return this.query(this.QueryGenerator.deleteQuery(this.__definition.tableName, identifier))
}
}
......
......@@ -11,6 +11,7 @@ var Sequelize = module.exports = function(database, username, password, options)
})
this.options = options
this.options.connector = this.options.connector || 'mysql'
this.config = {
database: database,
username: username,
......@@ -19,10 +20,10 @@ var Sequelize = module.exports = function(database, username, password, options)
port : options.port || 3306
}
var ConnectorManager = require("./connectors/" + (this.options.connector || 'mysql') + "/connector-manager")
var ConnectorManager = require("./connectors/" + this.options.connector + "/connector-manager")
this.modelManager = new ModelManager(this)
this.connectorManager = new ConnectorManager(this.config)
this.connectorManager = new ConnectorManager(this, this.config)
}
Sequelize.Utils = Utils
......
var assert = require("assert")
, QueryGenerator = require("../../lib/query-generator")
, QueryGenerator = require("../../lib/connectors/mysql/query-generator")
, eql = assert.equal
module.exports = {
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!