Mercurial Hosting > luan
comparison src/luan/modules/sql/Sql.luan @ 1267:9fa8b8389578
add LuanTable.luan;
support metatable __gc();
add luan.sql;
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Mon, 12 Nov 2018 02:10:41 -0700 |
parents | |
children | 725e52076f03 |
comparison
equal
deleted
inserted
replaced
1266:05934fbf635a | 1267:9fa8b8389578 |
---|---|
1 java() | |
2 local Luan = require "luan:Luan.luan" | |
3 local error = Luan.error | |
4 local new_error = Luan.new_error or error() | |
5 local set_metatable = Luan.set_metatable or error() | |
6 local Database = require "java:luan.modules.sql.Database" | |
7 local Logging = require "luan:logging/Logging.luan" | |
8 local logger = Logging.logger "Sql" | |
9 | |
10 | |
11 local Sql = {} | |
12 | |
13 local mt = {} | |
14 | |
15 function mt.__gc(database) | |
16 if not database.is_closed then | |
17 logger.error(database.created) | |
18 database.close() | |
19 end | |
20 end | |
21 | |
22 function Sql.database(spec) | |
23 local database = {} | |
24 set_metatable(database,mt) | |
25 local java_database = Database.get(spec) | |
26 java_database.uses = java_database.uses + 1 | |
27 database.is_closed = false | |
28 database.java = java_database | |
29 database.created = new_error "not closed, created:" | |
30 database.update = java_database.update | |
31 | |
32 function database.close() | |
33 if not database.is_closed then | |
34 database.is_closed = true | |
35 java_database.uses > 0 or error "java_database.uses <= 0" | |
36 java_database.uses = java_database.uses - 1 | |
37 if java_database.uses == 0 then | |
38 java_database.close() | |
39 end | |
40 end | |
41 end | |
42 | |
43 function database.query(sql,...) | |
44 local rs = java_database.query(sql,...) | |
45 local mt = {} | |
46 function mt.__index(_,key) | |
47 local rtn = rs.getObject(key) | |
48 return not rs.wasNull() and rtn or nil | |
49 end | |
50 local result = {} | |
51 set_metatable(result,mt) | |
52 return function() | |
53 if rs.isClosed() then | |
54 return nil | |
55 end | |
56 if not rs.next() then | |
57 rs.close() | |
58 return nil | |
59 end | |
60 return result | |
61 end | |
62 end | |
63 | |
64 return database | |
65 end | |
66 | |
67 return Sql |