SerweryWłasny serwerDla twórcówForumFAQDokumentacjaBezpieczeństwo
Pobierz launcher
  1. Dokumentacja
  2. Funkcje serwera
  3. dbTransaction

Funkcja

dbTransaction

SerwerBaza danychTylko Trilogy Hub

Wykonuje kilka zapytań jako jedną transakcję. Funkcja dostaje obiekt tx z metodami tx:query, tx:queryOne i tx:exec. Błąd SQL, error() albo return false w funkcji cofa wszystkie zmiany.

Składnia

bool, mixed dbTransaction(element connection, function fn)

Argumenty

connectionelement
Połączenie z dbConnect.
fnfunction
Funkcja fn(tx) z zapytaniami transakcji.

Zwraca

true i wartości zwrócone przez funkcję; false i komunikat po cofnięciu.

Przykład

async(function()
    local ok, err = dbTransaction(db, function(tx)
        local row = tx:queryOne("SELECT money FROM players WHERE id = ?", 1)
        if not row or row.money < 500 then return false end
        tx:exec("UPDATE players SET money = money - 500 WHERE id = ?", 1)
        tx:exec("UPDATE players SET money = money + 500 WHERE id = ?", 2)
    end)
    print(ok, err)
end)

Uwagi

W zadaniu async serwer w tym czasie nie staje; poza nim czeka jak dbPoll(..., -1). Inne zapytania tego połączenia czekają, aż transakcja się skończy. W SQLite funkcja nie może czekać (await, sleep).

Zobacz też