Software / code / prosody
Comparison
util/sql.lua @ 7272:a23ca90d1984
util.sql: Move per-driver (currenly only PostgreSQL) query transform into its own method
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Sun, 13 Mar 2016 17:38:49 +0100 |
| parent | 7180:0d7f80263813 |
| child | 7275:187ba2e9c012 |
comparison
equal
deleted
inserted
replaced
| 7271:dae47cd774ac | 7272:a23ca90d1984 |
|---|---|
| 122 return true; | 122 return true; |
| 123 end | 123 end |
| 124 function engine:onconnect() | 124 function engine:onconnect() |
| 125 -- Override from create_engine() | 125 -- Override from create_engine() |
| 126 end | 126 end |
| 127 | |
| 128 function engine:prepquery(sql) | |
| 129 if self.params.driver == "PostgreSQL" then | |
| 130 sql = sql:gsub("`", "\""); | |
| 131 end | |
| 132 return sql; | |
| 133 end | |
| 134 | |
| 127 function engine:execute(sql, ...) | 135 function engine:execute(sql, ...) |
| 128 local success, err = self:connect(); | 136 local success, err = self:connect(); |
| 129 if not success then return success, err; end | 137 if not success then return success, err; end |
| 130 local prepared = self.prepared; | 138 local prepared = self.prepared; |
| 131 | 139 |
| 151 local i = 0; local a = {...} | 159 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)); | 160 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 | 161 end |
| 154 | 162 |
| 155 function engine:execute_query(sql, ...) | 163 function engine:execute_query(sql, ...) |
| 156 if self.params.driver == "PostgreSQL" then | 164 sql = self:prepquery(sql); |
| 157 sql = sql:gsub("`", "\""); | |
| 158 end | |
| 159 local stmt = assert(self.conn:prepare(sql)); | 165 local stmt = assert(self.conn:prepare(sql)); |
| 160 assert(stmt:execute(...)); | 166 assert(stmt:execute(...)); |
| 161 return stmt:rows(); | 167 return stmt:rows(); |
| 162 end | 168 end |
| 163 function engine:execute_update(sql, ...) | 169 function engine:execute_update(sql, ...) |
| 164 if self.params.driver == "PostgreSQL" then | 170 sql = self:prepquery(sql); |
| 165 sql = sql:gsub("`", "\""); | |
| 166 end | |
| 167 local prepared = self.prepared; | 171 local prepared = self.prepared; |
| 168 local stmt = prepared[sql]; | 172 local stmt = prepared[sql]; |
| 169 if not stmt then | 173 if not stmt then |
| 170 stmt = assert(self.conn:prepare(sql)); | 174 stmt = assert(self.conn:prepare(sql)); |
| 171 prepared[sql] = stmt; | 175 prepared[sql] = stmt; |