Перейти к основному содержимому

Атомарное получение и обновление строки (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