Append a value. Returns error if type doesn't match.
(
&mut self,
value: &Value,
col_name: &str,
col_type: &ColumnType,
)
| 95 | |
| 96 | /// Append a value. Returns error if type doesn't match. |
| 97 | pub(crate) fn push( |
| 98 | &mut self, |
| 99 | value: &Value, |
| 100 | col_name: &str, |
| 101 | col_type: &ColumnType, |
| 102 | ) -> Result<(), ColumnarError> { |
| 103 | match (self, value) { |
| 104 | (Self::Int64 { values, valid }, Value::Null) => { |
| 105 | values.push(0); |
| 106 | Self::push_valid(valid, false); |
| 107 | } |
| 108 | (Self::Float64 { values, valid }, Value::Null) => { |
| 109 | values.push(0.0); |
| 110 | Self::push_valid(valid, false); |
| 111 | } |
| 112 | (Self::Bool { values, valid }, Value::Null) => { |
| 113 | values.push(false); |
| 114 | Self::push_valid(valid, false); |
| 115 | } |
| 116 | (Self::Timestamp { values, valid }, Value::Null) => { |
| 117 | values.push(0); |
| 118 | Self::push_valid(valid, false); |
| 119 | } |
| 120 | (Self::Decimal { values, valid }, Value::Null) => { |
| 121 | values.push([0u8; 16]); |
| 122 | Self::push_valid(valid, false); |
| 123 | } |
| 124 | (Self::Uuid { values, valid }, Value::Null) => { |
| 125 | values.push([0u8; 16]); |
| 126 | Self::push_valid(valid, false); |
| 127 | } |
| 128 | (Self::String { offsets, valid, .. }, Value::Null) => { |
| 129 | offsets.push(*offsets.last().unwrap_or(&0)); |
| 130 | Self::push_valid(valid, false); |
| 131 | } |
| 132 | (Self::Bytes { offsets, valid, .. }, Value::Null) => { |
| 133 | offsets.push(*offsets.last().unwrap_or(&0)); |
| 134 | Self::push_valid(valid, false); |
| 135 | } |
| 136 | (Self::Geometry { offsets, valid, .. }, Value::Null) => { |
| 137 | offsets.push(*offsets.last().unwrap_or(&0)); |
| 138 | Self::push_valid(valid, false); |
| 139 | } |
| 140 | (Self::Vector { data, dim, valid }, Value::Null) => { |
| 141 | data.extend(std::iter::repeat_n(0.0f32, *dim as usize)); |
| 142 | Self::push_valid(valid, false); |
| 143 | } |
| 144 | (Self::Int64 { values, valid }, Value::Integer(v)) => { |
| 145 | values.push(*v); |
| 146 | Self::push_valid(valid, true); |
| 147 | } |
| 148 | (Self::Float64 { values, valid }, Value::Float(v)) => { |
| 149 | values.push(*v); |
| 150 | Self::push_valid(valid, true); |
| 151 | } |
| 152 | (Self::Float64 { values, valid }, Value::Integer(v)) => { |
| 153 | values.push(*v as f64); |
| 154 | Self::push_valid(valid, true); |
no test coverage detected