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}