Skip to main content

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}