summaryrefslogtreecommitdiff
path: root/bin/importSqlFile.js
diff options
context:
space:
mode:
Diffstat (limited to 'bin/importSqlFile.js')
-rw-r--r--bin/importSqlFile.js110
1 files changed, 110 insertions, 0 deletions
diff --git a/bin/importSqlFile.js b/bin/importSqlFile.js
new file mode 100644
index 00000000..6491cbea
--- /dev/null
+++ b/bin/importSqlFile.js
@@ -0,0 +1,110 @@
+var startTime = new Date().getTime();
+
+require("ep_etherpad-lite/node_modules/npm").load({}, function(er,npm) {
+
+ var fs = require("fs");
+
+ 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];
+
+ //stop if the settings file is not set
+ if(!sqlFile)
+ {
+ console.error("Use: node importSqlFile.js $SQLFILE");
+ process.exit(1);
+ }
+
+ log("initializing db");
+ db.init(function(err)
+ {
+ //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...");
+ 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");
+ }
+ }
+ });
+ process.stdout.write("\n");
+ process.stdout.write("done. waiting for db to finish transaction. depended on dbms this may take some time...\n");
+
+ db.doShutdown(function() {
+ log("finished, imported " + keyNo + " keys.");
+ process.exit(0);
+ });
+ }
+ });
+});
+
+function log(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;
+};