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