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    ) -> Result<Box<dyn DataFrameBackend>, EngineError>;
16    fn create_dataframe(
17        &self,
18        data: Vec<(i64, i64, String)>,
19        column_names: Vec<&str>,
20    ) -> Result<Box<dyn DataFrameBackend>, EngineError>;
21    fn sql(&self, query: &str) -> Result<Box<dyn DataFrameBackend>, EngineError>;
22    fn register_table(&self, name: &str, df: &dyn DataFrameBackend);
23    fn is_case_sensitive(&self) -> bool;
24    fn get_config(&self) -> &std::collections::HashMap<String, String>;
25}
26
27// Session builder is backend-specific (not a trait) so root uses the concrete backend's builder.