use std::sync::Arc;
use super::{
hmm_dom_schema_builder::HMMDomTabSchemaBuilder,
table_provider::{ListingHMMDomTabTable, ListingHMMDomTabTableOptions},
};
use crate::datasources::{exon_listing_table_options::ExonListingConfig, ScanFunction};
use datafusion::{
datasource::{function::TableFunctionImpl, TableProvider},
error::Result,
logical_expr::Expr,
};
#[derive(Debug, Default)]
pub struct HMMDomTabScanFunction {}
impl TableFunctionImpl for HMMDomTabScanFunction {
fn call(&self, exprs: &[Expr]) -> Result<Arc<dyn TableProvider>> {
let listing_scan_function = ScanFunction::try_from(exprs)?;
let schema = HMMDomTabSchemaBuilder::default().build();
let listing_table_options =
ListingHMMDomTabTableOptions::new(listing_scan_function.file_compression_type);
let listing_table_config = ExonListingConfig::new_with_options(
listing_scan_function.listing_table_url,
listing_table_options,
);
let listing_table = ListingHMMDomTabTable::new(listing_table_config, schema);
Ok(Arc::new(listing_table))
}
}