orm
Version:
NodeJS Object-relational mapping
61 lines (45 loc) • 1.42 kB
JavaScript
var _ = require("lodash");
var Sync = require("sql-ddl-sync").Sync;
exports.sync = function (opts, cb) {
var sync = new Sync({
driver : this,
debug : false//function (text) { console.log(text); }
});
var setIndex = function (p, v, k) {
v.index = true;
p[k] = v;
};
var props = {};
if (this.customTypes) {
for (var k in this.customTypes) {
sync.defineType(k, this.customTypes[k]);
}
}
sync.defineCollection(opts.table, opts.allProperties);
for (var i = 0; i < opts.many_associations.length; i++) {
props = {};
_.merge(props, opts.many_associations[i].mergeId);
_.merge(props, opts.many_associations[i].mergeAssocId);
props = _.transform(props, setIndex);
_.merge(props, opts.many_associations[i].props);
sync.defineCollection(opts.many_associations[i].mergeTable, props);
}
sync.sync(cb);
return this;
};
exports.drop = function (opts, cb) {
var i, queries = [], pending;
queries.push("DROP TABLE IF EXISTS " + this.query.escapeId(opts.table));
for (i = 0; i < opts.many_associations.length; i++) {
queries.push("DROP TABLE IF EXISTS " + this.query.escapeId(opts.many_associations[i].mergeTable));
}
pending = queries.length;
for (i = 0; i < queries.length; i++) {
this.execQuery(queries[i], function (err) {
if (--pending === 0) {
return cb(err);
}
});
}
return this;
};