aboutsummaryrefslogtreecommitdiffstats
path: root/lib/manipulation.mli
diff options
context:
space:
mode:
Diffstat (limited to 'lib/manipulation.mli')
-rw-r--r--lib/manipulation.mli137
1 files changed, 137 insertions, 0 deletions
diff --git a/lib/manipulation.mli b/lib/manipulation.mli
new file mode 100644
index 0000000..2a52b5c
--- /dev/null
+++ b/lib/manipulation.mli
@@ -0,0 +1,137 @@
+type error =
+ | RelationNotFound of string
+ | RelationAlreadyExists of string
+ | TupleNotFound of Conventions.Hash.t
+ | DuplicateTuple of Conventions.Hash.t
+ | ConstraintViolation of string
+ | StorageError of string
+
+val string_of_error : error -> string
+val sexp_of_error : error -> Sexplib.Sexp.t
+
+type 'a result = ('a, error) Result.t
+
+module Schema = Schema
+
+val hash_tuple : Tuple.materialized -> Conventions.Hash.t
+
+module Make (Storage : Management.Physical.S) : sig
+ type storage = Storage.t
+ type nonrec error = error
+
+ val of_string_error : string -> error
+
+ val store_database :
+ storage -> Management.Database.t -> (unit, error) Result.t
+
+ val load_relation :
+ storage -> Conventions.Hash.t -> (Relation.t option, error) Result.t
+
+ val load_database :
+ storage ->
+ Conventions.Hash.t ->
+ (Management.Database.t option, error) Result.t
+
+ val load_tuple :
+ storage -> Conventions.Hash.t -> (Tuple.materialized option, error) Result.t
+
+ val load_tuples :
+ storage ->
+ Conventions.Hash.t list ->
+ (Tuple.materialized list, error) Result.t
+
+ val create_tuple :
+ storage ->
+ Management.Database.t ->
+ Relation.t ->
+ Tuple.materialized ->
+ (Management.Database.t * Relation.t * Conventions.Hash.t, error) Result.t
+
+ val create_tuples :
+ storage ->
+ Management.Database.t ->
+ Relation.t ->
+ Tuple.materialized list ->
+ ( Management.Database.t * Relation.t * Conventions.Hash.t list,
+ error )
+ Result.t
+
+ val retract_tuple :
+ storage ->
+ Management.Database.t ->
+ Relation.t ->
+ tuple_hash:Conventions.Hash.t ->
+ (Management.Database.t * Relation.t, error) Result.t
+
+ val register_domain :
+ storage ->
+ Management.Database.t ->
+ Domain.t ->
+ (Management.Database.t, error) Result.t
+
+ val create_database :
+ storage -> name:string -> (Management.Database.t, error) Result.t
+
+ val database_history : Management.Database.t -> Conventions.Hash.t list
+
+ val create_relation :
+ storage ->
+ Management.Database.t ->
+ name:string ->
+ schema:Schema.t ->
+ (Management.Database.t * Relation.t, error) Result.t
+
+ val create_immutable_relation :
+ storage ->
+ Management.Database.t ->
+ name:string ->
+ schema:Schema.t ->
+ generator:Generator.t ->
+ membership_criteria:(Tuple.t -> bool) ->
+ cardinality:Conventions.Cardinality.t ->
+ (Management.Database.t * Relation.t, error) Result.t
+
+ val retract_relation :
+ storage ->
+ Management.Database.t ->
+ name:string ->
+ Management.Database.t result
+
+ val clear_relation :
+ storage ->
+ Management.Database.t ->
+ Relation.t ->
+ (Management.Database.t * Relation.t, error) Result.t
+
+ val register_constraint :
+ storage ->
+ Management.Database.t ->
+ constraint_name:string ->
+ relation_name:string ->
+ body:Constraint.t ->
+ (Management.Database.t, error) Result.t
+
+ val tuple_hashes : Relation.t -> Conventions.Hash.t list
+ val get_relation : Management.Database.t -> name:string -> Relation.t option
+ val tuple_count : Relation.t -> int
+ val tuple_exists : Relation.t -> Conventions.Hash.t -> bool
+
+ val attach_constraint :
+ storage ->
+ Management.Database.t ->
+ constraint_name:string ->
+ relation_name:string ->
+ body:Constraint.t ->
+ timing:Constraint.timing ->
+ (Management.Database.t, error) Result.t
+
+ val check_deferred_constraints :
+ storage -> Management.Database.t -> (unit, error) Result.t
+
+ val commit :
+ storage -> Management.Database.t -> (Management.Database.t, error) Result.t
+end
+
+module Memory : sig
+ include module type of Make (Management.Physical.Memory)
+end