Append a value. Returns error if type doesn't match.
(&mut self, value: &Value, col_name: &str)
| 132 | |
| 133 | /// Append a value. Returns error if type doesn't match. |
| 134 | pub(crate) fn push(&mut self, value: &Value, col_name: &str) -> Result<(), ColumnarError> { |
| 135 | match (self, value) { |
| 136 | (Self::Int64 { values, valid }, Value::Null) => { |
| 137 | values.push(0); |
| 138 | Self::push_valid(valid, false); |
| 139 | } |
| 140 | (Self::Float64 { values, valid }, Value::Null) => { |
| 141 | values.push(0.0); |
| 142 | Self::push_valid(valid, false); |
| 143 | } |
| 144 | (Self::Bool { values, valid }, Value::Null) => { |
| 145 | values.push(false); |
| 146 | Self::push_valid(valid, false); |
| 147 | } |
| 148 | (Self::Timestamp { values, valid }, Value::Null) => { |
| 149 | values.push(0); |
| 150 | Self::push_valid(valid, false); |
| 151 | } |
| 152 | (Self::Decimal { values, valid }, Value::Null) => { |
| 153 | values.push([0u8; 16]); |
| 154 | Self::push_valid(valid, false); |
| 155 | } |
| 156 | (Self::Uuid { values, valid }, Value::Null) => { |
| 157 | values.push([0u8; 16]); |
| 158 | Self::push_valid(valid, false); |
| 159 | } |
| 160 | (Self::String { offsets, valid, .. }, Value::Null) => { |
| 161 | offsets.push(*offsets.last().unwrap_or(&0)); |
| 162 | Self::push_valid(valid, false); |
| 163 | } |
| 164 | (Self::Bytes { offsets, valid, .. }, Value::Null) => { |
| 165 | offsets.push(*offsets.last().unwrap_or(&0)); |
| 166 | Self::push_valid(valid, false); |
| 167 | } |
| 168 | (Self::Geometry { offsets, valid, .. }, Value::Null) => { |
| 169 | offsets.push(*offsets.last().unwrap_or(&0)); |
| 170 | Self::push_valid(valid, false); |
| 171 | } |
| 172 | (Self::Vector { data, dim, valid }, Value::Null) => { |
| 173 | data.extend(std::iter::repeat_n(0.0f32, *dim as usize)); |
| 174 | Self::push_valid(valid, false); |
| 175 | } |
| 176 | (Self::Int64 { values, valid }, Value::Integer(v)) => { |
| 177 | values.push(*v); |
| 178 | Self::push_valid(valid, true); |
| 179 | } |
| 180 | (Self::Float64 { values, valid }, Value::Float(v)) => { |
| 181 | values.push(*v); |
| 182 | Self::push_valid(valid, true); |
| 183 | } |
| 184 | (Self::Float64 { values, valid }, Value::Integer(v)) => { |
| 185 | values.push(*v as f64); |
| 186 | Self::push_valid(valid, true); |
| 187 | } |
| 188 | (Self::Bool { values, valid }, Value::Bool(v)) => { |
| 189 | values.push(*v); |
| 190 | Self::push_valid(valid, true); |
| 191 | } |