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 };