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 --//--