Saltar al contenido principal

Obtener y actualizar atómicamente una fila (LCC.db.fetch_one)

Declaración​

row, err = LCC.db.fetch_one(name, opts, timeout?)

Parámetros​

  • name
    Tipo string; nombre de la tabla, obligatorio, no vacío y de un máximo de 256 bytes
  • opts
    Tipo table; contiene los siguientes campos:
    • conditions: tipo table, condiciones de filtrado por igualdad, predeterminado {}
    • update: tipo table, conjunto de campos que se actualizarán después de obtener la fila
    • pick: tipo string, opcional, "min" / "max" / "random", predeterminado "min"; selecciona el registro según id
  • timeout
    Tipo numérico, opcional; tiempo de espera de la solicitud (segundos), predeterminado 60

Valores devueltos​

  • row
    Tipo table; objeto de la fila obtenida; nil si falla o no se encuentra ninguna
  • err
    Tipo string o nil; descripción del error cuando falla. Si no se encuentra ninguna fila, devuelve 'not found'; si la tabla no existe, devuelve 'unknown table'

Descripción​

Lee y actualiza atómicamente un registro, adecuado para escenarios concurrentes como reclamar tareas.
El campo update se escribe inmediatamente después de la lectura para garantizar que la misma fila no se asigne dos veces.
Si no se proporciona update, sigue seleccionando una fila de forma atómica, pero no escribe ningún campo.

Ejemplo​

local row, err = LCC.db.fetch_one("任务表", {
conditions = { 状态 = "空闲" },
update = { 状态 = "进行中" },
pick = "min"
})
if row then
print("领取任务", row.id, row.名称)
elseif err == "not found" then
print("暂无空闲任务")
end