aboutsummaryrefslogtreecommitdiffstats
path: root/lib/relation.ml
diff options
context:
space:
mode:
authorMarcos <maguetamarcos@gmail.com>2025-01-19 02:00:15 -0300
committerMarcos <maguetamarcos@gmail.com>2025-01-19 02:00:15 -0300
commit3a32e46f647314aea380449b31384ad121f31e4e (patch)
treed57817ee539e63b717c514928d82f8537ee08c27 /lib/relation.ml
parentc67ed574a7a95db73d9349d58727452850bd47b9 (diff)
downloadSakura-3a32e46f647314aea380449b31384ad121f31e4e.tar.gz
Sakura-3a32e46f647314aea380449b31384ad121f31e4e.zip
unite relation attributes by entity map
Diffstat (limited to 'lib/relation.ml')
-rw-r--r--lib/relation.ml56
1 files changed, 33 insertions, 23 deletions
diff --git a/lib/relation.ml b/lib/relation.ml
index ed644dd..2f0c2a5 100644
--- a/lib/relation.ml
+++ b/lib/relation.ml
@@ -11,32 +11,33 @@ module Protocol = struct
type facts = relation list [@@deriving sexp, protocol ~driver:(module Xml_light)]
end
+(*
let test_write_and_retrieve() =
let open Disk in
let stream: Executor.history = [{state = Executor._EMPTY_SHA_HASH_; files = Executor.StringMap.empty}] in
let locations: Executor.locations = Executor.StringMap.empty in
let open Extensions.Result in
let command_write1: Command.t =
- {kind = Command.WRITE; timestamp = 10.0; hash = ""; content = "Daisy"; filename = "user/first-name"; references = []} in
+ {kind = Command.WRITE; timestamp = 10.0; hash = ""; content = "Daisy"; filename = "user/first-name"} in
let+ ((stream, locations), Command.ComputedHash handle) = Command.commit_and_perform stream locations command_write1 in
let command_write2: Command.t =
- {kind = Command.WRITE; timestamp = 10.0; hash = ""; content = "Blossom"; filename = "user/last-name"; references = [handle]} in
+ {kind = Command.WRITE; timestamp = 10.0; hash = ""; content = "Blossom"; filename = "user/last-name"} in
let command_write3: Command.t =
- {kind = Command.WRITE; timestamp = 10.0; hash = ""; content = "Minnie"; filename = "user/first-name"; references = []} in
+ {kind = Command.WRITE; timestamp = 10.0; hash = ""; content = "Minnie"; filename = "user/first-name"} in
let+ ((stream, locations), Command.ComputedHash _handle) = Command.commit_and_perform stream locations command_write2 in
let+ ((stream, locations), Command.ComputedHash handle) = Command.commit_and_perform stream locations command_write3 in
let command_write4: Command.t =
- {kind = Command.WRITE; timestamp = 10.0; hash = ""; content = "Mouse"; filename = "user/last-name"; references = [handle]} in
+ {kind = Command.WRITE; timestamp = 10.0; hash = ""; content = "Mouse"; filename = "user/last-name"} in
let+ ((stream, locations), Command.ComputedHash _handle) = Command.commit_and_perform stream locations command_write4 in
let command_write5: Command.t =
- {kind = Command.WRITE; timestamp = 10.0; hash = ""; content = "Billie"; filename = "user/first-name"; references = []} in
+ {kind = Command.WRITE; timestamp = 10.0; hash = ""; content = "Billie"; filename = "user/first-name"} in
let+ ((stream, locations), Command.ComputedHash handle) = Command.commit_and_perform stream locations command_write5 in
let command_write6: Command.t =
- {kind = Command.WRITE; timestamp = 10.0; hash = ""; content = "Beans"; filename = "user/last-name"; references = [handle]} in
+ {kind = Command.WRITE; timestamp = 10.0; hash = ""; content = "Beans"; filename = "user/last-name"} in
let+ ((stream, locations), Command.ComputedHash _handle) = Command.commit_and_perform stream locations command_write6 in
- let command_read1: Command.t = {kind = Command.READ; timestamp = 0.0; hash = ""; content = ""; filename = "user/first-name"; references = []} in
+ let command_read1: Command.t = {kind = Command.READ; timestamp = 0.0; hash = ""; content = ""; filename = "user/first-name"} in
let+ (_, Command.Read first_name) = Command.commit_and_perform (List.tl stream) locations command_read1 in
- let command_read2: Command.t = {kind = Command.READ; timestamp = 0.0; hash = ""; content = ""; filename = "user/last-name"; references = []} in
+ let command_read2: Command.t = {kind = Command.READ; timestamp = 0.0; hash = ""; content = ""; filename = "user/last-name"} in
let+ (_, Command.Read last_name) = Command.commit_and_perform (List.tl stream) locations command_read2 in
(* List.iter (fun a -> print_endline a) (List.map Bytes.to_string first_name); *)
(* List.iter (fun a -> print_endline a) (List.map Bytes.to_string last_name); *)
@@ -45,8 +46,8 @@ let test_write_and_retrieve() =
{attribute_name = "user/last-name"; attribute_type = "string"; tuples = List.map Bytes.to_string last_name}] in
Ok (Xml.to_string (Protocol.facts_to_xml_light relation_result))
(* (Sexp.to_string (Protocol.sexp_of_t )) *)
- [@@warning "-8"] (* Suppress pattern match incomplete warnings *)
-
+ [@@warning "-8-27"] (* Suppress pattern match incomplete warnings *)
+*)
let write_and_retrieve() =
let open Disk in
@@ -54,22 +55,31 @@ let write_and_retrieve() =
let locations: Executor.locations = Executor.StringMap.empty in
let open Extensions.Result in
let command_write1: Command.t =
- {kind = Command.WRITE; timestamp = 10.0; hash = ""; content = "Daisy"; filename = "user/first-name"; references = []} in
- let+ ((stream, locations), Command.ComputedHash handle) = Command.commit_and_perform stream locations command_write1 in
+ {kind = Command.WRITE; timestamp = 10.0; hash = ""; content = "Daisy"; filename = "user/first-name"} in
+ let+ ((stream, locations), Command.ComputedHash handle11) = Command.commit_and_perform stream locations Executor.StringMap.empty command_write1 in
let command_write2: Command.t =
- {kind = Command.WRITE; timestamp = 10.0; hash = ""; content = "Blossom"; filename = "user/last-name"; references = [handle]} in
+ {kind = Command.WRITE; timestamp = 10.0; hash = ""; content = "Blossom"; filename = "user/last-name"} in
+ let+ ((stream, locations), Command.ComputedHash handle12) = Command.commit_and_perform stream locations Executor.StringMap.empty command_write2 in
let command_write3: Command.t =
- {kind = Command.WRITE; timestamp = 10.0; hash = ""; content = "Minnie"; filename = "user/first-name"; references = []} in
- let+ ((stream, locations), Command.ComputedHash _handle) = Command.commit_and_perform stream locations command_write2 in
- let+ ((stream, locations), Command.ComputedHash handle) = Command.commit_and_perform stream locations command_write3 in
+ {kind = Command.WRITE; timestamp = 10.0; hash = ""; content = "Minnie"; filename = "user/first-name"} in
+ let+ ((stream, locations), Command.ComputedHash handle21) = Command.commit_and_perform stream locations Executor.StringMap.empty command_write3 in
let command_write4: Command.t =
- {kind = Command.WRITE; timestamp = 10.0; hash = ""; content = "Mouse"; filename = "user/last-name"; references = [handle]} in
- let+ ((stream, locations), Command.ComputedHash _handle) = Command.commit_and_perform stream locations command_write4 in
+ {kind = Command.WRITE; timestamp = 10.0; hash = ""; content = "Mouse"; filename = "user/last-name"} in
+ let+ ((stream, locations), Command.ComputedHash handle22) = Command.commit_and_perform stream locations Executor.StringMap.empty command_write4 in
let command_write5: Command.t =
- {kind = Command.WRITE; timestamp = 10.0; hash = ""; content = "Billie"; filename = "user/first-name"; references = []} in
- let+ ((stream, locations), Command.ComputedHash handle) = Command.commit_and_perform stream locations command_write5 in
+ {kind = Command.WRITE; timestamp = 10.0; hash = ""; content = "Billie"; filename = "user/first-name"} in
+ let+ ((stream, locations), Command.ComputedHash handle31) = Command.commit_and_perform stream locations Executor.StringMap.empty command_write5 in
let command_write6: Command.t =
- {kind = Command.WRITE; timestamp = 10.0; hash = ""; content = "Beans"; filename = "user/last-name"; references = [handle]} in
- let+ ((stream, locations), Command.ComputedHash _handle) = Command.commit_and_perform stream locations command_write6 in
+ {kind = Command.WRITE; timestamp = 10.0; hash = ""; content = "Beans"; filename = "user/last-name"} in
+ let+ ((stream, locations), Command.ComputedHash handle32) = Command.commit_and_perform stream locations Executor.StringMap.empty command_write6 in
+ let references =
+ Executor.StringMap.empty
+ |> Executor.StringMap.add "user" (Executor.StringMap.empty
+ |> Executor.StringMap.add "entity_0" [handle11; handle12]
+ |> Executor.StringMap.add "entity_1" [handle21; handle22]
+ |> Executor.StringMap.add "entity_2" [handle31; handle32]) in
+ let command_read: Command.t = {kind = Command.READ; timestamp = 0.0; hash = ""; content = ""; filename = "user"} in
+ let+ (_, (Command.Read content as response)) = Command.commit_and_perform (List.tl stream) locations references command_read in
+ print_endline (Command.show_return response);
Ok (stream, locations)
- [@@warning "-8"] (* Suppress pattern match incomplete warnings *)
+ [@@warning "-8-27"] (* Suppress pattern match incomplete warnings *)