1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
//! SQL statements for Wave 9 read-model methods (RFC-023 Phase 3.3).
//!
//! Mirrors `ff-backend-postgres/src/exec_core.rs` §4.1 read impls at
//! the statement level. SQLite translations:
//!
//! * `LEFT JOIN LATERAL (... LIMIT 1)` → `LEFT JOIN` on a correlated
//! subquery expression. SQLite executes the subquery per-outer-row
//! which is equivalent for LIMIT 1 projections.
//! * `FOR UPDATE` — no-op under `BEGIN IMMEDIATE` single-writer.
//! * `BYTEA` → `BLOB`. `uuid` column bound as 16-byte BLOB.
//! * JSON extraction via `json_extract` (JSON1) instead of `->>`.
// ── read_execution_state (§4.1) ────────────────────────────────────
/// Single-column point read on `ff_exec_core.public_state`. Binds:
/// ?1 partition_key, ?2 execution_id BLOB.
pub const SELECT_PUBLIC_STATE_SQL: &str = r#"
SELECT public_state
FROM ff_exec_core
WHERE partition_key = ?1 AND execution_id = ?2
"#;
// ── read_execution_info (§4.1) ─────────────────────────────────────
/// Multi-column projection of `ff_exec_core` joined with the current
/// attempt row (for `outcome`). Mirrors PG's single remaining LATERAL
/// join with a SQLite correlated subquery in the SELECT list. Since
/// migration 0016 (#356) `ff_exec_core.started_at_ms` is a set-once
/// column populated on first claim, so the earlier "earliest attempt
/// started_at_ms" subquery is gone — `ExecutionInfo.started_at` reads
/// directly from the base row.
///
/// Binds: ?1 partition_key, ?2 execution_id BLOB.
pub const SELECT_EXECUTION_INFO_SQL: &str = r#"
SELECT ec.flow_id,
ec.lane_id,
ec.priority,
ec.lifecycle_phase,
ec.ownership_state,
ec.eligibility_state,
ec.public_state,
ec.attempt_state,
ec.blocking_reason,
ec.attempt_index,
ec.created_at_ms,
ec.terminal_at_ms,
ec.started_at_ms,
ec.raw_fields,
(SELECT outcome
FROM ff_attempt a
WHERE a.partition_key = ec.partition_key
AND a.execution_id = ec.execution_id
AND a.attempt_index = ec.attempt_index) AS attempt_outcome
FROM ff_exec_core ec
WHERE ec.partition_key = ?1 AND ec.execution_id = ?2
"#;
// ── get_execution_result (§4.1 + §7.8) ─────────────────────────────
/// `result` BLOB point read from `ff_exec_core`. Current-attempt
/// semantics per RFC-020 Rev 7 Fork 3. Binds: ?1 partition_key, ?2
/// execution_id BLOB.
pub const SELECT_EXECUTION_RESULT_SQL: &str = r#"
SELECT result
FROM ff_exec_core
WHERE partition_key = ?1 AND execution_id = ?2
"#;