Skip to main content

robin_sparkless_core/engine/
session.rs

1//! Engine-agnostic SparkSession backend trait.
2
3use crate::engine::{DataFrameBackend, DataFrameReaderBackend};
4use crate::error::EngineError;
5use serde_json::Value as JsonValue;
6
7/// Backend for SparkSession: creates readers, tables, and DataFrames from data.
8pub trait SparkSessionBackend: Send + Sync {
9    fn read(&self) -> Box<dyn DataFrameReaderBackend>;
10    fn table(&self, name: &str) -> Result<Box<dyn DataFrameBackend>, EngineError>;
11    fn create_dataframe_from_rows(
12        &self,
13        rows: Vec<Vec<JsonValue>>,
14        schema: Vec<(String, String)>,
15        verify_schema: bool,
16        schema_was_inferred: bool,
17    ) -> Result<Box<dyn DataFrameBackend>, EngineError>;
18    fn create_dataframe(
19        &self,
20        data: Vec<(i64, i64, String)>,
21        column_names: Vec<&str>,
22    ) -> Result<Box<dyn DataFrameBackend>, EngineError>;
23    fn sql(&self, query: &str) -> Result<Box<dyn DataFrameBackend>, EngineError>;
24    fn register_table(&self, name: &str, df: &dyn DataFrameBackend);
25    fn is_case_sensitive(&self) -> bool;
26    fn get_config(&self) -> &std::collections::HashMap<String, String>;
27}
28
29// Session builder is backend-specific (not a trait) so root uses the concrete backend's builder.