From 013cbf09e4ea9871311bf52b6873c43fc9be5441 Mon Sep 17 00:00:00 2001 From: Marcos Magueta Date: Tue, 24 Mar 2026 17:51:03 -0300 Subject: Session with stream control sublanguage (#55) SCL adds cursor-based streaming to Sakura so clients can consume DRL query results incrementally in bounded batches rather than all at once. Three statements: Begin, Fetch, and Close. `open`, `advance`, and `release` cursors backed by a session registry that suspends the generator between calls. SCL is just an optional consumption layer above the existing algebra. --- lib/scl/sublanguage.ml | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 lib/scl/sublanguage.ml (limited to 'lib/scl/sublanguage.ml') diff --git a/lib/scl/sublanguage.ml b/lib/scl/sublanguage.ml new file mode 100644 index 0000000..7098ced --- /dev/null +++ b/lib/scl/sublanguage.ml @@ -0,0 +1,26 @@ +module Make (Storage : Management.Physical.S) = struct + module Exec = Executor.Make(Storage) + + type storage = Storage.t + type ast = Ast.statement + type error = Exec.error + + let name = "scl" + + let parse_sexp sexp = + match Parser.of_sexp sexp with + | Ok r -> Ok r + | Error (Parser.ParseError s) -> Error (Exec.ParseError s) + + let execute storage db ast = + Exec.execute storage db ast + |> Result.map (function + | Executor.Batch { cursor_id; rows; has_more } -> + Sublanguage.Cursor { cursor_id; rows; has_more } + | Executor.Closed db -> + Sublanguage.Transition (db, "cursor closed")) + + let sexp_of_error = Exec.sexp_of_error +end + +module Memory = Make(Management.Physical.Memory) -- cgit v1.2.3