Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pola-rs
GitHub Repository: pola-rs/polars
Path: blob/main/crates/polars-plan/src/plans/aexpr/hash.rs
6940 views
1
use std::hash::{Hash, Hasher};
2
3
use polars_utils::arena::{Arena, Node};
4
5
use crate::plans::ArenaExprIter;
6
use crate::prelude::AExpr;
7
8
impl Hash for AExpr {
9
// This hashes the variant, not the whole expression
10
fn hash<H: Hasher>(&self, state: &mut H) {
11
std::mem::discriminant(self).hash(state);
12
13
match self {
14
AExpr::Column(name) => name.hash(state),
15
AExpr::Literal(lv) => lv.hash(state),
16
AExpr::Function {
17
options, function, ..
18
} => {
19
options.hash(state);
20
function.hash(state)
21
},
22
AExpr::AnonymousFunction { options, .. } => {
23
options.hash(state);
24
},
25
AExpr::Agg(agg) => agg.hash(state),
26
AExpr::SortBy { sort_options, .. } => sort_options.hash(state),
27
AExpr::Cast {
28
options: strict, ..
29
} => strict.hash(state),
30
AExpr::Window { options, .. } => options.hash(state),
31
AExpr::BinaryExpr { op, .. } => op.hash(state),
32
_ => {},
33
}
34
}
35
}
36
37
pub(crate) fn traverse_and_hash_aexpr<H: Hasher>(
38
node: Node,
39
expr_arena: &Arena<AExpr>,
40
state: &mut H,
41
) {
42
for (_, ae) in expr_arena.iter(node) {
43
ae.hash(state);
44
}
45
}
46
47