Diff

mod_storage_gdbm/mod_storage_gdbm.lua @ 1629:36eb0dbea7ba

mod_storage_gdbm: Minor reorganization, more locals
author Kim Alvefur <zash@zash.se>
date Wed, 25 Mar 2015 17:37:52 +0100
parent 1628:5e4b37b9cde1
child 1630:0fcd63818aa1
line wrap: on
line diff
--- a/mod_storage_gdbm/mod_storage_gdbm.lua	Wed Mar 25 17:29:54 2015 +0100
+++ b/mod_storage_gdbm/mod_storage_gdbm.lua	Wed Mar 25 17:37:52 2015 +0100
@@ -1,5 +1,5 @@
 -- mod_storage_gdbm
--- Copyright (C) 2014 Kim Alvefur
+-- Copyright (C) 2014-2015 Kim Alvefur
 --
 -- This file is MIT/X11 licensed.
 -- 
@@ -9,12 +9,18 @@
 local gdbm = require"gdbm";
 local path = require"util.paths";
 local lfs = require"lfs";
+local st = require"util.stanza";
 local uuid = require"util.uuid".generate;
+
 local serialization = require"util.serialization";
-local st = require"util.stanza";
 local serialize = serialization.serialize;
 local deserialize = serialization.deserialize;
 
+local g_set, g_get, g_del = gdbm.replace, gdbm.fetch, gdbm.delete;
+local g_first, g_next = gdbm.firstkey, gdbm.nextkey;
+
+local t_remove = table.remove;
+
 local empty = {};
 
 local function id(v) return v; end
@@ -23,8 +29,8 @@
 	return getmetatable(s) == st.stanza_mt;
 end
 
-local function ifelse(cond, iftrue, iffalse)
-	if cond then return iftrue; end return iffalse;
+local function t(c, a, b)
+	if c then return a; end return b;
 end
 
 local base_path = path.resolve_relative_path(prosody.paths.data, module.host);
@@ -36,13 +42,13 @@
 local keyval_mt = { __index = keyval, suffix = ".db" };
 
 function keyval:set(user, value)
-	local ok, err = gdbm.replace(self._db, user or "@", serialize(value));
+	local ok, err = g_set(self._db, user or "@", serialize(value));
 	if not ok then return nil, err; end
 	return true;
 end
 
 function keyval:get(user)
-	local data, err = gdbm.fetch(self._db, user or "@");
+	local data, err = g_get(self._db, user or "@");
 	if not data then return nil, err; end
 	return deserialize(data);
 end
@@ -81,15 +87,15 @@
 	query = query or empty_query;
 	local meta = self:get(username) or empty;
 	local r = query.reverse;
-	local d = r and -1 or 1;
-	local s = meta[ifelse(r, query.before, query.after)];
+	local d = t(r, -1, 1);
+	local s = meta[t(r, query.before, query.after)];
 	local limit = query.limit;
 	if s then
 		s = s + d;
 	else
-		s = ifelse(r, #meta, 1)
+		s = t(r, #meta, 1)
 	end
-	local e = ifelse(r, 1, #meta);
+	local e = t(r, 1, #meta);
 	local c = 0;
 	return function ()
 		if limit and c >= limit then return end