vespertide_query/sql/
raw_sql.rs

1use super::types::{BuiltQuery, RawSql};
2
3pub fn build_raw_sql(sql: String) -> BuiltQuery {
4    BuiltQuery::Raw(RawSql::uniform(sql))
5}
6
7#[cfg(test)]
8mod tests {
9    use super::*;
10    use crate::sql::types::DatabaseBackend;
11    use insta::{assert_snapshot, with_settings};
12    use rstest::rstest;
13
14    #[rstest]
15    #[case::raw_sql_action_postgres(
16        "raw_sql_action_postgres",
17        DatabaseBackend::Postgres,
18        &["SELECT 1"]
19    )]
20    #[case::raw_sql_action_mysql(
21        "raw_sql_action_mysql",
22        DatabaseBackend::MySql,
23        &["SELECT 1"]
24    )]
25    #[case::raw_sql_action_sqlite(
26        "raw_sql_action_sqlite",
27        DatabaseBackend::Sqlite,
28        &["SELECT 1"]
29    )]
30    fn test_raw_sql(
31        #[case] title: &str,
32        #[case] backend: DatabaseBackend,
33        #[case] expected: &[&str],
34    ) {
35        let result = build_raw_sql("SELECT 1".into());
36        let sql = result.build(backend);
37        for exp in expected {
38            assert!(
39                sql.contains(exp),
40                "Expected SQL to contain '{}', got: {}",
41                exp,
42                sql
43            );
44        }
45
46        with_settings!({ snapshot_suffix => format!("raw_sql_{}", title) }, {
47            assert_snapshot!(sql);
48        });
49    }
50}