jvm.chisel.db.pipeline

Composed datapath for a placed logical plan: one Chisel module that chains the jvm.chisel.db operator fragments over the plan’s node DAG.

This is the physical half of the scheduler split (jvm.chisel.db.schedule is the logical/placement half). Plans are normalized by schedule/plan->nodes: a linear :stages plan is a node chain; a :nodes plan may fork (e.g. a join-build branch and a join-probe branch reading different sources).

values ──▶ scan/bloom (mask) ──▶ join-build (table) ─┐ values2 ─▶ scan (mask) ──▶ join-probe (mask) ◀────────┘ ──▶ reduce (scalar)

The composition idiom matches chisel.examples.db-primitives/scan-count-module: one module, fragments threaded in a let, no module-instance nesting.

IO (assembled from the nodes present): inputs : per source i: values/validMask for i = 0 (legacy names), else values2/validMask2, values3/validMask3, …; one constant c0..cK per scan predicate (global across scan nodes), bits (UInt M) when a bloom node is present. outputs: matchMask (UInt lanes) always, bucketslanes(UInt logB) when a :hash node is present, result (UInt ow) when a :reduce node is present.

pipeline-module

(pipeline-module {:keys [width lanes name], :as plan, :or {name "DbPipeline"}})

Build the composed module. opts = the plan map (see jvm.chisel.db.schedule for the node grammar) plus :name.

pipeline-ref

(pipeline-ref plan input)

Reference for the composed pipeline: delegates to schedule/run-plan.