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 filapick: tipo string, opcional,"min"/"max"/"random", predeterminado"min"; selecciona el registro segúnid
- timeout
Tipo numérico, opcional; tiempo de espera de la solicitud (segundos), predeterminado60
Valores devueltos
- row
Tipo table; objeto de la fila obtenida;nilsi falla o no se encuentra ninguna - err
Tipo string onil; 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 campoupdatese escribe inmediatamente después de la lectura para garantizar que la misma fila no se asigne dos veces.
Si no se proporcionaupdate, 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