comparison mod_storage_ejabberdsql_readonly/mod_storage_ejabberdsql_readonly.lua @ 5684:7c264a2cb970

mod_storage_ejabberdsql_readonly: Don't use MySQL-specific syntax util.sql should take care of transformation when MySQL is in use.
author Matthew Wild <mwild1@gmail.com>
date Mon, 30 Oct 2023 12:28:12 +0000
parents e0663dcd934d
children
comparison
equal deleted inserted replaced
5683:c69320fc438b 5684:7c264a2cb970
23 local host = module.host; 23 local host = module.host;
24 local user, store; 24 local user, store;
25 25
26 local function keyval_store_get() 26 local function keyval_store_get()
27 if store == "accounts" then 27 if store == "accounts" then
28 --for row in engine:select("SELECT `password`,`created_at` FROM `users` WHERE `username`=?", user or "") do 28 --for row in engine:select("SELECT \"password\",\"created_at\" FROM \"users\" WHERE \"username\"=?", user or "") do
29 local result; 29 local result;
30 for row in engine:select("SELECT `password` FROM `users` WHERE `username`=? LIMIT 1", user or "") do result = row end 30 for row in engine:select("SELECT \"password\" FROM \"users\" WHERE \"username\"=? LIMIT 1", user or "") do result = row end
31 local password = result[1]; 31 local password = result[1];
32 --local created_at = result[2]; 32 --local created_at = result[2];
33 return { password = password }; 33 return { password = password };
34 34
35 elseif store == "roster" then 35 elseif store == "roster" then
36 local roster = {}; 36 local roster = {};
37 local pending = nil; 37 local pending = nil;
38 --for row in engine:select("SELECT `jid`,`nick`,`subscription`,`ask`,`askmessage`,`server`,`subscribe`,`type`,`created_at` FROM `rosterusers` WHERE `username`=?", user or "") do 38 --for row in engine:select("SELECT \"jid\",\"nick\",\"subscription\",\"ask\",\"askmessage\",\"server\",\"subscribe\",\"type\",\"created_at\" FROM \"rosterusers\" WHERE \"username\"=?", user or "") do
39 for row in engine:select("SELECT `jid`,`nick`,`subscription`,`ask` FROM `rosterusers` WHERE `username`=?", user or "") do 39 for row in engine:select("SELECT \"jid\",\"nick\",\"subscription\",\"ask\" FROM \"rosterusers\" WHERE \"username\"=?", user or "") do
40 local contact = row[1]; 40 local contact = row[1];
41 local name = row[2]; 41 local name = row[2];
42 if name == "" then name = nil; end 42 if name == "" then name = nil; end
43 local subscription = row[3]; 43 local subscription = row[3];
44 if subscription == "N" then 44 if subscription == "N" then
70 --local subscribe = row[7]; 70 --local subscribe = row[7];
71 --local type = row[8]; 71 --local type = row[8];
72 --local created_at = row[9]; 72 --local created_at = row[9];
73 73
74 local groups = {}; 74 local groups = {};
75 for row in engine:select("SELECT `grp` FROM `rostergroups` WHERE `username`=? AND `jid`=?", user or "", contact) do 75 for row in engine:select("SELECT \"grp\" FROM \"rostergroups\" WHERE \"username\"=? AND \"jid\"=?", user or "", contact) do
76 local group = row[1]; 76 local group = row[1];
77 groups[group] = true; 77 groups[group] = true;
78 end 78 end
79 79
80 roster[contact] = { name = name, ask = ask, subscription = subscription, groups = groups }; 80 roster[contact] = { name = name, ask = ask, subscription = subscription, groups = groups };
81 end 81 end
82 return roster; 82 return roster;
83 83
84 elseif store == "vcard" then 84 elseif store == "vcard" then
85 local result = nil; 85 local result = nil;
86 for row in engine:select("SELECT `vcard` FROM `vcard` WHERE `username`=? LIMIT 1", user or "") do result = row end 86 for row in engine:select("SELECT \"vcard\" FROM \"vcard\" WHERE \"username\"=? LIMIT 1", user or "") do result = row end
87 if not result then 87 if not result then
88 return nil; 88 return nil;
89 end 89 end
90 local data, err = xml_parse(result[1]); 90 local data, err = xml_parse(result[1]);
91 if data then 91 if data then
93 end 93 end
94 94
95 elseif store == "private" then 95 elseif store == "private" then
96 local private = nil; 96 local private = nil;
97 local result; 97 local result;
98 for row in engine:select("SELECT `namespace`,`data` FROM `private_storage` WHERE `username`=?", user or "") do 98 for row in engine:select("SELECT \"namespace\",\"data\" FROM \"private_storage\" WHERE \"username\"=?", user or "") do
99 if private == nil then private = {} end; 99 if private == nil then private = {} end;
100 local namespace = row[1]; 100 local namespace = row[1];
101 local data, err = xml_parse(row[2]); 101 local data, err = xml_parse(row[2]);
102 if data then 102 if data then
103 assert(namespace == data.attr.xmlns, "Wrong namespace in private data!"); 103 assert(namespace == data.attr.xmlns, "Wrong namespace in private data!");
123 return result; 123 return result;
124 end 124 end
125 125
126 function keyval_store:users() 126 function keyval_store:users()
127 local ok, result = engine:transaction(function() 127 local ok, result = engine:transaction(function()
128 return engine:select("SELECT `username` FROM `users`"); 128 return engine:select("SELECT \"username\" FROM \"users\"");
129 end); 129 end);
130 if not ok then return ok, result end 130 if not ok then return ok, result end
131 return iterator(result); 131 return iterator(result);
132 end 132 end
133 133