Chuyển tới nội dung chính

Lấy và cập nhật nguyên tử một hàng (LCC.db.fetch_one)

Khai báo​

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

Tham số​

  • name
    Kiểu chuỗi, tên bảng; phải khác rỗng và không dài quá 256 byte
  • opts
    Kiểu bảng, gồm các trường sau:
    • conditions: kiểu bảng, điều kiện lọc bằng nhau, mặc định là {}
    • update: kiểu bảng, tập hợp trường cần cập nhật sau khi lấy thành công
    • pick: kiểu chuỗi, tùy chọn "min" / "max" / "random", mặc định là "min"; chọn bản ghi dựa trên id
  • timeout
    Kiểu số, tùy chọn; thời gian chờ yêu cầu (giây), mặc định là 60

Giá trị trả về​

  • row
    Kiểu bảng, đối tượng hàng đã nhận; trả về nil nếu thất bại hoặc không có kết quả khớp
  • err
    Kiểu chuỗi hoặc nil, nội dung mô tả lỗi khi thất bại. Trả về 'not found' nếu không có kết quả khớp và 'unknown table' nếu bảng không tồn tại

Mô tả​

Đọc và cập nhật nguyên tử một bản ghi, phù hợp cho các trường hợp đồng thời như nhận tác vụ.
Các trường trong update được ghi lại ngay sau khi đọc, bảo đảm cùng một hàng không bị phân phối lặp lại.
Khi không truyền update, hàm vẫn chọn nguyên tử một hàng nhưng không ghi lại trường nào.

Ví dụ​

local row, err = LCC.db.fetch_one("Bảng tác vụ", {
conditions = { ["Trạng thái"] = "Đang rảnh" },
update = { ["Trạng thái"] = "Đang thực hiện" },
pick = "min"
})
if row then
print("Nhận tác vụ", row.id, row["Tên"])
elseif err == "not found" then
print("Hiện không có tác vụ đang rảnh")
end