use shape_runtime::context::ExecutionContext;
use shape_value::{KindedSlot, VMError};
use crate::executor::VirtualMachine;
pub(crate) fn handle_inner_join(
_vm: &mut VirtualMachine,
_args: &[KindedSlot],
_ctx: Option<&mut ExecutionContext>,
) -> Result<KindedSlot, VMError> {
Err(VMError::NotImplemented(
"datatable.innerJoin — SURFACE: §2.7.4 cross-cluster cascade. \
Closure-callback dispatch (key extractors + resultSelector) is \
live via W7 §2.7.11/Q12 vm.call_value_immediate_nb; the gate is \
the result-DataTable construction from closure-returned \
TypedObject rows (property-access cluster territory) and the \
W8-WJ JoinExecute opcode boundary (window_join.rs:479-487). \
Single-edit unblock once property-access lands."
.to_string(),
))
}
pub(crate) fn handle_left_join(
_vm: &mut VirtualMachine,
_args: &[KindedSlot],
_ctx: Option<&mut ExecutionContext>,
) -> Result<KindedSlot, VMError> {
Err(VMError::NotImplemented(
"datatable.leftJoin — SURFACE: §2.7.4 cross-cluster cascade. \
Same shape as innerJoin: closure-callback dispatch is live but \
the result-DataTable construction (TypedObject row → DataTable \
schema + columns) crosses into property-access cluster \
territory. The unmatched-row branch additionally needs an \
empty-TypedObject argument to the result selector — kinded \
construction lands with the property-access cluster body \
migration. W8-WJ JoinExecute opcode (window_join.rs:479-487) \
is the second consumer that unblocks together."
.to_string(),
))
}