aboutsummaryrefslogtreecommitdiffstats
path: root/lib/manipulation.mli
blob: 2a52b5c7c4219e4f2d865a968d36b08a7cbc99fd (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
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