Path: blob/main/crates/polars-parquet/src/arrow/read/deserialize/primitive/plain/predicate.rs
8485 views
use arrow::bitmap::BitmapBuilder;1use arrow::types::AlignedBytes;23use super::ArrayChunks;45#[inline(never)]6pub fn decode_equals<B: AlignedBytes>(7values: ArrayChunks<'_, B>,8needle: B,9pred_true_mask: &mut BitmapBuilder,10) {11pred_true_mask.reserve(values.len());12for &v in values {13let is_pred_true = B::from_unaligned(v) == needle;1415// SAFETY: We reserved enough before the loop.16unsafe {17pred_true_mask.push_unchecked(is_pred_true);18}19}20}2122#[inline(never)]23pub fn decode_between<B: AlignedBytes>(24values: ArrayChunks<'_, B>,25low1: B,26high1: B,27low2: B,28high2: B,29pred_true_mask: &mut BitmapBuilder,30) {31pred_true_mask.reserve(values.len());32for &v in values {33let v = B::from_unaligned(v);34let in_interval1 = (low1.unsigned_leq(v)) & (v.unsigned_leq(high1));35let in_interval2 = (low2.unsigned_leq(v)) & (v.unsigned_leq(high2));3637let is_pred_true = in_interval1 | in_interval2;3839// SAFETY: We reserved enough before the loop.40unsafe {41pred_true_mask.push_unchecked(is_pred_true);42}43}44}4546#[inline(never)]47pub fn decode_is_in<B: AlignedBytes>(48values: ArrayChunks<'_, B>,49needle: &[B; 8],50pred_true_mask: &mut BitmapBuilder,51) {52pred_true_mask.reserve(values.len());53for &v in values {54let is_pred_true = needle.contains(&B::from_unaligned(v));5556// SAFETY: We reserved enough before the loop.57unsafe {58pred_true_mask.push_unchecked(is_pred_true);59}60}61}626364