aboutsummaryrefslogblamecommitdiffstats
path: root/lib/dml/ast.ml
blob: e34adb9c3cf44e07b8e1f2849d6ec7010ee891ef (plain) (tree)
1
2
3
4
5

                
                                                          
 
                












                                                                               
                 
open Sexplib.Std

type attr_value = string * Drl.Ast.value [@@deriving sexp]

type statement =
  | InsertTuple of {relation: string; attributes: attr_value list}
  | InsertTuples of {relation: string; tuples: attr_value list list}
  | DeleteTuple of {relation: string; attributes: attr_value list}
  | Assign of {target: string; body: Drl.Ast.query}
  | InsertFrom of {target: string; source: Drl.Ast.query}
  | DeleteWhere of {target: string; predicate: Drl.Ast.query}
      (** Binds an unqualified name to a session-scoped ephemeral relation. The
          body is recomputed on each scan and never materialized; the binding
          lives until [DropDefine] or a session close. In contrast, [Assign]
          drains the body into an existing stored relation. *)
  | Define of {target: string; body: Drl.Ast.query}
      (** Drops a [Define] binding, releasing its session-ownership pin. *)
  | DropDefine of {target: string}
[@@deriving sexp]