diff options
| author | Marcos Magueta <maguetamarcos@gmail.com> | 2026-09-18 00:24:38 -0300 |
|---|---|---|
| committer | Marcos Magueta <maguetamarcos@gmail.com> | 2026-09-18 00:24:38 -0300 |
| commit | c80121c23a90c60b9975e04a49d98c8dfb4866a1 (patch) | |
| tree | 2aad1643bbff9bbff4cff6531cd0495fe27f7882 | |
| parent | 1a35fa647b3598111d7dcb281309651ab413b1bc (diff) | |
| download | RNT-c80121c23a90c60b9975e04a49d98c8dfb4866a1.tar.gz RNT-c80121c23a90c60b9975e04a49d98c8dfb4866a1.zip | |
test mem @ merkle interface without decoding & missing value error
| -rw-r--r-- | lib/kernel/Merkle.ml | 22 | ||||
| -rw-r--r-- | lib/kernel/SubstantialRelation.ml | 3 |
2 files changed, 8 insertions, 17 deletions
diff --git a/lib/kernel/Merkle.ml b/lib/kernel/Merkle.ml index 06bbb8f..3616c24 100644 --- a/lib/kernel/Merkle.ml +++ b/lib/kernel/Merkle.ml @@ -360,6 +360,7 @@ module type INTERFACE = functor (S : Abstract.Storage.STORAGE) (K : KEY) (V : VA val insert : S.transaction -> K.t -> V.t -> node -> (node, Concepts.Condition.condition) result val remove : S.transaction -> K.t -> node -> (node, Concepts.Condition.condition) result val lookup : S.transaction -> K.t -> node -> (V.t option, Concepts.Condition.condition) result + val mem : S.transaction -> K.t -> node -> (bool, Concepts.Condition.condition) result val fold_left : S.transaction -> ('c -> K.t -> V.t -> 'c) -> 'c -> node -> ('c, Concepts.Condition.condition) result val iter : S.transaction -> (K.t -> V.t -> 'a) -> node -> (unit, Concepts.Condition.condition) result @@ -368,6 +369,7 @@ end module Interface : INTERFACE = functor (S : Abstract.Storage.STORAGE) (K : KEY) (V : VALUE) -> struct module T = Make (S) (K) + module SI = Storage.Make (S) type address = T.address type node = T.node @@ -380,19 +382,7 @@ module Interface : INTERFACE = functor (S : Abstract.Storage.STORAGE) (K : KEY) let* () = S.put tx (S.Hash addr) data in Ok addr - let retrieve tx addr = - let* data = S.get tx (S.Hash addr) in - match data with - | None -> Ok None - | Some data -> - let* v = V.decode data in - Ok (Some v) - - let retrieve' tx addr = - let* v = retrieve tx addr in - match v with - | Some v -> Ok v - | None -> failwith "A value was not found on the underlying storage. Either your database is corrupted, or this is a bug on RNT!" + let retrieve tx addr = SI.get_req tx (S.Hash addr) |> fmap V.decode let find = T.find let empty = T.empty @@ -410,13 +400,15 @@ module Interface : INTERFACE = functor (S : Abstract.Storage.STORAGE) (K : KEY) let* addr = T.lookup tx k node in match addr with | None -> Ok None - | Some addr -> retrieve tx addr + | Some addr -> retrieve tx addr |> Result.map Option.some + + let mem tx k node = T.lookup tx k node |> Result.map Option.is_some let fold_left tx f acc node = T.fold_left tx (fun acc k addr -> let* acc = acc in - let* v = retrieve' tx addr in + let* v = retrieve tx addr in Ok (f acc k v)) (Ok acc) node |> Result.join diff --git a/lib/kernel/SubstantialRelation.ml b/lib/kernel/SubstantialRelation.ml index 5093ffc..0afc3f7 100644 --- a/lib/kernel/SubstantialRelation.ml +++ b/lib/kernel/SubstantialRelation.ml @@ -110,8 +110,7 @@ module Make (S : Abstract.Storage.STORAGE) = struct let contains_tuple tx relation tuple = let open Utilities.Result in let* node = tuple_node tx relation in - let* present = TupleSet.lookup tx (Concepts.Tuple.hash tuple) node in - Ok (Option.is_some present) + TupleSet.mem tx (Concepts.Tuple.hash tuple) node let schema_of tx relation = let open Utilities.Result in |
