blob: 2155f7d32ff9f7095fd11c88259cce054d0580ea (
plain) (
tree)
|
|
(** Fully qualified relation name: [multigroup:schema:relation].
Splits on [:], fills defaults for missing parts.
- ["relation"] -> { multigroup=""; schema="public"; relation }
- ["schema:relation"] -> { multigroup=""; schema; relation }
- ["mg:schema:relation"] -> { multigroup=mg; schema; relation }
*)
type t = { multigroup : string; schema : string; relation : string }
let default_schema = "public"
let parse s =
match String.split_on_char ':' s with
| [ rel ] -> { multigroup = ""; schema = default_schema; relation = rel }
| [ schema; rel ] -> { multigroup = ""; schema; relation = rel }
| [ mg; schema; rel ] -> { multigroup = mg; schema; relation = rel }
| _ -> { multigroup = ""; schema = default_schema; relation = s }
let make ?(multigroup = "") ?(schema = default_schema) relation =
{ multigroup; schema; relation }
let to_string { multigroup; schema; relation } =
if multigroup = "" then schema ^ ":" ^ relation
else multigroup ^ ":" ^ schema ^ ":" ^ relation
let to_key { schema; relation; _ } = schema ^ ":" ^ relation
|