mithril_persistence/database/
mod.rs1pub mod cardano_transaction_migration;
5mod db_version;
6mod hydrator;
7pub(crate) mod query;
8pub mod record;
9pub mod repository;
10mod version_checker;
11
12pub use db_version::*;
13pub use hydrator::Hydrator;
14pub use version_checker::{DatabaseVersionChecker, SqlMigration};
15
16pub type DbVersion = i64;
18
19#[cfg(test)]
20pub(crate) mod test_helper {
21 use std::path::Path;
22
23 use mithril_common::StdResult;
24 use mithril_common::entities::CardanoBlockWithTransactions;
25
26 use crate::database::query::{InsertCardanoBlockQuery, InsertCardanoTransactionQuery};
27 use crate::database::record::IntoRecords;
28 use crate::sqlite::{
29 ConnectionBuilder, ConnectionExtensions, ConnectionOptions, SqliteConnection,
30 };
31
32 pub fn cardano_tx_db_connection() -> StdResult<SqliteConnection> {
34 let connection = ConnectionBuilder::open_memory()
35 .with_options(&[ConnectionOptions::EnableForeignKeys])
36 .with_migrations(crate::database::cardano_transaction_migration::get_migrations())
37 .build()?;
38 Ok(connection)
39 }
40
41 #[allow(unused)] pub fn cardano_tx_db_connection_file(dir_path: &Path) -> StdResult<SqliteConnection> {
44 let connection = ConnectionBuilder::open_file(&dir_path.join("cardano_tx.db"))
45 .with_options(&[ConnectionOptions::EnableForeignKeys])
46 .with_migrations(crate::database::cardano_transaction_migration::get_migrations())
47 .build()?;
48 Ok(connection)
49 }
50
51 #[cfg(test)]
52 pub(crate) fn insert_cardano_blocks_and_transaction(
53 connection: &SqliteConnection,
54 blocks_with_txs: Vec<CardanoBlockWithTransactions>,
55 ) {
56 let (blocks_records, transactions_records) = blocks_with_txs.into_records();
57
58 connection
59 .apply(InsertCardanoBlockQuery::insert_many(blocks_records).unwrap())
60 .unwrap();
61 if !transactions_records.is_empty() {
62 connection
63 .apply(InsertCardanoTransactionQuery::insert_many(transactions_records).unwrap())
64 .unwrap();
65 }
66 }
67}