diff --git a/rslib/src/storage/mod.rs b/rslib/src/storage/mod.rs index 816b42fdd..00e70d180 100644 --- a/rslib/src/storage/mod.rs +++ b/rslib/src/storage/mod.rs @@ -5,5 +5,6 @@ mod card; mod deckconf; mod sqlite; mod tag; +mod upgrades; pub(crate) use sqlite::SqliteStorage; diff --git a/rslib/src/storage/sqlite.rs b/rslib/src/storage/sqlite.rs index f4a03fff1..892ecba14 100644 --- a/rslib/src/storage/sqlite.rs +++ b/rslib/src/storage/sqlite.rs @@ -23,7 +23,7 @@ use unicase::UniCase; const SCHEMA_MIN_VERSION: u8 = 11; const SCHEMA_STARTING_VERSION: u8 = 11; -const SCHEMA_MAX_VERSION: u8 = 12; +const SCHEMA_MAX_VERSION: u8 = 13; fn unicase_compare(s1: &str, s2: &str) -> Ordering { UniCase::new(s1).cmp(&UniCase::new(s2)) @@ -204,35 +204,6 @@ impl SqliteStorage { Ok(storage) } - fn upgrade_to_latest_schema(&self, ver: u8) -> Result<()> { - if ver < 12 { - self.upgrade_to_schema_12()?; - } - Ok(()) - } - - pub(crate) fn downgrade_to_schema_11(self) -> Result<()> { - self.begin_trx()?; - self.downgrade_from_schema_12()?; - self.commit_trx() - } - - fn upgrade_to_schema_12(&self) -> Result<()> { - self.db - .execute_batch(include_str!("schema12_upgrade.sql"))?; - self.upgrade_deck_conf_to_schema12()?; - self.upgrade_tags_to_schema12() - } - - fn downgrade_from_schema_12(&self) -> Result<()> { - self.downgrade_tags_from_schema12()?; - self.downgrade_deck_conf_from_schema12()?; - - self.db - .execute_batch(include_str!("schema12_downgrade.sql"))?; - Ok(()) - } - // Standard transaction start/stop ////////////////////////////////////// diff --git a/rslib/src/storage/tag/mod.rs b/rslib/src/storage/tag/mod.rs index dcc703e0c..fb6ec43a8 100644 --- a/rslib/src/storage/tag/mod.rs +++ b/rslib/src/storage/tag/mod.rs @@ -74,7 +74,7 @@ impl SqliteStorage { Ok(()) } - pub(super) fn downgrade_tags_from_schema12(&self) -> Result<()> { + pub(super) fn downgrade_tags_from_schema13(&self) -> Result<()> { let alltags = self.all_tags()?; let tagsmap: HashMap = alltags.into_iter().collect(); self.db.execute( diff --git a/rslib/src/storage/upgrades/mod.rs b/rslib/src/storage/upgrades/mod.rs new file mode 100644 index 000000000..85ca40a27 --- /dev/null +++ b/rslib/src/storage/upgrades/mod.rs @@ -0,0 +1,35 @@ +// Copyright: Ankitects Pty Ltd and contributors +// License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html + +use super::SqliteStorage; +use crate::err::Result; + +impl SqliteStorage { + pub(super) fn upgrade_to_latest_schema(&self, ver: u8) -> Result<()> { + if ver < 12 { + self.db + .execute_batch(include_str!("schema12_upgrade.sql"))?; + self.upgrade_deck_conf_to_schema12()?; + } + if ver < 13 { + self.db + .execute_batch(include_str!("schema13_upgrade.sql"))?; + self.upgrade_tags_to_schema12()?; + } + Ok(()) + } + + pub(crate) fn downgrade_to_schema_11(self) -> Result<()> { + self.begin_trx()?; + + self.downgrade_tags_from_schema13()?; + self.db + .execute_batch(include_str!("schema13_downgrade.sql"))?; + + self.downgrade_deck_conf_from_schema12()?; + self.db + .execute_batch(include_str!("schema12_downgrade.sql"))?; + + self.commit_trx() + } +} diff --git a/rslib/src/storage/schema12_downgrade.sql b/rslib/src/storage/upgrades/schema12_downgrade.sql similarity index 74% rename from rslib/src/storage/schema12_downgrade.sql rename to rslib/src/storage/upgrades/schema12_downgrade.sql index 05ce7dfca..cde757b00 100644 --- a/rslib/src/storage/schema12_downgrade.sql +++ b/rslib/src/storage/upgrades/schema12_downgrade.sql @@ -1,5 +1,4 @@ drop table deck_config; -drop table tags; update col set ver = 11; \ No newline at end of file diff --git a/rslib/src/storage/schema12_upgrade.sql b/rslib/src/storage/upgrades/schema12_upgrade.sql similarity index 65% rename from rslib/src/storage/schema12_upgrade.sql rename to rslib/src/storage/upgrades/schema12_upgrade.sql index 65b88279c..54892fd73 100644 --- a/rslib/src/storage/schema12_upgrade.sql +++ b/rslib/src/storage/upgrades/schema12_upgrade.sql @@ -5,10 +5,6 @@ create table deck_config ( usn integer not null, config text not null ); -create table tags ( - tag text not null primary key collate unicase, - usn integer not null -) without rowid; update col set ver = 12; \ No newline at end of file diff --git a/rslib/src/storage/upgrades/schema13_downgrade.sql b/rslib/src/storage/upgrades/schema13_downgrade.sql new file mode 100644 index 000000000..a2bb58338 --- /dev/null +++ b/rslib/src/storage/upgrades/schema13_downgrade.sql @@ -0,0 +1,4 @@ +drop table tags; +update col +set + ver = 12; \ No newline at end of file diff --git a/rslib/src/storage/upgrades/schema13_upgrade.sql b/rslib/src/storage/upgrades/schema13_upgrade.sql new file mode 100644 index 000000000..408623406 --- /dev/null +++ b/rslib/src/storage/upgrades/schema13_upgrade.sql @@ -0,0 +1,7 @@ +create table tags ( + tag text not null primary key collate unicase, + usn integer not null +) without rowid; +update col +set + ver = 13; \ No newline at end of file