Comparison

plugins/mod_storage_sql.lua @ 5043:2856e1cfbe95

Merge with Zash
author Matthew Wild <mwild1@gmail.com>
date Sat, 28 Jul 2012 20:59:03 +0100
parent 5040:685403a6fee1
child 5054:97385c45e670
comparison
equal deleted inserted replaced
5031:28d56268a72d 5043:2856e1cfbe95
173 elseif t == "json" then 173 elseif t == "json" then
174 return json.decode(value); 174 return json.decode(value);
175 end 175 end
176 end 176 end
177 177
178 local function getsql(sql, ...) 178 local function dosql(sql, ...)
179 if params.driver == "PostgreSQL" then 179 if params.driver == "PostgreSQL" then
180 sql = sql:gsub("`", "\""); 180 sql = sql:gsub("`", "\"");
181 end 181 end
182 -- do prepared statement stuff 182 -- do prepared statement stuff
183 local stmt, err = connection:prepare(sql); 183 local stmt, err = connection:prepare(sql);
184 if not stmt and not test_connection() then error("connection failed"); end 184 if not stmt and not test_connection() then error("connection failed"); end
185 if not stmt then module:log("error", "QUERY FAILED: %s %s", err, debug.traceback()); return nil, err; end 185 if not stmt then module:log("error", "QUERY FAILED: %s %s", err, debug.traceback()); return nil, err; end
186 -- run query 186 -- run query
187 local ok, err = stmt:execute(host or "", user or "", store or "", ...); 187 local ok, err = stmt:execute(...);
188 if not ok and not test_connection() then error("connection failed"); end 188 if not ok and not test_connection() then error("connection failed"); end
189 if not ok then return nil, err; end 189 if not ok then return nil, err; end
190 190
191 return stmt; 191 return stmt;
192 end
193 local function getsql(sql, ...)
194 return dosql(sql, host or "", user or "", store or "", ...);
192 end 195 end
193 local function setsql(sql, ...) 196 local function setsql(sql, ...)
194 local stmt, err = getsql(sql, ...); 197 local stmt, err = getsql(sql, ...);
195 if not stmt then return stmt, err; end 198 if not stmt then return stmt, err; end
196 return stmt:affected(); 199 return stmt:affected();
347 return setmetatable({ store = store }, keyval_store); 350 return setmetatable({ store = store }, keyval_store);
348 end 351 end
349 return nil, "unsupported-store"; 352 return nil, "unsupported-store";
350 end 353 end
351 354
355 function driver:list_stores(username) -- Not to be confused with the list store type
356 local sql = (username == true
357 and "SELECT DISTINCT `store` FROM `prosody` WHERE `host`=? AND `user`!=?"
358 or "SELECT DISTINCT `store` FROM `prosody` WHERE `host`=? AND `user`=?");
359 if username == true or not username then
360 username = "";
361 end
362 local stmt, err = dosql(sql, host, username);
363 if not stmt then
364 return nil, err;
365 end
366 local stores = {};
367 for row in stmt:rows() do
368 stores[#stores+1] = row[1];
369 end
370 return stores;
371 end
372
373 function driver:purge(username)
374 local stmt, err = dosql("DELETE FROM `prosody` WHERE `host`=? AND `user`=?", host, username);
375 if not stmt then return stmt, err; end
376 local changed, err = stmt:affected();
377 if not changed then return changed, err; end
378 return true, changed;
379 end
380
352 module:add_item("data-driver", driver); 381 module:add_item("data-driver", driver);