delta-funnel 0.6.0

Lightweight, fast Delta Lake to SQL Server loads with DataFusion SQL and native TDS
Documentation
//! Compile-time coverage for the public execution-profile API.

use std::sync::Arc;

use datafusion::{
    common::DataFusionError,
    execution::TaskContext,
    physical_plan::{ExecutionPlan, SendableRecordBatchStream},
};
use delta_funnel::{
    DeltaDataFusionMetricsSnapshot, DeltaFunnelError, DeltaFunnelRuntime, DeltaFunnelSession,
    ExecutionProfileMode, MssqlWriteReport, OutputWritePlan, QueryExecutionMetric,
    QueryExecutionMetricCategory, QueryExecutionMetricValue, QueryExecutionOperatorProfile,
    QueryExecutionOutcome, QueryExecutionProfile, QueryExecutionScope, WriteAllCacheAliasReport,
    datafusion_query_output_stream, progress::ProgressReporter,
};
use serde_json::Value;

type QueryOutputStreamFn = fn(
    Arc<dyn ExecutionPlan>,
    Arc<TaskContext>,
) -> Result<SendableRecordBatchStream, DataFusionError>;

type RuntimeMssqlProfileFn = fn(
    &DeltaFunnelRuntime,
    &DeltaFunnelSession,
    &OutputWritePlan,
    ExecutionProfileMode,
) -> Result<MssqlWriteReport, DeltaFunnelError>;

type RuntimeMssqlProfileProgressFn = fn(
    &DeltaFunnelRuntime,
    &DeltaFunnelSession,
    &OutputWritePlan,
    ExecutionProfileMode,
    ProgressReporter,
) -> Result<MssqlWriteReport, DeltaFunnelError>;

#[allow(dead_code)]
async fn session_mssql_profile_route_compiles(
    session: &DeltaFunnelSession,
    request: &OutputWritePlan,
) -> Result<MssqlWriteReport, DeltaFunnelError> {
    session
        .write_to_mssql_with_profile_mode(request, ExecutionProfileMode::Detailed)
        .await
}

#[test]
fn execution_profile_types_and_accessors_are_exported_from_the_crate_root() {
    let _: QueryOutputStreamFn = datafusion_query_output_stream;
    let _: RuntimeMssqlProfileFn = DeltaFunnelRuntime::write_to_mssql_with_profile_mode;
    let _: RuntimeMssqlProfileProgressFn =
        DeltaFunnelRuntime::write_to_mssql_with_profile_mode_and_progress;

    let _: ExecutionProfileMode = ExecutionProfileMode::default();
    let _: for<'a> fn(&'a MssqlWriteReport) -> Option<&'a QueryExecutionProfile> =
        MssqlWriteReport::execution_profile;
    let _: for<'a> fn(&'a WriteAllCacheAliasReport) -> Option<&'a QueryExecutionProfile> =
        WriteAllCacheAliasReport::execution_profile;
    let _: fn(&QueryExecutionProfile) -> QueryExecutionScope = QueryExecutionProfile::scope;
    let _: fn(&QueryExecutionProfile) -> QueryExecutionOutcome = QueryExecutionProfile::outcome;
    let _: fn(&QueryExecutionProfile) -> bool = QueryExecutionProfile::partial;
    let _: fn(&QueryExecutionProfile) -> Option<u64> =
        QueryExecutionProfile::delta_funnel_row_limit;
    let _: for<'a> fn(&'a QueryExecutionProfile) -> &'a [QueryExecutionOperatorProfile] =
        QueryExecutionProfile::operators;
    let _: fn(&QueryExecutionProfile) -> Value = QueryExecutionProfile::to_json_value;

    let _: fn(&QueryExecutionOperatorProfile) -> u64 = QueryExecutionOperatorProfile::node_id;
    let _: fn(&QueryExecutionOperatorProfile) -> Option<u64> =
        QueryExecutionOperatorProfile::parent_node_id;
    let _: for<'a> fn(&'a QueryExecutionOperatorProfile) -> &'a str =
        QueryExecutionOperatorProfile::operator_name;
    let _: fn(&QueryExecutionOperatorProfile) -> u64 =
        QueryExecutionOperatorProfile::output_partition_count;
    let _: fn(&QueryExecutionOperatorProfile) -> bool =
        QueryExecutionOperatorProfile::metrics_available;
    let _: for<'a> fn(&'a QueryExecutionOperatorProfile) -> &'a [QueryExecutionMetric] =
        QueryExecutionOperatorProfile::aggregated_metrics;
    let _: for<'a> fn(&'a QueryExecutionOperatorProfile) -> &'a [QueryExecutionMetric] =
        QueryExecutionOperatorProfile::metrics;
    let _: for<'a> fn(
        &'a QueryExecutionOperatorProfile,
    ) -> Option<&'a DeltaDataFusionMetricsSnapshot> =
        QueryExecutionOperatorProfile::delta_provider_read_stats;
    let _: for<'a> fn(&'a QueryExecutionOperatorProfile) -> Option<&'a str> =
        QueryExecutionOperatorProfile::delta_provider_source_name;
    let _: fn(&QueryExecutionOperatorProfile) -> Value =
        QueryExecutionOperatorProfile::to_json_value;

    let _: for<'a> fn(&'a QueryExecutionMetric) -> &'a str = QueryExecutionMetric::name;
    let _: fn(&QueryExecutionMetric) -> QueryExecutionMetricCategory =
        QueryExecutionMetric::category;
    let _: fn(&QueryExecutionMetric) -> Option<u64> = QueryExecutionMetric::partition;
    let _: fn(&QueryExecutionMetric) -> Option<u64> = QueryExecutionMetric::output_partition;
    let _: for<'a> fn(&'a QueryExecutionMetric) -> &'a QueryExecutionMetricValue =
        QueryExecutionMetric::value;
    let _: fn(&QueryExecutionMetric) -> Value = QueryExecutionMetric::to_json_value;
    let _: for<'a> fn(&'a QueryExecutionMetricValue) -> &'static str =
        QueryExecutionMetricValue::value_kind;

    assert_eq!(QueryExecutionScope::Preview.as_str(), "preview");
    assert_eq!(
        QueryExecutionScope::WriteAllCacheAlias.as_str(),
        "write_all_cache_alias"
    );
}