Skip to main content

datasources/
driver.rs

1use crate::command::Command;
2use crate::connection::Connection;
3use crate::converters::{Mapping, TypeConverter};
4use crate::information::Information;
5use crate::isolation_level::IsolationLevel;
6use crate::statements::StatementTextRenderer;
7use crate::transaction::Transaction;
8use crate::value::Value;
9use std::collections::HashMap;
10use std::sync::Arc;
11
12pub trait Driver: Send + Sync {
13    fn connection(&self, options: Option<&HashMap<String, String>>) -> Arc<dyn Connection>;
14    fn command(&self, connection: Arc<dyn Connection>) -> Arc<dyn Command>;
15    fn transaction(
16        &self,
17        connection: Arc<dyn Connection>,
18        isolation: IsolationLevel,
19    ) -> Arc<dyn Transaction>;
20    fn row_type_converters(
21        &self,
22    ) -> HashMap<String, Box<dyn TypeConverter<Value, Value> + Send + Sync>>;
23
24    fn column_type(&self, name: &str) -> crate::Result<String> {
25        Ok(name.to_string())
26    }
27
28    fn type_converter(&self) -> Option<&dyn Mapping<String, String>> {
29        None
30    }
31
32    fn statement_renderer(&self) -> Option<&StatementTextRenderer> {
33        None
34    }
35
36    fn information(&self) -> Option<&Information> {
37        None
38    }
39}