+ /*\r
+ * Called after the connection has been established for creating or updating the database.\r
+ * The 'Version' table tracks the current state of the database.\r
+ */\r
+ fn create_or_update(self: &Self) -> Result<(), DBError> {\r
+ // let connection = Connection::new();\r
+ // let mut stmt = connection.sqlite_con.prepare("SELECT * FROM versions ORDER BY date").unwrap();\r
+ // let mut stmt = connection.sqlite_con.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='versions'").unwrap();\r
+\r
+ // Check the Database version.\r
+ let mut con = self.pool.get()?;\r
+ let tx = con.transaction()?;\r
+\r
+ // Version 0 corresponds to an empty database.\r
+ let mut version = {\r
+ match tx.query_row(\r
+ "SELECT [name] FROM [sqlite_master] WHERE [type] = 'table' AND [name] = 'Version'",\r
+ [],\r
+ |row| row.get::<usize, String>(0)\r
+ ) {\r
+ Ok(_) => tx.query_row("SELECT [version] FROM [Version]", [], |row| row.get(0)).unwrap_or_default(),\r
+ Err(_) => 0\r
+ }\r
+ };\r
+\r
+ while Connection::update_to_next_version(version, &tx)? {\r
+ version += 1;\r
+ }\r