Replace the previous depth check with one using a CTE

quickdudley
Aug 22, 2023, 8:37 PM
N3HHUT2CUKITDQ73WS5XP5S6A3CAM5OUVYDKIZVZXE4DDS77HCIAC

Dependencies

  • [2] VBDR24U4 Switch from in memory grid to recursive CTE
  • [*] 5Y7ZXB53 Start picker UI
  • [*] 5OUVESUQ Attempt to reduce additional manual comparison upon resume
  • [*] QEKHTVB7 Get most things semi-working except the final sort
  • [*] AV73DYWQ Initial functions for using sqlite in async environment

Change contents

  • edit in src/pick.rs at line 59
    [5.855]
    [5.981]
    if db.check_depth(name.1, count as i64).await.unwrap_or(0) <= count as i64 {
  • edit in src/pick.rs at line 64
    [5.1130]
    [6.1397]
    }
  • edit in src/names_database.rs at line 107
    [2.1509]
    [2.1509]
    }
    pub async fn check_depth(&self, a: i64, cutoff: i64) -> DynResult<i64> {
    self.post(|conn| {
    let mut stmnt = conn.prepare("WITH RECURSIVE t(better,worse) AS (SELECT better, worse FROM preferences WHERE preferences.worse = ? UNION SELECT preferences.better, t.worse FROM preferences INNER JOIN t ON preferences.worse = t.better) SELECT count(*) FROM (SELECT DISTINCT better FROM t) LIMIT ?")?;
    stmnt.bind::<i64>(1, a)?;
    stmnt.bind::<i64>(2, cutoff)?;
    match stmnt.next()? {
    sqlite::State::Done => Ok(0),
    sqlite::State::Row => Ok(stmnt.read::<i64>(0)?),
    }
    }).await?