def enqueue(payload: bytes, logical_hash: str, priority: int) -> int:
"""
BEGIN IMMEDIATE;
INSERT INTO requests (...);
COMMIT;
return request_id
"""
BEGIN IMMEDIATE;
UPDATE requests
SET lease_until = now + timeout
WHERE request_id = ?
AND (lease_until IS NULL OR lease_until < now);
-- rowcount == 1 なら成功
COMMIT;
BEGIN IMMEDIATE;
INSERT request_id, task_id=NULL
COMMIT;
call external app
BEGIN IMMEDIATE;
UPDATE task_state SET task_id = ? WHERE request_id = ?;
DELETE FROM requests WHERE request_id = ?;
COMMIT;
CREATE TABLE kv ( k TEXT PRIMARY KEY, v TEXT );
INSERT INTO kv (k, v) VALUES (?, ?) ON CONFLICT(k) DO UPDATE SET v = excluded.v;