Software / code / prosody
Comparison
util/sql.lua @ 7174:d350e475f94e
util.sql: Raw query debug logging (needs to be explicitly enabled by a plugin)
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Sun, 21 Feb 2016 19:25:01 +0100 |
| parent | 6806:f824057189ed |
| child | 7180:0d7f80263813 |
comparison
equal
deleted
inserted
replaced
| 7173:d8c060615aa1 | 7174:d350e475f94e |
|---|---|
| 145 local result_mt = { __index = { | 145 local result_mt = { __index = { |
| 146 affected = function(self) return self.__stmt:affected(); end; | 146 affected = function(self) return self.__stmt:affected(); end; |
| 147 rowcount = function(self) return self.__stmt:rowcount(); end; | 147 rowcount = function(self) return self.__stmt:rowcount(); end; |
| 148 } }; | 148 } }; |
| 149 | 149 |
| 150 local function debugquery(where, sql, ...) | |
| 151 local i = 0; local a = {...} | |
| 152 log("debug", "[%s] %s", where, sql:gsub("%?", function () i = i + 1; local v = a[i]; if type(v) == "string" then v = ("%q"):format(v); end return tostring(v); end)); | |
| 153 end | |
| 154 | |
| 150 function engine:execute_query(sql, ...) | 155 function engine:execute_query(sql, ...) |
| 151 if self.params.driver == "PostgreSQL" then | 156 if self.params.driver == "PostgreSQL" then |
| 152 sql = sql:gsub("`", "\""); | 157 sql = sql:gsub("`", "\""); |
| 153 end | 158 end |
| 154 local stmt = assert(self.conn:prepare(sql)); | 159 local stmt = assert(self.conn:prepare(sql)); |
| 170 end | 175 end |
| 171 engine.insert = engine.execute_update; | 176 engine.insert = engine.execute_update; |
| 172 engine.select = engine.execute_query; | 177 engine.select = engine.execute_query; |
| 173 engine.delete = engine.execute_update; | 178 engine.delete = engine.execute_update; |
| 174 engine.update = engine.execute_update; | 179 engine.update = engine.execute_update; |
| 180 local function debugwrap(name, f) | |
| 181 return function (self, sql, ...) | |
| 182 debugquery(name, sql, ...) | |
| 183 return f(self, sql, ...) | |
| 184 end | |
| 185 end | |
| 186 function engine:debug(enable) | |
| 187 self._debug = enable; | |
| 188 if enable then | |
| 189 engine.insert = debugwrap("insert", engine.execute_update); | |
| 190 engine.select = debugwrap("select", engine.execute_query); | |
| 191 engine.delete = debugwrap("delete", engine.execute_update); | |
| 192 engine.update = debugwrap("update", engine.execute_update); | |
| 193 else | |
| 194 engine.insert = engine.execute_update; | |
| 195 engine.select = engine.execute_query; | |
| 196 engine.delete = engine.execute_update; | |
| 197 engine.update = engine.execute_update; | |
| 198 end | |
| 199 end | |
| 175 function engine:_transaction(func, ...) | 200 function engine:_transaction(func, ...) |
| 176 if not self.conn then | 201 if not self.conn then |
| 177 local ok, err = self:connect(); | 202 local ok, err = self:connect(); |
| 178 if not ok then return ok, err; end | 203 if not ok then return ok, err; end |
| 179 end | 204 end |
| 219 sql = sql:gsub("`([,)])", "`(20)%1"); | 244 sql = sql:gsub("`([,)])", "`(20)%1"); |
| 220 end | 245 end |
| 221 if index.unique then | 246 if index.unique then |
| 222 sql = sql:gsub("^CREATE", "CREATE UNIQUE"); | 247 sql = sql:gsub("^CREATE", "CREATE UNIQUE"); |
| 223 end | 248 end |
| 224 --print(sql); | 249 if self._debug then |
| 250 debugquery("create", sql); | |
| 251 end | |
| 225 return self:execute(sql); | 252 return self:execute(sql); |
| 226 end | 253 end |
| 227 function engine:_create_table(table) | 254 function engine:_create_table(table) |
| 228 local sql = "CREATE TABLE `"..table.name.."` ("; | 255 local sql = "CREATE TABLE `"..table.name.."` ("; |
| 229 for i,col in ipairs(table.c) do | 256 for i,col in ipairs(table.c) do |
| 249 sql = sql.. ");" | 276 sql = sql.. ");" |
| 250 if self.params.driver == "PostgreSQL" then | 277 if self.params.driver == "PostgreSQL" then |
| 251 sql = sql:gsub("`", "\""); | 278 sql = sql:gsub("`", "\""); |
| 252 elseif self.params.driver == "MySQL" then | 279 elseif self.params.driver == "MySQL" then |
| 253 sql = sql:gsub(";$", (" CHARACTER SET '%s' COLLATE '%s_bin';"):format(self.charset, self.charset)); | 280 sql = sql:gsub(";$", (" CHARACTER SET '%s' COLLATE '%s_bin';"):format(self.charset, self.charset)); |
| 281 end | |
| 282 if self._debug then | |
| 283 debugquery("create", sql); | |
| 254 end | 284 end |
| 255 local success,err = self:execute(sql); | 285 local success,err = self:execute(sql); |
| 256 if not success then return success,err; end | 286 if not success then return success,err; end |
| 257 for i,v in ipairs(table.__table__) do | 287 for i,v in ipairs(table.__table__) do |
| 258 if is_index(v) then | 288 if is_index(v) then |