macro_rules! include_sql_str {
($subpath:expr) => {
include_str!(concat!(env!("CARGO_MANIFEST_DIR"), "/sql/", $subpath))
};
}
macro_rules! decl_const_sql_str {
($name:ident, $subpath:expr) => {
#[doc = include_sql_str!($subpath)]
pub const $name: &str = include_sql_str!($subpath);
};
}
pub mod create {
decl_const_sql_str!(SOLUTION_SET, "create/solution_set.sql");
decl_const_sql_str!(SUBMISSION, "create/submission.sql");
decl_const_sql_str!(SOLUTION_SET_FAILURE, "create/solution_set_failure.sql");
}
pub mod delete {
decl_const_sql_str!(SOLUTION_SET, "delete/solution_set.sql");
decl_const_sql_str!(
OLDEST_SOLUTION_SET_FAILURES,
"delete/oldest_solution_set_failures.sql"
);
}
pub mod insert {
decl_const_sql_str!(SOLUTION_SET, "insert/solution_set.sql");
decl_const_sql_str!(SUBMISSION, "insert/submission.sql");
decl_const_sql_str!(SOLUTION_SET_FAILURE, "insert/solution_set_failure.sql");
}
pub mod query {
decl_const_sql_str!(GET_SOLUTION_SET, "query/get_solution_set.sql");
decl_const_sql_str!(LIST_SOLUTION_SETS, "query/list_solution_sets.sql");
decl_const_sql_str!(LIST_SUBMISSIONS, "query/list_submissions.sql");
decl_const_sql_str!(
LATEST_SOLUTION_SET_FAILURES,
"query/latest_solution_set_failures.sql"
);
decl_const_sql_str!(
LIST_SOLUTION_SET_FAILURES,
"query/list_solution_set_failures.sql"
);
}
pub mod table {
use super::create;
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, PartialOrd, Ord)]
pub struct Table {
pub name: &'static str,
pub create: &'static str,
}
impl Table {
const fn new(name: &'static str, create: &'static str) -> Self {
Self { name, create }
}
}
pub const SOLUTION_SET: Table = Table::new("solution_set", create::SOLUTION_SET);
pub const SUBMISSION: Table = Table::new("submission", create::SUBMISSION);
pub const SOLUTION_SET_FAILURE: Table =
Table::new("solution_set_failure", create::SOLUTION_SET_FAILURE);
pub const ALL: &[Table] = &[SOLUTION_SET, SUBMISSION, SOLUTION_SET_FAILURE];
}