aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEstevan Castilho <tevo@riajuu.net>2026-06-04 02:17:34 +0000
committerEstevan Castilho <tevo@riajuu.net>2026-06-13 00:28:12 +0000
commited1c73f5a05d9630c1bd1216d97d38b97f23bbc6 (patch)
tree9b1f2cd581a742f3ea1ee55fa565ba24f53ebb83
parentbf23291e86fc2114ebad38f9493f0a02a4199fb8 (diff)
downloadSakura-proper-joins.tar.gz
Sakura-proper-joins.zip
Also send the attributes to join on over to the NT sideproper-joins
Diffstat (limited to '')
-rw-r--r--flake.lock12
-rw-r--r--flake.nix5
-rw-r--r--lib/nt.ml18
-rw-r--r--lib/nt_ffi.ml12
4 files changed, 29 insertions, 18 deletions
diff --git a/flake.lock b/flake.lock
index 7bb3270..6fa1803 100644
--- a/flake.lock
+++ b/flake.lock
@@ -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"
}
diff --git a/flake.nix b/flake.nix
index 98c7044..19e1f04 100644
--- a/flake.nix
+++ b/flake.nix
@@ -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";
};
};
diff --git a/lib/nt.ml b/lib/nt.ml
index 41de1d0..a6f427a 100644
--- a/lib/nt.ml
+++ b/lib/nt.ml
@@ -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)