(
set: &TypedValue,
headers_types: &HeadersTypes,
has_column_masks: bool,
)
| 72 | } |
| 73 | |
| 74 | fn extract_columns( |
| 75 | set: &TypedValue, |
| 76 | headers_types: &HeadersTypes, |
| 77 | has_column_masks: bool, |
| 78 | ) -> Result<ColumnsMap> { |
| 79 | let mut header_index_map = HashMap::new(); |
| 80 | let mut columns_data = vec![]; |
| 81 | let mut columns_masks = vec![]; |
| 82 | let mut elements_per_row = vec![]; |
| 83 | let mut null_column = vec![]; |
| 84 | let set_columns = set.value.to_vector()?; |
| 85 | let mut ind = 0; |
| 86 | for (i, (header, sub_t)) in headers_types.iter().enumerate() { |
| 87 | if header == NULL_HEADER { |
| 88 | null_column = set_columns[i].to_flattened_array_u8((**sub_t).clone())?; |
| 89 | continue; |
| 90 | } |
| 91 | let column_type = ColumnType::new((**sub_t).clone(), has_column_masks, header)?; |
| 92 | if has_column_masks { |
| 93 | let column_mask_data = set_columns[i].to_vector()?; |
| 94 | let mask = column_mask_data[0].clone(); |
| 95 | let data = column_mask_data[1].clone(); |
| 96 | let column_mask = mask.to_flattened_array_u8(column_type.get_mask_type()?)?; |
| 97 | let column_data = data.to_flattened_array_u128(column_type.get_data_type())?; |
| 98 | columns_masks.push(column_mask); |
| 99 | columns_data.push(column_data); |
| 100 | } else { |
| 101 | let column_data = |
| 102 | set_columns[i].to_flattened_array_u128(column_type.get_data_type())?; |
| 103 | columns_data.push(column_data); |
| 104 | } |
| 105 | elements_per_row.push(column_type.get_row_size_in_elements()); |
| 106 | header_index_map.insert((*header).clone(), ind); |
| 107 | ind += 1; |
| 108 | } |
| 109 | |
| 110 | Ok(ColumnsMap { |
| 111 | header_index_map, |
| 112 | null_column, |
| 113 | columns_masks, |
| 114 | columns_data, |
| 115 | elements_per_row, |
| 116 | }) |
| 117 | } |
| 118 | |
| 119 | impl ColumnsMap { |
| 120 | fn init_result_columns(join_input: &JoinInput) -> Result<Self> { |
no test coverage detected