Project RETURN columns from rows.
(rows: &[BindingRow], columns: &[ReturnColumn])
| 102 | |
| 103 | /// Project RETURN columns from rows. |
| 104 | pub(super) fn project_columns(rows: &[BindingRow], columns: &[ReturnColumn]) -> Vec<BindingRow> { |
| 105 | rows.iter() |
| 106 | .map(|row| { |
| 107 | let mut projected = BindingRow::new(); |
| 108 | for col in columns { |
| 109 | let key = col.alias.as_deref().unwrap_or(&col.expr); |
| 110 | |
| 111 | let value = if let Some(dot) = col.expr.find('.') { |
| 112 | let binding = &col.expr[..dot]; |
| 113 | row.get(binding) |
| 114 | .cloned() |
| 115 | .unwrap_or_else(|| "NULL".to_string()) |
| 116 | } else { |
| 117 | row.get(&col.expr) |
| 118 | .cloned() |
| 119 | .unwrap_or_else(|| "NULL".to_string()) |
| 120 | }; |
| 121 | |
| 122 | projected.insert(key.to_string(), value); |
| 123 | } |
| 124 | projected |
| 125 | }) |
| 126 | .collect() |
| 127 | } |