DBI.lua

Sun, 23 Nov 2008 01:29:09 +0000

author
nrich@ii.net
date
Sun, 23 Nov 2008 01:29:09 +0000
changeset 1
408291a6eb3e
child 2
c4f02fc67e5a
permissions
-rw-r--r--

Initial import.

#!/usr/bin/lua

module('DBI', package.seeall)

local name_to_module = {
    MySQL = 'dbdmysql',
    PostgreSQL = 'dbdpostgresql',
    SQLite3 = 'dbdsqlite3',
}

local string = require('string')

local function available_drivers()
    local available = {}

    for driver, modulefile in pairs(name_to_module) do
	local m, err = pcall(require, modulefile)

	if m then
	    table.insert(available, driver)
	end
    end

    if table.maxn(available) < 1 then
	return '(None)'
    end

    return table.concat(available, ',')
end

function Connect(driver, name, username, password, host, port)
    local modulefile = name_to_module[driver]

    if not modulefile then
	error(string.format("Driver '%s' not found. Available drivers are: %s", driver, available_drivers()))
    end

    local m, err = pcall(require, modulefile)

    if not m then
	error(string.format('Cannot load driver %s. Available drivers are: %s', driver, available_drivers()))
    end

    local class_str = string.format('DBD.%s.Connection', driver)

    local connection_class = package.loaded[class_str]

    return connection_class.New(name, username, password, host, port)
end

mercurial