Software /
code /
prosody
Comparison
util/sql.lua @ 6777:5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 21 Feb 2015 10:36:37 +0100 |
parent | 6771:60957dd5b41b |
child | 6805:c37633feaece |
comparison
equal
deleted
inserted
replaced
6774:3965662ae091 | 6777:5de6b93d0190 |
---|---|
11 -- This loads all available drivers while globals are unlocked | 11 -- This loads all available drivers while globals are unlocked |
12 -- LuaDBI should be fixed to not set globals. | 12 -- LuaDBI should be fixed to not set globals. |
13 DBI.Drivers(); | 13 DBI.Drivers(); |
14 local build_url = require "socket.url".build; | 14 local build_url = require "socket.url".build; |
15 | 15 |
16 module("sql") | 16 local _ENV = nil; |
17 | 17 |
18 local column_mt = {}; | 18 local column_mt = {}; |
19 local table_mt = {}; | 19 local table_mt = {}; |
20 local query_mt = {}; | 20 local query_mt = {}; |
21 --local op_mt = {}; | 21 --local op_mt = {}; |
22 local index_mt = {}; | 22 local index_mt = {}; |
23 | 23 |
24 function is_column(x) return getmetatable(x)==column_mt; end | 24 local function is_column(x) return getmetatable(x)==column_mt; end |
25 function is_index(x) return getmetatable(x)==index_mt; end | 25 local function is_index(x) return getmetatable(x)==index_mt; end |
26 function is_table(x) return getmetatable(x)==table_mt; end | 26 local function is_table(x) return getmetatable(x)==table_mt; end |
27 function is_query(x) return getmetatable(x)==query_mt; end | 27 local function is_query(x) return getmetatable(x)==query_mt; end |
28 function Integer(n) return "Integer()" end | 28 local function Integer(n) return "Integer()" end |
29 function String(n) return "String()" end | 29 local function String(n) return "String()" end |
30 | 30 |
31 function Column(definition) | 31 local function Column(definition) |
32 return setmetatable(definition, column_mt); | 32 return setmetatable(definition, column_mt); |
33 end | 33 end |
34 function Table(definition) | 34 local function Table(definition) |
35 local c = {} | 35 local c = {} |
36 for i,col in ipairs(definition) do | 36 for i,col in ipairs(definition) do |
37 if is_column(col) then | 37 if is_column(col) then |
38 c[i], c[col.name] = col, col; | 38 c[i], c[col.name] = col, col; |
39 elseif is_index(col) then | 39 elseif is_index(col) then |
40 col.table = definition.name; | 40 col.table = definition.name; |
41 end | 41 end |
42 end | 42 end |
43 return setmetatable({ __table__ = definition, c = c, name = definition.name }, table_mt); | 43 return setmetatable({ __table__ = definition, c = c, name = definition.name }, table_mt); |
44 end | 44 end |
45 function Index(definition) | 45 local function Index(definition) |
46 return setmetatable(definition, index_mt); | 46 return setmetatable(definition, index_mt); |
47 end | 47 end |
48 | 48 |
49 function table_mt:__tostring() | 49 function table_mt:__tostring() |
50 local s = { 'name="'..self.__table__.name..'"' } | 50 local s = { 'name="'..self.__table__.name..'"' } |
300 | 300 |
301 return true; | 301 return true; |
302 end | 302 end |
303 local engine_mt = { __index = engine }; | 303 local engine_mt = { __index = engine }; |
304 | 304 |
305 function db2uri(params) | 305 local function db2uri(params) |
306 return build_url{ | 306 return build_url{ |
307 scheme = params.driver, | 307 scheme = params.driver, |
308 user = params.username, | 308 user = params.username, |
309 password = params.password, | 309 password = params.password, |
310 host = params.host, | 310 host = params.host, |
311 port = params.port, | 311 port = params.port, |
312 path = params.database, | 312 path = params.database, |
313 }; | 313 }; |
314 end | 314 end |
315 | 315 |
316 function create_engine(self, params, onconnect) | 316 local function create_engine(self, params, onconnect) |
317 return setmetatable({ url = db2uri(params), params = params, onconnect = onconnect }, engine_mt); | 317 return setmetatable({ url = db2uri(params), params = params, onconnect = onconnect }, engine_mt); |
318 end | 318 end |
319 | 319 |
320 return _M; | 320 return { |
321 is_column = is_column; | |
322 is_index = is_index; | |
323 is_table = is_table; | |
324 is_query = is_query; | |
325 Integer = Integer; | |
326 String = String; | |
327 Column = Column; | |
328 Table = Table; | |
329 Index = Index; | |
330 create_engine = create_engine; | |
331 }; |