Skip to content

Instantly share code, notes, and snippets.

@tombasche
Created September 15, 2018 10:35
Show Gist options
  • Save tombasche/b656fe729a1d4fd10bee831441d7cad0 to your computer and use it in GitHub Desktop.
Save tombasche/b656fe729a1d4fd10bee831441d7cad0 to your computer and use it in GitHub Desktop.
Oxidised random tea
extern crate sqlite;
use std::fs::File;
use std::io::{BufRead, BufReader};
fn db_connection(db_name: &String) -> sqlite::Connection {
let connection = sqlite::open(db_name).unwrap();
connection.execute("CREATE TABLE teas (name text, variety text, last_used date)").unwrap();
connection
}
fn main() {
let db_name: &String = &"tea.db".to_string();
let connection = db_connection(&db_name);
let f = File::open("tea.txt").expect("Unable to open file");
let f = BufReader::new(f);
for line in f.lines() {
let line = line.expect("Unable to read line");
let mut splittable_line = line.split(",");
let vec = splittable_line.collect::<Vec<&str>>();
let statement = format!("INSERT INTO teas (name, variety) VALUES(\"{}\",\"{}\")", vec[0], vec[1].trim());
connection.execute(statement).unwrap();
}
select_tea(&db_name);
}
fn select_tea(db_name: &String) {
let connection = sqlite::open(db_name).unwrap();
let statement = "SELECT name, variety, last_used FROM teas WHERE (last_used != date('now') or last_used != date('now') -1 or last_used IS NULL) ORDER BY RANDOM() LIMIT 1";
let mut cursor = connection
.prepare(statement)
.unwrap()
.cursor();
let mut tea = String::new();
while let Some(row) = cursor.next().unwrap() {
println!("{}", format!("{}: {}", row[0].as_string().unwrap(), row[1].as_string().unwrap()));
tea = row[0].as_string().unwrap().to_string();
}
let update_statement = format!("UPDATE teas SET last_used = date('now') WHERE name = \"{}\"", tea);
connection.execute(update_statement).unwrap();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment