rivet/config/cursor.rs
1//! Incremental cursor configuration (Epic D — cursor policy).
2//!
3//! `cursor_column` remains the primary progression column. Optional `cursor_fallback_column`
4//! plus [`IncrementalCursorMode::Coalesce`] uses `COALESCE(primary, fallback)` for the
5//! incremental predicate and stored cursor value (single scalar string in state).
6
7use schemars::JsonSchema;
8use serde::{Deserialize, Serialize};
9
10/// How the primary (and optional fallback) column(s) participate in incremental extraction.
11#[derive(Debug, Deserialize, Serialize, JsonSchema, Clone, Copy, PartialEq, Eq, Default)]
12#[serde(rename_all = "snake_case")]
13pub enum IncrementalCursorMode {
14 /// `WHERE primary > last ORDER BY primary` — optional fallback column is ignored for execution.
15 #[default]
16 SingleColumn,
17 /// `WHERE COALESCE(primary, fallback) > last` with a synthetic result column for cursor extraction.
18 Coalesce,
19}