Obter e atualizar atomicamente uma linha (LCC.db.fetch_one)
Declaração
row, err = LCC.db.fetch_one(name, opts, timeout?)
Parâmetros
- name
Tipo string; nome da tabela, não vazio e com no máximo 256 bytes - opts
Tipo table; contém os seguintes campos:conditions: tipo table; condições de filtragem por igualdade, padrão{}update: tipo table; conjunto de campos a atualizar depois que a obtenção tem sucessopick: tipo string, opcional,"min"/"max"/"random", padrão"min"; escolhe o registro com base emid
- timeout
Tipo number, opcional; tempo limite da solicitação (em segundos), padrão60
Valor de retorno
- row
Tipo table; objeto da linha obtida, ounilem caso de falha ou quando nenhuma linha corresponde - err
Tipo string ounil; descrição do erro em caso de falha. Quando nenhuma linha corresponde, retorna'not found'; quando a tabela não existe, retorna'unknown table'
Descrição
Lê e atualiza atomicamente um registro, sendo adequado para cenários concorrentes como atribuição de tarefas.
O campoupdateé gravado imediatamente depois da leitura para garantir que a mesma linha não seja atribuída novamente.
Semupdate, ainda seleciona uma linha atomicamente, mas não grava nenhum campo de volta.
Exemplo
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