Récupérer et mettre à jour atomiquement une ligne (LCC.db.fetch_one)
Déclaration
row, err = LCC.db.fetch_one(name, opts, timeout?)
Paramètres
- name
Type chaîne, nom de la table, non vide et limité à 256 octets - opts
Type table contenant les champs suivants :conditions: type table, conditions de filtrage par égalité,{}par défautupdate: type table, ensemble de champs à mettre à jour après une récupération réussiepick: type chaîne, peut être"min"/"max"/"random","min"par défaut ; sélectionne les enregistrements selonid
- timeout
Type numérique, facultatif ; délai d'attente de la demande en secondes,60par défaut
Valeurs de retour
- row
Type table, ligne récupérée ;nilen cas d'échec ou si aucune ligne ne correspond - err
Type chaîne ounil, description de l'erreur en cas d'échec. En l'absence de correspondance, renvoie'not found'; si la table n'existe pas, renvoie'unknown table'
Description
Lit et met à jour atomiquement une ligne, pour les scénarios concurrents tels que la récupération de tâches.
Le champupdateest écrit immédiatement après la lecture afin d'empêcher l'attribution répétée d'une même ligne.
Sansupdate, une ligne est tout de même sélectionnée atomiquement, mais aucun champ n'est réécrit.
Exemple
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