Атомарное получение и обновление строки (LCC.db.fetch_one)
Сигнатура
row, err = LCC.db.fetch_one(name, opts, timeout?)
Параметры
- name
Строка, имя таблицы; непустое, не более 256 байт - opts
Таблица со следующими полями:conditions: таблица, условия равенства, по умолчанию{}update: таблица, набор полей для обновления после успешного полученияpick: строка, необязательная"min"/"max"/"random", по умолчанию"min"; выбор записи поid
- timeout
Число, необязательный тайм-аут запроса (секунды), по умолчанию60
Возвращаемое значение
- row
Таблица, полученная строка; при сбое или отсутствии совпадения —nil - err
Строка илиnil, описание ошибки при сбое. При отсутствии совпадения возвращается'not found', при отсутствии таблицы —'unknown table'
Описание
Атомарно читает и обновляет одну запись; подходит для конкурентного получения задач.
Поляupdateзаписываются сразу после чтения, поэтому одна строка не назначается повторно.
Еслиupdateне передан, строка всё равно выбирается атомарно, но поля не записываются обратно.
Пример
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