summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--acf/persistence/init.lua8
-rw-r--r--acf/transaction/backend.lua10
-rw-r--r--acf/transaction/init.lua6
3 files changed, 14 insertions, 10 deletions
diff --git a/acf/persistence/init.lua b/acf/persistence/init.lua
index 479620b..de23a68 100644
--- a/acf/persistence/init.lua
+++ b/acf/persistence/init.lua
@@ -7,7 +7,6 @@ module(..., package.seeall)
local loadmods = require('acf.loader').loadmods
local object = require('acf.object')
-local super = object.super
local pth = require('acf.path')
local util = require('acf.util')
@@ -15,7 +14,7 @@ local util = require('acf.util')
DataStore = object.class(require('acf.transaction.backend').TransactionBackend)
function DataStore:init()
- super(self, DataStore):init()
+ object.super(self, DataStore):init()
self.backends = util.map(
function(m) return m.backend() end,
loadmods('persistence/backends')
@@ -35,10 +34,9 @@ function DataStore:get(path)
return util.copy(backend:get(comps)), self.mod_time[path] or 0
end
-function DataStore:set_multiple(mods)
- super(self, DataStore):set_multiple(mods)
-
+function DataStore:_set_multiple(mods)
local bms = {}
+
for _, mod in ipairs(mods) do
local path, t, value = unpack(mod)
local backend, comps = self:split_path(path)
diff --git a/acf/transaction/backend.lua b/acf/transaction/backend.lua
index e907c6f..a8ecfe0 100644
--- a/acf/transaction/backend.lua
+++ b/acf/transaction/backend.lua
@@ -36,9 +36,17 @@ end
function TransactionBackend:set_multiple(mods)
-- TODO delegate to PM backends?
local timestamp = gen_number()
+ local effective = {}
+
for _, mod in ipairs(mods) do
- self.mod_time[mod[1]] = timestamp
+ local path, t, value = unpack(mod)
+ if t == 'table' or value ~= self:get(path) then
+ table.insert(effective, mod)
+ self.mod_time[path] = timestamp
+ end
end
+
+ self:_set_multiple(effective)
end
-- TODO should be atomic, mutex with set_multiple
diff --git a/acf/transaction/init.lua b/acf/transaction/init.lua
index 51137e3..0afad48 100644
--- a/acf/transaction/init.lua
+++ b/acf/transaction/init.lua
@@ -8,7 +8,6 @@ module(..., package.seeall)
local ErrorDict = require('acf.error').ErrorDict
local RootModel = require('acf.model.root').RootModel
local object = require('acf.object')
-local super = object.super
local pth = require('acf.path')
local be_mod = require('acf.transaction.backend')
@@ -33,7 +32,7 @@ end
local Transaction = object.class(be_mod.TransactionBackend)
function Transaction:init(backend, validate)
- super(self, Transaction):init()
+ object.super(self, Transaction):init()
self.backend = backend
@@ -69,8 +68,7 @@ function Transaction:get(path)
return value, timestamp
end
-function Transaction:set_multiple(mods)
- super(self, Transaction):set_multiple(mods)
+function Transaction:_set_multiple(mods)
local function set(path, t, value, new)
local delete = value == nil