Skip to content

Commit

Permalink
merget migration/module
Browse files Browse the repository at this point in the history
  • Loading branch information
Kreees committed May 16, 2014
2 parents b2d8ed9 + 790279b commit cf58b3c
Show file tree
Hide file tree
Showing 3 changed files with 94 additions and 87 deletions.
3 changes: 2 additions & 1 deletion lib/modules/client-compiler/share/template-proc.js
Expand Up @@ -83,9 +83,10 @@ module.exports = function(self,deps){
fs.writeFileSync(tempFileName,
prepare(pack,viewName,fs.readFileSync(name,"utf-8")),"utf-8");
self.expressApp.render("temp_"+uniq+"_"+shortViewName,function(e,data){
if (e){ deps.logger.error("Error on tempalte: ",name,"\n", e); };
fs.unlinkSync(tempFileName);
setTimeout(function(){callback(name,e?"":postProc(pack,viewName,data));},0);
if (e){ deps.logger.error.log("Error on tempalte: ",name,"\n", e); };

});
return;
}
Expand Down
2 changes: 1 addition & 1 deletion lib/modules/database/database.js
Expand Up @@ -60,7 +60,7 @@ module.exports = function(self,deps){
var sysPath = path.normalize(self.syspath+"/node_modules/"+driverName[dbConfig.type]);

if (!fs.existsSync(sysPath)){
if (fs.existsSync(localPath)) fs.linkSync(localPath,sysPath);
if (fs.existsSync(localPath)) fs.symlinkSync(localPath,sysPath);
else deps.logger.exception("You should install appropriate database driver\n" +
"For additional info visit: https://github.com/dresende/node-orm2/wiki/Connecting-to-Database");
}
Expand Down
176 changes: 91 additions & 85 deletions lib/modules/migration/module.js
Expand Up @@ -7,7 +7,7 @@ module.exports = function(self,deps) {
var _ = require('underscore');
var crypto = require('crypto');
var Q = require("q");
var Sync = require('sql-ddl-sync');
var Sync = require('sql-ddl-sync').Sync;
var g = require("grunt");
var cfgPath = 'mysync/config.json';
var rulePath = '../';
Expand All @@ -33,6 +33,7 @@ module.exports = function(self,deps) {
ret.rm = _.difference(bdAttrs, newAttrs);
var common = _.difference(newAttrs, ret.add);
ret.chng = _.filter(common, function(key){
// console.log([key, modelSch[key], bdSch[key]]);
return !_.isEqual(modelSch[key], bdSch[key]);
})
return ret;
Expand All @@ -54,36 +55,36 @@ module.exports = function(self,deps) {
else return false;
}
function syncOne(name, properties){
// console.log(">>> Sync: " + name);
// console.log(">>> Sync: " + name);
var def = Q.defer();
var sync = new Sync({
dialect : db.driver_name,
driver : db.driver,
debug : function(text) {
// console.log("> %s", text);
// console.log("> %s", text);
}
});
sync.defineCollection(name, properties);
sync.sync(function(err) {
if(err) {
// console.log(">>> Table: " + name + " > Sync Error: " + err);
// console.log(">>> Table: " + name + " > Sync Error: " + err);
return def.reject(">>> Table: " + name + " > Sync Error: " + err);
} else{
save(name, properties);
// console.log(">>> Table: " + name + " successfull synced.");
// console.log(">>> Table: " + name + " successfull synced.");
def.resolve();
}
});
return def.promise;
}
function magic(old){
var df = Q.defer();
// console.log("magic is ok");
// console.log("magic is ok");
setTimeout(function(){df.resolve();}, 100);
return df.promise;
}
function magicSyncOne(name) { //return promice
// console.log(">>> magicSyncOne: "+name);
// console.log(">>> magicSyncOne: "+name);
var old = bdscheme[name];
if(!old){
return syncOne(name, scheme[name])
Expand Down Expand Up @@ -111,7 +112,7 @@ module.exports = function(self,deps) {
if(stat.rm.length != 0){
var schR = _.omit(sch, stat.rm);
if(_.isEqual(schR, cur)) prms = prms.then(function(){ return syncOne(name, cur);});
else console.log(">>> Internal error: before remove schemes not equal.")
// else console.log(">>> Internal error: before remove schemes not equal.")
}else save(name, cur);

setTimeout(function(){def.resolve()}, 100);
Expand All @@ -131,8 +132,8 @@ module.exports = function(self,deps) {
// }
// }
function done(flag){
// if(flag === false) console.log("<<< Migration module error: " + moduleErr);
// else console.log("<<< ");
// if(flag === false) console.log("<<< Migration module error: " + moduleErr);
// else console.log("<<< ");
}
return {
__init__: function() {
Expand All @@ -153,53 +154,66 @@ module.exports = function(self,deps) {
}
return deps.database.getDatabase("default").then(function(dbs){
db = dbs;
// console.log(db.driver_name);
});
},
status : function(modelname) {
// console.log(">>> Migration info:");
// console.log(">>> Migration info:");
var fullLog = [];
function one(name){
var onelog = "";
if(!isSynced(name)) {
// console.log("Model: "+name+" need to sync.");
onelog = "Model: "+name+" not synced. ";
if(full){
var info = difference(name, scheme[name]);
if(info.flagCreate) {
// console.log(" no such table in database.");
return; }
// if(info.add && info.add.length !=0 ) console.log(" add: "+ info.add);
// if(info.chng && info.chng.length !=0 ) console.log(" change: "+ info.chng);
// if(info.rm && info.add.rm !=0 ) console.log(" remove: "+ info.rm);
onelog +="No such table in database.";
fullLog.push(onelog);
return false; }
if(info.add && info.add.length !=0 ) onelog +=("Add: "+ info.add);
if(info.chng && info.chng.length !=0 ) onelog +=(" Change: "+ info.chng);
if(info.rm && info.rm.length !=0 ) onelog +=(" Remove: "+ info.rm);
}
} else{
// console.log("Model: "+name+" is synced.");
}

fullLog.push(onelog);
return false;
} else {
fullLog.push("Model: "+name+" is synced.");
return true;
}
}
if(modelname){
if(scheme[modelname]) one(modelname);
else {
// console.log("No model: "+modelname+" in application scheme.");
// console.log("No model: "+modelname+" in application scheme.");
done(false);
}
}
else {
var need = 0;
var all = 0;
for(var i in scheme) {
one(i);
all++;
var flag = one(i);
if(!flag) need++;
}
console.log("Need to sync: "+need+ " from "+ all+" models.");

}
if(fullLog.length != 0) console.log(fullLog);
return done();
},
sync : function(modelname) {
// console.log(">>> Migration auto sync:");
// console.log(">>> Migration auto sync:");
if(modelname) {
if(scheme[modelname]) {
if(isSynced(modelname)){
// console.log(">>> model " + modelname + " nothing to sync.");
// console.log(">>> model " + modelname + " nothing to sync.");
return done();
}
var prms = syncOne(modelname, scheme[modelname]);
prms.done(done, function(){done(false);});
} else {
// console.log("No model: "+modelname+" in application scheme.");
// console.log("No model: "+modelname+" in application scheme.");
return done(false);
}
} else {
Expand Down Expand Up @@ -229,11 +243,11 @@ module.exports = function(self,deps) {
// g.file.write(cfgPath, JSON.stringify({hash:bdhash, scheme: bdscheme}));
},
magicSync : function(modelname, filename){
// console.log(">>> Migration magic sync:");
// console.log(">>> Migration magic sync:");
if(modelname) {
if(scheme[modelname]) {
if(isSynced(modelname)){
// console.log(">>> model " + modelname + " nothing to sync.");
// console.log(">>> model " + modelname + " nothing to sync.");
return done();
}
// if(!rules[modelname]){
Expand Down Expand Up @@ -267,63 +281,55 @@ module.exports = function(self,deps) {



function createMagic(obj){

}
function magicSyncOne(name, rules) { //return promice
console.log(">>> Rule sync : "+name);
var u = m.utils._;
var old = bdscheme[name];
if(!old){
return syncOne(name, scheme[name])
}
var def = Q.defer();
var flagAdd = false;
var cur = scheme[name];
var curK = u.keys(cur);
var oldK = u.keys(old);
var addK = u.difference(curK, oldK);
var remK = u.difference(oldK, curK);
var commonK = u.difference(curK, addK);
var changeK = u.filter(commonK, function(key){
return !u.isEqual(cur[key],old[key]);
})
// console.log(" Add columns: "+ addK);
// console.log(" Change columns: "+ changeK);
// console.log(" Remove columns: "+ remK);
var prms = def.promise,
sch = old;
// sync add
if(addK.length != 0){
sch = u._.extend(old, u._.pick(cur, addK));
flagAdd = true;
}
// change
if(changeK.length != 0){
sch = u._.extend(sch, u._.pick(cur, changeK));
flagChng = true;
}
if(flagAdd) prms = prms.then(function(){ return syncOne(name, sch);});
//magic

// remove
if(remK.length != 0){
var schR = u._.omit(sch, remK);
if(u._.isEqual(schR, cur)) prms = prms.then(function(){ return syncOne(name, cur);});
else {
// console.log(">>> Internal error: before remove schemes not equal.")
}
}else save(name, cur);

setTimeout(function(){def.resolve()}, 100);
return prms;
}






// function createMagic(obj){
//
// }
// function magicSyncOne(name, rules) { //return promice
// console.log(">>> Rule sync : "+name);
// var u = m.utils._;
// var old = bdscheme[name];
// if(!old){
// return syncOne(name, scheme[name])
// }
// var def = Q.defer();
// var flagAdd = false;
// var cur = scheme[name];
// var curK = u.keys(cur);
// var oldK = u.keys(old);
// var addK = u.difference(curK, oldK);
// var remK = u.difference(oldK, curK);
// var commonK = u.difference(curK, addK);
// var changeK = u.filter(commonK, function(key){
// return !u.isEqual(cur[key],old[key]);
// })
// console.log(" Add columns: "+ addK);
// console.log(" Change columns: "+ changeK);
// console.log(" Remove columns: "+ remK);
// var prms = def.promise,
// sch = old;
// // sync add
// if(addK.length != 0){
// sch = u._.extend(old, u._.pick(cur, addK));
// flagAdd = true;
// }
// // change
// if(changeK.length != 0){
// sch = u._.extend(sch, u._.pick(cur, changeK));
// flagChng = true;
// }
// if(flagAdd) prms = prms.then(function(){ return syncOne(name, sch);});
// //magic
//
// // remove
// if(remK.length != 0){
// var schR = u._.omit(sch, remK);
// if(u._.isEqual(schR, cur)) prms = prms.then(function(){ return syncOne(name, cur);});
// else console.log(">>> Internal error: before remove schemes not equal.")
// }else save(name, cur);
//
// setTimeout(function(){def.resolve()}, 100);
// return prms;
// }

function renameCols(modelname){
var Dialect = require("./node_modules/sql-ddl-sync/lib/Dialects/" + db.driver_name);
Expand Down

0 comments on commit cf58b3c

Please sign in to comment.