Execute a single MATCH clause.
(
clause: &MatchClause,
csr: &CsrIndex,
input_rows: &[BindingRow],
state: &mut ExecutionState,
frontier_bitmap: Option<&nodedb_types::SurrogateBitmap>,
)
| 129 | |
| 130 | /// Execute a single MATCH clause. |
| 131 | pub(super) fn execute_clause( |
| 132 | clause: &MatchClause, |
| 133 | csr: &CsrIndex, |
| 134 | input_rows: &[BindingRow], |
| 135 | state: &mut ExecutionState, |
| 136 | frontier_bitmap: Option<&nodedb_types::SurrogateBitmap>, |
| 137 | ) -> Result<Vec<BindingRow>, crate::Error> { |
| 138 | let mut result_rows = input_rows.to_vec(); |
| 139 | |
| 140 | for chain in &clause.patterns { |
| 141 | let mut next_rows = Vec::new(); |
| 142 | for row in &result_rows { |
| 143 | next_rows.extend(execute_chain(chain, csr, row, state, frontier_bitmap)?); |
| 144 | } |
| 145 | result_rows = next_rows; |
| 146 | } |
| 147 | |
| 148 | Ok(result_rows) |
| 149 | } |
| 150 | |
| 151 | /// Execute a single pattern chain against a binding row. |
| 152 | fn execute_chain( |
no test coverage detected