Deterministic atomic state transitions, MVCC transactions and logical recovery for MoonBit.
let engine = @moontxnkit.Engine::new()
let transaction = engine.begin(
isolation=@moontxnkit.IsolationLevel::Serializable,
)
let rows = transaction.scan_prefix("task:queued:")
ignore(transaction.put("audit:scan", "\{rows.length()}"))
match transaction.commit() {
@moontxnkit.CommitResult::CommittedAt(version) =>
println("committed at \{version}")
@moontxnkit.CommitResult::Rejected(conflict) =>
println(conflict.to_json())
}pub struct AtomicPlan {
name : String
isolation : IsolationLevel
conditions : Array[PlanCondition]
writes : Array[WriteIntent]
}pub(all) enum PlanResult {
AppliedAt(Int)
ConditionFailed(ConditionFailure)
CommitRejected(TxnConflict)
} derive(Eq, Debug)pub(all) struct Savepoint {
name : String
write_count : Int
read_count : Int
writes : Array[WriteIntent]
reads : Array[ReadObservation]
prefix_reads : Array[PrefixObservation]
} derive(Eq, Debug)pub struct Transaction {
engine : Engine
id : Int
snapshot_version : Int
isolation : IsolationLevel
state : TxnState
writes : Array[WriteIntent]
reads : Array[ReadObservation]
prefix_reads : Array[PrefixObservation]
savepoints : Array[Savepoint]
}pub(all) struct TxnConflict {
kind : ConflictKind
key : String
snapshot_version : Int
current_version : Int
message : String
} derive(Eq, Debug)pub(all) struct WalRecord {
transaction_id : Int
snapshot_version : Int
commit_version : Int
operations : Array[WriteIntent]
checksum : Int
} derive(Eq, Debug)fn WalRecord::new(transaction_id : Int, snapshot_version : Int, commit_version : Int, operations : Array[WriteIntent]) -> WalRecordDeterministic atomic state transitions, MVCC transactions and logical recovery for MoonBit.