From e9bc4aa3fa0e775acf1978722da1fde1ed8a469d Mon Sep 17 00:00:00 2001 From: Marcos Magueta Date: Sat, 7 Mar 2026 02:40:26 -0300 Subject: erlang port commands and generated tests --- lib/schema.ml | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 lib/schema.ml (limited to 'lib/schema.ml') diff --git a/lib/schema.ml b/lib/schema.ml new file mode 100644 index 0000000..e17f7a5 --- /dev/null +++ b/lib/schema.ml @@ -0,0 +1,21 @@ +(** Schema: maps attribute names to domain/type names. + + A schema defines the structure of a relation by listing each attribute + and its associated domain (type). This is used for: + - Hashing relations (schema is part of the relation identity) + - Validation (checking tuple membership) + - Persistence (storing and loading relations with their structure) *) + +type t = (string * string) list + +let empty : t = [] + +let add name domain_name (schema : t) : t = + (name, domain_name) :: schema + +let attributes (schema : t) = + List.map fst schema + +let to_string schema = + List.map (fun (n, t) -> n ^ ":" ^ t) schema + |> String.concat "," -- cgit v1.2.3