server: catalog v1

This commit is contained in:
nym21
2025-10-06 12:52:18 +02:00
parent 1c6ece48a8
commit db344749b6
12 changed files with 344 additions and 76 deletions

View File

@@ -11,7 +11,7 @@ use crate::{Indexes, grouped::LazyVecsBuilder, indexes};
use super::{ComputedType, EagerVecsBuilder, Source, VecBuilderOptions};
#[derive(Clone, Traversable, Allocative)]
#[derive(Clone, Allocative)]
pub struct ComputedVecsFromDateIndex<T>
where
T: ComputedType + PartialOrd,
@@ -144,3 +144,42 @@ where
Ok(())
}
}
impl<T> Traversable for ComputedVecsFromDateIndex<T>
where
T: ComputedType,
{
fn to_tree_node(&self) -> brk_traversable::TreeNode {
brk_traversable::TreeNode::List(
[
self.dateindex.as_ref().map(|nested| nested.to_tree_node()),
Some(self.dateindex_extra.to_tree_node()),
Some(self.weekindex.to_tree_node()),
Some(self.monthindex.to_tree_node()),
Some(self.quarterindex.to_tree_node()),
Some(self.semesterindex.to_tree_node()),
Some(self.yearindex.to_tree_node()),
Some(self.decadeindex.to_tree_node()),
]
.into_iter()
.flatten()
.collect(),
)
.collect_unique_leaves()
}
fn iter_any_collectable(&self) -> impl Iterator<Item = &dyn vecdb::AnyCollectableVec> {
let mut regular_iter: Box<dyn Iterator<Item = &dyn vecdb::AnyCollectableVec>> =
Box::new(self.dateindex_extra.iter_any_collectable());
regular_iter = Box::new(regular_iter.chain(self.weekindex.iter_any_collectable()));
regular_iter = Box::new(regular_iter.chain(self.monthindex.iter_any_collectable()));
regular_iter = Box::new(regular_iter.chain(self.quarterindex.iter_any_collectable()));
regular_iter = Box::new(regular_iter.chain(self.semesterindex.iter_any_collectable()));
regular_iter = Box::new(regular_iter.chain(self.yearindex.iter_any_collectable()));
regular_iter = Box::new(regular_iter.chain(self.decadeindex.iter_any_collectable()));
if let Some(ref x) = self.dateindex {
regular_iter = Box::new(regular_iter.chain(x.iter_any_collectable()));
}
regular_iter
}
}

View File

@@ -16,7 +16,7 @@ use crate::{
use super::{ComputedType, EagerVecsBuilder, VecBuilderOptions};
#[derive(Clone, Traversable, Allocative)]
#[derive(Clone, Allocative)]
pub struct ComputedVecsFromHeight<T>
where
T: ComputedType + PartialOrd,
@@ -200,3 +200,46 @@ where
Ok(())
}
}
impl<T> Traversable for ComputedVecsFromHeight<T>
where
T: ComputedType,
{
fn to_tree_node(&self) -> brk_traversable::TreeNode {
brk_traversable::TreeNode::List(
[
self.height.as_ref().map(|nested| nested.to_tree_node()),
Some(self.height_extra.to_tree_node()),
Some(self.dateindex.to_tree_node()),
Some(self.weekindex.to_tree_node()),
Some(self.difficultyepoch.to_tree_node()),
Some(self.monthindex.to_tree_node()),
Some(self.quarterindex.to_tree_node()),
Some(self.semesterindex.to_tree_node()),
Some(self.yearindex.to_tree_node()),
Some(self.decadeindex.to_tree_node()),
]
.into_iter()
.flatten()
.collect(),
)
.collect_unique_leaves()
}
fn iter_any_collectable(&self) -> impl Iterator<Item = &dyn vecdb::AnyCollectableVec> {
let mut regular_iter: Box<dyn Iterator<Item = &dyn vecdb::AnyCollectableVec>> =
Box::new(self.height_extra.iter_any_collectable());
regular_iter = Box::new(regular_iter.chain(self.dateindex.iter_any_collectable()));
regular_iter = Box::new(regular_iter.chain(self.weekindex.iter_any_collectable()));
regular_iter = Box::new(regular_iter.chain(self.difficultyepoch.iter_any_collectable()));
regular_iter = Box::new(regular_iter.chain(self.monthindex.iter_any_collectable()));
regular_iter = Box::new(regular_iter.chain(self.quarterindex.iter_any_collectable()));
regular_iter = Box::new(regular_iter.chain(self.semesterindex.iter_any_collectable()));
regular_iter = Box::new(regular_iter.chain(self.yearindex.iter_any_collectable()));
regular_iter = Box::new(regular_iter.chain(self.decadeindex.iter_any_collectable()));
if let Some(ref x) = self.height {
regular_iter = Box::new(regular_iter.chain(x.iter_any_collectable()));
}
regular_iter
}
}

View File

@@ -8,7 +8,7 @@ use crate::{Indexes, indexes};
use super::{ComputedType, EagerVecsBuilder, VecBuilderOptions};
#[derive(Clone, Traversable)]
#[derive(Clone)]
pub struct ComputedVecsFromHeightStrict<T>
where
T: ComputedType + PartialOrd,
@@ -83,3 +83,29 @@ where
Ok(())
}
}
impl<T> Traversable for ComputedVecsFromHeightStrict<T>
where
T: ComputedType,
{
fn to_tree_node(&self) -> brk_traversable::TreeNode {
brk_traversable::TreeNode::List(
[
Some(self.height.to_tree_node()),
Some(self.height_extra.to_tree_node()),
Some(self.difficultyepoch.to_tree_node()),
]
.into_iter()
.flatten()
.collect(),
)
.collect_unique_leaves()
}
fn iter_any_collectable(&self) -> impl Iterator<Item = &dyn vecdb::AnyCollectableVec> {
let mut regular_iter: Box<dyn Iterator<Item = &dyn vecdb::AnyCollectableVec>> =
Box::new(self.height.iter_any_collectable());
regular_iter = Box::new(regular_iter.chain(self.height_extra.iter_any_collectable()));
regular_iter = Box::new(regular_iter.chain(self.difficultyepoch.iter_any_collectable()));
regular_iter
}
}

View File

@@ -19,7 +19,7 @@ use crate::{
use super::{ComputedType, EagerVecsBuilder, VecBuilderOptions};
#[derive(Clone, Traversable, Allocative)]
#[derive(Clone, Allocative)]
pub struct ComputedVecsFromTxindex<T>
where
T: ComputedType + PartialOrd,
@@ -587,3 +587,46 @@ impl ComputedVecsFromTxindex<Dollars> {
self.compute_after_height(indexes, starting_indexes, exit)
}
}
impl<T> Traversable for ComputedVecsFromTxindex<T>
where
T: ComputedType,
{
fn to_tree_node(&self) -> brk_traversable::TreeNode {
brk_traversable::TreeNode::List(
[
self.txindex.as_ref().map(|nested| nested.to_tree_node()),
Some(self.height.to_tree_node()),
Some(self.dateindex.to_tree_node()),
Some(self.weekindex.to_tree_node()),
Some(self.difficultyepoch.to_tree_node()),
Some(self.monthindex.to_tree_node()),
Some(self.quarterindex.to_tree_node()),
Some(self.semesterindex.to_tree_node()),
Some(self.yearindex.to_tree_node()),
Some(self.decadeindex.to_tree_node()),
]
.into_iter()
.flatten()
.collect(),
)
.collect_unique_leaves()
}
fn iter_any_collectable(&self) -> impl Iterator<Item = &dyn vecdb::AnyCollectableVec> {
let mut regular_iter: Box<dyn Iterator<Item = &dyn vecdb::AnyCollectableVec>> =
Box::new(self.height.iter_any_collectable());
regular_iter = Box::new(regular_iter.chain(self.dateindex.iter_any_collectable()));
regular_iter = Box::new(regular_iter.chain(self.weekindex.iter_any_collectable()));
regular_iter = Box::new(regular_iter.chain(self.difficultyepoch.iter_any_collectable()));
regular_iter = Box::new(regular_iter.chain(self.monthindex.iter_any_collectable()));
regular_iter = Box::new(regular_iter.chain(self.quarterindex.iter_any_collectable()));
regular_iter = Box::new(regular_iter.chain(self.semesterindex.iter_any_collectable()));
regular_iter = Box::new(regular_iter.chain(self.yearindex.iter_any_collectable()));
regular_iter = Box::new(regular_iter.chain(self.decadeindex.iter_any_collectable()));
if let Some(ref x) = self.txindex {
regular_iter = Box::new(regular_iter.chain(x.iter_any_collectable()));
}
regular_iter
}
}

View File

@@ -470,7 +470,7 @@ impl Vecs {
vecs,
by_size_range
.iter()
.filter(|other| other.includes(filter))
.filter(|Filtered(other, _)| filter.includes(other))
.map(Filtered::t)
.collect::<Vec<_>>(),
)
@@ -484,7 +484,7 @@ impl Vecs {
vecs,
by_size_range
.iter()
.filter(|other| other.includes(filter))
.filter(|Filtered(other, _)| filter.includes(other))
.map(Filtered::t)
.collect::<Vec<_>>(),
)

View File

@@ -1647,7 +1647,7 @@ impl Vecs {
vecs,
by_date_range
.iter()
.filter(|other| other.includes(filter))
.filter(|Filtered(other, _)| filter.includes(other))
.map(Filtered::t)
.collect::<Vec<_>>(),
)
@@ -1657,7 +1657,7 @@ impl Vecs {
vecs,
by_date_range
.iter()
.filter(|other| other.includes(filter))
.filter(|Filtered(other, _)| filter.includes(other))
.map(Filtered::t)
.collect::<Vec<_>>(),
)
@@ -1667,7 +1667,7 @@ impl Vecs {
vecs,
by_date_range
.iter()
.filter(|other| other.includes(filter))
.filter(|Filtered(other, _)| filter.includes(other))
.map(Filtered::t)
.collect::<Vec<_>>(),
)
@@ -1677,7 +1677,7 @@ impl Vecs {
vecs,
by_size_range
.iter()
.filter(|other| other.includes(filter))
.filter(|Filtered(other, _)| filter.includes(other))
.map(Filtered::t)
.collect::<Vec<_>>(),
)
@@ -1687,7 +1687,7 @@ impl Vecs {
vecs,
by_size_range
.iter()
.filter(|other| other.includes(filter))
.filter(|Filtered(other, _)| filter.includes(other))
.map(Filtered::t)
.collect::<Vec<_>>(),
)