Zum Hauptinhalt springen

Eine Zeile atomar abrufen und aktualisieren (LCC.db.fetch_one)

Deklaration​

row, err = LCC.db.fetch_one(name, opts, timeout?)

Parameter​

  • name
    String. Tabellenname. Darf nicht leer und höchstens 256 Byte lang sein.
  • opts
    Tabelle mit:
    • conditions: Tabelle mit Gleichheitsfiltern (Standard {})
    • update: Tabelle der Felder, die nach dem Übernehmen der Zeile aktualisiert werden
    • pick: String, optional "min" / "max" / "random"; Standard "min"; die Auswahl erfolgt anhand von id
  • timeout
    Zahl, optional. Anfrage-Timeout in Sekunden, Standard 60.

Rückgabewerte​

  • row
    Tabelle. Die übernommene Zeile; bei Fehler oder ohne Treffer nil.
  • err
    String oder nil. Fehlerbeschreibung; 'not found', wenn keine Zeile passt, und 'unknown table', wenn die Tabelle fehlt.

Hinweise​

Liest und aktualisiert atomar eine einzelne Zeile – ideal für die Aufgabenvergabe bei gleichzeitigen Zugriffen.
Felder in update werden sofort gespeichert, damit derselbe Datensatz nicht zweimal vergeben wird.
Auch ohne update wird eine Zeile atomar ausgewählt, jedoch kein Feld zurückgeschrieben.

Beispiel​

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