use crate::model_manager::{
Result,
definitions::{ColumnDescriptor, Constraint, DataType, IndexDescriptor, ModelDescriptor},
};
use std::error::Error as StdError;
pub trait DatabaseAdapter: Send + Sync {
type Error: StdError + Send + Sync + 'static;
fn get_db_type_name(&self) -> &'static str;
fn map_common_data_type(&self, common_type: &DataType) -> Result<String>;
fn generate_column_definition_sql(&self, column: &ColumnDescriptor) -> Result<String>;
fn generate_constraint_sql(
&self,
constraint: &Constraint,
table_name: &str,
) -> Result<Option<String>>;
fn generate_primary_key_sql(
&self,
pk_columns: &[String],
table_name: &str,
constraint_name: Option<&str>,
) -> Result<String>;
fn generate_foreign_key_sql(&self, fk: &Constraint, table_name: &str) -> Result<String>;
fn generate_index_sql(&self, index: &IndexDescriptor, table_name: &str) -> Result<String>;
fn generate_create_table_sql(&self, model: &ModelDescriptor) -> Result<String>;
fn generate_drop_table_sql(
&self,
table_name: &str,
schema_name: Option<&str>,
) -> Result<String>;
fn generate_add_column_sql(
&self,
table_name: &str,
column: &ColumnDescriptor,
schema_name: Option<&str>,
) -> Result<String>;
fn generate_drop_column_sql(
&self,
table_name: &str,
column_name: &str,
schema_name: Option<&str>,
) -> Result<String>;
fn generate_rename_table_sql(
&self,
old_table_name: &str,
new_table_name: &str,
schema_name: Option<&str>,
) -> Result<String>;
fn identifier_quote_char_start(&self) -> char;
fn identifier_quote_char_end(&self) -> char;
fn escape_string_literal(&self, value: &str) -> String;
fn quote_identifier(&self, identifier: &str) -> String {
let start = self.identifier_quote_char_start();
let end = self.identifier_quote_char_end();
format!("{}{}{}", start, identifier, end)
}
fn generate_enum_types_sql(&self, _model: &ModelDescriptor) -> Result<Vec<String>> {
Ok(Vec::new())
}
fn generate_drop_constraint_sql(
&self,
table_name: &str,
constraint_name: &str,
schema_name: Option<&str>,
) -> Result<String>;
fn generate_drop_index_sql(
&self,
table_name: &str,
index_name: &str,
schema_name: Option<&str>,
) -> Result<String>;
}