27 local setmetatable = setmetatable; |
27 local setmetatable = setmetatable; |
28 local json = { stringify = function(s) return require"util.serialization".serialize(s) end, parse = require"util.serialization".deserialize }; |
28 local json = { stringify = function(s) return require"util.serialization".serialize(s) end, parse = require"util.serialization".deserialize }; |
29 |
29 |
30 local connection = ...; |
30 local connection = ...; |
31 local host,user,store = module.host; |
31 local host,user,store = module.host; |
|
32 local params = module:get_option("sql"); |
32 |
33 |
33 do -- process options to get a db connection |
34 do -- process options to get a db connection |
34 local DBI = require "DBI"; |
35 local DBI = require "DBI"; |
35 |
36 |
36 local params = module:get_option("sql") or { driver = "SQLite3", database = "prosody.sqlite" }; |
37 params = params or { driver = "SQLite3", database = "prosody.sqlite" }; |
37 assert(params and params.driver and params.database, "invalid params"); |
38 assert(params.driver and params.database, "invalid params"); |
38 |
39 |
39 prosody.unlock_globals(); |
40 prosody.unlock_globals(); |
40 local dbh, err = DBI.Connect( |
41 local dbh, err = DBI.Connect( |
41 params.driver, params.database, |
42 params.driver, params.database, |
42 params.username, params.password, |
43 params.username, params.password, |
83 return json.parse(value); |
84 return json.parse(value); |
84 end |
85 end |
85 end |
86 end |
86 |
87 |
87 local function getsql(sql, ...) |
88 local function getsql(sql, ...) |
|
89 if params.driver == "PostgreSQL" then |
|
90 sql = sql:gsub("`", "\""); |
|
91 end |
88 -- do prepared statement stuff |
92 -- do prepared statement stuff |
89 local stmt, err = connection:prepare(sql); |
93 local stmt, err = connection:prepare(sql); |
90 if not stmt then return nil, err; end |
94 if not stmt then return nil, err; end |
91 -- run query |
95 -- run query |
92 local ok, err = stmt:execute(host or "", user or "", store or "", ...); |
96 local ok, err = stmt:execute(host or "", user or "", store or "", ...); |