136 lines
3.3 KiB
JavaScript
136 lines
3.3 KiB
JavaScript
|
|
var Class = require('better-js-class');
|
|
var $U = require('underscore');
|
|
var _DB = require('./db.js');
|
|
var $M = require('./model.js');
|
|
|
|
var DB = Class(_DB, {
|
|
_init: function(cfg) {
|
|
this.parent._init.call(this, cfg);
|
|
this._models = {};
|
|
},
|
|
|
|
add: function(cfg) {
|
|
var me = this;
|
|
|
|
var model = {};
|
|
|
|
var RowTemplate = function(model) {
|
|
var closedRowClass = Class($M.Row, {
|
|
_init: function(data) {
|
|
this.parent._init.call(this, data, {
|
|
table: model.Table
|
|
});
|
|
}
|
|
});
|
|
return Class(closedRowClass, cfg.Row || {});
|
|
};
|
|
|
|
var Row = RowTemplate(model);
|
|
|
|
$U.extend(model, {
|
|
Row: Row,
|
|
_RowTemplate: RowTemplate
|
|
});
|
|
|
|
|
|
var TableTemplate = function(model) {
|
|
var closedTableClass = Class($M.Table, {
|
|
_init: function() {
|
|
this.parent._init.call(this, {
|
|
db: me,
|
|
name: cfg.name,
|
|
rowClass: model.Row,
|
|
idFieldName: cfg.idFieldName || 'id',
|
|
versionFieldName: cfg.versionFieldName || 'version',
|
|
createdFieldName: cfg.createdFieldName || 'date_created',
|
|
updatedFieldName: cfg.updatedFieldName || 'last_updated'
|
|
});
|
|
}
|
|
});
|
|
|
|
return Class(closedTableClass, cfg.Table || {});
|
|
};
|
|
|
|
var TableClass = TableTemplate(model);
|
|
var Table = new TableClass();
|
|
|
|
$U.extend(model, {
|
|
Table: Table,
|
|
_TableTemplate: TableTemplate
|
|
});
|
|
|
|
this._models[cfg.name] = model;
|
|
|
|
return Table;
|
|
},
|
|
|
|
clone: function() {
|
|
var tempClass = function() {
|
|
this._models = $U.clone(this._models);
|
|
};
|
|
|
|
tempClass.prototype = this;
|
|
return new tempClass();
|
|
},
|
|
|
|
extend: function(cfg) {
|
|
var _model = this.get(cfg.name);
|
|
|
|
if (!_model) {
|
|
throw new Error('node-mysql-runtime-error: db.extend can not be used on empty model.');
|
|
}
|
|
|
|
var model = {};
|
|
|
|
var _RowTemplate = _model._RowTemplate;
|
|
|
|
var RowTemplate = function(model) {
|
|
var superClass = _RowTemplate(model);
|
|
return Class(superClass, cfg.Row || {});
|
|
};
|
|
|
|
var Row = RowTemplate(model);
|
|
|
|
$U.extend(model, {
|
|
Row: Row,
|
|
_RowTemplate: RowTemplate
|
|
});
|
|
|
|
var _TableTemplate = _model._TableTemplate;
|
|
|
|
var TableTemplate = function(model) {
|
|
var superClass = _TableTemplate(model);
|
|
return Class(superClass, cfg.Table || {});
|
|
};
|
|
|
|
var TableClass = TableTemplate(model);
|
|
|
|
var Table = new TableClass();
|
|
|
|
$U.extend(model, {
|
|
Table: Table,
|
|
_TableTemplate: TableTemplate
|
|
});
|
|
|
|
this._models[cfg.name] = model;
|
|
|
|
return Table;
|
|
},
|
|
|
|
get: function(name) {
|
|
return this._models[name];
|
|
}
|
|
});
|
|
|
|
DB.format = _DB.format;
|
|
|
|
module.exports = {
|
|
DB: DB,
|
|
Row: $M.Row,
|
|
Table: $M.Table,
|
|
OPTIMISTIC_LOCK_EXCEPTION: $M.OPTIMISTIC_LOCK_EXCEPTION
|
|
}
|
|
|
|
|