aboutsummaryrefslogtreecommitdiffstats
path: root/lib/relation.ml
diff options
context:
space:
mode:
Diffstat (limited to 'lib/relation.ml')
-rw-r--r--lib/relation.ml163
1 files changed, 122 insertions, 41 deletions
diff --git a/lib/relation.ml b/lib/relation.ml
index d6a1b70..d27f2e2 100644
--- a/lib/relation.ml
+++ b/lib/relation.ml
@@ -1,14 +1,19 @@
module Protocol = struct
open Protocol_conv_xml
open Sexplib0.Sexp_conv
- type tuple =
- string list [@@deriving sexp, protocol ~driver:(module Xml_light)]
- type relation =
- { attribute_name: string;
- attribute_type: string;
- tuples: tuple }
- [@@deriving sexp, protocol ~driver:(module Xml_light)]
- type facts = relation list [@@deriving sexp, protocol ~driver:(module Xml_light)]
+
+ type tuple = string list
+ [@@deriving sexp, protocol ~driver:(module Xml_light)]
+
+ type relation = {
+ attribute_name : string;
+ attribute_type : string;
+ tuples : tuple;
+ }
+ [@@deriving sexp, protocol ~driver:(module Xml_light)]
+
+ type facts = relation list
+ [@@deriving sexp, protocol ~driver:(module Xml_light)]
end
(*
@@ -49,43 +54,119 @@ let test_write_and_retrieve() =
[@@warning "-8-27"] (* Suppress pattern match incomplete warnings *)
*)
-let write_and_retrieve() =
+let 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 references = Executor.StringMap.empty in
+ let commit : Executor.commit =
+ {
+ state = Executor._EMPTY_SHA_HASH_;
+ files = Executor.StringMap.empty;
+ references = Executor.StringMap.empty;
+ }
+ in
+ let locations : Executor.locations = Executor.StringMap.empty in
let relation_name = "user" in
(* let entity_id, _ = Executor.StringMap.find relation_name references |> Executor.IntMap.max_binding in *)
- let entity_id = 0L 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 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 open Extensions.Result in
- let command_write1: Command.t =
- {kind = Command.WRITE; timestamp = 10.0; hash = ""; content = "Daisy"; filename = "user/first-name"} in
- let+ ((stream, locations, references), Command.ComputedHash handle11) = Command.commit_and_perform stream locations references ~entity_id command_write1 in
- let command_write2: Command.t =
- {kind = Command.WRITE; timestamp = 10.0; hash = ""; content = "Blossom"; filename = "user/last-name"} in
- let+ ((stream, locations, references), Command.ComputedHash handle12) = Command.commit_and_perform stream locations references ~entity_id command_write2 in
+ let command_write1 : Command.t =
+ {
+ kind = Command.WRITE;
+ timestamp = 10.0;
+ hash = "";
+ content = "Daisy";
+ entity_id = Some 0L;
+ filename = "user/first-name";
+ }
+ in
+ let+ (commit, locations, references), Command.ComputedHash handle11 =
+ Command.commit_and_perform commit locations command_write1
+ in
+ let command_write2 : Command.t =
+ {
+ kind = Command.WRITE;
+ timestamp = 10.0;
+ hash = "";
+ content = "Blossom";
+ entity_id = Some 0L;
+ filename = "user/last-name";
+ }
+ in
+ let+ (commit, locations, references), Command.ComputedHash handle12 =
+ Command.commit_and_perform commit locations command_write2
+ in
let entity_id = 1L in
- let command_write3: Command.t =
- {kind = Command.WRITE; timestamp = 10.0; hash = ""; content = "Minnie"; filename = "user/first-name"} in
- let+ ((stream, locations, references), Command.ComputedHash handle21) = Command.commit_and_perform stream locations references ~entity_id command_write3 in
- let command_write4: Command.t =
- {kind = Command.WRITE; timestamp = 10.0; hash = ""; content = "Mouse"; filename = "user/last-name"} in
- let+ ((stream, locations, references), Command.ComputedHash handle22) = Command.commit_and_perform stream locations references ~entity_id command_write4 in
+ let command_write3 : Command.t =
+ {
+ kind = Command.WRITE;
+ timestamp = 10.0;
+ hash = "";
+ content = "Minnie";
+ entity_id = Some 1L;
+ filename = "user/first-name";
+ }
+ in
+ let+ (commit, locations, references), Command.ComputedHash handle21 =
+ Command.commit_and_perform commit locations command_write3
+ in
+ let command_write4 : Command.t =
+ {
+ kind = Command.WRITE;
+ timestamp = 10.0;
+ hash = "";
+ content = "Mouse";
+ entity_id = Some 1L;
+ filename = "user/last-name";
+ }
+ in
+ let+ (commit, locations, references), Command.ComputedHash handle22 =
+ Command.commit_and_perform commit locations command_write4
+ in
let entity_id = 2L in
- let command_write5: Command.t =
- {kind = Command.WRITE; timestamp = 10.0; hash = ""; content = "Billie"; filename = "user/first-name"} in
- let+ ((stream, locations, references), Command.ComputedHash handle31) = Command.commit_and_perform stream locations references ~entity_id command_write5 in
- let command_write6: Command.t =
- {kind = Command.WRITE; timestamp = 10.0; hash = ""; content = "Beans"; filename = "user/last-name"} in
- let+ ((stream, locations, references), Command.ComputedHash handle32) = Command.commit_and_perform stream locations references ~entity_id command_write6 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 ~entity_id command_read in
+ let command_write5 : Command.t =
+ {
+ kind = Command.WRITE;
+ timestamp = 10.0;
+ hash = "";
+ content = "Billie";
+ entity_id = Some 2L;
+ filename = "user/first-name";
+ }
+ in
+ let+ (commit, locations, references), Command.ComputedHash handle31 =
+ Command.commit_and_perform commit locations command_write5
+ in
+ let command_write6 : Command.t =
+ {
+ kind = Command.WRITE;
+ timestamp = 10.0;
+ hash = "";
+ content = "Beans";
+ entity_id = Some 2L;
+ filename = "user/last-name";
+ }
+ in
+ let+ (commit, locations, references), Command.ComputedHash handle32 =
+ Command.commit_and_perform commit locations command_write6
+ in
+ let command_read : Command.t =
+ {
+ kind = Command.READ;
+ timestamp = 0.0;
+ hash = "";
+ content = "";
+ entity_id = None;
+ filename = "user";
+ }
+ in
+ let+ _, (Command.Read content as response) =
+ Command.commit_and_perform commit locations command_read
+ in
print_endline (Command.show_return response);
- Ok (stream, locations)
- [@@warning "-8-27-26"] (* Suppress pattern match incomplete warnings *)
+ Ok (commit, locations)
+[@@warning "-8-27-26"]
+(* Suppress pattern match incomplete warnings *)