This commit is contained in:
Luc Mcgrady 2025-05-23 22:52:26 +01:00
parent 8282a1ec55
commit f51e91447d
No known key found for this signature in database
GPG key ID: 4F3D7A0B17CC3D9C
3 changed files with 20 additions and 11 deletions

View file

@ -103,7 +103,8 @@ impl crate::services::DeckConfigService for Collection {
) -> Result<anki_proto::deck_config::GetRetentionWorkloadResponse> {
const LEARN_SPAN: usize = 1000;
let guard = self.search_cards_into_table(&input.search, crate::search::SortMode::NoOrder)?;
let guard =
self.search_cards_into_table(&input.search, crate::search::SortMode::NoOrder)?;
let (pass_cost, fail_cost, learn_cost) = guard.col.storage.get_costs_for_retention()?;
let before = fsrs::expected_workload(

View file

@ -1,12 +1,10 @@
WITH searched_revlogs AS (
SELECT *
FROM revlog
WHERE cid in search_cids
ORDER BY id DESC
-- Use the last 10000 cards
WHERE cid IN search_cids
ORDER BY id DESC -- Use the last 10000 cards
LIMIT 10000
),
average_pass AS (
), average_pass AS (
SELECT AVG(time)
FROM searched_revlogs
WHERE ease > 1
@ -18,7 +16,8 @@ average_fail AS (
),
-- Can lead to cards with partial learn histories skewing the time
summed_learns AS (
SELECT cid, SUM(time) AS total_time
SELECT cid,
SUM(time) AS total_time
FROM searched_revlogs
WHERE searched_revlogs.type = 0
GROUP BY cid
@ -27,4 +26,7 @@ average_learn AS (
SELECT AVG(total_time) AS avg_learn_time
FROM summed_learns
)
SELECT * FROM average_pass, average_fail, average_learn;
SELECT *
FROM average_pass,
average_fail,
average_learn;

View file

@ -747,12 +747,18 @@ impl super::SqliteStorage {
.get(0)?)
}
pub(crate) fn get_costs_for_retention(&self) -> Result<(f32, f32, f32)>{
let mut statement = self.db.prepare(include_str!("get_costs_for_retention.sql"))?;
pub(crate) fn get_costs_for_retention(&self) -> Result<(f32, f32, f32)> {
let mut statement = self
.db
.prepare(include_str!("get_costs_for_retention.sql"))?;
let mut query = statement.query(params![])?;
let row = query.next()?.unwrap();
Ok((row.get(0).unwrap_or(7000.), row.get(1).unwrap_or(23_000.), row.get(2).unwrap_or(30_000.)))
Ok((
row.get(0).unwrap_or(7000.),
row.get(1).unwrap_or(23_000.),
row.get(2).unwrap_or(30_000.),
))
}
#[cfg(test)]