diff --git a/src/db/mod.rs b/src/db/mod.rs index bd928aa9..6443e6da 100644 --- a/src/db/mod.rs +++ b/src/db/mod.rs @@ -1,10 +1,7 @@ use crate::error::Error; use crate::globals::GLOBALS; use crate::profile::Profile; -use fallible_iterator::FallibleIterator; use rusqlite::Connection; -use std::sync::atomic::Ordering; -use tokio::task; pub fn init_database() -> Result { let profile_dir = Profile::current()?.profile_dir; @@ -29,12 +26,6 @@ pub fn init_database() -> Result { // This sets up the database #[allow(clippy::or_fun_call)] pub fn setup_database() -> Result<(), Error> { - // Check and upgrade our data schema - check_and_upgrade()?; - - // Normalize URLs - normalize_urls()?; - let db = GLOBALS.db.blocking_lock(); // Enforce foreign key relationships @@ -48,214 +39,3 @@ pub fn setup_database() -> Result<(), Error> { Ok(()) } - -fn check_and_upgrade() -> Result<(), Error> { - let db = GLOBALS.db.blocking_lock(); - match db.query_row( - "SELECT schema_version FROM local_settings LIMIT 1", - [], - |row| row.get::(0), - ) { - Ok(version) => upgrade(&db, version), - Err(e) => { - if let rusqlite::Error::SqliteFailure(_, Some(ref s)) = e { - if s.contains("no such table") { - return old_check_and_upgrade(&db); - } - } - Err(e.into()) - } - } -} - -fn old_check_and_upgrade(db: &Connection) -> Result<(), Error> { - match db.query_row( - "SELECT value FROM settings WHERE key='version'", - [], - |row| row.get::(0), - ) { - Ok(v) => { - let version = v.parse::().unwrap(); - if version < 2 { - GLOBALS.first_run.store(true, Ordering::Relaxed); - } - upgrade(db, version) - } - Err(_e) => { - GLOBALS.first_run.store(true, Ordering::Relaxed); - // Check the error first! - upgrade(db, 0) - } - } -} - -fn upgrade(db: &Connection, mut version: usize) -> Result<(), Error> { - if version > UPGRADE_SQL.len() { - panic!( - "Database version {} is newer than this binary which expects version {}.", - version, - UPGRADE_SQL.len() - ); - } - - // Disable foreign key checks during upgrades (some foreign keys relationships - // may be broken, we don't want that to stop us) - db.pragma_update(None, "foreign_keys", "OFF")?; - - while version < UPGRADE_SQL.len() { - tracing::info!("Upgrading database to version {}", version + 1); - db.execute_batch(UPGRADE_SQL[version + 1 - 1])?; - version += 1; - if version < 24 { - // 24 is when we switched to local_settings - db.execute( - "UPDATE settings SET value=? WHERE key='version'", - (version,), - )?; - } else { - db.execute("UPDATE local_settings SET schema_version=?", (version,))?; - } - } - - db.pragma_update(None, "foreign_keys", "ON")?; - - tracing::info!("Database is at version {}", version); - - Ok(()) -} - -pub async fn prune() -> Result<(), Error> { - task::spawn_blocking(move || { - let db = GLOBALS.db.blocking_lock(); - db.execute_batch(include_str!("sql/prune.sql"))?; - Ok::<(), Error>(()) - }) - .await??; - - GLOBALS - .status_queue - .write() - .write("Database prune has completed.".to_owned()); - - Ok(()) -} - -fn normalize_urls() -> Result<(), Error> { - let db = GLOBALS.db.blocking_lock(); - let urls_are_normalized: bool = db.query_row( - "SELECT urls_are_normalized FROM local_settings LIMIT 1", - [], - |row| row.get::(0), - )?; - - if urls_are_normalized { - return Ok(()); - } - - tracing::info!("Normalizing Database URLs (this will take some time)"); - - db.pragma_update(None, "foreign_keys", "OFF")?; - - // relay.url - let sql = "SELECT url FROM relay"; - let mut stmt = db.prepare(sql)?; - let rows = stmt.query([])?; - let all_rows: Vec = rows.map(|row| row.get(0)).collect()?; - for urlkey in all_rows.iter() { - match nostr_types::RelayUrl::try_from_str(urlkey) { - Ok(url) => { - let urlstr = url.as_str().to_owned(); - // Update if not equal - if *urlkey != urlstr { - // this one is too verbose - // tracing::debug!("Updating non-canonical URL from {} to {}", urlkey, urlstr); - let usql = "UPDATE relay SET url=? WHERE url=?"; - let mut stmt = db.prepare(usql)?; - if let Err(e) = stmt.execute((&urlstr, urlkey)) { - if let rusqlite::Error::SqliteFailure(_, Some(ref s)) = e { - if s.contains("constraint failed") { - // Delete this row instead, there is some other row that is already - // what we are trying to turn this row into - let dsql = "DELETE FROM relay WHERE url=?"; - let mut stmt = db.prepare(dsql)?; - stmt.execute((&urlkey,))?; - } - } else { - return Err(e.into()); - } - } - - let usql = "UPDATE person_relay SET relay=? WHERE relay=?"; - let mut stmt = db.prepare(usql)?; - stmt.execute((&urlstr, urlkey))?; - - let usql = "UPDATE event_relay SET relay=? WHERE relay=?"; - let mut stmt = db.prepare(usql)?; - stmt.execute((&urlstr, urlkey))?; - } - } - Err(_) => { - // Delete if did not parse properly - tracing::debug!("Deleting invalid relay url {}", urlkey); - - let dsql = "DELETE FROM relay WHERE url=?"; - let mut stmt = db.prepare(dsql)?; - stmt.execute((urlkey,))?; - - let dsql = "DELETE FROM person_relay WHERE relay=?"; - let mut stmt = db.prepare(dsql)?; - stmt.execute((urlkey,))?; - - let dsql = "DELETE FROM event_relay WHERE relay=?"; - let mut stmt = db.prepare(dsql)?; - stmt.execute((urlkey,))?; - } - }; - } - - let sql = "UPDATE local_settings SET urls_are_normalized=1"; - let mut stmt = db.prepare(sql)?; - stmt.execute(())?; - - Ok(()) -} - -const UPGRADE_SQL: [&str; 37] = [ - include_str!("sql/schema1.sql"), - include_str!("sql/schema2.sql"), - include_str!("sql/schema3.sql"), - include_str!("sql/schema4.sql"), - include_str!("sql/schema5.sql"), - include_str!("sql/schema6.sql"), - include_str!("sql/schema7.sql"), - include_str!("sql/schema8.sql"), - include_str!("sql/schema9.sql"), - include_str!("sql/schema10.sql"), - include_str!("sql/schema11.sql"), - include_str!("sql/schema12.sql"), - include_str!("sql/schema13.sql"), - include_str!("sql/schema14.sql"), - include_str!("sql/schema15.sql"), - include_str!("sql/schema16.sql"), - include_str!("sql/schema17.sql"), - include_str!("sql/schema18.sql"), - include_str!("sql/schema19.sql"), - include_str!("sql/schema20.sql"), - include_str!("sql/schema21.sql"), - include_str!("sql/schema22.sql"), - include_str!("sql/schema23.sql"), - include_str!("sql/schema24.sql"), - include_str!("sql/schema25.sql"), - include_str!("sql/schema26.sql"), - include_str!("sql/schema27.sql"), - include_str!("sql/schema28.sql"), - include_str!("sql/schema29.sql"), - include_str!("sql/schema30.sql"), - include_str!("sql/schema31.sql"), - include_str!("sql/schema32.sql"), - include_str!("sql/schema33.sql"), - include_str!("sql/schema34.sql"), - include_str!("sql/schema35.sql"), - include_str!("sql/schema36.sql"), - include_str!("sql/schema37.sql"), -]; diff --git a/src/db/sql/prune.sql b/src/db/sql/prune.sql deleted file mode 100644 index 759e7b46..00000000 --- a/src/db/sql/prune.sql +++ /dev/null @@ -1,22 +0,0 @@ - -PRAGMA foreign_keys = ON; - --- Delete stale kind=0,3 events (keep the last one) -DELETE FROM event WHERE kind IN (0,3) AND created_at != (SELECT max(created_at) FROM event as event_inner WHERE kind=event.kind AND pubkey=event.pubkey); - --- Delete overridden replaceable events -DELETE FROM event WHERE kind>=10000 and kind<20000 AND created_at != (SELECT max(created_at) FROM event as event_inner WHERE kind=event.kind AND pubkey=event.pubkey); - --- Delete all ephemeral events -DELETE FROM event WHERE kind>=20000 and kind<30000; - --- Delete kind=1 events older than 1 week -DELETE FROM event WHERE kind!=0 AND kind!=3 AND kind!=10001 AND created_at < strftime('%s', 'now') - 60*60*24*7; - --- Due to foreign keys and cascades, the following will also be cleaned up --- event_relationship --- event_hashtag --- event_tag --- event_seen - -VACUUM; diff --git a/src/db/sql/schema1.sql b/src/db/sql/schema1.sql deleted file mode 100644 index 06194b36..00000000 --- a/src/db/sql/schema1.sql +++ /dev/null @@ -1,78 +0,0 @@ -CREATE TABLE settings ( - key TEXT PRIMARY KEY NOT NULL, - value TEXT NOT NULL -) WITHOUT ROWID; - -CREATE TABLE person ( - pubkey TEXT PRIMARY KEY NOT NULL, - name TEXT DEFAULT NULL, - about TEXT DEFAULT NULL, - picture TEXT DEFAULT NULL, - dns_id TEXT DEFAULT NULL, - dns_id_valid INTEGER DEFAULT 0, - dns_id_last_checked INTEGER DEFAULT NULL, - metadata_at INTEGER DEFAULT NULL, - followed INTEGER DEFAULT 0 -) WITHOUT ROWID; - -CREATE TABLE relay ( - url TEXT PRIMARY KEY NOT NULL, - success_count INTEGER NOT NULL DEFAULT 0, - failure_count INTEGER NOT NULL DEFAULT 0, - rank INTEGER DEFAULT 3 -) WITHOUT ROWID; - -CREATE TABLE person_relay ( - person TEXT NOT NULL, - relay TEXT NOT NULL, - recommended INTEGER DEFAULT 0, - last_fetched INTEGER DEFAULT NULL, - UNIQUE(person, relay) -); - -CREATE TABLE contact ( - source TEXT NOT NULL, - contact TEXT NOT NULL, - relay TEXT DEFAULT NULL, - petname TEXT DEFAULT NULL, - UNIQUE(source, contact) -); - -CREATE TABLE event ( - id TEXT PRIMARY KEY NOT NULL, - raw TEXT NOT NULL, - pubkey TEXT NOT NULL, - created_at INTEGER NOT NULL, - kind INTEGER NOT NULL, - content TEXT NOT NULL, - ots TEXT DEFAULT NULL -) WITHOUT ROWID; - -CREATE TABLE event_tag ( - event TEXT NOT NULL, - seq INTEGER NOT NULL, - label TEXT DEFAULT NULL, - field0 TEXT DEFAULT NULL, - field1 TEXT DEFAULT NULL, - field2 TEXT DEFAULT NULL, - field3 TEXT DEFAULT NULL, - CONSTRAINT fk_event - FOREIGN KEY (event) REFERENCES event (id) - ON DELETE CASCADE -); - -CREATE TABLE event_seen ( - event TEXT NOT NULL, - relay TEXT NOT NULL, - when_seen INTEGER NOT NULL, - UNIQUE (event, relay), - CONSTRAINT fk_event - FOREIGN KEY (event) REFERENCES event (id) - ON DELETE CASCADE -); - -INSERT INTO settings (key, value) values ('version', '1'); --- INSERT INTO settings (key, value) values ('user_private_key', ''); -- no setting if no key -INSERT INTO settings (key, value) values ('overlap', '600'); -INSERT INTO settings (key, value) values ('feed_chunk', '43200'); -INSERT INTO settings (key, value) values ('autofollow', '0'); diff --git a/src/db/sql/schema10.sql b/src/db/sql/schema10.sql deleted file mode 100644 index eed3e007..00000000 --- a/src/db/sql/schema10.sql +++ /dev/null @@ -1,5 +0,0 @@ -ALTER TABLE relay RENAME COLUMN last_success_at TO last_connected_at; -ALTER TABLE relay ADD COLUMN last_general_eose_at INTEGER DEFAULT NULL; - --- Start at last_connected_at -UPDATE relay SET last_general_eose_at = last_connected_at; diff --git a/src/db/sql/schema11.sql b/src/db/sql/schema11.sql deleted file mode 100644 index 4b5d4492..00000000 --- a/src/db/sql/schema11.sql +++ /dev/null @@ -1,2 +0,0 @@ -UPDATE settings SET key='thread_view_ancestors' WHERE key='view_posts_referred_to'; -UPDATE settings SET key='thread_view_replies' WHERE key='view_posts_referring_to'; diff --git a/src/db/sql/schema12.sql b/src/db/sql/schema12.sql deleted file mode 100644 index 976ca749..00000000 --- a/src/db/sql/schema12.sql +++ /dev/null @@ -1,24 +0,0 @@ - -ALTER TABLE event_hashtag RENAME TO event_hashtag_old; -CREATE TABLE event_hashtag ( - event TEXT NOT NULL, - hashtag TEXT NOT NULL, - UNIQUE(event, hashtag), - CONSTRAINT fk_event FOREIGN KEY (event) REFERENCES event (id) ON DELETE CASCADE -); -INSERT OR IGNORE INTO event_hashtag (event, hashtag) SELECT event, hashtag FROM event_hashtag_old; -DROP TABLE event_hashtag_old; - - -ALTER TABLE event_relationship RENAME TO event_relationship_old; -CREATE TABLE event_relationship ( - original TEXT NOT NULL, - refers_to TEXT NOT NULL, - relationship TEXT CHECK (relationship IN ('reply', 'quote', 'reaction', 'deletion')) NOT NULL, - content TEXT DEFAULT NULL, - CONSTRAINT fk_original FOREIGN KEY (original) REFERENCES event (id) ON DELETE CASCADE, - UNIQUE(original, refers_to) -); -INSERT OR IGNORE INTO event_relationship (original, refers_to, relationship, content) - SELECT original, referring, relationship, content FROM event_relationship_old; -DROP TABLE event_relationship_old; diff --git a/src/db/sql/schema13.sql b/src/db/sql/schema13.sql deleted file mode 100644 index e411b5eb..00000000 --- a/src/db/sql/schema13.sql +++ /dev/null @@ -1,7 +0,0 @@ - --- I tried to merge records with relays ending in '/' to records where they didn't, but SQLITE makes it very hard to update joins (you can't do it directly, and I think the join ON clause is too complex to use EXISTS tricks). --- So I'm just going to delete such records. The data lost is statistical and not critical. - -DELETE FROM event_seen WHERE SUBSTR(relay, LENGTH(relay), 1) == '/'; -DELETE FROM person_relay WHERE SUBSTR(relay, LENGTH(relay), 1) == '/'; -DELETE FROM relay WHERE SUBSTR(url, LENGTH(url), 1) == '/'; diff --git a/src/db/sql/schema14.sql b/src/db/sql/schema14.sql deleted file mode 100644 index 965b5df6..00000000 --- a/src/db/sql/schema14.sql +++ /dev/null @@ -1,31 +0,0 @@ - -ALTER TABLE person RENAME TO person_old; - -CREATE TABLE person ( - pubkey TEXT PRIMARY KEY NOT NULL, - metadata TEXT DEFAULT NULL, - metadata_at integer default null, - nip05_valid INTEGER DEFAULT 0, - nip05_last_checked INTEGER DEFAULT NULL, - followed INTEGER DEFAULT 0, - followed_last_updated INTEGER NOT NULL DEFAULT 0 -) WITHOUT ROWID; - - -INSERT INTO person ( - pubkey, - metadata, metadata_at, - nip05_valid, nip05_last_checked, - followed, followed_last_updated -) -SELECT - pubkey, - json_object('name', name, 'about', about, 'picture', picture, 'nip05', dns_id), - metadata_at, - dns_id_valid, dns_id_last_checked, - followed, followed_last_updated -FROM person_old; - -UPDATE person SET metadata=null WHERE metadata_at is null; - -DROP TABLE person_old; diff --git a/src/db/sql/schema15.sql b/src/db/sql/schema15.sql deleted file mode 100644 index d05c5d4f..00000000 --- a/src/db/sql/schema15.sql +++ /dev/null @@ -1,3 +0,0 @@ --- Reset every person.metadata_at so it will be reloaded (probably from local events) --- with code that now handles the additional fields -update person set metadata_at = null; diff --git a/src/db/sql/schema16.sql b/src/db/sql/schema16.sql deleted file mode 100644 index 17247292..00000000 --- a/src/db/sql/schema16.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE person ADD COLUMN - muted INTEGER DEFAULT 0; diff --git a/src/db/sql/schema17.sql b/src/db/sql/schema17.sql deleted file mode 100644 index f76b8aa2..00000000 --- a/src/db/sql/schema17.sql +++ /dev/null @@ -1,11 +0,0 @@ - --- I tried to merge records with relays ending in '/' to records where they didn't, but SQLITE makes it very hard to update joins (you can't do it directly, and I think the join ON clause is too complex to use EXISTS tricks). --- So I'm just going to delete such records. The data lost is statistical and not critical. - -DELETE FROM event_seen WHERE SUBSTR(relay, LENGTH(relay), 1) == '/'; -DELETE FROM person_relay WHERE SUBSTR(relay, LENGTH(relay), 1) == '/'; -DELETE FROM relay WHERE SUBSTR(url, LENGTH(url), 1) == '/'; - -DELETE FROM event_seen WHERE SUBSTR(relay, 0, 15) == 'wss://127.0.0.1'; -DELETE FROM person_relay WHERE SUBSTR(relay, 0, 15) == 'wss://127.0.0.1'; -DELETE FROM relay WHERE SUBSTR(url, 0, 15) == 'wss://127.0.0.1'; diff --git a/src/db/sql/schema18.sql b/src/db/sql/schema18.sql deleted file mode 100644 index 61887ffc..00000000 --- a/src/db/sql/schema18.sql +++ /dev/null @@ -1,17 +0,0 @@ - --- Again this is a PITA to merge these. --- So I'm just going to delete such records --- This data is mostly just statistical (but we might lose some person-relay pairs) - -DELETE FROM relay WHERE url LIKE ' %'; -DELETE FROM relay WHERE url LIKE '% '; -DELETE FROM relay WHERE url LIKE ' %'; -DELETE FROM relay WHERE url LIKE '% '; -DELETE FROM person_relay WHERE relay LIKE ' %'; -DELETE FROM person_relay WHERE relay LIKE '% '; -DELETE FROM person_relay WHERE relay LIKE ' %'; -DELETE FROM person_relay WHERE relay LIKE '% '; -DELETE FROM event_seen WHERE relay LIKE ' %'; -DELETE FROM event_seen WHERE relay LIKE '% '; -DELETE FROM event_seen WHERE relay LIKE ' %'; -DELETE FROM event_seen WHERE relay LIKE '% '; diff --git a/src/db/sql/schema19.sql b/src/db/sql/schema19.sql deleted file mode 100644 index 5e6e6e27..00000000 --- a/src/db/sql/schema19.sql +++ /dev/null @@ -1,5 +0,0 @@ -ALTER TABLE relay ADD COLUMN rank_new INTEGER NOT NULL DEFAULT 3; -UPDATE relay SET rank_new = rank; -ALTER TABLE relay DROP COLUMN rank; -ALTER TABLE relay RENAME COLUMN rank_new TO rank; - diff --git a/src/db/sql/schema2.sql b/src/db/sql/schema2.sql deleted file mode 100644 index 361a87da..00000000 --- a/src/db/sql/schema2.sql +++ /dev/null @@ -1,4 +0,0 @@ - -INSERT INTO settings (key, value) values ('view_posts_referred_to', '1'); -INSERT INTO settings (key, value) values ('view_posts_referring_to', '0'); -INSERT INTO settings (key, value) values ('view_threaded', '1'); diff --git a/src/db/sql/schema20.sql b/src/db/sql/schema20.sql deleted file mode 100644 index afd2d8e9..00000000 --- a/src/db/sql/schema20.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE person ADD COLUMN contact_list_last_received INTEGER NOT NULL DEFAULT 0; diff --git a/src/db/sql/schema21.sql b/src/db/sql/schema21.sql deleted file mode 100644 index 51975360..00000000 --- a/src/db/sql/schema21.sql +++ /dev/null @@ -1,8 +0,0 @@ - -ALTER TABLE person_relay ADD COLUMN read INTEGER NOT NULL DEFAULT 0; -ALTER TABLE person_relay ADD COLUMN write INTEGER NOT NULL DEFAULT 0; -ALTER TABLE person RENAME COLUMN contact_list_last_received TO relay_list_last_received; -ALTER TABLE person ADD COLUMN relay_list_created_at INTEGER NOT NULL DEFAULT 0; -ALTER TABLE relay RENAME COLUMN post TO write; -ALTER TABLE relay ADD COLUMN read INTEGER NOT NULL DEFAULT 0; -ALTER TABLE relay ADD COLUMN advertise INTEGER NOT NULL DEFAULT 0; diff --git a/src/db/sql/schema22.sql b/src/db/sql/schema22.sql deleted file mode 100644 index d2c64640..00000000 --- a/src/db/sql/schema22.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE person_relay DROP COLUMN last_suggested_nip23; diff --git a/src/db/sql/schema23.sql b/src/db/sql/schema23.sql deleted file mode 100644 index f7b8daff..00000000 --- a/src/db/sql/schema23.sql +++ /dev/null @@ -1,3 +0,0 @@ -ALTER TABLE person_relay DROP COLUMN last_suggested_kind2; -ALTER TABLE person_relay ADD COLUMN manually_paired_read INTEGER NOT NULL DEFAULT 0; -ALTER TABLE person_relay ADD COLUMN manually_paired_write INTEGER NOT NULL DEFAULT 0; diff --git a/src/db/sql/schema24.sql b/src/db/sql/schema24.sql deleted file mode 100644 index 103508fb..00000000 --- a/src/db/sql/schema24.sql +++ /dev/null @@ -1,27 +0,0 @@ --- unused setting -DELETE FROM settings WHERE key='autofollow'; -DELETE FROM settings WHERE key='thread_view_ancestors'; -DELETE FROM settings WHERE key='thread_view_replies'; -DELETE FROM settings WHERE key='view_posts_referred_to'; -DELETE FROM settings WHERE key='view_posts_referring_to'; -DELETE FROM settings WHERE key='view_threaded'; - --- unused table -DROP TABLE contact; - --- missing data -ALTER TABLE person ADD COLUMN petname TEXT DEFAULT NULL; - --- move local settings -CREATE TABLE local_settings ( - schema_version INTEGER DEFAULT 0, - encrypted_private_key TEXT DEFAULT NULL -); - -INSERT INTO local_settings (schema_version, encrypted_private_key) -SELECT - (SELECT value FROM settings WHERE settings.key='version'), - (SELECT value FROM settings WHERE settings.key='encrypted_private_key'); - -DELETE FROM settings WHERE key='version'; -DELETE FROM settings WHERE key='encrypted_private_key'; diff --git a/src/db/sql/schema25.sql b/src/db/sql/schema25.sql deleted file mode 100644 index 8773a42a..00000000 --- a/src/db/sql/schema25.sql +++ /dev/null @@ -1,2 +0,0 @@ --- This just lets pre-version-24 code know that this database is beyond them -INSERT INTO settings (key, value) VALUES ('version', '25'); diff --git a/src/db/sql/schema26.sql b/src/db/sql/schema26.sql deleted file mode 100644 index 403104f4..00000000 --- a/src/db/sql/schema26.sql +++ /dev/null @@ -1,2 +0,0 @@ -insert into settings (key, value) values ('dark_mode', 1 - coalesce((SELECT value FROM settings WHERE key='light_mode'), 1)); -delete from settings where key = 'light_mode'; diff --git a/src/db/sql/schema27.sql b/src/db/sql/schema27.sql deleted file mode 100644 index 96067124..00000000 --- a/src/db/sql/schema27.sql +++ /dev/null @@ -1,13 +0,0 @@ --- New indices for event_tag --- The sub-query in build_tag_condition filters by label and field0 -CREATE INDEX event_tag_lf0 ON event_tag(label, field0); --- populate_new_relays filters by label and field1 -CREATE INDEX event_tag_lf1 ON event_tag(label, field1); --- The LEFT JOIN in fetch_reply_related filters by event, label and field0 -CREATE INDEX event_tag_elf0 ON event_tag(event, label, field0); - --- New indices for event --- fetch_last_contact_list filters by kind and pubkey, then sorts by created_at -CREATE INDEX event_pkc ON event(pubkey, kind, created_at); --- The LEFT JOIN in fetch_reply_related filters by id, kind and created_at -CREATE UNIQUE INDEX event_ikc ON event(id, kind, created_at); diff --git a/src/db/sql/schema28.sql b/src/db/sql/schema28.sql deleted file mode 100644 index 7388a650..00000000 --- a/src/db/sql/schema28.sql +++ /dev/null @@ -1,5 +0,0 @@ -CREATE TABLE event_flags ( - event TEXT PRIMARY KEY NOT NULL, - viewed INTEGER NOT NULL DEFAULT 0, - CONSTRAINT fk_event FOREIGN KEY (event) REFERENCES event (id) ON DELETE CASCADE -); diff --git a/src/db/sql/schema29.sql b/src/db/sql/schema29.sql deleted file mode 100644 index d6a9e52a..00000000 --- a/src/db/sql/schema29.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE event_seen RENAME TO event_relay; diff --git a/src/db/sql/schema3.sql b/src/db/sql/schema3.sql deleted file mode 100644 index eb183c52..00000000 --- a/src/db/sql/schema3.sql +++ /dev/null @@ -1,21 +0,0 @@ - -ALTER TABLE person_relay ADD COLUMN last_suggested_kind2 INTEGER DEFAULT NULL; -ALTER TABLE person_relay ADD COLUMN last_suggested_kind3 INTEGER DEFAULT NULL; -ALTER TABLE person_relay ADD COLUMN last_suggested_nip23 INTEGER DEFAULT NULL; -ALTER TABLE person_relay ADD COLUMN last_suggested_nip35 INTEGER DEFAULT NULL; -ALTER TABLE person_relay ADD COLUMN last_suggested_bytag INTEGER DEFAULT NULL; -ALTER TABLE person_relay DROP COLUMN recommended; - -CREATE TABLE event_relationship ( - original TEXT NOT NULL, - referring TEXT NOT NULL, - relationship TEXT CHECK (relationship IN ('reply', 'quote', 'reaction', 'deletion')) NOT NULL, - content TEXT DEFAULT NULL, - UNIQUE(original, referring) -); - -CREATE TABLE event_hashtag ( - event TEXT NOT NULL, - hashtag TEXT NOT NULL, - UNIQUE(event, hashtag) -); diff --git a/src/db/sql/schema30.sql b/src/db/sql/schema30.sql deleted file mode 100644 index 673ff61a..00000000 --- a/src/db/sql/schema30.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE local_settings ADD COLUMN urls_are_normalized INTEGER NOT NULL DEFAULT 0; diff --git a/src/db/sql/schema31.sql b/src/db/sql/schema31.sql deleted file mode 100644 index 2bd35980..00000000 --- a/src/db/sql/schema31.sql +++ /dev/null @@ -1,39 +0,0 @@ -INSERT INTO person (pubkey) SELECT distinct person FROM person_relay WHERE person NOT IN (select pubkey from person); - -ALTER TABLE person_relay RENAME TO old_person_relay; -CREATE TABLE person_relay ( - person TEXT NOT NULL, - relay TEXT NOT NULL, - last_fetched INTEGER DEFAULT NULL, - last_suggested_kind3 INTEGER DEFAULT NULL, - last_suggested_nip05 INTEGER DEFAULT NULL, - last_suggested_bytag INTEGER DEFAULT NULL, - read INTEGER NOT NULL DEFAULT 0, - write INTEGER NOT NULL DEFAULT 0, - manually_paired_read INTEGER NOT NULL DEFAULT 0, - manually_paired_write INTEGER NOT NULL DEFAULT 0, - UNIQUE(person, relay), - CONSTRAINT person_relay_fk_person FOREIGN KEY (person) REFERENCES person (pubkey) ON DELETE CASCADE, - CONSTRAINT person_relay_fk_relay FOREIGN KEY (relay) REFERENCES relay (url) ON DELETE CASCADE -); -INSERT OR IGNORE INTO person_relay (person, relay, last_fetched, last_suggested_kind3, last_suggested_nip05, - last_suggested_bytag, read, write, manually_paired_read, manually_paired_write) - SELECT person, relay, last_fetched, last_suggested_kind3, last_suggested_nip05, - last_suggested_bytag, read, write, manually_paired_read, manually_paired_write - FROM old_person_relay; -DROP TABLE old_person_relay; - -DELETE FROM event_relay WHERE event NOT IN (select id from event); - -ALTER TABLE event_relay RENAME TO old_event_relay; -CREATE TABLE event_relay ( - event TEXT NOT NULL, - relay TEXT NOT NULL, - when_seen INTEGER NOT NULL, - UNIQUE (event, relay), - CONSTRAINT event_relay_fk_event FOREIGN KEY (event) REFERENCES event (id) ON DELETE CASCADE, - CONSTRAINT event_relay_fk_relay FOREIGN KEY (relay) REFERENCES relay (url) ON DELETE CASCADE -); -INSERT OR IGNORE INTO event_relay (event, relay, when_seen) - SELECT event, relay, when_seen FROM old_event_relay; -DROP TABLE old_event_relay; diff --git a/src/db/sql/schema32.sql b/src/db/sql/schema32.sql deleted file mode 100644 index e9a84a2f..00000000 --- a/src/db/sql/schema32.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE relay ADD COLUMN hidden INTEGER DEFAULT 0; diff --git a/src/db/sql/schema33.sql b/src/db/sql/schema33.sql deleted file mode 100644 index c65c9a26..00000000 --- a/src/db/sql/schema33.sql +++ /dev/null @@ -1,4 +0,0 @@ -ALTER TABLE local_settings ADD COLUMN last_contact_list_edit INTEGER NOT NULL DEFAULT 0; - --- Initial value (may not be correct but we don't have the actual value) -UPDATE OR IGNORE local_settings SET last_contact_list_edit=(SELECT created_at FROM event WHERE pubkey=(SELECT value FROM settings WHERE key='public_key') AND kind=3 ORDER BY created_at DESC LIMIT 1); diff --git a/src/db/sql/schema34.sql b/src/db/sql/schema34.sql deleted file mode 100644 index a63d10cc..00000000 --- a/src/db/sql/schema34.sql +++ /dev/null @@ -1,77 +0,0 @@ -CREATE TABLE relay_new ( - url TEXT PRIMARY KEY NOT NULL, - success_count INTEGER NOT NULL DEFAULT 0, - failure_count INTEGER NOT NULL DEFAULT 0, - last_connected_at INTEGER DEFAULT NULL, - last_general_eose_at INTEGER DEFAULT NULL, - rank INTEGER NOT NULL DEFAULT 3, - hidden INTEGER NOT NULL DEFAULT 0, - usage_bits INTEGER NOT NULL DEFAULT 0 -) WITHOUT ROWID; - -INSERT INTO relay_new ( - url, success_count, failure_count, last_connected_at, last_general_eose_at, - rank, hidden, usage_bits -) SELECT - url, success_count, failure_count, last_connected_at, last_general_eose_at, - rank, hidden, ((read * 1) + (write * 2) + (advertise * 4) + (read * 8) + (write * 16) + (read * 32)) - FROM relay; - --- We have to rebuild person_relay since its foreign key now needs to point to relay_new -CREATE TABLE person_relay_new ( - person TEXT NOT NULL, - relay TEXT NOT NULL, - last_fetched INTEGER DEFAULT NULL, - last_suggested_kind3 INTEGER DEFAULT NULL, - last_suggested_nip05 INTEGER DEFAULT NULL, - last_suggested_bytag INTEGER DEFAULT NULL, - read INTEGER NOT NULL DEFAULT 0, - write INTEGER NOT NULL DEFAULT 0, - manually_paired_read INTEGER NOT NULL DEFAULT 0, - manually_paired_write INTEGER NOT NULL DEFAULT 0, - UNIQUE(person, relay), - CONSTRAINT person_relay_fk_person FOREIGN KEY (person) REFERENCES person (pubkey) ON DELETE CASCADE, - CONSTRAINT person_relay_fk_relay FOREIGN KEY (relay) REFERENCES relay_new (url) ON DELETE CASCADE -); -INSERT INTO person_relay_new ( - person, relay, last_fetched, last_suggested_kind3, - last_suggested_nip05, last_suggested_bytag, read, write, - manually_paired_read, manually_paired_write -) SELECT - person, relay, last_fetched, last_suggested_kind3, - last_suggested_nip05, last_suggested_bytag, read, write, - manually_paired_read, manually_paired_write - FROM person_relay; - - --- We have to rebuild event_relay since its foreign key now needs to point to relay_new -CREATE TABLE event_relay_new ( - event TEXT NOT NULL, - relay TEXT NOT NULL, - when_seen INTEGER NOT NULL, - UNIQUE (event, relay), - CONSTRAINT event_relay_fk_event FOREIGN KEY (event) REFERENCES event (id) ON DELETE CASCADE, - CONSTRAINT event_relay_fk_relay FOREIGN KEY (relay) REFERENCES relay_new (url) ON DELETE CASCADE -); -INSERT INTO event_relay_new (event, relay, when_seen) SELECT event, relay, when_seen FROM event_relay; - - --- Now lets replace the tables -ALTER TABLE person_relay RENAME TO person_relay_old; -ALTER TABLE person_relay_new RENAME TO person_relay; - -ALTER TABLE event_relay RENAME TO event_relay_old; -ALTER TABLE event_relay_new RENAME TO event_relay; - -ALTER TABLE relay RENAME TO relay_old; -ALTER TABLE relay_new RENAME TO relay; - --- And drop the old ones -DROP TABLE person_relay_old; -DROP TABLE event_relay_old; -DROP TABLE relay_old; - - - - - diff --git a/src/db/sql/schema35.sql b/src/db/sql/schema35.sql deleted file mode 100644 index 532b8197..00000000 --- a/src/db/sql/schema35.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE relay ADD COLUMN nip11 TEXT DEFAULT NULL; -ALTER TABLE relay ADD COLUMN last_attempt_nip11 INTEGER DEFAULT NULL; diff --git a/src/db/sql/schema36.sql b/src/db/sql/schema36.sql deleted file mode 100644 index 7d14bb57..00000000 --- a/src/db/sql/schema36.sql +++ /dev/null @@ -1 +0,0 @@ -DROP TABLE event_relationship; diff --git a/src/db/sql/schema37.sql b/src/db/sql/schema37.sql deleted file mode 100644 index 8abdff41..00000000 --- a/src/db/sql/schema37.sql +++ /dev/null @@ -1,60 +0,0 @@ - -CREATE TABLE person_new ( - pubkey TEXT PRIMARY KEY NOT NULL, - petname TEXT DEFAULT NULL, - followed INTEGER NOT NULL DEFAULT 0, - followed_last_updated INTEGER NOT NULL DEFAULT 0, - muted INTEGER NOT NULL DEFAULT 0, - metadata TEXT DEFAULT NULL, - metadata_created_at INTEGER DEFAULT NULL, - metadata_last_received INTEGER NOT NULL DEFAULT 0, - nip05_valid INTEGER NOT NULL DEFAULT 0, - nip05_last_checked INTEGER DEFAULT NULL, - relay_list_created_at INTEGER DEFAULT NULL, - relay_list_last_received INTEGER NOT NULL DEFAULT 0 -) WITHOUT ROWID; - -INSERT INTO person_new ( - pubkey, petname, followed, followed_last_updated, muted, - metadata, metadata_created_at, metadata_last_received, - nip05_valid, nip05_last_checked, - relay_list_created_at, relay_list_last_received -) SELECT - pubkey, petname, IFNULL(followed,0), followed_last_updated, IFNULL(muted,0), - metadata, IFNULL(metadata_at,0), 0, - IFNULL(nip05_valid,0), nip05_last_checked, - relay_list_created_at, relay_list_last_received -FROM person; - --- SQLite does not update constraints when you rename tables. --- so we have to do this manually. -CREATE TABLE IF NOT EXISTS "person_relay_new" ( - person TEXT NOT NULL, - relay TEXT NOT NULL, - last_fetched INTEGER DEFAULT NULL, - last_suggested_kind3 INTEGER DEFAULT NULL, - last_suggested_nip05 INTEGER DEFAULT NULL, - last_suggested_bytag INTEGER DEFAULT NULL, - read INTEGER NOT NULL DEFAULT 0, - write INTEGER NOT NULL DEFAULT 0, - manually_paired_read INTEGER NOT NULL DEFAULT 0, - manually_paired_write INTEGER NOT NULL DEFAULT 0, - UNIQUE(person, relay), - CONSTRAINT person_relay_fk_person FOREIGN KEY (person) REFERENCES "person_new" (pubkey) ON DELETE CASCADE, - CONSTRAINT person_relay_fk_relay FOREIGN KEY (relay) REFERENCES "relay" (url) ON DELETE CASCADE -); -INSERT INTO person_relay_new - SELECT person, relay, last_fetched, last_suggested_kind3, last_suggested_nip05, - last_suggested_bytag, read, write, manually_paired_read, manually_paired_write - FROM person_relay; - -UPDATE person_new SET relay_list_created_at=NULL WHERE relay_list_created_at=0; - -ALTER TABLE person RENAME TO person_old; -ALTER TABLE person_relay RENAME TO person_relay_old; - -ALTER TABLE person_new RENAME TO person; -ALTER TABLE person_relay_new RENAME TO person_relay; - -DROP TABLE person_old; -DROP TABLE person_relay_old; diff --git a/src/db/sql/schema4.sql b/src/db/sql/schema4.sql deleted file mode 100644 index a6eab966..00000000 --- a/src/db/sql/schema4.sql +++ /dev/null @@ -1,23 +0,0 @@ - -ALTER TABLE relay ADD COLUMN last_success_at INTEGER DEFAULT NULL; - -PRAGMA foreign_keys=off; -BEGIN TRANSACTION; -ALTER TABLE event_tag RENAME TO event_tag_old; -CREATE TABLE event_tag ( - event TEXT NOT NULL, - seq INTEGER NOT NULL, - label TEXT DEFAULT NULL, - field0 TEXT DEFAULT NULL, - field1 TEXT DEFAULT NULL, - field2 TEXT DEFAULT NULL, - field3 TEXT DEFAULT NULL, - UNIQUE (event, seq), - CONSTRAINT fk_event - FOREIGN KEY (event) REFERENCES event (id) - ON DELETE CASCADE -); -INSERT OR IGNORE INTO event_tag SELECT * FROM event_tag_old; -COMMIT; -PRAGMA foreign_keys=on; -DROP TABLE event_tag_old; diff --git a/src/db/sql/schema5.sql b/src/db/sql/schema5.sql deleted file mode 100644 index 29e5b14c..00000000 --- a/src/db/sql/schema5.sql +++ /dev/null @@ -1,2 +0,0 @@ -INSERT INTO settings (key, value) values ('num_relays_per_person', '2'); -INSERT INTO settings (key, value) values ('max_relays', '15'); diff --git a/src/db/sql/schema6.sql b/src/db/sql/schema6.sql deleted file mode 100644 index 1f60df03..00000000 --- a/src/db/sql/schema6.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE relay ADD COLUMN post INTEGER NOT NULL DEFAULT 0; diff --git a/src/db/sql/schema7.sql b/src/db/sql/schema7.sql deleted file mode 100644 index aebd094f..00000000 --- a/src/db/sql/schema7.sql +++ /dev/null @@ -1 +0,0 @@ --- This used to have code which has been removed. diff --git a/src/db/sql/schema8.sql b/src/db/sql/schema8.sql deleted file mode 100644 index 0d616a6e..00000000 --- a/src/db/sql/schema8.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE person_relay RENAME COLUMN last_suggested_nip35 TO last_suggested_nip05; diff --git a/src/db/sql/schema9.sql b/src/db/sql/schema9.sql deleted file mode 100644 index e1000687..00000000 --- a/src/db/sql/schema9.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE person ADD COLUMN followed_last_updated INTEGER NOT NULL DEFAULT 0; diff --git a/src/ui/settings.rs b/src/ui/settings.rs index f619d3e7..735df901 100644 --- a/src/ui/settings.rs +++ b/src/ui/settings.rs @@ -288,17 +288,6 @@ pub(super) fn update(app: &mut GossipUi, ctx: &Context, _frame: &mut eframe::Fra ui.add_space(12.0); ui.separator(); ui.add_space(12.0); - - if ui.button("Prune Database") - .on_hover_text("This will delete overridden events, events older than a week, and related data while keeping everything important. It can take MANY MINUTES to complete, and when complete there will be a status message indicating so. Also, because the database will be very busy, best not to use gossip while pruning, just wait.") - .clicked() { - GLOBALS.status_queue.write().write( - "Pruning database, please wait (this takes a long time)...".to_owned() - ); - let _ = GLOBALS.to_overlord.send(ToOverlordMessage::PruneDatabase); - } - - ui.add_space(12.0); }); }); });