From afc2973036ba773892947f4b79f6515c7a7fcb90 Mon Sep 17 00:00:00 2001 From: Mike Dilger Date: Wed, 15 Nov 2023 10:51:01 +1300 Subject: [PATCH] Remove SQLite3 code --- Cargo.lock | 53 -- README.md | 4 + gossip-lib/Cargo.toml | 1 - gossip-lib/src/error.rs | 8 - gossip-lib/src/storage/import/legacy/mod.rs | 227 --------- .../src/storage/import/legacy/sql/schema1.sql | 78 --- .../storage/import/legacy/sql/schema10.sql | 5 - .../storage/import/legacy/sql/schema11.sql | 2 - .../storage/import/legacy/sql/schema12.sql | 24 - .../storage/import/legacy/sql/schema13.sql | 7 - .../storage/import/legacy/sql/schema14.sql | 31 -- .../storage/import/legacy/sql/schema15.sql | 3 - .../storage/import/legacy/sql/schema16.sql | 2 - .../storage/import/legacy/sql/schema17.sql | 11 - .../storage/import/legacy/sql/schema18.sql | 17 - .../storage/import/legacy/sql/schema19.sql | 5 - .../src/storage/import/legacy/sql/schema2.sql | 4 - .../storage/import/legacy/sql/schema20.sql | 1 - .../storage/import/legacy/sql/schema21.sql | 8 - .../storage/import/legacy/sql/schema22.sql | 1 - .../storage/import/legacy/sql/schema23.sql | 3 - .../storage/import/legacy/sql/schema24.sql | 27 - .../storage/import/legacy/sql/schema25.sql | 2 - .../storage/import/legacy/sql/schema26.sql | 2 - .../storage/import/legacy/sql/schema27.sql | 13 - .../storage/import/legacy/sql/schema28.sql | 5 - .../storage/import/legacy/sql/schema29.sql | 1 - .../src/storage/import/legacy/sql/schema3.sql | 21 - .../storage/import/legacy/sql/schema30.sql | 1 - .../storage/import/legacy/sql/schema31.sql | 39 -- .../storage/import/legacy/sql/schema32.sql | 1 - .../storage/import/legacy/sql/schema33.sql | 4 - .../storage/import/legacy/sql/schema34.sql | 77 --- .../storage/import/legacy/sql/schema35.sql | 2 - .../storage/import/legacy/sql/schema36.sql | 1 - .../storage/import/legacy/sql/schema37.sql | 60 --- .../src/storage/import/legacy/sql/schema4.sql | 23 - .../src/storage/import/legacy/sql/schema5.sql | 2 - .../src/storage/import/legacy/sql/schema6.sql | 1 - .../src/storage/import/legacy/sql/schema7.sql | 1 - .../src/storage/import/legacy/sql/schema8.sql | 1 - .../src/storage/import/legacy/sql/schema9.sql | 1 - gossip-lib/src/storage/import/mod.rs | 463 ------------------ .../src/storage/migrations/deprecated.rs | 28 -- gossip-lib/src/storage/migrations/mod.rs | 12 + gossip-lib/src/storage/mod.rs | 21 +- gossip-lib/src/storage/types/theme1.rs | 8 - 47 files changed, 23 insertions(+), 1289 deletions(-) delete mode 100644 gossip-lib/src/storage/import/legacy/mod.rs delete mode 100644 gossip-lib/src/storage/import/legacy/sql/schema1.sql delete mode 100644 gossip-lib/src/storage/import/legacy/sql/schema10.sql delete mode 100644 gossip-lib/src/storage/import/legacy/sql/schema11.sql delete mode 100644 gossip-lib/src/storage/import/legacy/sql/schema12.sql delete mode 100644 gossip-lib/src/storage/import/legacy/sql/schema13.sql delete mode 100644 gossip-lib/src/storage/import/legacy/sql/schema14.sql delete mode 100644 gossip-lib/src/storage/import/legacy/sql/schema15.sql delete mode 100644 gossip-lib/src/storage/import/legacy/sql/schema16.sql delete mode 100644 gossip-lib/src/storage/import/legacy/sql/schema17.sql delete mode 100644 gossip-lib/src/storage/import/legacy/sql/schema18.sql delete mode 100644 gossip-lib/src/storage/import/legacy/sql/schema19.sql delete mode 100644 gossip-lib/src/storage/import/legacy/sql/schema2.sql delete mode 100644 gossip-lib/src/storage/import/legacy/sql/schema20.sql delete mode 100644 gossip-lib/src/storage/import/legacy/sql/schema21.sql delete mode 100644 gossip-lib/src/storage/import/legacy/sql/schema22.sql delete mode 100644 gossip-lib/src/storage/import/legacy/sql/schema23.sql delete mode 100644 gossip-lib/src/storage/import/legacy/sql/schema24.sql delete mode 100644 gossip-lib/src/storage/import/legacy/sql/schema25.sql delete mode 100644 gossip-lib/src/storage/import/legacy/sql/schema26.sql delete mode 100644 gossip-lib/src/storage/import/legacy/sql/schema27.sql delete mode 100644 gossip-lib/src/storage/import/legacy/sql/schema28.sql delete mode 100644 gossip-lib/src/storage/import/legacy/sql/schema29.sql delete mode 100644 gossip-lib/src/storage/import/legacy/sql/schema3.sql delete mode 100644 gossip-lib/src/storage/import/legacy/sql/schema30.sql delete mode 100644 gossip-lib/src/storage/import/legacy/sql/schema31.sql delete mode 100644 gossip-lib/src/storage/import/legacy/sql/schema32.sql delete mode 100644 gossip-lib/src/storage/import/legacy/sql/schema33.sql delete mode 100644 gossip-lib/src/storage/import/legacy/sql/schema34.sql delete mode 100644 gossip-lib/src/storage/import/legacy/sql/schema35.sql delete mode 100644 gossip-lib/src/storage/import/legacy/sql/schema36.sql delete mode 100644 gossip-lib/src/storage/import/legacy/sql/schema37.sql delete mode 100644 gossip-lib/src/storage/import/legacy/sql/schema4.sql delete mode 100644 gossip-lib/src/storage/import/legacy/sql/schema5.sql delete mode 100644 gossip-lib/src/storage/import/legacy/sql/schema6.sql delete mode 100644 gossip-lib/src/storage/import/legacy/sql/schema7.sql delete mode 100644 gossip-lib/src/storage/import/legacy/sql/schema8.sql delete mode 100644 gossip-lib/src/storage/import/legacy/sql/schema9.sql delete mode 100644 gossip-lib/src/storage/import/mod.rs diff --git a/Cargo.lock b/Cargo.lock index 86214d66..512b9491 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -176,12 +176,6 @@ dependencies = [ "alloc-no-stdlib", ] -[[package]] -name = "allocator-api2" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" - [[package]] name = "android-activity" version = "0.4.3" @@ -1424,12 +1418,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" -[[package]] -name = "fallible-streaming-iterator" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" - [[package]] name = "fastrand" version = "1.9.0" @@ -1876,7 +1864,6 @@ dependencies = [ "reqwest", "resvg", "rhai", - "rusqlite", "sdl2", "serde", "serde_json", @@ -1947,19 +1934,6 @@ name = "hashbrown" version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7dfda62a12f55daeae5015f81b0baea145391cb4520f86c248fc615d72640d12" -dependencies = [ - "ahash 0.8.3", - "allocator-api2", -] - -[[package]] -name = "hashlink" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" -dependencies = [ - "hashbrown 0.14.1", -] [[package]] name = "heed" @@ -2386,17 +2360,6 @@ version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" -[[package]] -name = "libsqlite3-sys" -version = "0.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afc22eff61b133b115c6e8c74e818c628d6d5e7a502afea6f64dee076dd94326" -dependencies = [ - "cc", - "pkg-config", - "vcpkg", -] - [[package]] name = "lightning" version = "0.0.115" @@ -3615,22 +3578,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "rusqlite" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "549b9d036d571d42e6e85d1c1425e2ac83491075078ca9a15be021c56b1641f2" -dependencies = [ - "bitflags 2.4.1", - "chrono", - "fallible-iterator", - "fallible-streaming-iterator", - "hashlink", - "libsqlite3-sys", - "serde_json", - "smallvec", -] - [[package]] name = "rustc-demangle" version = "0.1.23" diff --git a/README.md b/README.md index 3bcef8a8..6bcc0977 100644 --- a/README.md +++ b/README.md @@ -224,6 +224,10 @@ Compile with If you are having performance issues, please see [PERFORMANCE.md](docs/PERFORMANCE.md). +### Upgrading from very old versions + +If you are using a version before 0.8.x, you must upgrade to a 0.8.x version and run gossip at least once in order to upgrade from SQLite3 to LMDB. This is because we have now removed the old SQLite3 code. Alternatively, just delete your old gossip directory in your [config dir](https://docs.rs/dirs/latest/dirs/fn.config_dir.html) and start fresh. + ## Technology Involved - Rust Language diff --git a/gossip-lib/Cargo.toml b/gossip-lib/Cargo.toml index 334c8ffe..a510d873 100644 --- a/gossip-lib/Cargo.toml +++ b/gossip-lib/Cargo.toml @@ -44,7 +44,6 @@ regex = "1.8" reqwest = { version = "0.11", default-features=false, features = ["brotli", "deflate", "gzip", "json"] } resvg = "0.35.0" rhai = { version = "1.15", features = [ "std", "sync" ]} -rusqlite = { version = "0.29", features = ["bundled", "chrono", "serde_json"] } sdl2 = { version = "0.35.2", features = ["bundled"], optional = true } serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" diff --git a/gossip-lib/src/error.rs b/gossip-lib/src/error.rs index 48b081aa..443d7b42 100644 --- a/gossip-lib/src/error.rs +++ b/gossip-lib/src/error.rs @@ -36,7 +36,6 @@ pub enum ErrorKind { RelayPickerError(gossip_relay_picker::Error), RelayRejectedUs, ReqwestHttpError(reqwest::Error), - Sql(rusqlite::Error), SerdeJson(serde_json::Error), SliceError(std::array::TryFromSliceError), Speedy(speedy::Error), @@ -108,7 +107,6 @@ impl std::fmt::Display for Error { RelayPickerError(e) => write!(f, "Relay Picker error: {e}"), RelayRejectedUs => write!(f, "Relay rejected us."), ReqwestHttpError(e) => write!(f, "HTTP (reqwest) error: {e}"), - Sql(e) => write!(f, "SQL: {e}"), SerdeJson(e) => write!(f, "SerdeJson Error: {e}"), SliceError(e) => write!(f, "Slice: {e}"), Speedy(e) => write!(f, "Speedy: {e}"), @@ -249,12 +247,6 @@ impl From for ErrorKind { } } -impl From for ErrorKind { - fn from(e: rusqlite::Error) -> ErrorKind { - ErrorKind::Sql(e) - } -} - impl From for ErrorKind { fn from(e: reqwest::Error) -> ErrorKind { ErrorKind::ReqwestHttpError(e) diff --git a/gossip-lib/src/storage/import/legacy/mod.rs b/gossip-lib/src/storage/import/legacy/mod.rs deleted file mode 100644 index ce891e1e..00000000 --- a/gossip-lib/src/storage/import/legacy/mod.rs +++ /dev/null @@ -1,227 +0,0 @@ -use crate::error::Error; -use crate::profile::Profile; -use fallible_iterator::FallibleIterator; -use rusqlite::Connection; - -pub fn init_database() -> Result { - let profile_dir = Profile::current()?.profile_dir; - - // Connect to (or create) our database - let mut db_path = profile_dir; - db_path.push("gossip.sqlite"); - let connection = Connection::open_with_flags( - &db_path, - rusqlite::OpenFlags::SQLITE_OPEN_READ_WRITE - | rusqlite::OpenFlags::SQLITE_OPEN_NO_MUTEX - | rusqlite::OpenFlags::SQLITE_OPEN_NOFOLLOW, - )?; - - // Turn on foreign keys - connection.execute("PRAGMA foreign_keys = ON", ())?; - - Ok(connection) -} - -// This sets up the database -#[allow(clippy::or_fun_call)] -pub fn setup_database(db: &mut Connection) -> Result<(), Error> { - // Check and upgrade our data schema - check_and_upgrade(db)?; - - // Normalize URLs - normalize_urls(db)?; - - // Enforce foreign key relationships - db.pragma_update(None, "foreign_keys", "ON")?; - - Ok(()) -} - -fn check_and_upgrade(db: &mut Connection) -> Result<(), Error> { - 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(); - upgrade(db, version) - } - Err(_e) => { - // 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(()) -} - -fn normalize_urls(db: &mut Connection) -> Result<(), Error> { - 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/gossip-lib/src/storage/import/legacy/sql/schema1.sql b/gossip-lib/src/storage/import/legacy/sql/schema1.sql deleted file mode 100644 index 06194b36..00000000 --- a/gossip-lib/src/storage/import/legacy/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/gossip-lib/src/storage/import/legacy/sql/schema10.sql b/gossip-lib/src/storage/import/legacy/sql/schema10.sql deleted file mode 100644 index eed3e007..00000000 --- a/gossip-lib/src/storage/import/legacy/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/gossip-lib/src/storage/import/legacy/sql/schema11.sql b/gossip-lib/src/storage/import/legacy/sql/schema11.sql deleted file mode 100644 index 4b5d4492..00000000 --- a/gossip-lib/src/storage/import/legacy/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/gossip-lib/src/storage/import/legacy/sql/schema12.sql b/gossip-lib/src/storage/import/legacy/sql/schema12.sql deleted file mode 100644 index 976ca749..00000000 --- a/gossip-lib/src/storage/import/legacy/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/gossip-lib/src/storage/import/legacy/sql/schema13.sql b/gossip-lib/src/storage/import/legacy/sql/schema13.sql deleted file mode 100644 index e411b5eb..00000000 --- a/gossip-lib/src/storage/import/legacy/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/gossip-lib/src/storage/import/legacy/sql/schema14.sql b/gossip-lib/src/storage/import/legacy/sql/schema14.sql deleted file mode 100644 index 965b5df6..00000000 --- a/gossip-lib/src/storage/import/legacy/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/gossip-lib/src/storage/import/legacy/sql/schema15.sql b/gossip-lib/src/storage/import/legacy/sql/schema15.sql deleted file mode 100644 index d05c5d4f..00000000 --- a/gossip-lib/src/storage/import/legacy/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/gossip-lib/src/storage/import/legacy/sql/schema16.sql b/gossip-lib/src/storage/import/legacy/sql/schema16.sql deleted file mode 100644 index 17247292..00000000 --- a/gossip-lib/src/storage/import/legacy/sql/schema16.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE person ADD COLUMN - muted INTEGER DEFAULT 0; diff --git a/gossip-lib/src/storage/import/legacy/sql/schema17.sql b/gossip-lib/src/storage/import/legacy/sql/schema17.sql deleted file mode 100644 index f76b8aa2..00000000 --- a/gossip-lib/src/storage/import/legacy/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/gossip-lib/src/storage/import/legacy/sql/schema18.sql b/gossip-lib/src/storage/import/legacy/sql/schema18.sql deleted file mode 100644 index 61887ffc..00000000 --- a/gossip-lib/src/storage/import/legacy/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/gossip-lib/src/storage/import/legacy/sql/schema19.sql b/gossip-lib/src/storage/import/legacy/sql/schema19.sql deleted file mode 100644 index 5e6e6e27..00000000 --- a/gossip-lib/src/storage/import/legacy/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/gossip-lib/src/storage/import/legacy/sql/schema2.sql b/gossip-lib/src/storage/import/legacy/sql/schema2.sql deleted file mode 100644 index 361a87da..00000000 --- a/gossip-lib/src/storage/import/legacy/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/gossip-lib/src/storage/import/legacy/sql/schema20.sql b/gossip-lib/src/storage/import/legacy/sql/schema20.sql deleted file mode 100644 index afd2d8e9..00000000 --- a/gossip-lib/src/storage/import/legacy/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/gossip-lib/src/storage/import/legacy/sql/schema21.sql b/gossip-lib/src/storage/import/legacy/sql/schema21.sql deleted file mode 100644 index 51975360..00000000 --- a/gossip-lib/src/storage/import/legacy/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/gossip-lib/src/storage/import/legacy/sql/schema22.sql b/gossip-lib/src/storage/import/legacy/sql/schema22.sql deleted file mode 100644 index d2c64640..00000000 --- a/gossip-lib/src/storage/import/legacy/sql/schema22.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE person_relay DROP COLUMN last_suggested_nip23; diff --git a/gossip-lib/src/storage/import/legacy/sql/schema23.sql b/gossip-lib/src/storage/import/legacy/sql/schema23.sql deleted file mode 100644 index f7b8daff..00000000 --- a/gossip-lib/src/storage/import/legacy/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/gossip-lib/src/storage/import/legacy/sql/schema24.sql b/gossip-lib/src/storage/import/legacy/sql/schema24.sql deleted file mode 100644 index 103508fb..00000000 --- a/gossip-lib/src/storage/import/legacy/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/gossip-lib/src/storage/import/legacy/sql/schema25.sql b/gossip-lib/src/storage/import/legacy/sql/schema25.sql deleted file mode 100644 index 8773a42a..00000000 --- a/gossip-lib/src/storage/import/legacy/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/gossip-lib/src/storage/import/legacy/sql/schema26.sql b/gossip-lib/src/storage/import/legacy/sql/schema26.sql deleted file mode 100644 index 403104f4..00000000 --- a/gossip-lib/src/storage/import/legacy/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/gossip-lib/src/storage/import/legacy/sql/schema27.sql b/gossip-lib/src/storage/import/legacy/sql/schema27.sql deleted file mode 100644 index 96067124..00000000 --- a/gossip-lib/src/storage/import/legacy/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/gossip-lib/src/storage/import/legacy/sql/schema28.sql b/gossip-lib/src/storage/import/legacy/sql/schema28.sql deleted file mode 100644 index 7388a650..00000000 --- a/gossip-lib/src/storage/import/legacy/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/gossip-lib/src/storage/import/legacy/sql/schema29.sql b/gossip-lib/src/storage/import/legacy/sql/schema29.sql deleted file mode 100644 index d6a9e52a..00000000 --- a/gossip-lib/src/storage/import/legacy/sql/schema29.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE event_seen RENAME TO event_relay; diff --git a/gossip-lib/src/storage/import/legacy/sql/schema3.sql b/gossip-lib/src/storage/import/legacy/sql/schema3.sql deleted file mode 100644 index eb183c52..00000000 --- a/gossip-lib/src/storage/import/legacy/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/gossip-lib/src/storage/import/legacy/sql/schema30.sql b/gossip-lib/src/storage/import/legacy/sql/schema30.sql deleted file mode 100644 index 673ff61a..00000000 --- a/gossip-lib/src/storage/import/legacy/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/gossip-lib/src/storage/import/legacy/sql/schema31.sql b/gossip-lib/src/storage/import/legacy/sql/schema31.sql deleted file mode 100644 index 2bd35980..00000000 --- a/gossip-lib/src/storage/import/legacy/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/gossip-lib/src/storage/import/legacy/sql/schema32.sql b/gossip-lib/src/storage/import/legacy/sql/schema32.sql deleted file mode 100644 index e9a84a2f..00000000 --- a/gossip-lib/src/storage/import/legacy/sql/schema32.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE relay ADD COLUMN hidden INTEGER DEFAULT 0; diff --git a/gossip-lib/src/storage/import/legacy/sql/schema33.sql b/gossip-lib/src/storage/import/legacy/sql/schema33.sql deleted file mode 100644 index c65c9a26..00000000 --- a/gossip-lib/src/storage/import/legacy/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/gossip-lib/src/storage/import/legacy/sql/schema34.sql b/gossip-lib/src/storage/import/legacy/sql/schema34.sql deleted file mode 100644 index a63d10cc..00000000 --- a/gossip-lib/src/storage/import/legacy/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/gossip-lib/src/storage/import/legacy/sql/schema35.sql b/gossip-lib/src/storage/import/legacy/sql/schema35.sql deleted file mode 100644 index 532b8197..00000000 --- a/gossip-lib/src/storage/import/legacy/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/gossip-lib/src/storage/import/legacy/sql/schema36.sql b/gossip-lib/src/storage/import/legacy/sql/schema36.sql deleted file mode 100644 index 7d14bb57..00000000 --- a/gossip-lib/src/storage/import/legacy/sql/schema36.sql +++ /dev/null @@ -1 +0,0 @@ -DROP TABLE event_relationship; diff --git a/gossip-lib/src/storage/import/legacy/sql/schema37.sql b/gossip-lib/src/storage/import/legacy/sql/schema37.sql deleted file mode 100644 index 8abdff41..00000000 --- a/gossip-lib/src/storage/import/legacy/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/gossip-lib/src/storage/import/legacy/sql/schema4.sql b/gossip-lib/src/storage/import/legacy/sql/schema4.sql deleted file mode 100644 index a6eab966..00000000 --- a/gossip-lib/src/storage/import/legacy/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/gossip-lib/src/storage/import/legacy/sql/schema5.sql b/gossip-lib/src/storage/import/legacy/sql/schema5.sql deleted file mode 100644 index 29e5b14c..00000000 --- a/gossip-lib/src/storage/import/legacy/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/gossip-lib/src/storage/import/legacy/sql/schema6.sql b/gossip-lib/src/storage/import/legacy/sql/schema6.sql deleted file mode 100644 index 1f60df03..00000000 --- a/gossip-lib/src/storage/import/legacy/sql/schema6.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE relay ADD COLUMN post INTEGER NOT NULL DEFAULT 0; diff --git a/gossip-lib/src/storage/import/legacy/sql/schema7.sql b/gossip-lib/src/storage/import/legacy/sql/schema7.sql deleted file mode 100644 index aebd094f..00000000 --- a/gossip-lib/src/storage/import/legacy/sql/schema7.sql +++ /dev/null @@ -1 +0,0 @@ --- This used to have code which has been removed. diff --git a/gossip-lib/src/storage/import/legacy/sql/schema8.sql b/gossip-lib/src/storage/import/legacy/sql/schema8.sql deleted file mode 100644 index 0d616a6e..00000000 --- a/gossip-lib/src/storage/import/legacy/sql/schema8.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE person_relay RENAME COLUMN last_suggested_nip35 TO last_suggested_nip05; diff --git a/gossip-lib/src/storage/import/legacy/sql/schema9.sql b/gossip-lib/src/storage/import/legacy/sql/schema9.sql deleted file mode 100644 index e1000687..00000000 --- a/gossip-lib/src/storage/import/legacy/sql/schema9.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE person ADD COLUMN followed_last_updated INTEGER NOT NULL DEFAULT 0; diff --git a/gossip-lib/src/storage/import/mod.rs b/gossip-lib/src/storage/import/mod.rs deleted file mode 100644 index 051413be..00000000 --- a/gossip-lib/src/storage/import/mod.rs +++ /dev/null @@ -1,463 +0,0 @@ -mod legacy; -use super::types::{Person1, PersonRelay1, Relay1, Settings1, ThemeVariant1}; -use super::Storage; -use crate::error::Error; -use nostr_types::{EncryptedPrivateKey, Event, Id, PublicKey, RelayUrl, Unixtime}; -use rusqlite::Connection; - -impl Storage { - pub(super) fn import(&self) -> Result<(), Error> { - tracing::info!("Importing SQLITE data into LMDB..."); - - // Trigger old databases - let _ = self.db_people1()?; - - let mut txn = self.env.write_txn()?; - - // Progress the legacy database to the endpoint first - let mut db = match legacy::init_database() { - Ok(db) => db, - Err(_) => { - // Probably missing. Let's mock up default necessary data: - let settings: Settings1 = Default::default(); - self.write_settings1(&settings, Some(&mut txn))?; - txn.commit()?; - self.sync()?; - return Ok(()); - } - }; - legacy::setup_database(&mut db)?; - tracing::info!("LDMB: setup"); - - // local settings - import_local_settings(&db, |epk: Option, lcle: i64| { - self.write_encrypted_private_key(&epk, Some(&mut txn))?; - self.write_last_contact_list_edit(lcle, Some(&mut txn)) - })?; - tracing::info!("LMDB: imported local settings."); - - // old table "settings" - // Copy settings (including local_settings) - import_settings(&db, |settings: &Settings1| { - self.write_settings1(settings, Some(&mut txn)) - })?; - tracing::info!("LMDB: imported settings."); - - // old table "event_relay" - // Copy events_seen - import_event_seen_on_relay(&db, |id: String, url: String, seen: u64| { - let id = Id::try_from_hex_string(&id)?; - let relay_url = RelayUrl::try_from_str(&url)?; - let time = Unixtime(seen as i64); - self.add_event_seen_on_relay(id, &relay_url, time, Some(&mut txn)) - })?; - tracing::info!("LMDB: imported event-seen-on-relay data."); - - // old table "event_flags" - // Copy event_flags - import_event_flags(&db, |id: Id, viewed: bool| { - if viewed { - self.mark_event_viewed(id, Some(&mut txn)) - } else { - Ok(()) - } - })?; - tracing::info!("LMDB: imported event-viewed data."); - - // old table "event_hashtag" - // Copy event_hashtags - import_hashtags(&db, |hashtag: String, event: String| { - let id = Id::try_from_hex_string(&event)?; - if let Err(e) = self.add_hashtag(&hashtag, id, Some(&mut txn)) { - tracing::error!("{}", e); // non fatal, keep importing - } - Ok(()) - })?; - tracing::info!("LMDB: imported event hashtag index."); - - // old table "relay" - // Copy relays - import_relays(&db, |dbrelay: &Relay1| { - self.write_relay1(dbrelay, Some(&mut txn)) - })?; - tracing::info!("LMDB: imported relays."); - - // old table "event" - // Copy events - import_events(&db, |event: &Event| self.write_event(event, Some(&mut txn)))?; - tracing::info!("LMDB: imported events and tag index"); - - // old table "person" - // Copy people - import_people(&db, |person: &Person1| { - self.write_person1(person, Some(&mut txn)) - })?; - tracing::info!("LMDB: imported people"); - - // old table "person_relay" - // Copy person relay - import_person_relays(&db, |person_relay: &PersonRelay1| { - self.write_person_relay1(person_relay, Some(&mut txn)) - })?; - tracing::info!("LMDB: import person_relays"); - - txn.commit()?; - - self.sync()?; - // If we have a system crash before the migration level - // is written in the next line, import will start over. - - // Mark migration level - self.write_migration_level(0, None)?; - - tracing::info!("Importing SQLITE data into LMDB: Done."); - - Ok(()) - } -} - -fn import_local_settings(db: &Connection, mut f: F) -> Result<(), Error> -where - F: FnMut(Option, i64) -> Result<(), Error>, -{ - // These are the only local settings we need to keep - let sql = "SELECT encrypted_private_key, last_contact_list_edit FROM local_settings"; - let mut stmt = db.prepare(sql)?; - let mut rows = stmt.raw_query(); - if let Some(row) = rows.next()? { - let epk: Option = row.get(0)?; - let lcle: i64 = row.get(1)?; - f(epk.map(EncryptedPrivateKey), lcle)?; - } - Ok(()) -} - -fn import_settings(db: &Connection, mut f: F) -> Result<(), Error> -where - F: FnMut(&Settings1) -> Result<(), Error>, -{ - let numstr_to_bool = |s: String| -> bool { &s == "1" }; - - let sql = "SELECT key, value FROM settings ORDER BY key"; - let mut stmt = db.prepare(sql)?; - let mut rows = stmt.raw_query(); - let mut settings = Settings1::default(); - while let Some(row) = rows.next()? { - let key: String = row.get(0)?; - let value: String = row.get(1)?; - match &*key { - "feed_chunk" => { - if let Ok(x) = value.parse::() { - settings.feed_chunk = x; - } - } - "replies_chunk" => { - if let Ok(x) = value.parse::() { - settings.replies_chunk = x; - } - } - "overlap" => { - if let Ok(x) = value.parse::() { - settings.overlap = x; - } - } - "num_relays_per_person" => { - if let Ok(x) = value.parse::() { - settings.num_relays_per_person = x; - } - } - "max_relays" => { - if let Ok(x) = value.parse::() { - settings.max_relays = x; - } - } - "public_key" => { - settings.public_key = match PublicKey::try_from_hex_string(&value, false) { - Ok(pk) => Some(pk), - Err(e) => { - tracing::error!("Public key in database is invalid or corrupt: {}", e); - None - } - } - } - "max_fps" => { - if let Ok(x) = value.parse::() { - settings.max_fps = x; - } - } - "recompute_feed_periodically" => { - settings.recompute_feed_periodically = numstr_to_bool(value) - } - "feed_recompute_interval_ms" => { - if let Ok(mut x) = value.parse::() { - // Force longer intervals for currently slower LMDB: - if x < 5000 { - x = 5000; - } - - settings.feed_recompute_interval_ms = x; - } - } - "pow" => { - if let Ok(x) = value.parse::() { - settings.pow = x; - } - } - "offline" => settings.offline = numstr_to_bool(value), - "dark_mode" => settings.theme.dark_mode = numstr_to_bool(value), - "follow_os_dark_mode" => settings.theme.follow_os_dark_mode = numstr_to_bool(value), - "theme" => { - for theme_variant in ThemeVariant1::all() { - if &*value == theme_variant.name() { - settings.theme.variant = *theme_variant; - break; - } - } - } - "set_client_tag" => settings.set_client_tag = numstr_to_bool(value), - "set_user_agent" => settings.set_user_agent = numstr_to_bool(value), - "override_dpi" => { - if value.is_empty() { - settings.override_dpi = None; - } else if let Ok(x) = value.parse::() { - settings.override_dpi = Some(x); - } - } - "reactions" => settings.reactions = numstr_to_bool(value), - "reposts" => settings.reposts = numstr_to_bool(value), - "show_long_form" => settings.show_long_form = numstr_to_bool(value), - "show_mentions" => settings.show_mentions = numstr_to_bool(value), - "show_media" => settings.show_media = numstr_to_bool(value), - "approve_content_warning" => settings.approve_content_warning = numstr_to_bool(value), - "load_avatars" => settings.load_avatars = numstr_to_bool(value), - "load_media" => settings.load_media = numstr_to_bool(value), - "check_nip05" => settings.check_nip05 = numstr_to_bool(value), - "direct_messages" => settings.direct_messages = numstr_to_bool(value), - "automatically_fetch_metadata" => { - settings.automatically_fetch_metadata = numstr_to_bool(value) - } - "delegatee_tag" => settings.delegatee_tag = value, - "highlight_unread_events" => settings.highlight_unread_events = numstr_to_bool(value), - "posting_area_at_top" => settings.posting_area_at_top = numstr_to_bool(value), - "enable_zap_receipts" => settings.enable_zap_receipts = numstr_to_bool(value), - _ => {} - } - } - - f(&settings)?; - - Ok(()) -} - -fn import_event_seen_on_relay(db: &Connection, mut f: F) -> Result<(), Error> -where - F: FnMut(String, String, u64) -> Result<(), Error>, -{ - let sql = "SELECT event, relay, when_seen FROM event_relay ORDER BY event, relay"; - let mut stmt = db.prepare(sql)?; - let mut rows = stmt.raw_query(); - while let Some(row) = rows.next()? { - let event: String = row.get(0)?; - let relay: String = row.get(1)?; - let seen: u64 = row.get(2)?; - f(event, relay, seen)?; - } - Ok(()) -} - -fn import_event_flags(db: &Connection, mut f: F) -> Result<(), Error> -where - F: FnMut(Id, bool) -> Result<(), Error>, -{ - let sql = "SELECT event, viewed FROM event_flags ORDER BY event"; - let mut stmt = db.prepare(sql)?; - let mut rows = stmt.raw_query(); - while let Some(row) = rows.next()? { - let idstr: String = row.get(0)?; - let viewed: bool = row.get(1)?; - let id: Id = match Id::try_from_hex_string(&idstr) { - Ok(id) => id, - Err(e) => { - tracing::error!("{}", e); - // don't process the broken one - continue; - } - }; - f(id, viewed)?; - } - Ok(()) -} - -fn import_hashtags(db: &Connection, mut f: F) -> Result<(), Error> -where - F: FnMut(String, String) -> Result<(), Error>, -{ - let sql = "SELECT hashtag, event FROM event_hashtag ORDER BY hashtag, event"; - let mut stmt = db.prepare(sql)?; - let mut rows = stmt.raw_query(); - while let Some(row) = rows.next()? { - let hashtag: String = row.get(0)?; - let event: String = row.get(1)?; - f(hashtag, event)?; - } - Ok(()) -} - -fn import_relays(db: &Connection, mut f: F) -> Result<(), Error> -where - F: FnMut(&Relay1) -> Result<(), Error>, -{ - let sql = "SELECT url, success_count, failure_count, last_connected_at, \ - last_general_eose_at, rank, hidden, usage_bits, \ - nip11, last_attempt_nip11 FROM relay ORDER BY url" - .to_owned(); - let mut stmt = db.prepare(&sql)?; - let mut rows = stmt.raw_query(); - while let Some(row) = rows.next()? { - let urlstring: String = row.get(0)?; - let nip11: Option = row.get(8)?; - if let Ok(url) = RelayUrl::try_from_str(&urlstring) { - let dbrelay = Relay1 { - url, - success_count: row.get(1)?, - failure_count: row.get(2)?, - last_connected_at: row.get(3)?, - last_general_eose_at: row.get(4)?, - rank: row.get(5)?, - hidden: row.get(6)?, - usage_bits: row.get(7)?, - nip11: match nip11 { - None => None, - Some(s) => serde_json::from_str(&s)?, - }, - last_attempt_nip11: row.get(9)?, - }; - f(&dbrelay)?; - } - } - Ok(()) -} - -fn import_events(db: &Connection, mut f: F) -> Result<(), Error> -where - F: FnMut(&Event) -> Result<(), Error>, -{ - let sql = "SELECT raw FROM event ORDER BY id"; - let mut stmt = db.prepare(sql)?; - let mut rows = stmt.raw_query(); - while let Some(row) = rows.next()? { - let raw: String = row.get(0)?; - let event: Event = match serde_json::from_str(&raw) { - Ok(event) => event, - Err(e) => { - tracing::error!("{}", e); - // don't process the broken event - continue; - } - }; - f(&event)?; - } - Ok(()) -} - -fn import_people(db: &Connection, mut f: F) -> Result<(), Error> -where - F: FnMut(&Person1) -> Result<(), Error>, -{ - let sql = "SELECT 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 \ - FROM person" - .to_owned(); - let mut stmt = db.prepare(&sql)?; - let mut rows = stmt.raw_query(); - while let Some(row) = rows.next()? { - let metadata_json: Option = row.get(5)?; - let metadata = match metadata_json { - Some(s) => match serde_json::from_str(&s) { - Ok(s) => s, - Err(e) => { - tracing::error!("{}", e); - // don't process the broken person - continue; - } - }, - None => None, - }; - let pk: String = row.get(0)?; - let person = Person1 { - pubkey: match PublicKey::try_from_hex_string(&pk, false) { - Ok(pk) => pk, - Err(e) => { - tracing::error!("{}", e); - // don't process the broken person - continue; - } - }, - petname: row.get(1)?, - followed: row.get(2)?, - followed_last_updated: row.get(3)?, - muted: row.get(4)?, - metadata, - metadata_created_at: row.get(6)?, - metadata_last_received: row.get(7)?, - nip05_valid: row.get(8)?, - nip05_last_checked: row.get(9)?, - relay_list_created_at: row.get(10)?, - relay_list_last_received: row.get(11)?, - }; - f(&person)?; - } - Ok(()) -} - -fn import_person_relays(db: &Connection, mut f: F) -> Result<(), Error> -where - F: FnMut(&PersonRelay1) -> Result<(), Error>, -{ - let sql = "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" - .to_owned(); - let mut stmt = db.prepare(&sql)?; - let mut rows = stmt.raw_query(); - while let Some(row) = rows.next()? { - let pkstr: String = row.get(0)?; - let pubkey = match PublicKey::try_from_hex_string(&pkstr, false) { - Ok(pk) => pk, - Err(e) => { - tracing::error!("{}", e); - // don't process the broken person - continue; - } - }; - - let urlstr: String = row.get(1)?; - let url = match RelayUrl::try_from_str(&urlstr) { - Ok(url) => url, - Err(e) => { - tracing::error!("{}", e); - // don't process the broken person - continue; - } - }; - - let person_relay = PersonRelay1 { - pubkey, - url, - last_fetched: row.get(2)?, - last_suggested_kind3: row.get(3)?, - last_suggested_nip05: row.get(4)?, - last_suggested_bytag: row.get(5)?, - read: row.get(6)?, - write: row.get(7)?, - manually_paired_read: row.get(8)?, - manually_paired_write: row.get(9)?, - }; - f(&person_relay)?; - } - - Ok(()) -} diff --git a/gossip-lib/src/storage/migrations/deprecated.rs b/gossip-lib/src/storage/migrations/deprecated.rs index 0d78f3a5..78f84729 100644 --- a/gossip-lib/src/storage/migrations/deprecated.rs +++ b/gossip-lib/src/storage/migrations/deprecated.rs @@ -1,36 +1,8 @@ use super::Storage; use crate::error::Error; -use heed::RwTxn; use nostr_types::Unixtime; impl Storage { - /// Write the user's last ContactList edit time - /// DEPRECATED - use set_person_list_last_edit_time instead - pub(in crate::storage) fn write_last_contact_list_edit<'a>( - &'a self, - when: i64, - rw_txn: Option<&mut RwTxn<'a>>, - ) -> Result<(), Error> { - let bytes = when.to_be_bytes(); - - let f = |txn: &mut RwTxn<'a>| -> Result<(), Error> { - self.general - .put(txn, b"last_contact_list_edit", bytes.as_slice())?; - Ok(()) - }; - - match rw_txn { - Some(txn) => f(txn)?, - None => { - let mut txn = self.env.write_txn()?; - f(&mut txn)?; - txn.commit()?; - } - }; - - Ok(()) - } - /// Read the user's last ContactList edit time /// DEPRECATED - use get_person_list_last_edit_time instead pub(in crate::storage) fn read_last_contact_list_edit(&self) -> Result { diff --git a/gossip-lib/src/storage/migrations/mod.rs b/gossip-lib/src/storage/migrations/mod.rs index d4446823..53e36c06 100644 --- a/gossip-lib/src/storage/migrations/mod.rs +++ b/gossip-lib/src/storage/migrations/mod.rs @@ -14,6 +14,18 @@ use std::collections::HashMap; impl Storage { const MAX_MIGRATION_LEVEL: u32 = 15; + /// Initialize the database from empty + pub(super) fn init_from_empty(&self) -> Result<(), Error> { + let mut txn = self.env.write_txn()?; + + // write a migration level + self.write_migration_level(Self::MAX_MIGRATION_LEVEL, Some(&mut txn))?; + + txn.commit()?; + + Ok(()) + } + pub(super) fn migrate(&self, mut level: u32) -> Result<(), Error> { if level > Self::MAX_MIGRATION_LEVEL { return Err(ErrorKind::General(format!( diff --git a/gossip-lib/src/storage/mod.rs b/gossip-lib/src/storage/mod.rs index d493f2c6..2cdd801f 100644 --- a/gossip-lib/src/storage/mod.rs +++ b/gossip-lib/src/storage/mod.rs @@ -10,7 +10,6 @@ macro_rules! key { }; } -mod import; mod migrations; // type implementations @@ -176,7 +175,7 @@ impl Storage { // because otherwise there will be MVCC visibility problems later having // different transactions in parallel // - // old-version databases will be handled by their migraiton code and only + // old-version databases will be handled by their migration code and only // triggered into existence if their migration is necessary. let _ = self.db_event_ek_c_index()?; let _ = self.db_event_ek_pk_index()?; @@ -192,16 +191,10 @@ impl Storage { let _ = self.db_unindexed_giftwraps()?; let _ = self.db_person_lists()?; - // If migration level is missing, we need to import from legacy sqlite + // Do migrations match self.read_migration_level()? { - None => { - // Import from sqlite - self.import()?; - self.migrate(0)?; - } - Some(level) => { - self.migrate(level)?; - } + Some(level) => self.migrate(level)?, + None => self.init_from_empty()?, } Ok(()) @@ -494,9 +487,9 @@ impl Storage { let txn = self.env.read_txn()?; Ok(self - .general - .get(&txn, b"migration_level")? - .map(|bytes| u32::from_be_bytes(bytes[..4].try_into().unwrap()))) + .general + .get(&txn, b"migration_level")? + .map(|bytes| u32::from_be_bytes(bytes[..4].try_into().unwrap()))) } /// Write the user's encrypted private key diff --git a/gossip-lib/src/storage/types/theme1.rs b/gossip-lib/src/storage/types/theme1.rs index d1766067..33debac7 100644 --- a/gossip-lib/src/storage/types/theme1.rs +++ b/gossip-lib/src/storage/types/theme1.rs @@ -22,14 +22,6 @@ pub struct Theme1 { } impl ThemeVariant1 { - pub fn all() -> &'static [ThemeVariant1] { - &[ - ThemeVariant1::Classic, - ThemeVariant1::Default, - ThemeVariant1::Roundy, - ] - } - pub fn name(&self) -> &'static str { match *self { ThemeVariant1::Classic => "Classic",