use easy_macros::always_context;
#[allow(dead_code)]
struct DatabaseSetupTest {
t: ExampleTable,
}
use super::TestDriver;
use crate::{self as sql_crate, Driver, EasySqlTables_create, traits::InternalDriver};
#[allow(dead_code)]
struct ExampleReferencedTable {
id: i64,
}
#[always_context]
impl sql_crate::Table<TestDriver> for ExampleReferencedTable {
fn table_name() -> &'static str {
"example_table2"
}
fn primary_keys() -> Vec<&'static str> {
vec!["id"]
}
fn table_joins(_current_query: &mut String) {}
}
#[allow(dead_code)]
struct ExampleTable {
id: i64,
field0: String,
field1: String,
field2: i32,
field3: i64,
field4: i16,
}
#[always_context]
impl sql_crate::Table<TestDriver> for ExampleTable {
fn table_name() -> &'static str {
"example_table"
}
fn primary_keys() -> Vec<&'static str> {
vec!["id"]
}
fn table_joins(_current_query: &mut String) {}
}
#[always_context]
#[no_context_inputs]
impl sql_crate::DatabaseSetup<TestDriver> for ExampleTable {
async fn setup(
conn: &mut (impl crate::EasyExecutor<TestDriver> + Send + Sync),
) -> anyhow::Result<()> {
use ::anyhow::Context;
let table_exists = <TestDriver as Driver>::table_exists(conn, "example_table")
.await
.with_context(easy_macros::context!(
"Checking if table exists: {:?}",
"example_table"
))?;
if table_exists {
} else {
<TestDriver as Driver>::create_table(
conn,
"example_table2",
vec![sql_crate::driver::TableField {
name: "id",
data_type: {
use crate::macro_support::TypeInfo;
<i64 as crate::macro_support::Type<InternalDriver<TestDriver>>>::type_info()
.name()
.to_string()
},
is_unique: false,
is_not_null: false,
default: None,
is_auto_increment: true,
}],
vec!["id"],
{
vec![(
<ExampleReferencedTable as sql_crate::Table<TestDriver>>::table_name(),
(
vec!["field3"],
<ExampleReferencedTable as sql_crate::Table<TestDriver>>::primary_keys(
),
false,
),
)]
.into_iter()
.collect()
},
)
.await?;
EasySqlTables_create!(TestDriver, *conn, "table_name".to_string(), 5);
}
Ok(())
}
}