LuaSQL
Conectividade de banco de dados para a linguagem de programação Lua

## Exemplos

Abaixo, você verá um pequeno exemplo do código do uso básico da biblioteca. Em seguida, outro exemplo mostra como criar um iterador sobre o resultado de uma determinada consulta.

### Uso básico

    -- carregar o driver
    require "luasql.postgres"
    -- criar o objeto de ambiente
    env = assert (luasql.postgres())
    -- conectar a base de dados
    con = assert (env:connect("luasql-test"))
    -- retornar a tabela
    res = con:execute"DROP TABLE people"
    res = assert (con:execute[[
      CREATE TABLE people (
        name  varchar(50),
        email varchar(50)
      )
    ]])
    -- adiciona alguns elementos
    list = {
      { name="José das Couves", email="jose@couves.com", },
      { name="Manoel Joaquim", email="manoel.joaquim@cafundo.com", },
      { name="Maria das Dores", email="maria@dores.com", },
    }
    for i, p in pairs (list) do
      res = assert (con:execute(string.format([[
        INSERT INTO people
        VALUES ('%s', '%s')]], p.name, p.email)
      ))
    end
    -- obtem um cursor
    cur = assert (con:execute"SELECT name, email from people")
    -- imprime todos os registros, indexados pelos nomes de campos
    row = cur:fetch ({}, "a")
    while row do
      print(string.format("Nome: %s, E-mail: %s", row.name, row.email))
      -- reutiliza a tabela de resultados
      row = cur:fetch (row, "a")
    end
    -- fecha tudo
    cur:close()
    con:close()
    env:close()

O resultado desse script será:

    Nome: José das Couves, E-mail: jose@couves.com
    Nome: Manoel Joaquim, E-mail: manoel.joaquim@cafundo.com
    Nome: Maria das Dores, E-mail: maria@dores.com

### Uso do iterador

Pode ser útil oferecer um iterador para cada registro do resultado:

    function rows (connection, sql_statement)
      local cursor = assert (connection:execute (sql_statement))
      return function ()
        return cursor:fetch()
      end
    end

Esse iterador é usado da seguinte forma:

    require "luasql.mysql"
    env = assert (luasql.mysql())
    con = assert (env:connect"my_db")
    for id, name, address in rows (con, "select * from contacts") do
      print (string.format ("%s: %s", name, address))
    end

Obviamente, o código acima só funciona se houver uma tabela chamadas `contacts` com as colunas apropriadas. No final do loop o objeto cursor será automaticamente fechado pelo driver, já que todo o resultado foi recuperado.

### Objetos to-be-closed

Nota de Compatibilidade: Variáveis To-be-closed é um recurso introduzido na versão 5.4 de Lua. Portanto, essa funcionalidade só pode ser usada se o driver LuaSQL (versão > 2.6) for compilado para a versão 5.4 ou superior de Lua.

    function getName(db, id)
      -- Este código requer Lua 5.4 ou superior devido ao uso de variáveis to-be-closed
      local cur <close> = db:execute("SELECT name FROM contacts WHERE id = " .. id)
      return cur:fetch()
    end

Valid XHTML 1.0!