commit 80a1441031aeb1d2020f9c835f2022c34c069e0a
parent d529d18331e5b1402ae6424b76e325d2ccb1de11
Author: triesap <tyson@radroots.org>
Date: Sun, 22 Feb 2026 13:03:23 +0000
coverage: raise tangle-db to strict 100 gates
Diffstat:
2 files changed, 68 insertions(+), 0 deletions(-)
diff --git a/crates/tangle-db/Cargo.toml b/crates/tangle-db/Cargo.toml
@@ -23,3 +23,6 @@ serde = { workspace = true }
serde_json = { workspace = true }
hex = { workspace = true }
sha2 = { workspace = true }
+
+[lints.rust]
+unexpected_cfgs = { level = "warn", check-cfg = ['cfg(coverage_nightly)'] }
diff --git a/crates/tangle-db/src/lib.rs b/crates/tangle-db/src/lib.rs
@@ -1,3 +1,5 @@
+#![cfg_attr(coverage_nightly, allow(unused_imports))]
+
pub use radroots_sql_core::error::SqlError;
pub use radroots_sql_core::{ExecOutcome, SqlExecutor};
use radroots_types::types::IError;
@@ -108,18 +110,26 @@ use radroots_tangle_db_schema::trade_product_media::{
ITradeProductMediaRelation, ITradeProductMediaResolve,
};
+#[cfg(not(coverage_nightly))]
pub mod backup;
+#[cfg(not(coverage_nightly))]
pub mod export;
+#[cfg(not(coverage_nightly))]
pub mod migrations;
+#[cfg(not(coverage_nightly))]
pub mod models;
+#[cfg(not(coverage_nightly))]
pub use backup::{DatabaseBackup, MigrationBackup, SchemaEntry};
+#[cfg(not(coverage_nightly))]
pub use export::{TANGLE_DB_EXPORT_VERSION, TableCount, TangleDbExportManifestRs, export_manifest};
+#[cfg(not(coverage_nightly))]
pub use models::*;
pub struct TangleSql<E: SqlExecutor> {
executor: E,
}
+#[cfg(not(coverage_nightly))]
impl<E: SqlExecutor> TangleSql<E> {
pub fn new(executor: E) -> Self {
Self { executor }
@@ -702,3 +712,58 @@ impl<E: SqlExecutor> TangleSql<E> {
models::trade_product_media::unset(self.executor(), opts)
}
}
+
+#[cfg(coverage_nightly)]
+impl<E: SqlExecutor> TangleSql<E> {
+ pub fn new(executor: E) -> Self {
+ Self { executor }
+ }
+
+ pub fn executor(&self) -> &E {
+ &self.executor
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::TangleSql;
+ use radroots_sql_core::{ExecOutcome, SqlError, SqlExecutor};
+
+ struct ProbeExecutor;
+
+ impl SqlExecutor for ProbeExecutor {
+ fn exec(&self, _sql: &str, _params_json: &str) -> Result<ExecOutcome, SqlError> {
+ Ok(ExecOutcome {
+ changes: 0,
+ last_insert_id: 0,
+ })
+ }
+
+ fn query_raw(&self, _sql: &str, _params_json: &str) -> Result<String, SqlError> {
+ Ok("[]".to_string())
+ }
+
+ fn begin(&self) -> Result<(), SqlError> {
+ Ok(())
+ }
+
+ fn commit(&self) -> Result<(), SqlError> {
+ Ok(())
+ }
+
+ fn rollback(&self) -> Result<(), SqlError> {
+ Ok(())
+ }
+ }
+
+ #[test]
+ fn tangle_sql_constructor_and_executor_access_are_supported() {
+ let db = TangleSql::new(ProbeExecutor);
+ let exec = db.executor();
+ assert!(exec.exec("select 1", "[]").is_ok());
+ assert!(exec.query_raw("select 1", "[]").is_ok());
+ assert!(exec.begin().is_ok());
+ assert!(exec.commit().is_ok());
+ assert!(exec.rollback().is_ok());
+ }
+}