chore(chain): rm unused sqlite types
				
					
				
			This commit is contained in:
		
							parent
							
								
									892b97d441
								
							
						
					
					
						commit
						93f9b83e27
					
				| @ -1,6 +1,6 @@ | ||||
| //! Module for stuff
 | ||||
| 
 | ||||
| use core::{fmt::Debug, ops::Deref, str::FromStr}; | ||||
| use core::{ops::Deref, str::FromStr}; | ||||
| 
 | ||||
| use alloc::{borrow::ToOwned, boxed::Box, string::ToString, vec::Vec}; | ||||
| use bitcoin::consensus::{Decodable, Encodable}; | ||||
| @ -14,105 +14,7 @@ use rusqlite::{ | ||||
|     ToSql, | ||||
| }; | ||||
| 
 | ||||
| use crate::{Anchor, Merge}; | ||||
| 
 | ||||
| /// Parameters for [`Persister`].
 | ||||
| pub trait PersistParams { | ||||
|     /// Data type that is loaded and written to the database.
 | ||||
|     type ChangeSet: Default + Merge; | ||||
| 
 | ||||
|     /// Initialize SQL tables.
 | ||||
|     fn initialize_tables(&self, db_tx: &Transaction) -> rusqlite::Result<()>; | ||||
| 
 | ||||
|     /// Load all data from tables.
 | ||||
|     fn load_changeset(&self, db_tx: &Transaction) -> rusqlite::Result<Option<Self::ChangeSet>>; | ||||
| 
 | ||||
|     /// Write data into table(s).
 | ||||
|     fn write_changeset( | ||||
|         &self, | ||||
|         db_tx: &Transaction, | ||||
|         changeset: &Self::ChangeSet, | ||||
|     ) -> rusqlite::Result<()>; | ||||
| } | ||||
| 
 | ||||
| // TODO: Use macros
 | ||||
| impl<A: PersistParams, B: PersistParams> PersistParams for (A, B) { | ||||
|     type ChangeSet = (A::ChangeSet, B::ChangeSet); | ||||
| 
 | ||||
|     fn initialize_tables(&self, db_tx: &Transaction) -> rusqlite::Result<()> { | ||||
|         self.0.initialize_tables(db_tx)?; | ||||
|         self.1.initialize_tables(db_tx)?; | ||||
|         Ok(()) | ||||
|     } | ||||
| 
 | ||||
|     fn load_changeset(&self, db_tx: &Transaction) -> rusqlite::Result<Option<Self::ChangeSet>> { | ||||
|         let changeset = ( | ||||
|             self.0.load_changeset(db_tx)?.unwrap_or_default(), | ||||
|             self.1.load_changeset(db_tx)?.unwrap_or_default(), | ||||
|         ); | ||||
|         if changeset.is_empty() { | ||||
|             Ok(None) | ||||
|         } else { | ||||
|             Ok(Some(changeset)) | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     fn write_changeset( | ||||
|         &self, | ||||
|         db_tx: &Transaction, | ||||
|         changeset: &Self::ChangeSet, | ||||
|     ) -> rusqlite::Result<()> { | ||||
|         self.0.write_changeset(db_tx, &changeset.0)?; | ||||
|         self.1.write_changeset(db_tx, &changeset.1)?; | ||||
|         Ok(()) | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| /// Persists data in to a relational schema based [SQLite] database file.
 | ||||
| ///
 | ||||
| /// The changesets loaded or stored represent changes to keychain and blockchain data.
 | ||||
| ///
 | ||||
| /// [SQLite]: https://www.sqlite.org/index.html
 | ||||
| #[derive(Debug)] | ||||
| pub struct Persister<P> { | ||||
|     conn: rusqlite::Connection, | ||||
|     params: P, | ||||
| } | ||||
| 
 | ||||
| impl<P: PersistParams> Persister<P> { | ||||
|     /// Persist changeset to the database connection.
 | ||||
|     pub fn persist(&mut self, changeset: &P::ChangeSet) -> rusqlite::Result<()> { | ||||
|         if !changeset.is_empty() { | ||||
|             let db_tx = self.conn.transaction()?; | ||||
|             self.params.write_changeset(&db_tx, changeset)?; | ||||
|             db_tx.commit()?; | ||||
|         } | ||||
|         Ok(()) | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| /// Extends [`rusqlite::Connection`] to transform into a [`Persister`].
 | ||||
| pub trait ConnectionExt: Sized { | ||||
|     /// Transform into a [`Persister`].
 | ||||
|     fn into_persister<P: PersistParams>( | ||||
|         self, | ||||
|         params: P, | ||||
|     ) -> rusqlite::Result<(Persister<P>, Option<P::ChangeSet>)>; | ||||
| } | ||||
| 
 | ||||
| impl ConnectionExt for rusqlite::Connection { | ||||
|     fn into_persister<P: PersistParams>( | ||||
|         mut self, | ||||
|         params: P, | ||||
|     ) -> rusqlite::Result<(Persister<P>, Option<P::ChangeSet>)> { | ||||
|         let db_tx = self.transaction()?; | ||||
|         params.initialize_tables(&db_tx)?; | ||||
|         let changeset = params.load_changeset(&db_tx)?; | ||||
|         db_tx.commit()?; | ||||
|         let persister = Persister { conn: self, params }; | ||||
|         Ok((persister, changeset)) | ||||
|     } | ||||
| } | ||||
| use crate::Anchor; | ||||
| 
 | ||||
| /// Table name for schemas.
 | ||||
| pub const SCHEMAS_TABLE_NAME: &str = "bdk_schemas"; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user