diff options
| author | Estevan Castilho <tevo@riajuu.net> | 2026-06-04 02:17:34 +0000 |
|---|---|---|
| committer | Estevan Castilho <tevo@riajuu.net> | 2026-06-13 00:28:12 +0000 |
| commit | ed1c73f5a05d9630c1bd1216d97d38b97f23bbc6 (patch) | |
| tree | 9b1f2cd581a742f3ea1ee55fa565ba24f53ebb83 | |
| parent | bf23291e86fc2114ebad38f9493f0a02a4199fb8 (diff) | |
| download | Sakura-ed1c73f5a05d9630c1bd1216d97d38b97f23bbc6.tar.gz Sakura-ed1c73f5a05d9630c1bd1216d97d38b97f23bbc6.zip | |
Also send the attributes to join on over to the NT sideproper-joins
| -rw-r--r-- | flake.lock | 12 | ||||
| -rw-r--r-- | flake.nix | 5 | ||||
| -rw-r--r-- | lib/nt.ml | 18 | ||||
| -rw-r--r-- | lib/nt_ffi.ml | 12 |
4 files changed, 29 insertions, 18 deletions
@@ -8,16 +8,16 @@ "picosha2": "picosha2" }, "locked": { - "lastModified": 1780706444, - "narHash": "sha256-POVEukSjJOs/oud/HiQZEOR5M6ZMlrhsXIteKAS2bCw=", - "owner": "mmagueta", + "lastModified": 1780718185, + "narHash": "sha256-8i/mzt09/eHzH6/y7ao9NdFuXYT1Ytd5FQDZyeOYp+U=", + "owner": "dont-rely-on-nulls", "repo": "RNT", - "rev": "5174fc25698cff33b03b5746bf1742e417988f7d", + "rev": "5a014455ee9e4e25480fc7569f2e655f14ac5360", "type": "github" }, "original": { - "owner": "mmagueta", - "ref": "5174fc2", + "owner": "dont-rely-on-nulls", + "ref": "5a01445", "repo": "RNT", "type": "github" } @@ -4,11 +4,12 @@ nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; flake-utils.url = "github:numtide/flake-utils"; nix-filter.url = "github:numtide/nix-filter"; + # RNT.url = "path:/home/tevo/var/src/RNT"; RNT = { type = "github"; - owner = "mmagueta"; + owner = "dont-rely-on-nulls"; repo = "RNT"; - ref = "5174fc2"; + ref = "5a01445"; inputs.nixpkgs.follows = "nixpkgs"; }; }; @@ -305,19 +305,23 @@ module Make (B : Backend) = struct (match Nt_ffi.ptr_to_opt raw with | None -> Error (Error.cursor_error ("plan_scan failed for path: " ^ path)) | Some p -> Ok p) - | Join { left; right; _ } -> + | Join { left; right; on_attrs } -> let* lp = build_plan left in (match build_plan right with | Error e -> Nt_ffi.rnt_plan_free (Nt_ffi.nint_to_ptr lp); Error e | Ok rp -> - let raw = Nt_ffi.rnt_plan_join - (Nt_ffi.nint_to_ptr lp) (Nt_ffi.nint_to_ptr rp) in - (* join takes ownership of both children — no manual free needed *) - (match Nt_ffi.ptr_to_opt raw with - | None -> Error (Error.cursor_error "plan_join failed") - | Some p -> Ok p)) + Nt_ffi.with_strings_as_char_array on_attrs (fun on_attrs' -> + let raw = Nt_ffi.rnt_plan_join + (Nt_ffi.nint_to_ptr lp) + (Nt_ffi.nint_to_ptr rp) + on_attrs' + in + (* join takes ownership of both children — no manual free needed *) + (match Nt_ffi.ptr_to_opt raw with + | None -> Error (Error.cursor_error "plan_join failed") + | Some p -> Ok p))) | Take { limit; source } -> let* sp = build_plan source in let raw = Nt_ffi.rnt_plan_take diff --git a/lib/nt_ffi.ml b/lib/nt_ffi.ml index 5937375..33369b1 100644 --- a/lib/nt_ffi.ml +++ b/lib/nt_ffi.ml @@ -104,6 +104,7 @@ type plan_args_join let plan_args_join : plan_args_join structure typ = structure "plan_args_join" let paj_left = field plan_args_join "paj_left" (ptr void) let paj_right = field plan_args_join "paj_right" (ptr void) +let paj_attrs = field plan_args_join "paj_attrs" (ptr (ptr char)) let () = seal plan_args_join type plan_args_take @@ -137,11 +138,12 @@ let rnt_plan_scan str = setf (plan &-> pa_scan) pas_relation_path str; rnt_plan_assemble plan -let rnt_plan_join left right = +let rnt_plan_join left right attrs = let plan = make plan_action in setf plan pa_operation Join; setf (plan &-> pa_join) paj_left left; setf (plan &-> pa_join) paj_right right; + setf (plan &-> pa_join) paj_attrs attrs; rnt_plan_assemble plan let rnt_plan_take source limit = @@ -151,8 +153,12 @@ let rnt_plan_take source limit = setf (plan &-> pa_take) pat_limit limit; rnt_plan_assemble plan -let rnt_plan_project = - fn "rnt_plan_project" (ptr void @-> ptr (ptr char) @-> returning (ptr void)) +let rnt_plan_project source attrs = + let plan = make plan_action in + setf plan pa_operation Project; + setf (plan &-> pa_project) pap_source source; + setf (plan &-> pa_project) pap_attrs attrs; + rnt_plan_assemble plan let rnt_plan_free = fn "rnt_plan_free" (ptr void @-> returning void) |
