Skip to content

Funciones de Base de Datos y Resultset

Las funciones Lua de base de datos son las herramientas disponibles en los eventos de Autobase para interactuar con las bases de datos.

sql()

Ejecuta una consulta SQL y devuelve un Resultset con los resultados.

Sintaxis

lua
variable = sql(query)
variable = sql(query, connectionName)

Parámetros

ParámetroTipoRequeridoDescripción
querystringConsulta SQL a ejecutar. Puede incluir parámetros con sintaxis
connectionNamestringNoNombre del origen de datos. Si se omite, usa el defaultConnection de la instancia

Retorno

Devuelve un Resultset que contiene:

  • Fields: Lista de campos con nombre y tipo de dato
  • Rows: Lista de registros

Uso de parámetros

Las consultas pueden incluir variables Lua como parámetros usando la sintaxis .

lua
customerId = 5
orders = sql([[
    SELECT id, order_date, total
    FROM orders
    WHERE customer_id = {{customerId}}
    ORDER BY order_date DESC
]])

Los parámetros son automáticamente convertidos al tipo apropiado y escapados para prevenir inyección SQL.


sql_to_vars()

Ejecuta una consulta SQL y asigna automáticamente los campos de la primera fila como variables individuales.

lua
sql_to_vars(query)
sql_to_vars(query, connectionName)

rs_to_vars()

Convierte los campos de una fila específica de un Resultset existente en variables individuales.

lua
rs_to_vars(resultset, row)

Objeto Resultset

El Resultset es el objeto que devuelve la función sql() cuando se ejecuta una consulta SQL. Representa un conjunto de resultados de una consulta y proporciona acceso estructurado a los datos devueltos.

Métodos en Lua

get_field_value()

lua
value = resultset:get_field_value(fieldName, row)

Devuelve el valor del campo en la fila indicada, convertido al tipo correcto.

get_row_count()

lua
count = resultset:get_row_count()

Devuelve la cantidad de filas en el Resultset como un number de Lua.


Creación y modificación de Resultset desde Lua

Además de obtener Resultset mediante sql(), es posible crear y manipular Resultset enteramente en memoria.

resultset()

Crea un nuevo Resultset vacío con colecciones inicializadas.

lua
rs = resultset()

add_field()

Agrega un campo al Resultset.

lua
rs:add_field(name, dataType)

Parámetros:

ParámetroTipoRequeridoDescripción
namestringNombre del campo
dataTypestringTipo de dato. Valores soportados: string, int, decimal, boolean, date, datetime, time

Ejemplo:

lua
rs:add_field("id", "int")
rs:add_field("name", "string")
rs:add_field("price", "decimal")
rs:add_field("active", "boolean")

add_row()

Agrega una fila al Resultset.

lua
rs:add_row(value1, value2, ...)

La cantidad de valores debe coincidir exactamente con la cantidad de campos definidos. Cada valor se convierte automáticamente al tipo de dato del campo correspondiente.

Ejemplo:

lua
rs:add_row(1, "Mouse", decimal("12000.50"), true)
rs:add_row(2, "Keyboard", decimal("35000.00"), false)

Soporta todos los tipos Lua: strings, numbers, booleanos, decimal(), date(), date_time() y time().


set_field_value()

Modifica el valor de un campo en una fila existente.

lua
rs:set_field_value(fieldName, rowIndex, value)

Parámetros:

ParámetroTipoRequeridoDescripción
fieldNamestringNombre del campo a modificar
rowIndexintÍndice de la fila (base 0)
valuemixedNuevo valor convertido al tipo del campo

Ejemplo:

lua
rs:set_field_value("name", 0, "Gaming Mouse")
rs:set_field_value("price", 1, decimal("32000.00"))

clear_rows()

Elimina todas las filas del Resultset manteniendo los campos intactos.

lua
rs:clear_rows()

Ejemplo completo

lua
productos = resultset()

productos:add_field("id", "int")
productos:add_field("nombre", "string")
productos:add_field("precio", "decimal")

productos:add_row(1, "Mouse", decimal("12000.50"))
productos:add_row(2, "Teclado", decimal("35000.00"))
productos:add_row(3, "Monitor", decimal("250000.00"))

productos:set_field_value("nombre", 1, "Teclado Mecánico")
productos:set_field_value("precio", 2, decimal("235000.00"))

Ejemplos prácticos

Incluyen listados, cálculos y validaciones de datos usando Resultset.

Valores NULL

Los valores NULL de la base de datos se representan internamente como "###ABNULL###" y se convierten automáticamente a nil cuando se acceden mediante rs:get_field_value().