#![cfg(any(feature = "rusqlite", feature = "turso", feature = "libsql"))]
use crate::common::schema::sqlite::{
InsertComplex, InsertSimple, Role, Simple, SimpleComplexSchema, SimpleSchema,
};
use drizzle::core::expr::*;
use drizzle::sqlite::prelude::*;
use drizzle_macros::sqlite_test;
#[cfg(feature = "uuid")]
use uuid::Uuid;
#[derive(SQLiteFromRow, Debug)]
struct SimpleResult {
id: i32,
name: String,
}
#[cfg(not(feature = "uuid"))]
#[derive(Debug)]
struct ComplexResult {
id: i32,
name: String,
email: Option<String>,
age: Option<i32>,
}
#[cfg(feature = "uuid")]
#[derive(Debug, SQLiteFromRow)]
struct ComplexResult {
id: Uuid,
name: String,
email: Option<String>,
age: Option<i32>,
}
sqlite_test!(simple_delete, SimpleSchema, {
let SimpleSchema { simple } = schema;
let test_data = vec![
InsertSimple::new("delete_me"),
InsertSimple::new("keep_me"),
InsertSimple::new("delete_me"),
];
let insert_result = drizzle_exec!(db.insert(simple).values(test_data).execute());
assert_eq!(insert_result, 3);
let initial_results: Vec<SimpleResult> =
drizzle_exec!(db.select((simple.id, simple.name)).from(simple).all());
assert_eq!(initial_results.len(), 3);
let delete_result = drizzle_exec!(
db.delete(simple)
.r#where(eq(simple.name, "delete_me"))
.execute()
);
assert_eq!(delete_result, 2);
let remaining_results: Vec<SimpleResult> =
drizzle_exec!(db.select((simple.id, simple.name)).from(simple).all());
assert_eq!(remaining_results.len(), 1);
assert_eq!(remaining_results[0].name, "keep_me");
let deleted_results: Vec<SimpleResult> = drizzle_exec!(
db.select((simple.id, simple.name))
.from(simple)
.r#where(eq(Simple::name, "delete_me"))
.all()
);
assert_eq!(deleted_results.len(), 0);
});
#[cfg(feature = "uuid")]
sqlite_test!(feature_gated_delete, SimpleComplexSchema, {
let SimpleComplexSchema { simple, complex } = schema;
let test_id_1 = uuid::Uuid::new_v4();
let test_id_2 = uuid::Uuid::new_v4();
let test_data = vec![
InsertComplex::new("delete_user", true, Role::User)
.with_id(test_id_1)
.with_email("delete@example.com".to_string())
.with_age(25),
InsertComplex::new("keep_user", true, Role::User)
.with_id(test_id_2)
.with_email("keep@example.com".to_string())
.with_age(35),
];
let insert_result = drizzle_exec!(db.insert(complex).values(test_data).execute());
assert_eq!(insert_result, 2);
let initial_results: Vec<ComplexResult> = drizzle_exec!(
db.select((complex.id, complex.name, complex.email, complex.age))
.from(complex)
.all()
);
drizzle_assert_eq!(2, initial_results.len());
let delete_result = drizzle_exec!(
db.delete(complex)
.r#where(eq(complex.id, test_id_1))
.execute()
);
drizzle_assert_eq!(1, delete_result);
let remaining_results: Vec<ComplexResult> = drizzle_exec!(
db.select((complex.id, complex.name, complex.email, complex.age))
.from(complex)
.all()
);
drizzle_assert_eq!(1, remaining_results.len());
drizzle_assert_eq!("keep_user", remaining_results[0].name.as_str());
drizzle_assert_eq!(test_id_2, remaining_results[0].id);
let deleted_results: Vec<ComplexResult> = drizzle_exec!(
db.select((complex.id, complex.name, complex.email, complex.age))
.from(complex)
.r#where(eq(complex.id, test_id_1.to_string()))
.all()
);
drizzle_assert_eq!(0, deleted_results.len());
});