본문으로 건너뛰기

한 행을 원자적으로 가져와 업데이트 (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