Skip to main content

datasources/
driver.rs

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