66local concat
77concat = table.concat
88local unpack = unpack or table.unpack
9- local FALSE , NULL , TRUE , build_helpers , format_date , is_raw , raw , is_list , list , is_encodable , clause , is_clause
9+ local NULL , build_helpers , is_raw , is_list
1010do
1111 local _obj_0 = require (" lapis.db.base" )
12- FALSE , NULL , TRUE , build_helpers , format_date , is_raw , raw , is_list , list , is_encodable , clause , is_clause = _obj_0 .FALSE , _obj_0 . NULL , _obj_0 .TRUE , _obj_0 . build_helpers , _obj_0 .format_date , _obj_0 . is_raw , _obj_0 .raw , _obj_0 . is_list , _obj_0 . list , _obj_0 . is_encodable , _obj_0 . clause , _obj_0 . is_clause
12+ NULL , build_helpers , is_raw , is_list = _obj_0 .NULL , _obj_0 .build_helpers , _obj_0 .is_raw , _obj_0 .is_list
1313end
1414local logger = require (" lapis.logging" )
15- local conn
16- local BACKENDS , set_raw_query , get_raw_query , escape_literal , escape_identifier , connect , raw_query , interpolate_query , encode_values , encode_assigns , encode_clause , append_all , add_cond , query , _select , _insert , _update , _delete , _truncate
17- BACKENDS = {
15+ local active_connection
16+ local connect , raw_query
17+ local BACKENDS = {
1818 luasql = function ()
1919 local config = require (" lapis.config" ).get ()
2020 local mysql_config = assert (config .mysql , " missing mysql configuration" )
@@ -30,14 +30,14 @@ BACKENDS = {
3030 table.insert (conn_opts , mysql_config .port )
3131 end
3232 end
33- conn = assert (luasql :connect (unpack (conn_opts )))
33+ active_connection = assert (luasql :connect (unpack (conn_opts )))
3434 return function (q )
3535 logger .query (q )
36- local cur = assert (conn :execute (q ))
36+ local cur = assert (active_connection :execute (q ))
3737 local has_rows = type (cur ) ~= " number"
3838 local result = {
3939 affected_rows = has_rows and cur :numrows () or cur ,
40- last_auto_id = conn :getlastautoid ()
40+ last_auto_id = active_connection :getlastautoid ()
4141 }
4242 if has_rows then
4343 local colnames = cur :getcolnames ()
@@ -156,19 +156,22 @@ BACKENDS = {
156156 end
157157 end
158158}
159+ local set_raw_query
159160set_raw_query = function (fn )
160161 raw_query = fn
161162end
163+ local get_raw_query
162164get_raw_query = function ()
163165 return raw_query
164166end
167+ local escape_literal
165168escape_literal = function (val )
166169 local _exp_0 = type (val )
167170 if " number" == _exp_0 then
168171 return tostring (val )
169172 elseif " string" == _exp_0 then
170- if conn then
171- return " '" .. tostring (conn :escape (val )) .. " '"
173+ if active_connection then
174+ return " '" .. tostring (active_connection :escape (val )) .. " '"
172175 else
173176 if ngx then
174177 return ngx .quote_sql_str (val )
@@ -206,6 +209,7 @@ escape_literal = function(val)
206209 end
207210 return error (" don't know how to escape value: " .. tostring (val ))
208211end
212+ local escape_identifier
209213escape_identifier = function (ident )
210214 if is_raw (ident ) then
211215 return ident [1 ]
@@ -234,12 +238,14 @@ raw_query = function(...)
234238 connect ()
235239 return raw_query (... )
236240end
237- interpolate_query , encode_values , encode_assigns , encode_clause = build_helpers (escape_literal , escape_identifier )
241+ local interpolate_query , encode_values , encode_assigns , encode_clause = build_helpers (escape_literal , escape_identifier )
242+ local append_all
238243append_all = function (t , ...)
239244 for i = 1 , select (" #" , ... ) do
240245 t [# t + 1 ] = select (i , ... )
241246 end
242247end
248+ local add_cond
243249add_cond = function (buffer , cond , ...)
244250 append_all (buffer , " WHERE " )
245251 local _exp_0 = type (cond )
@@ -249,15 +255,18 @@ add_cond = function(buffer, cond, ...)
249255 return append_all (buffer , interpolate_query (cond , ... ))
250256 end
251257end
258+ local query
252259query = function (str , ...)
253260 if select (" #" , ... ) > 0 then
254261 str = interpolate_query (str , ... )
255262 end
256263 return raw_query (str )
257264end
265+ local _select
258266_select = function (str , ...)
259267 return query (" SELECT " .. str , ... )
260268end
269+ local _insert
261270_insert = function (tbl , values , ...)
262271 local buff = {
263272 " INSERT INTO " ,
@@ -267,6 +276,7 @@ _insert = function(tbl, values, ...)
267276 encode_values (values , buff )
268277 return raw_query (concat (buff ))
269278end
279+ local _update
270280_update = function (table , values , cond , ...)
271281 local buff = {
272282 " UPDATE " ,
@@ -279,6 +289,7 @@ _update = function(table, values, cond, ...)
279289 end
280290 return raw_query (concat (buff ))
281291end
292+ local _delete
282293_delete = function (table , cond , ...)
283294 local buff = {
284295 " DELETE FROM " ,
@@ -289,30 +300,20 @@ _delete = function(table, cond, ...)
289300 end
290301 return raw_query (concat (buff ))
291302end
303+ local _truncate
292304_truncate = function (table )
293305 return raw_query (" TRUNCATE " .. escape_identifier (table ))
294306end
295- return {
307+ return setmetatable ( {
296308 __type = " mysql" ,
297309 connect = connect ,
298- NULL = NULL ,
299- TRUE = TRUE ,
300- FALSE = FALSE ,
301- raw = raw ,
302- is_raw = is_raw ,
303- list = list ,
304- is_list = is_list ,
305- clause = clause ,
306- is_clause = is_clause ,
307- is_encodable = is_encodable ,
308310 encode_values = encode_values ,
309311 encode_assigns = encode_assigns ,
310312 encode_clause = encode_clause ,
311313 interpolate_query = interpolate_query ,
312314 query = query ,
313315 escape_literal = escape_literal ,
314316 escape_identifier = escape_identifier ,
315- format_date = format_date ,
316317 set_raw_query = set_raw_query ,
317318 get_raw_query = get_raw_query ,
318319 parse_clause = function ()
@@ -324,4 +325,6 @@ return {
324325 delete = _delete ,
325326 truncate = _truncate ,
326327 BACKENDS = BACKENDS
327- }
328+ }, {
329+ __index = require (" lapis.db.base" )
330+ })
0 commit comments