linkrs_query/parser/ast/stmt/transaction.rs
1use linkrs_core::types::expr::ContextualExpression;
2use linkrs_core::types::Span;
3
4/// `BEGIN [TRANSACTION] [READ ONLY | READ WRITE]` statement.
5#[derive(Debug, Clone, PartialEq)]
6pub struct BeginTransactionStmt {
7 pub span: Span,
8 /// Transaction access mode: `Some(true)` for READ ONLY, `Some(false)`
9 /// for READ WRITE, `None` when unspecified (defaults to READ WRITE).
10 pub read_only: Option<bool>,
11}
12
13#[derive(Debug, Clone, PartialEq)]
14pub struct CommitTransactionStmt {
15 pub span: Span,
16}
17
18/// `ROLLBACK [TRANSACTION] [TO <savepoint-name>]` statement.
19#[derive(Debug, Clone, PartialEq)]
20pub struct RollbackTransactionStmt {
21 pub span: Span,
22 /// Savepoint name for `ROLLBACK TO <savepoint>`; `None` for a full
23 /// transaction rollback. The name keeps its original case (the
24 /// transaction layer matches savepoint names verbatim).
25 pub savepoint_name: Option<String>,
26}
27
28/// `SAVEPOINT <savepoint-name>` statement.
29#[derive(Debug, Clone, PartialEq)]
30pub struct SavepointStmt {
31 pub span: Span,
32 pub name: String,
33}
34
35/// `RELEASE SAVEPOINT <savepoint-name>` statement.
36#[derive(Debug, Clone, PartialEq)]
37pub struct ReleaseSavepointStmt {
38 pub span: Span,
39 pub name: String,
40}
41
42/// `LET [$]name = expr` session-variable assignment statement.
43#[derive(Debug, Clone, PartialEq)]
44pub struct AssignVariableStmt {
45 pub span: Span,
46 /// Session variable name (without the leading `$`), validated against
47 /// `[A-Za-z_][A-Za-z0-9_]*`.
48 pub name: String,
49 /// Right-hand side expression, evaluated through the standard expression
50 /// pipeline (may reference `$name` session variables and `@name`
51 /// parameters).
52 pub expression: ContextualExpression,
53}
54
55/// `CHECKPOINT` statement — manually trigger a WAL checkpoint.
56#[derive(Debug, Clone, PartialEq)]
57pub struct CheckpointStmt {
58 pub span: Span,
59}