From 6dc20bf7ad8569814ed4020c6d78b4b1f19633f9 Mon Sep 17 00:00:00 2001 From: Priec Date: Mon, 7 Sep 2026 00:44:26 +0200 Subject: [PATCH] account full path in the tantivy --- client | 2 +- client-gui2 | 2 +- search/src/lib.rs | 43 ++++++++----------------------------------- server | 2 +- 4 files changed, 11 insertions(+), 38 deletions(-) diff --git a/client b/client index 15deef12..4ef069e7 160000 --- a/client +++ b/client @@ -1 +1 @@ -Subproject commit 15deef127283e7fd1146ed53cc788aa56add7fc5 +Subproject commit 4ef069e7b1972dd4b4e7fdb2bb6db6512eda29c3 diff --git a/client-gui2 b/client-gui2 index 7511ef2a..782877f6 160000 --- a/client-gui2 +++ b/client-gui2 @@ -1 +1 @@ -Subproject commit 7511ef2a37ad921150ac067c5921302f34d1785c +Subproject commit 782877f62aa4523c6c1dee718b38b3c611c5dad4 diff --git a/search/src/lib.rs b/search/src/lib.rs index 4c7e3056..315d9370 100644 --- a/search/src/lib.rs +++ b/search/src/lib.rs @@ -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 = 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, diff --git a/server b/server index 19d6545e..c51ead9a 160000 --- a/server +++ b/server @@ -1 +1 @@ -Subproject commit 19d6545ed4507601127ca3f51f17162504885afd +Subproject commit c51ead9a190add6150e10d96e34b1359c1d73306