aboutsummaryrefslogtreecommitdiffstats
path: root/lib/dml/ast.ml
diff options
context:
space:
mode:
authorMarcos Magueta <maguetamarcos@gmail.com>2026-06-22 22:55:27 -0300
committerGitHub <noreply@github.com>2026-06-22 22:55:27 -0300
commitb81586ee4a0543a5f9866586c78dccdd6328934a (patch)
tree4cd2f26e8e57e7e8d852fb7deddd0818c482dc8b /lib/dml/ast.ml
parent57b55b51ee6a1d4678ba37e4631d61a248411ff2 (diff)
downloadSakura-b81586ee4a0543a5f9866586c78dccdd6328934a.tar.gz
Sakura-b81586ee4a0543a5f9866586c78dccdd6328934a.zip
RNT ephemeral relations representation
Diffstat (limited to '')
-rw-r--r--lib/dml/ast.ml8
1 files changed, 8 insertions, 0 deletions
diff --git a/lib/dml/ast.ml b/lib/dml/ast.ml
index d8defe6..03e68ac 100644
--- a/lib/dml/ast.ml
+++ b/lib/dml/ast.ml
@@ -9,4 +9,12 @@ type statement =
| 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]