Software / code / prosody
Comparison
util/sql.lua @ 5744:253dfea0e3f6
util.sql: Do lazy fetching of affected/rowcount
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Fri, 12 Jul 2013 17:44:30 +0200 |
| parent | 5743:8363dda76155 |
| child | 5776:bd0ff8ae98a8 |
comparison
equal
deleted
inserted
replaced
| 5743:8363dda76155 | 5744:253dfea0e3f6 |
|---|---|
| 175 if not success then return success, err; end | 175 if not success then return success, err; end |
| 176 return stmt; | 176 return stmt; |
| 177 end | 177 end |
| 178 | 178 |
| 179 local result_mt = { __index = { | 179 local result_mt = { __index = { |
| 180 affected = function(self) return self.__affected; end; | 180 affected = function(self) return self.__stmt:affected(); end; |
| 181 rowcount = function(self) return self.__rowcount; end; | 181 rowcount = function(self) return self.__stmt:rowcount(); end; |
| 182 } }; | 182 } }; |
| 183 | 183 |
| 184 function engine:execute_query(sql, ...) | 184 function engine:execute_query(sql, ...) |
| 185 if self.params.driver == "PostgreSQL" then | 185 if self.params.driver == "PostgreSQL" then |
| 186 sql = sql:gsub("`", "\""); | 186 sql = sql:gsub("`", "\""); |
| 198 if not stmt then | 198 if not stmt then |
| 199 stmt = assert(self.conn:prepare(sql)); | 199 stmt = assert(self.conn:prepare(sql)); |
| 200 prepared[sql] = stmt; | 200 prepared[sql] = stmt; |
| 201 end | 201 end |
| 202 assert(stmt:execute(...)); | 202 assert(stmt:execute(...)); |
| 203 return setmetatable({ __affected = stmt:affected(), __rowcount = stmt:rowcount() }, result_mt); | 203 return setmetatable({ __stmt = stmt }, result_mt); |
| 204 end | 204 end |
| 205 engine.insert = engine.execute_update; | 205 engine.insert = engine.execute_update; |
| 206 engine.select = engine.execute_query; | 206 engine.select = engine.execute_query; |
| 207 engine.delete = engine.execute_update; | 207 engine.delete = engine.execute_update; |
| 208 engine.update = engine.execute_update; | 208 engine.update = engine.execute_update; |