mybatis_sql/
rule.rs

1use crate::template::TEMPLATE;
2use mybatis_core::db::DriverType;
3
4pub trait SqlRule {
5    fn make_where(&self, where_sql: &str) -> String {
6        let sql = where_sql.trim_start();
7        if sql.is_empty() {
8            return String::new();
9        }
10        if sql.starts_with(TEMPLATE.order_by.right_space)
11            || sql.starts_with(TEMPLATE.group_by.right_space)
12            || sql.starts_with(TEMPLATE.limit.right_space)
13        {
14            sql.to_string()
15        } else {
16            format!(
17                " {} {} ",
18                TEMPLATE.r#where.value,
19                sql.trim_start_matches(TEMPLATE.r#where.right_space)
20                    .trim_start_matches(TEMPLATE.and.right_space)
21                    .trim_start_matches(TEMPLATE.or.right_space)
22            )
23        }
24    }
25
26    fn make_left_insert_where(&self, insert_sql: &str, where_sql: &str) -> String {
27        let sql = where_sql
28            .trim()
29            .trim_start_matches(TEMPLATE.r#where.right_space)
30            .trim_start_matches(TEMPLATE.and.right_space);
31        if sql.is_empty() {
32            return insert_sql.to_string();
33        }
34        if sql.starts_with(TEMPLATE.order_by.right_space)
35            || sql.starts_with(TEMPLATE.group_by.right_space)
36            || sql.starts_with(TEMPLATE.limit.right_space)
37        {
38            format!(
39                " {} {} {}",
40                TEMPLATE.r#where.value,
41                insert_sql.trim().trim_end_matches(TEMPLATE.and.left_space),
42                sql
43            )
44        } else {
45            format!(
46                " {} {} {} {}",
47                TEMPLATE.r#where.value,
48                insert_sql.trim().trim_end_matches(TEMPLATE.and.left_space),
49                TEMPLATE.and.value,
50                sql
51            )
52        }
53    }
54
55    fn testcc(&self) -> String;
56}
57
58impl SqlRule for DriverType {
59    fn testcc(&self) -> String {
60        String::from("555")
61    }
62}