summaryrefslogtreecommitdiffstats
path: root/atuin-client/src
diff options
context:
space:
mode:
authorDieter Eickstaedt <eickstaedt@deicon.de>2023-10-04 20:13:29 +0200
committerGitHub <noreply@github.com>2023-10-04 18:13:29 +0000
commitf25681d8b1acb49758e1c884e7a11a68df1d4a11 (patch)
tree8f26808dd387957aab659eda658b9bb3c944e0c2 /atuin-client/src
parent573ff69749f6fa75b46780cdc3d2d438c528b082 (diff)
Fix/1207 deleted entries shown in interactive search (#1272)
Diffstat (limited to 'atuin-client/src')
-rw-r--r--atuin-client/src/database.rs21
-rw-r--r--atuin-client/src/sync.rs6
2 files changed, 17 insertions, 10 deletions
diff --git a/atuin-client/src/database.rs b/atuin-client/src/database.rs
index 1a3dea16..c75a32ce 100644
--- a/atuin-client/src/database.rs
+++ b/atuin-client/src/database.rs
@@ -80,16 +80,17 @@ pub trait Database: Send + Sync + 'static {
context: &Context,
max: Option<usize>,
unique: bool,
+ include_deleted: bool,
) -> Result<Vec<History>>;
async fn range(&self, from: OffsetDateTime, to: OffsetDateTime) -> Result<Vec<History>>;
async fn update(&self, h: &History) -> Result<()>;
- async fn history_count(&self) -> Result<i64>;
+ async fn history_count(&self, include_deleted: bool) -> Result<i64>;
async fn last(&self) -> Result<Option<History>>;
async fn before(&self, timestamp: OffsetDateTime, count: i64) -> Result<Vec<History>>;
- async fn delete(&self, mut h: History) -> Result<()>;
+ async fn delete(&self, h: History) -> Result<()>;
async fn deleted(&self) -> Result<Vec<History>>;
// Yes I know, it's a lot.
@@ -257,11 +258,15 @@ impl Database for Sqlite {
context: &Context,
max: Option<usize>,
unique: bool,
+ include_deleted: bool,
) -> Result<Vec<History>> {
debug!("listing history");
let mut query = SqlBuilder::select_from(SqlName::new("history").alias("h").baquoted());
query.field("*").order_desc("timestamp");
+ if !include_deleted {
+ query.and_where_is_null("deleted_at");
+ }
match filter {
FilterMode::Global => &mut query,
@@ -340,11 +345,13 @@ impl Database for Sqlite {
Ok(res)
}
- async fn history_count(&self) -> Result<i64> {
- let res: (i64,) = sqlx::query_as("select count(1) from history")
- .fetch_one(&self.pool)
- .await?;
-
+ async fn history_count(&self, include_deleted: bool) -> Result<i64> {
+ let exclude_deleted: &str = if include_deleted { "" } else { "not" };
+ let query = format!(
+ "select count(1) from history where deleted_at is {} null",
+ exclude_deleted
+ );
+ let res: (i64,) = sqlx::query_as(&query).fetch_one(&self.pool).await?;
Ok(res.0)
}
diff --git a/atuin-client/src/sync.rs b/atuin-client/src/sync.rs
index ebfb47c1..c2fc75f9 100644
--- a/atuin-client/src/sync.rs
+++ b/atuin-client/src/sync.rs
@@ -48,7 +48,7 @@ async fn sync_download(
let remote_deleted =
HashSet::<&str>::from_iter(remote_status.deleted.iter().map(String::as_str));
- let initial_local = db.history_count().await?;
+ let initial_local = db.history_count(true).await?;
let mut local_count = initial_local;
let mut last_sync = if force {
@@ -84,7 +84,7 @@ async fn sync_download(
db.save_bulk(&history).await?;
- local_count = db.history_count().await?;
+ local_count = db.history_count(true).await?;
if history.len() < remote_status.page_size.try_into().unwrap() {
break;
@@ -137,7 +137,7 @@ async fn sync_upload(
let initial_remote_count = client.count().await?;
let mut remote_count = initial_remote_count;
- let local_count = db.history_count().await?;
+ let local_count = db.history_count(true).await?;
debug!("remote has {}, we have {}", remote_count, local_count);