Revert "No need to clone the Arc"

This reverts commit 34e25d3772.
This commit is contained in:
Mike Dilger 2023-03-15 20:18:08 +13:00
parent 49dbf2d489
commit 45d28de826
13 changed files with 107 additions and 54 deletions

View File

@ -22,7 +22,8 @@ impl DbEvent {
Some(crit) => format!("{} WHERE {}", sql, crit),
};
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
let mut stmt = db.prepare(&sql)?;
let mut rows = stmt.query([])?;
@ -49,7 +50,8 @@ impl DbEvent {
) -> Result<Option<Event>, Error> {
let sql = "SELECT raw FROM event WHERE event.kind=3 AND event.pubkey=? ORDER BY created_at DESC LIMIT 1";
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
let mut stmt = db.prepare(sql)?;
stmt.raw_bind_parameter(1, pubkeyhex.as_str())?;
@ -69,7 +71,8 @@ impl DbEvent {
// FIXME, only get the last per pubkey
let sql = "SELECT raw FROM event WHERE event.kind=10002";
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
let mut stmt = db.prepare(sql)?;
let mut rows = stmt.raw_query();
@ -117,7 +120,8 @@ impl DbEvent {
kinds
);
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
let mut stmt = db.prepare(&sql)?;
stmt.raw_bind_parameter(1, public_key.as_str())?;
@ -145,7 +149,8 @@ impl DbEvent {
let sql = "INSERT OR IGNORE INTO event (id, raw, pubkey, created_at, kind, content, ots) \
VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7)";
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
let mut stmt = db.prepare(sql)?;
stmt.execute((
event.id.as_str(),

View File

@ -12,7 +12,8 @@ pub struct DbEventFlags {
impl DbEventFlags {
pub async fn load_all_viewed() -> Result<Vec<Id>, Error> {
let sql = "SELECT event FROM event_flags WHERE viewed=1".to_owned();
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
let mut stmt = db.prepare(&sql)?;
let mut output: Vec<Id> = Vec::new();
let mut rows = stmt.raw_query();
@ -28,7 +29,8 @@ impl DbEventFlags {
pub async fn mark_all_as_viewed(ids: Vec<Id>) -> Result<(), Error> {
let sql = "INSERT INTO event_flags (event, viewed) VALUES (?, 1) \
ON CONFLICT(event) DO UPDATE SET viewed=1";
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
let mut stmt = db.prepare(sql)?;
for id in ids {
stmt.raw_bind_parameter(1, id.as_hex_string())?;

View File

@ -14,7 +14,8 @@ impl DbEventHashtag {
let hashtag = self.hashtag.clone();
let sql = "INSERT OR IGNORE INTO event_hashtag (event, hashtag) VALUES (?, ?)";
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
let mut stmt = db.prepare(sql)?;
stmt.execute((&event, &hashtag))?;
Ok(())

View File

@ -18,7 +18,8 @@ impl DbEventRelationship {
let content = self.content.clone();
let sql = "INSERT OR IGNORE INTO event_relationship (original, refers_to, relationship, content) VALUES (?, ?, ?, ?)";
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
let mut stmt = db.prepare(sql)?;
stmt.execute((&original, &refers_to, &relationship, &content))?;
Ok(())

View File

@ -14,7 +14,8 @@ impl DbEventRelay {
pub async fn get_relays_for_event(id: Id) -> Result<Vec<RelayUrl>, Error> {
let sql = "SELECT relay FROM event_relay WHERE event=?";
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
let mut stmt = db.prepare(sql)?;
stmt.raw_bind_parameter(1, id.as_hex_string())?;
let mut rows = stmt.raw_query();
@ -33,7 +34,8 @@ impl DbEventRelay {
let sql = "REPLACE INTO event_relay (event, relay, when_seen) \
VALUES (?1, ?2, ?3)";
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
let mut stmt = db.prepare(sql)?;
stmt.execute((

View File

@ -19,7 +19,8 @@ impl DbEventTag {
"INSERT OR IGNORE INTO event_tag (event, seq, label, field0, field1, field2, field3) \
VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7)";
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
let mut stmt = db.prepare(sql)?;
stmt.execute((

View File

@ -62,7 +62,8 @@ pub fn init_database() -> Result<Pool<SqliteConnectionManager>, Error> {
/// Check and upgrade our data schema
pub fn check_and_upgrade() -> Result<(), Error> {
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
match db.query_row(
"SELECT schema_version FROM local_settings LIMIT 1",
@ -139,7 +140,8 @@ fn upgrade(db: PooledConnection<SqliteConnectionManager>, mut version: usize) ->
}
pub async fn prune() -> Result<(), Error> {
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
db.execute_batch(include_str!("sql/prune.sql"))?;
*GLOBALS.status_message.write().await = "Database prune has completed.".to_owned();
@ -152,7 +154,8 @@ pub fn normalize_urls() -> Result<(), Error> {
tracing::info!("Normalizing Database URLs (this will take some time)");
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
let urls_are_normalized: bool = db.query_row(
"SELECT urls_are_normalized FROM local_settings LIMIT 1",

View File

@ -25,7 +25,8 @@ impl DbPersonRelay {
manually_paired_read, manually_paired_write) \
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
let mut stmt = db.prepare(sql)?;
stmt.execute((
@ -53,7 +54,8 @@ impl DbPersonRelay {
VALUES (?, ?, ?) \
ON CONFLICT(person, relay) DO UPDATE SET last_fetched=?";
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
let mut stmt = db.prepare(sql)?;
stmt.execute((&person, &relay.0, &last_fetched, &last_fetched))?;
@ -70,7 +72,8 @@ impl DbPersonRelay {
VALUES (?, ?, ?) \
ON CONFLICT(person, relay) DO UPDATE SET last_suggested_kind3=?";
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
let mut stmt = db.prepare(sql)?;
stmt.execute((
@ -92,7 +95,8 @@ impl DbPersonRelay {
VALUES (?, ?, ?) \
ON CONFLICT(person, relay) DO UPDATE SET last_suggested_bytag=?";
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
let mut stmt = db.prepare(sql)?;
stmt.execute((
@ -114,7 +118,8 @@ impl DbPersonRelay {
VALUES (?, ?, ?) \
ON CONFLICT(person, relay) DO UPDATE SET last_suggested_nip05=?";
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
let mut stmt = db.prepare(sql)?;
stmt.execute((
@ -161,7 +166,8 @@ impl DbPersonRelay {
}
}
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
let inner = || -> Result<(), Error> {
let mut stmt = db.prepare("BEGIN TRANSACTION")?;
@ -230,7 +236,8 @@ impl DbPersonRelay {
}
}
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
let inner = || -> Result<(), Error> {
let mut stmt = db.prepare("BEGIN TRANSACTION")?;
@ -274,7 +281,8 @@ impl DbPersonRelay {
manually_paired_read, manually_paired_write \
FROM person_relay WHERE person=?";
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
let mut stmt = db.prepare(sql)?;
stmt.raw_bind_parameter(1, pubkey.as_str())?;
let mut rows = stmt.raw_query();

View File

@ -51,7 +51,8 @@ impl DbRelay {
Some(crit) => format!("{} WHERE {}", sql, crit),
};
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
let mut stmt = db.prepare(&sql)?;
let mut rows = stmt.query([])?;
@ -92,7 +93,8 @@ impl DbRelay {
last_connected_at, last_general_eose_at, read, write, advertise) \
VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9)";
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
let mut stmt = db.prepare(sql)?;
stmt.execute((
@ -114,7 +116,8 @@ impl DbRelay {
let sql = "UPDATE relay SET success_count=?, failure_count=?, rank=?, \
last_connected_at=?, last_general_eose_at=?, read=?, write=?, advertise=? WHERE url=?";
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
let mut stmt = db.prepare(sql)?;
stmt.execute((
@ -140,7 +143,8 @@ impl DbRelay {
let sql =
"UPDATE relay SET last_general_eose_at = max(?, ifnull(last_general_eose_at,0)) WHERE url = ?";
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
let mut stmt = db.prepare(sql)?;
stmt.execute((&last_general_eose_at, &url.0))?;
@ -151,7 +155,8 @@ impl DbRelay {
pub async fn clear_read_and_write() -> Result<(), Error> {
let sql = "UPDATE relay SET read = false, write = false";
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
let mut stmt = db.prepare(sql)?;
stmt.execute(())?;
@ -165,7 +170,8 @@ impl DbRelay {
) -> Result<(), Error> {
let sql = "UPDATE relay SET read = ?, write = ? WHERE url = ?";
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
let mut stmt = db.prepare(sql)?;
stmt.execute((&read, &write, &url.0))?;
@ -175,7 +181,8 @@ impl DbRelay {
pub async fn update_advertise(url: RelayUrl, advertise: bool) -> Result<(), Error> {
let sql = "UPDATE relay SET advertise = ? WHERE url = ?";
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
let mut stmt = db.prepare(sql)?;
stmt.execute((&advertise, &url.0))?;
@ -187,7 +194,8 @@ impl DbRelay {
let sql =
"INSERT OR IGNORE INTO relay (url, rank) SELECT DISTINCT relay, 3 FROM person_relay";
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
db.execute(sql, [])?;
// Select relays from 'e' and 'p' event tags
@ -207,7 +215,7 @@ impl DbRelay {
// FIXME this is a lot of separate sql calls
let sql = "INSERT OR IGNORE INTO RELAY (url, rank) VALUES (?, 3)";
for url in urls {
let db = GLOBALS.db.get()?;
let db = pool.get()?;
db.execute(sql, [&url.0])?;
}
@ -219,7 +227,8 @@ impl DbRelay {
// has a rank>1
let sql = "SELECT url FROM relay INNER JOIN event_relay ON relay.url=event_relay.relay \
WHERE event_relay.event=? AND relay.write=1 AND relay.rank>1";
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
let mut stmt = db.prepare(sql)?;
let mut query_result = stmt.query([reply_to.as_hex_string()])?;
let output: Option<RelayUrl> = if let Some(row) = query_result.next()? {
@ -236,7 +245,8 @@ impl DbRelay {
// Fallback to finding any relay where the event was seen
let sql = "SELECT relay FROM event_relay WHERE event=?";
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
let mut stmt = db.prepare(sql)?;
let mut query_result = stmt.query([reply_to.as_hex_string()])?;
if let Some(row) = query_result.next()? {
@ -249,7 +259,8 @@ impl DbRelay {
}
pub async fn set_rank(url: RelayUrl, rank: u8) -> Result<(), Error> {
let db = GLOBALS.db.get().expect("Failed to get DB pool");
let pool = GLOBALS.db.clone();
let db = pool.get().expect("Failed to get DB pool");
let _ = db.execute("UPDATE relay SET rank=? WHERE url=?", (&rank, &url.0));

View File

@ -36,7 +36,8 @@ impl Events {
return Ok(Some(e));
}
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
let opt_event: Option<Event> = {
let mut stmt = db.prepare("SELECT raw FROM event WHERE id=?")?;
stmt.raw_bind_parameter(1, id.as_hex_string())?;
@ -121,7 +122,8 @@ impl Events {
tracing::trace!("get_local_events_by_filter SQL={}", &sql);
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
let mut stmt = db.prepare(&sql)?;
let mut rows = stmt.raw_query();
let mut events: Vec<Event> = Vec::new();

View File

@ -220,7 +220,8 @@ impl People {
{
let pubkey_strings: Vec<String> = pubkeys.iter().map(|p| p.to_string()).collect();
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
let mut stmt = db.prepare(&sql)?;
let mut pos = 1;
for pk in pubkey_strings.iter() {
@ -377,7 +378,8 @@ impl People {
let pubkeyhex2 = pubkeyhex.to_owned();
let person_inner = person.clone();
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
let metadata_json: Option<String> = if let Some(md) = &person_inner.metadata {
Some(serde_json::to_string(md)?)
@ -458,7 +460,8 @@ impl People {
FROM person WHERE followed=1 OR muted=1"
.to_owned();
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
let mut stmt = db.prepare(&sql)?;
let mut rows = stmt.query([])?;
@ -748,7 +751,8 @@ impl People {
pub async fn populate_new_people() -> Result<(), Error> {
let sql = "INSERT or IGNORE INTO person (pubkey) SELECT DISTINCT pubkey FROM EVENT";
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
db.execute(sql, [])?;
Ok(())
@ -822,7 +826,8 @@ impl People {
ON CONFLICT(pubkey) DO UPDATE SET followed=?";
let pubkeyhex2 = pubkeyhex.to_owned();
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
let mut stmt = db.prepare(sql)?;
stmt.execute((pubkeyhex2.as_str(), &follow, &follow))?;
}
@ -887,7 +892,8 @@ impl People {
let pubkey_strings: Vec<String> = pubkeys.iter().map(|p| p.to_string()).collect();
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
let mut stmt = db.prepare(&sql)?;
stmt.raw_bind_parameter(1, asof.0)?;
let mut pos = 2;
@ -908,7 +914,8 @@ impl People {
let pubkey_strings: Vec<String> = pubkeys.iter().map(|p| p.to_string()).collect();
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
let mut stmt = db.prepare(&sql)?;
stmt.raw_bind_parameter(1, asof.0)?;
let mut pos = 2;
@ -960,7 +967,8 @@ impl People {
ON CONFLICT(pubkey) DO UPDATE SET muted=?";
let pubkeyhex2 = pubkeyhex.to_owned();
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
let mut stmt = db.prepare(sql)?;
stmt.execute((pubkeyhex2.as_str(), &mute, &mute))?;
}
@ -1001,7 +1009,8 @@ impl People {
return Ok(false);
}
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
let mut stmt = db.prepare(
"UPDATE person SET relay_list_last_received=?, \
relay_list_created_at=? WHERE pubkey=?",
@ -1018,7 +1027,8 @@ impl People {
person.nip05_last_checked = Some(now as u64);
}
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
let mut stmt = db.prepare("UPDATE person SET nip05_last_checked=? WHERE pubkey=?")?;
stmt.execute((&now, pubkeyhex.as_str()))?;
Ok(())
@ -1051,7 +1061,8 @@ impl People {
UPDATE SET metadata=json_patch(metadata, ?), nip05_valid=?, nip05_last_checked=?";
let pubkeyhex2 = pubkeyhex.to_owned();
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
let mut metadata = Metadata::new();
metadata.nip05 = nip05.clone();
@ -1084,7 +1095,8 @@ impl People {
None => sql,
Some(crit) => format!("{} WHERE {}", sql, crit),
};
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
let mut stmt = db.prepare(&sql)?;
let mut rows = stmt.query([])?;
@ -1133,7 +1145,8 @@ impl People {
let pubkey_strings: Vec<String> = pubkeys.iter().map(|p| p.to_string()).collect();
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
let mut stmt = db.prepare(&sql)?;

View File

@ -91,7 +91,8 @@ impl Settings {
pub fn blocking_load() -> Result<Settings, Error> {
let mut settings = Settings::default();
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
let mut stmt = db.prepare("SELECT key, value FROM settings")?;
@ -176,7 +177,8 @@ impl Settings {
}
pub async fn save(&self) -> Result<(), Error> {
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
let bool_to_numstr = |b: bool| -> &str {
if b {

View File

@ -18,7 +18,8 @@ impl Signer {
*self.public.write() = GLOBALS.settings.read().public_key;
*self.private.write() = None;
let db = GLOBALS.db.get().expect("Failed to get DB pool handle");
let pool = GLOBALS.db.clone();
let db = pool.get().expect("Failed to get DB pool handle");
if let Ok(epk) = db.query_row(
"SELECT encrypted_private_key FROM local_settings LIMIT 1",
[],
@ -34,7 +35,8 @@ impl Signer {
settings.save().await?;
let epk = self.encrypted.read().clone();
let db = GLOBALS.db.get()?;
let pool = GLOBALS.db.clone();
let db = pool.get()?;
db.execute(
"UPDATE local_settings SET encrypted_private_key=?",
(epk.map(|e| e.0),),