harmos_domain/model/storage/query/transform/
aggregate.rs1use crate::model::storage::codec::{Nested, Repeated, Text, product};
22
23use super::FieldPath;
24use super::project::Projection;
25use crate::MemorySize;
26
27product!(Aggregate { groups: Repeated<Projection> => 1, measures: Repeated<Measure> => 2 });
32product!(Measure { field: Nested<FieldPath> => 1, statistic: Nested<crate::Aggregate> => 2, name: Text => 3 });
33
34#[derive(Clone, Debug)]
39pub struct Aggregate {
40 pub groups: Vec<Projection>,
41 pub measures: Vec<Measure>,
42}
43#[derive(Clone, Debug)]
44pub struct Measure {
45 pub field: FieldPath,
46 pub statistic: crate::Aggregate,
47 pub name: String,
48}
49
50impl MemorySize for Aggregate {
57 fn memory_size(&self) -> usize {
58 std::mem::size_of::<Self>()
59 + self.groups.memory_size().saturating_sub(std::mem::size_of_val(&self.groups))
60 + self.measures.memory_size().saturating_sub(std::mem::size_of_val(&self.measures))
61 }
62}
63impl MemorySize for Measure {
64 fn memory_size(&self) -> usize {
65 std::mem::size_of::<Self>() + self.field.memory_size().saturating_sub(std::mem::size_of_val(&self.field)) + self.name.capacity()
66 }
67}
68
69