Add function for adding name to database

[?]
Jan 10, 2022, 2:41 AM
KUANIPWFDXDFKJ2LH4FQ6APYOPLNYJ5LVGLSBSC75WUUZPFHILCAC

Dependencies

  • [2] RNW6D777 Minor tidy
  • [3] HMOBTVJ4 Initialize crate and add expected dependencies
  • [4] AV73DYWQ Initial functions for using sqlite in async environment

Change contents

  • edit in src/names_database.rs at line 1
    [3.42]
    [3.43]
    use std::borrow::Borrow;
  • replacement in src/names_database.rs at line 5
    [3.146][3.146:213]()
    conn.execute("CREATE TABLE IF NOT EXISTS names (name TEXT)")?;
    [3.146]
    [3.213]
    conn.execute(
    "CREATE TABLE IF NOT EXISTS names (
    name TEXT,
    UNIQUE name ON CONFLICT FAIL)",
    )?;
  • edit in src/names_database.rs at line 41
    [3.1374]
    [3.1374]
    }
    pub async fn add_name(
    &self,
    name: String,
    ) -> Result<i64, Box<dyn std::error::Error>> {
    match self
    .post(move |conn| {
    let mut stmnt =
    conn.prepare("INSERT INTO names(name) VALUES(?)")?;
    stmnt.bind::<&str>(1, name.borrow())?;
    stmnt.next().ok();
    let mut stmnt = conn
    .prepare("SELECT rowid FROM names WHERE names.name = ?")?;
    stmnt.bind::<&str>(1, name.borrow())?;
    match stmnt.next()? {
    sqlite::State::Row => Ok(stmnt.read::<i64>(0)?),
    _ => Err(sqlite::Error {
    code: None,
    message: Some(String::from(
    "Expected rowid from row just inserted",
    )),
    }),
    }
    })
    .await
    {
    Err(e) => Err(e),
    Ok(Err(e)) => Err(Box::new(e) as Box<dyn std::error::Error>),
    Ok(Ok(r)) => Ok(r),
    }
  • replacement in src/main.rs at line 7
    [2.301][2.301:407]()
    let _db = names_database::AsyncConnection::open(env::args().nth(1).ok_or(ArgsError::NoArgs)?).await?;
    [2.301]
    [2.407]
    let _db = names_database::AsyncConnection::open(
    env::args().nth(1).ok_or(ArgsError::NoArgs)?,
    )
    .await?;
  • edit in src/main.rs at line 17
    [2.466]
    [2.466]
    }
    impl std::fmt::Display for ArgsError {
    fn fmt(
    &self,
    f: &mut std::fmt::Formatter<'_>,
    ) -> Result<(), std::fmt::Error> {
    match self {
    ArgsError::NoArgs => write!(f, "Expected program arguments"),
    }
    }