blob: fdc3c9f428379136205ebbcfe7c52254d477e8ec (
plain) (
tree)
|
|
open Utilities.Result
let value_of = function Ast.Str s -> Value.String s | Ast.Int n -> Value.Integer n
let map_of bindings = List.to_seq bindings |> Utilities.StringMap.of_seq
let execute (ctx : Sublanguage_context.t) statement =
let* {RNT.branch; _} = ctx.session#state in
let relation = Drl.Executor.relation_path ("\\branch\\" ^ branch) in
let* message =
match statement with
| Ast.Define {target; heading; tuples} ->
let* path = relation target in
let tuples =
List.map (fun row -> List.map (fun (a, v) -> a, value_of v) row |> map_of) tuples
in
let* () = RNT.create ctx.kernel path (RNT.Relation {heading= map_of heading; tuples}) in
Ok ("Defined " ^ target)
| Ast.Drop {target} ->
let* path = relation target in
let* () = RNT.remove ctx.kernel path in
Ok ("Dropped " ^ target)
in
let* () = ctx.session#set_branch_to branch in
Ok (Sublanguage_types.Transition message)
|