use crate::sql::{QueryExecutionError, ResultSet, SqlQuery};
use crate::RemDb;
use alloc::vec::Vec;
pub fn execute_drop_table_query(
db: &mut RemDb,
query: &SqlQuery,
) -> Result<ResultSet, QueryExecutionError> {
let mut if_exists = false;
let mut is_deferred = false;
if let Some((if_exists_str, is_deferred_str, _, _, _, _, _)) = query.table_def.first() {
if_exists = if_exists_str == "true";
is_deferred = is_deferred_str == "true";
}
db.drop_table(&query.table_name, if_exists, is_deferred)
.map_err(|err| match err {
crate::RemDbError::NotAllowed => QueryExecutionError::NotAllowed,
crate::RemDbError::TableNotFound => QueryExecutionError::TableNotFound,
_ => QueryExecutionError::InternalError,
})?;
Ok(ResultSet::new(Vec::new()))
}
pub fn execute_create_database_query(
db: &mut RemDb,
query: &SqlQuery,
) -> Result<ResultSet, QueryExecutionError> {
let database_name = query.table_name.clone();
db.create_database(&database_name)
.map_err(|err| match err {
crate::RemDbError::DatabaseExists => QueryExecutionError::DatabaseExists,
_ => QueryExecutionError::InternalError,
})?;
Ok(ResultSet::new(Vec::new()))
}
pub fn execute_use_database_query(
db: &mut RemDb,
query: &SqlQuery,
) -> Result<ResultSet, QueryExecutionError> {
let database_name = query.table_name.clone();
db.use_database(&database_name)
.map_err(|_| QueryExecutionError::InternalError)?;
Ok(ResultSet::new(Vec::new()))
}
pub fn execute_close_database_query(
db: &mut RemDb,
query: &SqlQuery,
) -> Result<ResultSet, QueryExecutionError> {
let database_name = query.table_name.clone();
db.close_database(&database_name)
.map_err(|_| QueryExecutionError::InternalError)?;
Ok(ResultSet::new(Vec::new()))
}
pub fn execute_drop_database_query(
db: &mut RemDb,
query: &SqlQuery,
) -> Result<ResultSet, QueryExecutionError> {
let database_name = query.table_name.clone();
db.drop_database(&database_name)
.map_err(|_| QueryExecutionError::InternalError)?;
Ok(ResultSet::new(Vec::new()))
}