more inappropriation
This commit is contained in:
parent
b593711d11
commit
840fba6e92
9 changed files with 45 additions and 38 deletions
2
.env
2
.env
|
@ -1 +1 @@
|
||||||
DATABASE_URL=sqlite://${HOME}/.witch-watch.db
|
DATABASE_URL=sqlite://${HOME}/.what2watch.db
|
||||||
|
|
|
@ -1,12 +1,16 @@
|
||||||
-- indices
|
-- indices
|
||||||
drop index if exists user_dex;
|
drop index if exists user_username_dex;
|
||||||
drop index if exists watch_dex;
|
drop index if exists user_email_dex;
|
||||||
drop index if exists ww_dex;
|
drop index if exists watch_title_dex;
|
||||||
drop index if exists note_dex;
|
drop index if exists witch_added_by_dex;
|
||||||
|
drop index if exists quests_user_dex;
|
||||||
|
drop index if exists quests_watch_dex;
|
||||||
|
drop index if exists note_user_dex;
|
||||||
|
drop index if exists note_watch_dex;
|
||||||
-- tables
|
-- tables
|
||||||
drop table if exists watch_quest;
|
drop table if exists watch_quests;
|
||||||
drop table if exists watch_notes;
|
drop table if exists watch_notes;
|
||||||
drop table if exists covens;
|
drop table if exists follows;
|
||||||
drop table if exists users;
|
drop table if exists users;
|
||||||
drop table if exists watches;
|
drop table if exists watches;
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@ create table if not exists watches (
|
||||||
);
|
);
|
||||||
|
|
||||||
-- table of what people want to watch
|
-- table of what people want to watch
|
||||||
create table if not exists watch_quest (
|
create table if not exists watch_quests (
|
||||||
user blob not null,
|
user blob not null,
|
||||||
watch blob not null,
|
watch blob not null,
|
||||||
priority int, -- 1-5 how much do you want to watch it
|
priority int, -- 1-5 how much do you want to watch it
|
||||||
|
@ -44,9 +44,9 @@ create table if not exists watch_quest (
|
||||||
|
|
||||||
-- friend lists; this should really be a graph db, maybe the whole thing should be
|
-- friend lists; this should really be a graph db, maybe the whole thing should be
|
||||||
-- TODO: look into replacing sqlite with https://www.cozodb.org/
|
-- TODO: look into replacing sqlite with https://www.cozodb.org/
|
||||||
create table if not exists covens (
|
create table if not exists follows (
|
||||||
user blob not null primary key,
|
user blob not null primary key,
|
||||||
coven blob, -- possibly empty friends list in some app-specific format
|
follows blob, -- possibly empty friends list in some app-specific format
|
||||||
last_updated int not null default (unixepoch()),
|
last_updated int not null default (unixepoch()),
|
||||||
foreign key (user) references users (id) on delete cascade on update no action
|
foreign key (user) references users (id) on delete cascade on update no action
|
||||||
);
|
);
|
||||||
|
@ -62,12 +62,12 @@ create table if not exists watch_notes (
|
||||||
foreign key (watch) references watches (id) on delete cascade on update no action
|
foreign key (watch) references watches (id) on delete cascade on update no action
|
||||||
);
|
);
|
||||||
|
|
||||||
-- indices, not needed for covens
|
-- indices, not needed for follows
|
||||||
create index if not exists user_username_dex on users (username);
|
create index if not exists user_username_dex on users (username);
|
||||||
create index if not exists user_email_dex on users (email);
|
create index if not exists user_email_dex on users (email);
|
||||||
create index if not exists watch_title_dex on watches (title);
|
create index if not exists watch_title_dex on watches (title);
|
||||||
create index if not exists watch_added_by_dex on watches (added_by);
|
create index if not exists watch_added_by_dex on watches (added_by);
|
||||||
create index if not exists ww_user_dex on watch_quest (user);
|
create index if not exists quests_user_dex on watch_quests (user);
|
||||||
create index if not exists ww_watch_dex on watch_quest (watch);
|
create index if not exists quests_watch_dex on watch_quests (watch);
|
||||||
create index if not exists note_user_dex on watch_notes (user);
|
create index if not exists note_user_dex on watch_notes (user);
|
||||||
create index if not exists note_watch_dex on watch_notes (watch);
|
create index if not exists note_watch_dex on watch_notes (watch);
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
drop trigger if exists update_last_updated_users;
|
drop trigger if exists update_last_updated_users;
|
||||||
drop trigger if exists update_last_updated_watches;
|
drop trigger if exists update_last_updated_watches;
|
||||||
drop trigger if exists update_last_updated_watch_quest;
|
drop trigger if exists update_last_updated_watch_quests;
|
||||||
drop trigger if exists update_last_updated_covens;
|
drop trigger if exists update_last_updated_follows;
|
||||||
drop trigger if exists update_last_updated_watch_notes;
|
drop trigger if exists update_last_updated_watch_notes;
|
||||||
|
|
|
@ -12,18 +12,18 @@ BEGIN
|
||||||
update watches set last_updated = (select unixepoch()) where id=NEW.id;
|
update watches set last_updated = (select unixepoch()) where id=NEW.id;
|
||||||
END;
|
END;
|
||||||
|
|
||||||
create trigger if not exists update_last_updated_watch_quest
|
create trigger if not exists update_last_updated_watch_quests
|
||||||
after update on watch_quest
|
after update on watch_quests
|
||||||
when OLD.last_updated = NEW.last_updated or OLD.last_updated is null
|
when OLD.last_updated = NEW.last_updated or OLD.last_updated is null
|
||||||
BEGIN
|
BEGIN
|
||||||
update watch_quest set last_updated = (select unixepoch()) where id=NEW.id;
|
update watch_quests set last_updated = (select unixepoch()) where id=NEW.id;
|
||||||
END;
|
END;
|
||||||
|
|
||||||
create trigger if not exists update_last_updated_covens
|
create trigger if not exists update_last_updated_follows
|
||||||
after update on covens
|
after update on follows
|
||||||
when OLD.last_updated = NEW.last_updated or OLD.last_updated is null
|
when OLD.last_updated = NEW.last_updated or OLD.last_updated is null
|
||||||
BEGIN
|
BEGIN
|
||||||
update covens set last_updated = (select unixepoch()) where id=NEW.id;
|
update follows set last_updated = (select unixepoch()) where id=NEW.id;
|
||||||
END;
|
END;
|
||||||
|
|
||||||
create trigger if not exists update_last_updated_watch_notes
|
create trigger if not exists update_last_updated_watch_notes
|
||||||
|
|
|
@ -22,16 +22,16 @@ async fn main() {
|
||||||
.await
|
.await
|
||||||
.expect("could not open movies db");
|
.expect("could not open movies db");
|
||||||
|
|
||||||
let ww_db = get_db_pool().await;
|
let w2w_db = get_db_pool().await;
|
||||||
|
|
||||||
let start = std::time::Instant::now();
|
let start = std::time::Instant::now();
|
||||||
add_omega_watches(&ww_db, &movie_db).await.unwrap();
|
add_omega_watches(&w2w_db, &movie_db).await.unwrap();
|
||||||
let end = std::time::Instant::now();
|
let end = std::time::Instant::now();
|
||||||
|
|
||||||
let dur = (end - start).as_secs_f32();
|
let dur = (end - start).as_secs_f32();
|
||||||
|
|
||||||
let rows: i32 = sqlx::query_scalar("select count(*) from watches")
|
let rows: i32 = sqlx::query_scalar("select count(*) from watches")
|
||||||
.fetch_one(&ww_db)
|
.fetch_one(&w2w_db)
|
||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
|
|
|
@ -36,21 +36,21 @@ async fn main() {
|
||||||
.connect_with(opts)
|
.connect_with(opts)
|
||||||
.await
|
.await
|
||||||
.expect("could not open movies db");
|
.expect("could not open movies db");
|
||||||
let ww_db = get_db_pool().await;
|
let w2w_db = get_db_pool().await;
|
||||||
|
|
||||||
let users = &gen_users(num_users, &words, &ww_db).await;
|
let users = &gen_users(num_users, &words, &w2w_db).await;
|
||||||
let movies = &add_omega_watches(&ww_db, &movie_db).await.unwrap();
|
let movies = &add_omega_watches(&w2w_db, &movie_db).await.unwrap();
|
||||||
|
|
||||||
let rng = &mut thread_rng();
|
let rng = &mut thread_rng();
|
||||||
|
|
||||||
let normal = Normal::new(mpu, mpu / 10.0).unwrap();
|
let normal = Normal::new(mpu, mpu / 10.0).unwrap();
|
||||||
let start = std::time::Instant::now();
|
let start = std::time::Instant::now();
|
||||||
for &user in users {
|
for &user in users {
|
||||||
add_quests(user, movies, &ww_db, rng, normal).await;
|
add_quests(user, movies, &w2w_db, rng, normal).await;
|
||||||
}
|
}
|
||||||
let end = std::time::Instant::now();
|
let end = std::time::Instant::now();
|
||||||
let rows: i32 = sqlx::query_scalar("select count(*) from watch_quest")
|
let rows: i32 = sqlx::query_scalar("select count(*) from watch_quests")
|
||||||
.fetch_one(&ww_db)
|
.fetch_one(&w2w_db)
|
||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
let dur = (end - start).as_secs_f32();
|
let dur = (end - start).as_secs_f32();
|
||||||
|
@ -100,7 +100,7 @@ async fn gen_users(num: usize, words: &[&str], pool: &SqlitePool) -> Vec<DbId> {
|
||||||
async fn add_quests<R: Rng>(
|
async fn add_quests<R: Rng>(
|
||||||
user: DbId,
|
user: DbId,
|
||||||
movies: &[DbId],
|
movies: &[DbId],
|
||||||
ww_db: &SqlitePool,
|
w2w_db: &SqlitePool,
|
||||||
rng: &mut R,
|
rng: &mut R,
|
||||||
normal: Normal<f32>,
|
normal: Normal<f32>,
|
||||||
) {
|
) {
|
||||||
|
@ -121,7 +121,7 @@ async fn add_quests<R: Rng>(
|
||||||
.map(tokio_retry::strategy::jitter)
|
.map(tokio_retry::strategy::jitter)
|
||||||
.take(3);
|
.take(3);
|
||||||
|
|
||||||
let db = ww_db.clone();
|
let db = w2w_db.clone();
|
||||||
tasks.spawn(async move {
|
tasks.spawn(async move {
|
||||||
let movies = quests;
|
let movies = quests;
|
||||||
(
|
(
|
||||||
|
|
|
@ -52,7 +52,7 @@ impl From<&ImportMovieOmega> for Watch {
|
||||||
// utility functions for building CLI tools, currently just for benchmarking
|
// utility functions for building CLI tools, currently just for benchmarking
|
||||||
//-************************************************************************
|
//-************************************************************************
|
||||||
pub async fn add_watch_quests(pool: &SqlitePool, quests: &[WatchQuest]) -> Result<(), ()> {
|
pub async fn add_watch_quests(pool: &SqlitePool, quests: &[WatchQuest]) -> Result<(), ()> {
|
||||||
let mut builder = sqlx::QueryBuilder::new("insert into watch_quest (user, watch) ");
|
let mut builder = sqlx::QueryBuilder::new("insert into watch_quests (user, watch) ");
|
||||||
builder.push_values(quests, |mut b, quest| {
|
builder.push_values(quests, |mut b, quest| {
|
||||||
let user = quest.user;
|
let user = quest.user;
|
||||||
let watch = quest.watch;
|
let watch = quest.watch;
|
||||||
|
@ -84,8 +84,11 @@ pub async fn add_users(db_pool: &SqlitePool, users: &[User]) -> Result<(), ()> {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn add_omega_watches(ww_db: &SqlitePool, movie_db: &SqlitePool) -> Result<Vec<DbId>, ()> {
|
pub async fn add_omega_watches(
|
||||||
ensure_omega(ww_db).await;
|
w2w_db: &SqlitePool,
|
||||||
|
movie_db: &SqlitePool,
|
||||||
|
) -> Result<Vec<DbId>, ()> {
|
||||||
|
ensure_omega(w2w_db).await;
|
||||||
|
|
||||||
let movies: Vec<ImportMovieOmega> = sqlx::query_as(MOVIE_QUERY)
|
let movies: Vec<ImportMovieOmega> = sqlx::query_as(MOVIE_QUERY)
|
||||||
.fetch_all(movie_db)
|
.fetch_all(movie_db)
|
||||||
|
@ -114,7 +117,7 @@ pub async fn add_omega_watches(ww_db: &SqlitePool, movie_db: &SqlitePool) -> Res
|
||||||
});
|
});
|
||||||
let q = builder.build();
|
let q = builder.build();
|
||||||
|
|
||||||
q.execute(ww_db).await.map_err(|_| ())?;
|
q.execute(w2w_db).await.map_err(|_| ())?;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(ids)
|
Ok(ids)
|
||||||
|
|
|
@ -18,13 +18,13 @@ use crate::{
|
||||||
//-************************************************************************
|
//-************************************************************************
|
||||||
|
|
||||||
const GET_SAVED_WATCHES_QUERY: &str =
|
const GET_SAVED_WATCHES_QUERY: &str =
|
||||||
"select * from watches left join watch_quest on $1 = watch_quest.user and watches.id = watch_quest.watch";
|
"select * from watches left join watch_quests on $1 = watch_quests.user and watches.id = watch_quests.watch";
|
||||||
|
|
||||||
const GET_WATCH_QUERY: &str = "select * from watches where id = $1";
|
const GET_WATCH_QUERY: &str = "select * from watches where id = $1";
|
||||||
|
|
||||||
const ADD_WATCH_QUERY: &str = "insert into watches (id, title, kind, release_date, metadata_url, added_by) values ($1, $2, $3, $4, $5, $6)";
|
const ADD_WATCH_QUERY: &str = "insert into watches (id, title, kind, release_date, metadata_url, added_by) values ($1, $2, $3, $4, $5, $6)";
|
||||||
const ADD_WATCH_QUEST_QUERY: &str =
|
const ADD_WATCH_QUEST_QUERY: &str =
|
||||||
"insert into watch_quest (user, watch, public, watched) values ($1, $2, $3, $4)";
|
"insert into watch_quests (user, watch, public, watched) values ($1, $2, $3, $4)";
|
||||||
|
|
||||||
const EMPTY_SEARCH_QUERY_STRUCT: SearchQuery = SearchQuery {
|
const EMPTY_SEARCH_QUERY_STRUCT: SearchQuery = SearchQuery {
|
||||||
title: None,
|
title: None,
|
||||||
|
|
Loading…
Reference in a new issue