Don't lock database operations to a single thread

This commit is contained in:
Ethan O'Brien
2025-11-30 10:48:16 -06:00
parent b9b344b50c
commit fd47262f52
5 changed files with 80 additions and 98 deletions

View File

@@ -25,8 +25,8 @@ pub struct Live {
pub master_pass: i64,
}
fn setup_tables(conn: &SQLite) {
conn.lock_and_exec("CREATE TABLE IF NOT EXISTS lives (
fn setup_tables(conn: &rusqlite::Connection) {
conn.execute_batch("CREATE TABLE IF NOT EXISTS lives (
live_id INT NOT NULL PRIMARY KEY,
normal_failed BIGINT NOT NULL,
normal_pass BIGINT NOT NULL,
@@ -36,11 +36,11 @@ fn setup_tables(conn: &SQLite) {
expert_pass BIGINT NOT NULL,
master_failed BIGINT NOT NULL,
master_pass BIGINT NOT NULL
)", params!());
conn.lock_and_exec("CREATE TABLE IF NOT EXISTS scores (
);
CREATE TABLE IF NOT EXISTS scores (
live_id INT NOT NULL PRIMARY KEY,
score_data TEXT NOT NULL
)", params!());
);").unwrap();
}
fn update_live_score(id: i64, uid: i64, score: i64) {

View File

@@ -11,11 +11,11 @@ lazy_static! {
static ref CACHED_DATA: Mutex<Option<JsonValue>> = Mutex::new(None);
}
fn setup_tables(conn: &SQLite) {
conn.lock_and_exec("CREATE TABLE IF NOT EXISTS scores (
fn setup_tables(conn: &rusqlite::Connection) {
conn.execute_batch("CREATE TABLE IF NOT EXISTS scores (
event_id INT NOT NULL PRIMARY KEY,
score_data TEXT NOT NULL
)", params!());
);").unwrap();
}
pub fn live_completed(event_id: u32, uid: i64, score: i64, star_level: i64) {

View File

@@ -22,12 +22,12 @@ lazy_static! {
static ref DATABASE: SQLite = SQLite::new("gree.db", setup_tables);
}
fn setup_tables(conn: &SQLite) {
conn.create_store_v2("CREATE TABLE IF NOT EXISTS users (
fn setup_tables(conn: &rusqlite::Connection) {
conn.execute_batch("CREATE TABLE IF NOT EXISTS users (
cert TEXT NOT NULL,
uuid TEXT NOT NULL,
user_id BIGINT NOT NULL PRIMARY KEY
)");
);").unwrap();
}
fn update_cert(uid: i64, cert: &str) {

View File

@@ -17,62 +17,63 @@ lazy_static! {
};
}
fn setup_tables(conn: &SQLite) {
conn.create_store_v2("CREATE TABLE IF NOT EXISTS tokens (
user_id BIGINT NOT NULL PRIMARY KEY,
token TEXT NOT NULL
)");
conn.create_store_v2("CREATE TABLE IF NOT EXISTS migration (
token TEXT NOT NULL PRIMARY KEY,
password TEXT NOT NULL
)");
conn.create_store_v2("CREATE TABLE IF NOT EXISTS userdata (
user_id BIGINT NOT NULL PRIMARY KEY,
userdata TEXT NOT NULL,
friend_request_disabled INT NOT NULL
)");
conn.create_store_v2("CREATE TABLE IF NOT EXISTS userhome (
user_id BIGINT NOT NULL PRIMARY KEY,
userhome TEXT NOT NULL
)");
conn.create_store_v2("CREATE TABLE IF NOT EXISTS missions (
user_id BIGINT NOT NULL PRIMARY KEY,
missions TEXT NOT NULL
)");
conn.create_store_v2("CREATE TABLE IF NOT EXISTS loginbonus (
user_id BIGINT NOT NULL PRIMARY KEY,
loginbonus TEXT NOT NULL
)");
conn.create_store_v2("CREATE TABLE IF NOT EXISTS sifcards (
user_id BIGINT NOT NULL PRIMARY KEY,
sifcards TEXT NOT NULL
)");
conn.create_store_v2("CREATE TABLE IF NOT EXISTS friends (
user_id BIGINT NOT NULL PRIMARY KEY,
friends TEXT NOT NULL
)");
conn.create_store_v2("CREATE TABLE IF NOT EXISTS chats (
user_id BIGINT NOT NULL PRIMARY KEY,
chats TEXT NOT NULL
)");
conn.create_store_v2("CREATE TABLE IF NOT EXISTS event (
user_id BIGINT NOT NULL PRIMARY KEY,
event TEXT NOT NULL
)");
conn.create_store_v2("CREATE TABLE IF NOT EXISTS eventloginbonus (
user_id BIGINT NOT NULL PRIMARY KEY,
eventloginbonus TEXT NOT NULL
)");
conn.create_store_v2("CREATE TABLE IF NOT EXISTS server_data (
user_id BIGINT NOT NULL PRIMARY KEY,
server_data TEXT NOT NULL
)");
conn.create_store_v2("CREATE TABLE IF NOT EXISTS webui (
user_id BIGINT NOT NULL PRIMARY KEY,
token TEXT NOT NULL,
last_login BIGINT NOT NULL
)");
fn setup_tables(conn: &rusqlite::Connection) {
conn.execute_batch("
CREATE TABLE IF NOT EXISTS tokens (
user_id BIGINT NOT NULL PRIMARY KEY,
token TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS migration (
token TEXT NOT NULL PRIMARY KEY,
password TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS userdata (
user_id BIGINT NOT NULL PRIMARY KEY,
userdata TEXT NOT NULL,
friend_request_disabled INT NOT NULL
);
CREATE TABLE IF NOT EXISTS userhome (
user_id BIGINT NOT NULL PRIMARY KEY,
userhome TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS missions (
user_id BIGINT NOT NULL PRIMARY KEY,
missions TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS loginbonus (
user_id BIGINT NOT NULL PRIMARY KEY,
loginbonus TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS sifcards (
user_id BIGINT NOT NULL PRIMARY KEY,
sifcards TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS friends (
user_id BIGINT NOT NULL PRIMARY KEY,
friends TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS chats (
user_id BIGINT NOT NULL PRIMARY KEY,
chats TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS event (
user_id BIGINT NOT NULL PRIMARY KEY,
event TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS eventloginbonus (
user_id BIGINT NOT NULL PRIMARY KEY,
eventloginbonus TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS server_data (
user_id BIGINT NOT NULL PRIMARY KEY,
server_data TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS webui (
user_id BIGINT NOT NULL PRIMARY KEY,
token TEXT NOT NULL,
last_login BIGINT NOT NULL
);
").unwrap();
}
fn acc_exists(uid: i64) -> bool {