chore(chain): rm unused sqlite types
				
					
				
			This commit is contained in:
		
							parent
							
								
									892b97d441
								
							
						
					
					
						commit
						93f9b83e27
					
				| @ -1,6 +1,6 @@ | |||||||
| //! Module for stuff
 | //! 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 alloc::{borrow::ToOwned, boxed::Box, string::ToString, vec::Vec}; | ||||||
| use bitcoin::consensus::{Decodable, Encodable}; | use bitcoin::consensus::{Decodable, Encodable}; | ||||||
| @ -14,105 +14,7 @@ use rusqlite::{ | |||||||
|     ToSql, |     ToSql, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| use crate::{Anchor, Merge}; | use crate::Anchor; | ||||||
| 
 |  | ||||||
| /// 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)) |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 | 
 | ||||||
| /// Table name for schemas.
 | /// Table name for schemas.
 | ||||||
| pub const SCHEMAS_TABLE_NAME: &str = "bdk_schemas"; | pub const SCHEMAS_TABLE_NAME: &str = "bdk_schemas"; | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user