Fri, 17 Apr 2009 23:46:12 +0000
Add 'columns' method to statement handles to retrieve column names from a result set
1 | 1 | #!/usr/bin/lua |
2 | ||
3 | module('DBI', package.seeall) | |
4 | ||
2 | 5 | -- Driver to module mapping |
1 | 6 | local name_to_module = { |
7 | MySQL = 'dbdmysql', | |
8 | PostgreSQL = 'dbdpostgresql', | |
9 | SQLite3 = 'dbdsqlite3', | |
14 | 10 | DB2 = 'dbddb2', |
17
21c4feaeafe7
Added initial Oracle driver support - functionality is complete, but may be too buggy in its current state for any serious use.
nrich@ii.net
parents:
14
diff
changeset
|
11 | Oracle = 'dbdoracle', |
1 | 12 | } |
13 | ||
14 | local string = require('string') | |
15 | ||
2 | 16 | -- Returns a list of available drivers |
17 | -- based on run time loading | |
1 | 18 | local function available_drivers() |
19 | local available = {} | |
20 | ||
21 | for driver, modulefile in pairs(name_to_module) do | |
22 | local m, err = pcall(require, modulefile) | |
23 | ||
24 | if m then | |
25 | table.insert(available, driver) | |
26 | end | |
27 | end | |
28 | ||
2 | 29 | -- no drivers available |
1 | 30 | if table.maxn(available) < 1 then |
31 | return '(None)' | |
32 | end | |
33 | ||
34 | return table.concat(available, ',') | |
35 | end | |
36 | ||
2 | 37 | -- High level DB connection function |
38 | -- This should be used rather than DBD.{Driver}.New | |
18 | 39 | function Connect(driver, ...) |
1 | 40 | local modulefile = name_to_module[driver] |
41 | ||
42 | if not modulefile then | |
43 | error(string.format("Driver '%s' not found. Available drivers are: %s", driver, available_drivers())) | |
44 | end | |
45 | ||
46 | local m, err = pcall(require, modulefile) | |
47 | ||
48 | if not m then | |
2 | 49 | -- cannot load the module, we cannot continue |
1 | 50 | error(string.format('Cannot load driver %s. Available drivers are: %s', driver, available_drivers())) |
51 | end | |
52 | ||
53 | local class_str = string.format('DBD.%s.Connection', driver) | |
54 | ||
55 | local connection_class = package.loaded[class_str] | |
56 | ||
2 | 57 | -- Calls DBD.{Driver}.New(...) |
18 | 58 | return connection_class.New(...) |
1 | 59 | end |
60 | ||
4 | 61 | -- Help function to do prepare and execute in |
62 | -- a single step | |
3 | 63 | function Do(dbh, sql, ...) |
64 | local sth,err = dbh:prepare(sql) | |
65 | ||
66 | if not sth then | |
67 | return false, err | |
68 | end | |
69 | ||
22 | 70 | local ok, err = sth:execute(...) |
71 | ||
72 | if not ok then | |
73 | return false, err | |
74 | end | |
75 | ||
76 | return sth:affected() | |
3 | 77 | end |