Class: Honker::Transaction

Inherits:
Object
  • Object
show all
Defined in:
lib/honker/transaction.rb

Overview

Wraps a SQLite transaction with helpers that thread SQL through a stable connection handle. Matches the shape of the Rust binding’s ‘Transaction` — `execute` and `query_row` route to the underlying connection, which `*_tx` methods (`Queue#enqueue_tx`, `Stream#publish_tx`, `Stream#save_offset_tx`, `Database#notify_tx`) use to stay inside the open transaction.

Obtain one via ‘Database#transaction do |tx| … end`. The block auto-commits on normal return and auto-rolls-back on exception; the wrapping `sqlite3` gem handles the BEGIN/COMMIT/ROLLBACK for us. Callers may also invoke `tx.rollback!` mid-block to abort without raising.

Defined Under Namespace

Classes: Rollback

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(conn) ⇒ Transaction

Returns a new instance of Transaction.



22
23
24
25
# File 'lib/honker/transaction.rb', line 22

def initialize(conn)
  @conn = conn
  @rolled_back = false
end

Instance Attribute Details

#connObject (readonly)

The raw ‘SQLite3::Database` underneath. Exposed as `conn` to mirror the Rust shape for advanced users who need `prepare` or other APIs not wrapped here.



20
21
22
# File 'lib/honker/transaction.rb', line 20

def conn
  @conn
end

Instance Method Details

#execute(sql, params = []) ⇒ Object

Execute a SQL statement inside the transaction.



28
29
30
# File 'lib/honker/transaction.rb', line 28

def execute(sql, params = [])
  @conn.execute(sql, params)
end

#query_row(sql, params = []) ⇒ Object

Run a query and return the first row (or nil).



33
34
35
# File 'lib/honker/transaction.rb', line 33

def query_row(sql, params = [])
  @conn.get_first_row(sql, params)
end

#rollback!Object

Abort the transaction early. Raises ‘Transaction::Rollback` internally so the outer sqlite3-gem block sees an exception and rolls back; we then swallow it at the `Database#transaction` boundary.

Raises:



41
42
43
44
# File 'lib/honker/transaction.rb', line 41

def rollback!
  @rolled_back = true
  raise Rollback
end

#rolled_back?Boolean

Returns:

  • (Boolean)


46
47
48
# File 'lib/honker/transaction.rb', line 46

def rolled_back?
  @rolled_back
end