account full path in the tantivy

This commit is contained in:
Priec
2026-09-07 00:44:26 +02:00
parent 1ccde44c00
commit 6dc20bf7ad
4 changed files with 11 additions and 38 deletions

2
client

Submodule client updated: 15deef1272...4ef069e7b1

View File

@@ -1,6 +1,6 @@
mod query_builder;
use std::collections::{BTreeMap, BTreeSet, HashMap, HashSet};
use std::collections::{HashMap, HashSet};
use std::path::Path;
use std::sync::{Arc, Mutex};
@@ -64,43 +64,16 @@ impl AccountPathProjection {
profile_name.replace('"', "\"\""),
LEDGER_ACCOUNTS_TABLE_NAME,
);
let rows = sqlx::query(AssertSqlSafe(format!(
"SELECT id, segment, parent_account_id FROM {qualified_accounts} WHERE deleted = FALSE"
let paths = sqlx::query_as::<_, (i64, String)>(AssertSqlSafe(format!(
"SELECT id, full_path
FROM {qualified_accounts}
WHERE deleted = FALSE"
)))
.fetch_all(pool)
.await
.map_err(|error| Status::internal(format!("Account path lookup failed: {error}")))?;
let mut nodes = BTreeMap::new();
for row in rows {
let id: i64 = row.try_get("id").map_err(|error| {
Status::internal(format!("Account id read failed: {error}"))
})?;
let segment: String = row.try_get("segment").map_err(|error| {
Status::internal(format!("Account segment read failed: {error}"))
})?;
let parent: Option<i64> = row.try_get("parent_account_id").map_err(|error| {
Status::internal(format!("Account parent read failed: {error}"))
})?;
nodes.insert(id, (segment, parent));
}
let mut paths = HashMap::new();
for &id in nodes.keys() {
let mut segments = Vec::new();
let mut visited = BTreeSet::new();
let mut current = Some(id);
while let Some(node_id) = current {
if !visited.insert(node_id) {
return Err(Status::internal("Stored account hierarchy contains a cycle"));
}
let (segment, parent) = nodes.get(&node_id).ok_or_else(|| {
Status::internal(format!("Account {node_id} was not found"))
})?;
segments.push(segment.clone());
current = *parent;
}
segments.reverse();
paths.insert(id, segments.join("/"));
}
.map_err(|error| Status::internal(format!("Account path lookup failed: {error}")))?
.into_iter()
.collect();
Ok(Self {
paths,
account_column,

2
server

Submodule server updated: 19d6545ed4...c51ead9a19