fixed saved data to be escaped properly

pull/1598/head
CeBe 2013-03-07 13:15:29 +01:00
parent f2b173f566
commit 4026ba1815
1 changed files with 82 additions and 26 deletions

View File

@ -3,7 +3,17 @@ var startTime = new Date().getTime();
require("ep_etherpad-lite/node_modules/npm").load({}, function(er,npm) { require("ep_etherpad-lite/node_modules/npm").load({}, function(er,npm) {
var fs = require("fs"); var fs = require("fs");
var db = require("ep_etherpad-lite/node/db/DB");;
var ueberDB = require("ep_etherpad-lite/node_modules/ueberDB");
var settings = require("ep_etherpad-lite/node/utils/Settings");
var log4js = require('ep_etherpad-lite/node_modules/log4js');
var dbWrapperSettings = {
cache: 0,
writeInterval: 100,
json: false // data is already json encoded
};
var db = new ueberDB.database(settings.dbType, settings.dbSettings, dbWrapperSettings, log4js.getLogger("ueberDB"));
var sqlFile = process.argv[2]; var sqlFile = process.argv[2];
@ -15,39 +25,85 @@ require("ep_etherpad-lite/node_modules/npm").load({}, function(er,npm) {
} }
log("initializing db"); log("initializing db");
db.init(function(){ db.init(function(err)
log("done"); {
//there was an error while initializing the database, output it and stop
if(err)
{
console.error("ERROR: Problem while initalizing the database");
console.error(err.stack ? err.stack : err);
process.exit(1);
}
else
{
log("done");
log("open output file..."); log("open output file...");
var lines = fs.readFileSync(sqlFile, 'utf8').split("\n");; var lines = fs.readFileSync(sqlFile, 'utf8').split("\n");
var count = lines.length; var count = lines.length;
var keyNo = 0; var keyNo = 0;
process.stdout.write("Start importing " + count + " keys...\n"); process.stdout.write("Start importing " + count + " keys...\n");
lines.forEach(function(l) { lines.forEach(function(l) {
if (l.substr(0, 27) == "REPLACE INTO store VALUES (") { if (l.substr(0, 27) == "REPLACE INTO store VALUES (") {
var pos = l.indexOf("', '"); var pos = l.indexOf("', '");
var key = l.substr(28, pos - 28); var key = l.substr(28, pos - 28);
var value = l.substr(pos + 4); var value = l.substr(pos + 3);
value = value.substr(0, value.length - 3); value = value.substr(0, value.length - 2);
db.db.set(key, value, null); console.log("key: " + key + " val: " + value);
keyNo++; console.log("unval: " + unescape(value));
if (keyNo % 1000 == 0) { db.set(key, unescape(value), null);
process.stdout.write(" " + keyNo + "/" + count + "\n"); keyNo++;
if (keyNo % 1000 == 0) {
process.stdout.write(" " + keyNo + "/" + count + "\n");
}
} }
} });
}); process.stdout.write("\n");
process.stdout.write("\n");
db.db.doShutdown(function() { db.doShutdown(function() {
log("finished, imported " + keyNo + " keys."); log("finished, imported " + keyNo + " keys.");
process.exit(0); process.exit(0);
}); });
}
}); });
}); });
function log(str) function log(str)
{ {
console.log((new Date().getTime() - startTime)/1000 + "\t" + str); console.log((new Date().getTime() - startTime)/1000 + "\t" + str);
} }
unescape = function(val) {
// value is a string
if (val.substr(0, 1) == "'") {
val = val.substr(0, val.length - 1).substr(1);
return val.replace(/\\[0nrbtZ\\'"]/g, function(s) {
switch(s) {
case "\\0": return "\0";
case "\\n": return "\n";
case "\\r": return "\r";
case "\\b": return "\b";
case "\\t": return "\t";
case "\\Z": return "\x1a";
default: return s.substr(1);
}
});
}
// value is a boolean or NULL
if (val == 'NULL') {
return null;
}
if (val == 'true') {
return true;
}
if (val == 'false') {
return false;
}
// value is a number
return val;
};