2013-03-06 18:16:30 +01:00
|
|
|
var startTime = new Date().getTime();
|
|
|
|
|
2013-03-06 22:08:14 +01:00
|
|
|
require("ep_etherpad-lite/node_modules/npm").load({}, function(er,npm) {
|
2013-03-06 18:16:30 +01:00
|
|
|
|
2013-03-06 22:08:14 +01:00
|
|
|
var fs = require("fs");
|
2013-03-07 13:15:29 +01:00
|
|
|
|
|
|
|
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"));
|
2013-03-06 22:08:14 +01:00
|
|
|
|
|
|
|
var sqlFile = process.argv[2];
|
|
|
|
|
|
|
|
//stop if the settings file is not set
|
|
|
|
if(!sqlFile)
|
|
|
|
{
|
|
|
|
console.error("Use: node importSqlFile.js $SQLFILE");
|
|
|
|
process.exit(1);
|
|
|
|
}
|
|
|
|
|
|
|
|
log("initializing db");
|
2013-03-07 13:15:29 +01:00
|
|
|
db.init(function(err)
|
|
|
|
{
|
|
|
|
//there was an error while initializing the database, output it and stop
|
|
|
|
if(err)
|
|
|
|
{
|
2017-09-14 13:33:27 +02:00
|
|
|
console.error("ERROR: Problem while initializing the database");
|
2013-03-07 13:15:29 +01:00
|
|
|
console.error(err.stack ? err.stack : err);
|
|
|
|
process.exit(1);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
log("done");
|
|
|
|
|
|
|
|
log("open output file...");
|
|
|
|
var lines = fs.readFileSync(sqlFile, 'utf8').split("\n");
|
|
|
|
|
|
|
|
var count = lines.length;
|
|
|
|
var keyNo = 0;
|
|
|
|
|
|
|
|
process.stdout.write("Start importing " + count + " keys...\n");
|
|
|
|
lines.forEach(function(l) {
|
|
|
|
if (l.substr(0, 27) == "REPLACE INTO store VALUES (") {
|
|
|
|
var pos = l.indexOf("', '");
|
|
|
|
var key = l.substr(28, pos - 28);
|
|
|
|
var value = l.substr(pos + 3);
|
|
|
|
value = value.substr(0, value.length - 2);
|
|
|
|
console.log("key: " + key + " val: " + value);
|
|
|
|
console.log("unval: " + unescape(value));
|
|
|
|
db.set(key, unescape(value), null);
|
|
|
|
keyNo++;
|
|
|
|
if (keyNo % 1000 == 0) {
|
|
|
|
process.stdout.write(" " + keyNo + "/" + count + "\n");
|
|
|
|
}
|
2013-03-06 22:28:00 +01:00
|
|
|
}
|
2013-03-07 13:15:29 +01:00
|
|
|
});
|
|
|
|
process.stdout.write("\n");
|
2013-03-07 14:10:54 +01:00
|
|
|
process.stdout.write("done. waiting for db to finish transaction. depended on dbms this may take some time...\n");
|
2013-03-06 22:08:14 +01:00
|
|
|
|
2013-03-07 13:15:29 +01:00
|
|
|
db.doShutdown(function() {
|
|
|
|
log("finished, imported " + keyNo + " keys.");
|
|
|
|
process.exit(0);
|
|
|
|
});
|
|
|
|
}
|
2013-03-06 18:16:30 +01:00
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
function log(str)
|
|
|
|
{
|
|
|
|
console.log((new Date().getTime() - startTime)/1000 + "\t" + str);
|
2013-03-07 13:15:29 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
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;
|
|
|
|
};
|