Path: blob/main/crates/polars-plan/src/plans/aexpr/hash.rs
6940 views
use std::hash::{Hash, Hasher};12use polars_utils::arena::{Arena, Node};34use crate::plans::ArenaExprIter;5use crate::prelude::AExpr;67impl Hash for AExpr {8// This hashes the variant, not the whole expression9fn hash<H: Hasher>(&self, state: &mut H) {10std::mem::discriminant(self).hash(state);1112match self {13AExpr::Column(name) => name.hash(state),14AExpr::Literal(lv) => lv.hash(state),15AExpr::Function {16options, function, ..17} => {18options.hash(state);19function.hash(state)20},21AExpr::AnonymousFunction { options, .. } => {22options.hash(state);23},24AExpr::Agg(agg) => agg.hash(state),25AExpr::SortBy { sort_options, .. } => sort_options.hash(state),26AExpr::Cast {27options: strict, ..28} => strict.hash(state),29AExpr::Window { options, .. } => options.hash(state),30AExpr::BinaryExpr { op, .. } => op.hash(state),31_ => {},32}33}34}3536pub(crate) fn traverse_and_hash_aexpr<H: Hasher>(37node: Node,38expr_arena: &Arena<AExpr>,39state: &mut H,40) {41for (_, ae) in expr_arena.iter(node) {42ae.hash(state);43}44}454647