webmcp

diff libraries/mondelefant/mondelefant.lua @ 375:fb98b17056e5

Proper support for mutable data types (JSON objects/arrays) in table columns
author jbe
date Sat Nov 14 15:44:53 2015 +0100 (2015-11-14)
parents 7674d59521f8
children 4bcedf32b089
line diff
     1.1 --- a/libraries/mondelefant/mondelefant.lua	Sat Nov 14 14:15:31 2015 +0100
     1.2 +++ b/libraries/mondelefant/mondelefant.lua	Sat Nov 14 15:44:53 2015 +0100
     1.3 @@ -1091,7 +1091,7 @@
     1.4    if self._new then
     1.5      local fields = {sep = ", "}
     1.6      local values = {sep = ", "}
     1.7 -    for key, dummy in pairs(self._dirty or {}) do
     1.8 +    for key in pairs(self._dirty or {}) do
     1.9        add(fields, {'"$"', {key}})
    1.10        add(values, {'?', self[key]})
    1.11      end
    1.12 @@ -1130,8 +1130,16 @@
    1.13      self._new = false
    1.14    else
    1.15      local command_sets = {sep = ", "}
    1.16 -    for key, dummy in pairs(self._dirty or {}) do
    1.17 -      add(command_sets, {'"$" = ?', {key}, self[key]})
    1.18 +    for key, mutability_state in pairs(self._dirty or {}) do
    1.19 +      if
    1.20 +        mutability_state == true or (
    1.21 +          verify_mutability_state and
    1.22 +          verify_mutability_state(self[key], mutability_state)
    1.23 +        )
    1.24 +      then
    1.25 +        add(command_sets, {'"$" = ?', {key}, self[key]})
    1.26 +        self._dirty[key] = true  -- always dirty in case of later error
    1.27 +      end
    1.28      end
    1.29      if #command_sets >= 1 then
    1.30        local primary_key_compare = {sep = " AND "}
    1.31 @@ -1161,6 +1169,12 @@
    1.32        end
    1.33      end
    1.34    end
    1.35 +  for key in pairs(self._dirty or {}) do
    1.36 +    if save_mutability_state then
    1.37 +      self._dirty[key] =
    1.38 +        save_mutability_state and save_mutability_state(self[key]) or nil
    1.39 +    end
    1.40 +  end
    1.41    return nil
    1.42  end
    1.43  --//--

Impressum / About Us