1#![deny(missing_docs)]
7
8mod aggregate;
9mod codec;
10mod scalar;
11
12use aggregate::{AggregateKind, RoaringAggregate};
13use datafusion_expr::{AggregateUDF, ScalarUDF};
14use scalar::{RoaringScalar, ScalarKind};
15
16pub use codec::{decode_bitmap, encode_bitmap};
17
18pub fn roaring_agg_udaf() -> AggregateUDF {
20 AggregateUDF::from(RoaringAggregate::new("roaring_agg", AggregateKind::Values))
21}
22
23pub fn roaring_or_agg_udaf() -> AggregateUDF {
25 AggregateUDF::from(RoaringAggregate::new(
26 "roaring_or_agg",
27 AggregateKind::Union,
28 ))
29}
30
31pub fn all_udafs() -> Vec<AggregateUDF> {
33 vec![
34 roaring_agg_udaf(),
35 roaring_or_agg_udaf(),
36 AggregateUDF::from(RoaringAggregate::new(
37 "roaring_union_agg",
38 AggregateKind::Union,
39 )),
40 ]
41}
42
43fn scalar(name: &'static str, kind: ScalarKind) -> ScalarUDF {
44 ScalarUDF::from(RoaringScalar::new(name, kind))
45}
46
47pub fn roaring_cardinality_udf() -> ScalarUDF {
49 scalar("roaring_cardinality", ScalarKind::Cardinality)
50}
51
52pub fn roaring_contains_udf() -> ScalarUDF {
54 scalar("roaring_contains", ScalarKind::Contains)
55}
56
57pub fn roaring_union_udf() -> ScalarUDF {
59 scalar("roaring_union", ScalarKind::Union)
60}
61
62pub fn roaring_intersection_udf() -> ScalarUDF {
64 scalar("roaring_intersection", ScalarKind::Intersection)
65}
66
67pub fn roaring_difference_udf() -> ScalarUDF {
69 scalar("roaring_difference", ScalarKind::Difference)
70}
71
72pub fn roaring_xor_udf() -> ScalarUDF {
74 scalar("roaring_xor", ScalarKind::Xor)
75}
76
77pub fn all_udfs() -> Vec<ScalarUDF> {
79 use ScalarKind::*;
80 [
81 ("roaring_cardinality", Cardinality),
82 ("roaring_contains", Contains),
83 ("roaring_min", Min),
84 ("roaring_max", Max),
85 ("roaring_rank", Rank),
86 ("roaring_select", Select),
87 ("roaring_is_empty", IsEmpty),
88 ("roaring_serialized_size", SerializedSize),
89 ("roaring_contains_range", ContainsRange),
90 ("roaring_range_cardinality", RangeCardinality),
91 ("roaring_empty", Empty),
92 ("roaring_from_range", FromRange),
93 ("roaring_from_uint_list", FromList),
94 ("roaring_or", Union),
95 ("roaring_union", Union),
96 ("roaring_and", Intersection),
97 ("roaring_intersection", Intersection),
98 ("roaring_xor", Xor),
99 ("roaring_symmetric_difference", Xor),
100 ("roaring_andnot", Difference),
101 ("roaring_difference", Difference),
102 ("roaring_union_cardinality", UnionCardinality),
103 ("roaring_or_cardinality", UnionCardinality),
104 ("roaring_intersection_cardinality", IntersectionCardinality),
105 ("roaring_and_cardinality", IntersectionCardinality),
106 ("roaring_symmetric_difference_cardinality", XorCardinality),
107 ("roaring_xor_cardinality", XorCardinality),
108 ("roaring_difference_cardinality", DifferenceCardinality),
109 ("roaring_andnot_cardinality", DifferenceCardinality),
110 ("roaring_intersects", Intersects),
111 ("roaring_is_disjoint", IsDisjoint),
112 ("roaring_is_subset", IsSubset),
113 ("roaring_is_superset", IsSuperset),
114 ("roaring_insert", Insert),
115 ("roaring_remove", Remove),
116 ("roaring_insert_range", InsertRange),
117 ("roaring_remove_range", RemoveRange),
118 ("roaring_is_valid", IsValid),
119 ("roaring_validate", Validate),
120 ("roaring_to_uint_list", ToList),
121 ]
122 .into_iter()
123 .map(|(name, kind)| scalar(name, kind))
124 .collect()
125}