Software /
code /
prosody
Comparison
util/sql.lua @ 7317:a2dce746599b
util.sql: Log errors in transaction to error level with traceback but return only error message (fixes #464)
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Fri, 25 Mar 2016 16:09:34 +0100 |
parent | 7312:b4e99602ae75 |
child | 7428:f791651ee334 |
comparison
equal
deleted
inserted
replaced
7315:4fd984d1e445 | 7317:a2dce746599b |
---|---|
200 engine.select = engine.execute_query; | 200 engine.select = engine.execute_query; |
201 engine.delete = engine.execute_update; | 201 engine.delete = engine.execute_update; |
202 engine.update = engine.execute_update; | 202 engine.update = engine.execute_update; |
203 end | 203 end |
204 end | 204 end |
205 local function handleerr(err) | |
206 log("error", "Error in SQL transaction: %s", debug_traceback(err, 3)); | |
207 return err; | |
208 end | |
205 function engine:_transaction(func, ...) | 209 function engine:_transaction(func, ...) |
206 if not self.conn then | 210 if not self.conn then |
207 local ok, err = self:connect(); | 211 local ok, err = self:connect(); |
208 if not ok then return ok, err; end | 212 if not ok then return ok, err; end |
209 end | 213 end |
210 --assert(not self.__transaction, "Recursive transactions not allowed"); | 214 --assert(not self.__transaction, "Recursive transactions not allowed"); |
211 local args, n_args = {...}, select("#", ...); | 215 local args, n_args = {...}, select("#", ...); |
212 local function f() return func(unpack(args, 1, n_args)); end | 216 local function f() return func(unpack(args, 1, n_args)); end |
213 log("debug", "SQL transaction begin [%s]", tostring(func)); | 217 log("debug", "SQL transaction begin [%s]", tostring(func)); |
214 self.__transaction = true; | 218 self.__transaction = true; |
215 local success, a, b, c = xpcall(f, debug_traceback); | 219 local success, a, b, c = xpcall(f, handleerr); |
216 self.__transaction = nil; | 220 self.__transaction = nil; |
217 if success then | 221 if success then |
218 log("debug", "SQL transaction success [%s]", tostring(func)); | 222 log("debug", "SQL transaction success [%s]", tostring(func)); |
219 local ok, err = self.conn:commit(); | 223 local ok, err = self.conn:commit(); |
220 if not ok then return ok, err; end -- commit failed | 224 if not ok then return ok, err; end -- commit failed |