hinge 0.1.0

SQL-native ELT engine — dependency graph resolved automatically from FROM/JOIN clauses, parallel execution, single binary
Documentation
mod executor;
mod utils;

pub use executor::ClickHouseExecutor;

use crate::application::{Executor, ExecutorError};
use crate::domain::Asset;
use async_trait::async_trait;
use std::time::Instant;
use super::utils::{fmt_duration, SLOW_THRESHOLD};
use utils::run_asset;

#[async_trait]
impl Executor for ClickHouseExecutor {
    async fn run(&self, asset: &Asset) -> Result<(), ExecutorError> {
        tracing::debug!(asset = %asset, kind = %asset.kind(), "starting");

        let start = Instant::now();
        run_asset(
            self.client(),
            self.default_database(),
            self.require_order_by(),
            asset,
        )
        .await?;

        let elapsed = start.elapsed();
        if elapsed >= SLOW_THRESHOLD {
            tracing::warn!(
                asset     = %asset,
                kind      = %asset.kind(),
                elapsed   = %fmt_duration(elapsed),
                threshold = %fmt_duration(SLOW_THRESHOLD),
                "slow query"
            );
        } else {
            tracing::info!(
                asset   = %asset,
                kind    = %asset.kind(),
                elapsed = %fmt_duration(elapsed),
                "done"
            );
        }

        Ok(())
    }
}