webmcp
changeset 553:a0c49529ab8b
Support for BYTEA data type in models
author | jbe |
---|---|
date | Mon Feb 10 20:17:19 2020 +0100 (2020-02-10) |
parents | 7e874b5227b6 |
children | 1e72fa29d3fb |
files | libraries/mondelefant/mondelefant.lua |
line diff
1.1 --- a/libraries/mondelefant/mondelefant.lua Mon Dec 09 16:09:14 2019 +0100 1.2 +++ b/libraries/mondelefant/mondelefant.lua Mon Feb 10 20:17:19 2020 +0100 1.3 @@ -967,6 +967,15 @@ 1.4 --//-- 1.5 1.6 --[[-- 1.7 +<db_class>.binary_columns 1.8 + 1.9 +If binary data (PostgreSQL type BYTEA) is stored, must be set to a table mapping all column names used with binary data to true, e.g. File.binary_columns = { data = true }. 1.10 + 1.11 +--]]-- 1.12 +class_prototype.binary_columns = nil 1.13 +--// 1.14 + 1.15 +--[[-- 1.16 db_handle = -- database connection handle used by this class 1.17 <db_class>:get_db_conn() 1.18 1.19 @@ -1144,7 +1153,11 @@ 1.20 local values = {sep = ", "} 1.21 for key in pairs(self._dirty or {}) do 1.22 add(fields, '"' .. key .. '"') 1.23 - add(values, {'?', self._col[key]}) 1.24 + if self._class.binary_columns and self._class.binary_columns[key] then 1.25 + add(values, {'$', {self._connection:quote_binary(self._col[key])}}) 1.26 + else 1.27 + add(values, {'?', self._col[key]}) 1.28 + end 1.29 end 1.30 local returning = { sep = ", " } 1.31 if primary_key.json_doc then 1.32 @@ -1243,7 +1256,11 @@ 1.33 verify_mutability_state(self._col[key], mutability_state) 1.34 ) 1.35 then 1.36 - add(update_sets, {'"$" = ?', {key}, self._col[key]}) 1.37 + if self._class.binary_columns and self._class.binary_columns[key] then 1.38 + add(update_sets, {'"$" = $', {key}, {self._connection:quote_binary(self._col[key])}}) 1.39 + else 1.40 + add(update_sets, {'"$" = ?', {key}, self._col[key]}) 1.41 + end 1.42 self._dirty[key] = true -- always dirty in case of later error 1.43 end 1.44 end