197 lines
5.5 KiB
Lua
197 lines
5.5 KiB
Lua
local kv = {}
|
|
|
|
-- ======================================================================
|
|
-- BASIC KEY-VALUE OPERATIONS
|
|
-- ======================================================================
|
|
|
|
function kv.open(name, filename)
|
|
if type(name) ~= "string" then error("kv.open: store name must be a string", 2) end
|
|
if filename ~= nil and type(filename) ~= "string" then error("kv.open: filename must be a string", 2) end
|
|
|
|
filename = filename or ""
|
|
return moonshark.kv_open(name, filename)
|
|
end
|
|
|
|
function kv.get(name, key, default)
|
|
if type(name) ~= "string" then error("kv.get: store name must be a string", 2) end
|
|
if type(key) ~= "string" then error("kv.get: key must be a string", 2) end
|
|
|
|
if default ~= nil then
|
|
return moonshark.kv_get(name, key, default)
|
|
else
|
|
return moonshark.kv_get(name, key)
|
|
end
|
|
end
|
|
|
|
function kv.set(name, key, value)
|
|
if type(name) ~= "string" then error("kv.set: store name must be a string", 2) end
|
|
if type(key) ~= "string" then error("kv.set: key must be a string", 2) end
|
|
if type(value) ~= "string" then error("kv.set: value must be a string", 2) end
|
|
|
|
return moonshark.kv_set(name, key, value)
|
|
end
|
|
|
|
function kv.delete(name, key)
|
|
if type(name) ~= "string" then error("kv.delete: store name must be a string", 2) end
|
|
if type(key) ~= "string" then error("kv.delete: key must be a string", 2) end
|
|
|
|
return moonshark.kv_delete(name, key)
|
|
end
|
|
|
|
function kv.clear(name)
|
|
if type(name) ~= "string" then error("kv.clear: store name must be a string", 2) end
|
|
|
|
return moonshark.kv_clear(name)
|
|
end
|
|
|
|
function kv.has(name, key)
|
|
if type(name) ~= "string" then error("kv.has: store name must be a string", 2) end
|
|
if type(key) ~= "string" then error("kv.has: key must be a string", 2) end
|
|
|
|
return moonshark.kv_has(name, key)
|
|
end
|
|
|
|
function kv.size(name)
|
|
if type(name) ~= "string" then error("kv.size: store name must be a string", 2) end
|
|
|
|
return moonshark.kv_size(name)
|
|
end
|
|
|
|
function kv.keys(name)
|
|
if type(name) ~= "string" then error("kv.keys: store name must be a string", 2) end
|
|
|
|
return moonshark.kv_keys(name)
|
|
end
|
|
|
|
function kv.values(name)
|
|
if type(name) ~= "string" then error("kv.values: store name must be a string", 2) end
|
|
|
|
return moonshark.kv_values(name)
|
|
end
|
|
|
|
function kv.save(name)
|
|
if type(name) ~= "string" then error("kv.save: store name must be a string", 2) end
|
|
|
|
return moonshark.kv_save(name)
|
|
end
|
|
|
|
function kv.close(name)
|
|
if type(name) ~= "string" then error("kv.close: store name must be a string", 2) end
|
|
|
|
return moonshark.kv_close(name)
|
|
end
|
|
|
|
-- ======================================================================
|
|
-- UTILITY FUNCTIONS
|
|
-- ======================================================================
|
|
|
|
function kv.increment(name, key, delta)
|
|
if type(name) ~= "string" then error("kv.increment: store name must be a string", 2) end
|
|
if type(key) ~= "string" then error("kv.increment: key must be a string", 2) end
|
|
delta = delta or 1
|
|
if type(delta) ~= "number" then error("kv.increment: delta must be a number", 2) end
|
|
|
|
return moonshark.kv_increment(name, key, delta)
|
|
end
|
|
|
|
function kv.append(name, key, value, separator)
|
|
if type(name) ~= "string" then error("kv.append: store name must be a string", 2) end
|
|
if type(key) ~= "string" then error("kv.append: key must be a string", 2) end
|
|
if type(value) ~= "string" then error("kv.append: value must be a string", 2) end
|
|
separator = separator or ""
|
|
if type(separator) ~= "string" then error("kv.append: separator must be a string", 2) end
|
|
|
|
return moonshark.kv_append(name, key, value, separator)
|
|
end
|
|
|
|
function kv.expire(name, key, ttl)
|
|
if type(name) ~= "string" then error("kv.expire: store name must be a string", 2) end
|
|
if type(key) ~= "string" then error("kv.expire: key must be a string", 2) end
|
|
if type(ttl) ~= "number" or ttl <= 0 then error("kv.expire: TTL must be a positive number", 2) end
|
|
|
|
return moonshark.kv_expire(name, key, ttl)
|
|
end
|
|
|
|
function kv.cleanup_expired(name)
|
|
if type(name) ~= "string" then error("kv.cleanup_expired: store name must be a string", 2) end
|
|
|
|
return moonshark.kv_cleanup_expired(name)
|
|
end
|
|
|
|
-- ======================================================================
|
|
-- OBJECT-ORIENTED INTERFACE
|
|
-- ======================================================================
|
|
|
|
local Store = {}
|
|
Store.__index = Store
|
|
|
|
function kv.create(name, filename)
|
|
if type(name) ~= "string" then error("kv.create: store name must be a string", 2) end
|
|
if filename ~= nil and type(filename) ~= "string" then error("kv.create: filename must be a string", 2) end
|
|
|
|
local success = kv.open(name, filename)
|
|
if not success then
|
|
error("kv.create: failed to open store '" .. name .. "'", 2)
|
|
end
|
|
|
|
return setmetatable({name = name}, Store)
|
|
end
|
|
|
|
function Store:get(key, default)
|
|
return kv.get(self.name, key, default)
|
|
end
|
|
|
|
function Store:set(key, value)
|
|
return kv.set(self.name, key, value)
|
|
end
|
|
|
|
function Store:delete(key)
|
|
return kv.delete(self.name, key)
|
|
end
|
|
|
|
function Store:clear()
|
|
return kv.clear(self.name)
|
|
end
|
|
|
|
function Store:has(key)
|
|
return kv.has(self.name, key)
|
|
end
|
|
|
|
function Store:size()
|
|
return kv.size(self.name)
|
|
end
|
|
|
|
function Store:keys()
|
|
return kv.keys(self.name)
|
|
end
|
|
|
|
function Store:values()
|
|
return kv.values(self.name)
|
|
end
|
|
|
|
function Store:save()
|
|
return kv.save(self.name)
|
|
end
|
|
|
|
function Store:close()
|
|
return kv.close(self.name)
|
|
end
|
|
|
|
function Store:increment(key, delta)
|
|
return kv.increment(self.name, key, delta)
|
|
end
|
|
|
|
function Store:append(key, value, separator)
|
|
return kv.append(self.name, key, value, separator)
|
|
end
|
|
|
|
function Store:expire(key, ttl)
|
|
return kv.expire(self.name, key, ttl)
|
|
end
|
|
|
|
function Store:cleanup_expired()
|
|
return kv.cleanup_expired(self.name)
|
|
end
|
|
|
|
return kv
|