Implement working database
This commit is contained in:
parent
8427eb082b
commit
4076a4c556
5 changed files with 110 additions and 32 deletions
|
@ -6,6 +6,7 @@ use rusqlite::{Connection, Result, params};
|
|||
|
||||
pub struct Database {
|
||||
conn: Connection,
|
||||
pub last_word_id: i64,
|
||||
}
|
||||
|
||||
#[derive(From, Debug)]
|
||||
|
@ -28,17 +29,27 @@ impl Database {
|
|||
conn.execute(
|
||||
"CREATE TABLE IF NOT EXISTS word (
|
||||
id INTEGER PRIMARY KEY,
|
||||
word TEXT, reading TEXT,
|
||||
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
word TEXT,
|
||||
reading TEXT,
|
||||
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||
)",
|
||||
params![],
|
||||
)?;
|
||||
Ok(Self { conn })
|
||||
let last_word_id = match conn
|
||||
.prepare("SELECT id FROM word ORDER BY id DESC LIMIT 1")?
|
||||
.query_map(params![], |row| row.get(0))?
|
||||
.collect::<Result<Vec<i64>>>()?
|
||||
.first() {
|
||||
Some(id) => *id,
|
||||
None => 0, // first database entry is id 1
|
||||
};
|
||||
Ok(Self { conn, last_word_id })
|
||||
}
|
||||
|
||||
pub fn load_words_before(&self, before_id: i64) -> Result<Vec<Word>> {
|
||||
println!("{}", before_id);
|
||||
self.conn
|
||||
.prepare("SELECT id, word, reading, timestamp FROM word WHERE id < ? DESC LIMIT 10")?
|
||||
.prepare("SELECT id, word, reading, timestamp FROM word WHERE id < ? ORDER BY id DESC LIMIT 10")?
|
||||
.query_map(params![before_id], |row| {
|
||||
Ok(Word {
|
||||
id: row.get(0)?,
|
||||
|
@ -49,4 +60,16 @@ impl Database {
|
|||
})?
|
||||
.collect::<Result<Vec<Word>>>()
|
||||
}
|
||||
|
||||
pub fn add_word(&mut self, word: &Word) -> Result<()> {
|
||||
self.conn.execute(
|
||||
"INSERT INTO word (word, reading) VALUES (?1, ?2)",
|
||||
params![
|
||||
word.word,
|
||||
word.reading,
|
||||
],
|
||||
)?;
|
||||
self.last_word_id += 1;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue