module AttributeMap = struct include BatMap.String let sexp_of_t sexp_of_v m = Sexplib.Sexp.List (List.map (fun (k, v) -> Sexplib.Sexp.List [Sexplib.Sexp.Atom k; sexp_of_v v]) (bindings m)) end type non_materialized = { hash: Conventions.Hash.t; relation: Conventions.Name.t; attributes: Attribute.referenced AttributeMap.t (* lineage : Relation.Lineage.t option; *) } [@@deriving sexp_of] type materialized = { relation: Conventions.Name.t; attributes: Attribute.materialized AttributeMap.t (* lineage : Relation.Lineage.t option; *) } [@@deriving sexp_of] type t = Materialized of materialized | NonMaterialized of non_materialized [@@deriving sexp_of] let make_materialized ~relation ~attributes = Materialized {relation; attributes (* lineage = None *)} let materialized_equal a b = AttributeMap.equal Attribute.materialized_equal a.attributes b.attributes