blob: d1407016eda3cb3e8ffec4318392adb2fb37a7bc [file]
// Licensed to the Apache Software Foundation (ASF) under one or more
// contributor license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright ownership.
// The ASF licenses this file to You under the Apache License, Version 2.0
// (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
use arrow::array::{Array, BooleanArray};
/// Returns a BooleanArray where nulls are converted to `false` and the result
/// has no null bitmap (all values are valid).
#[inline]
pub fn nulls_to_false(is_boolean: &BooleanArray) -> BooleanArray {
match is_boolean.nulls() {
Some(nulls) => {
let is_not_null = nulls.inner();
BooleanArray::new(is_boolean.values() & is_not_null, None)
}
None => is_boolean.clone(),
}
}
#[cfg(test)]
mod tests {
use arrow::array::{Array, BooleanArray};
use super::nulls_to_false;
#[test]
fn converts_nulls_to_false() {
let input = BooleanArray::from(vec![Some(true), None, Some(false)]);
let output = nulls_to_false(&input);
assert!(output.nulls().is_none());
let got: Vec<Option<bool>> = output.iter().collect();
let expected = vec![Some(true), Some(false), Some(false)];
assert_eq!(got, expected);
}
#[test]
fn preserves_when_no_nulls() {
let input = BooleanArray::from(vec![Some(false), Some(true)]);
let output = nulls_to_false(&input);
assert!(output.nulls().is_none());
let got: Vec<Option<bool>> = output.iter().collect();
let expected = vec![Some(false), Some(true)];
assert_eq!(got, expected);
}
}