X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=tools%2Fejabberdsql2prosody.lua;h=5b9752692eea59d272c8257b188ae7474851fb92;hb=4e16323f2a78a2f20bcd75957f2ada27a5d8b90f;hp=861ef1415bdf11909977c195c84716b332dfa7c6;hpb=8afc61204a0e9c475cb93fb0f0e1a8487f11e497;p=prosody.git diff --git a/tools/ejabberdsql2prosody.lua b/tools/ejabberdsql2prosody.lua index 861ef141..5b975269 100644 --- a/tools/ejabberdsql2prosody.lua +++ b/tools/ejabberdsql2prosody.lua @@ -36,10 +36,21 @@ local function peek() return last; end +local escapes = { + ["\\0"] = "\0"; + ["\\'"] = "'"; + ["\\\""] = "\""; + ["\\b"] = "\b"; + ["\\n"] = "\n"; + ["\\r"] = "\r"; + ["\\t"] = "\t"; + ["\\Z"] = "\26"; + ["\\\\"] = "\\"; + ["\\%"] = "%"; + ["\\_"] = "_"; +} local function unescape(s) - if s == "\\'" then return "'"; end - if s == "\\n" then return "\n"; end - error("Unknown escape sequence: "..s); + return escapes[s] or error("Unknown escape sequence: "..s); end local function readString() read("'"); @@ -125,7 +136,14 @@ local function readFile(filename) while true do local tname, tuples = readInsert(); if tname then - t[tname] = tuples; + if t[name] then + local t_name = t[name]; + for i=1,#tuples do + table.insert(t_name, tuples[i]); + end + else + t[tname] = tuples; + end elseif peek() == nil then break; end @@ -167,9 +185,12 @@ local t = parseFile(arg); for name, data in pairs(t) do local m = map[name]; if m then + if #data > 0 and #data[1] ~= #m then + print("[warning] expected "..#m.." columns for table `"..name.."`, found "..#data[1]); + end for i=1,#data do local row = data[i]; - for j=1,#row do + for j=1,#m do row[m[j]] = row[j]; row[j] = nil; end @@ -200,7 +221,7 @@ end function roster_group(node, host, jid, group) local roster = dm.load(node, host, "roster") or {}; local item = roster[jid]; - if not item then print("Warning: No roster item "..jid.." for user "..user..", can't put in group "..group); return; end + if not item then print("Warning: No roster item "..jid.." for user "..node..", can't put in group "..group); return; end item.groups[group] = true; local ret, err = dm.store(node, host, "roster", roster); print("["..(err or "success").."] roster-group: " ..node.."@"..host.." - "..jid.." - "..group); @@ -227,6 +248,9 @@ for i, row in ipairs(t["rosterusers"] or NULL) do elseif ask == "I" then roster_pending(node, host, contact); ask = nil; + elseif ask == "B" then + roster_pending(node, host, contact); + ask = "subscribe"; else error("Unknown ask type: "..ask); end local item = {name = name, ask = ask, subscription = subscription, groups = {}}; roster(node, host, contact, item);