toolu_orm_query/select/relational/
sqlite_sql.rs1use super::config::RelationalSelectBuilder;
4
5impl RelationalSelectBuilder {
6 pub fn to_sql_sqlite(&self) -> String {
8 let mut sql = String::new();
9 sql.push_str("SELECT ");
10 self.push_source_select(&mut sql);
11
12 for rel in &self.relations {
13 sql.push_str(", (SELECT ");
14 if rel.is_many {
15 sql.push_str("coalesce(json_group_array(json_array(");
16 Self::push_column_list(&mut sql, &rel.target_table, &rel.target_columns);
17 sql.push_str(")), json_array())");
18 } else {
19 sql.push_str("json_array(");
20 Self::push_column_list(&mut sql, &rel.target_table, &rel.target_columns);
21 sql.push(')');
22 }
23
24 sql.push_str(" FROM \"");
25 sql.push_str(&rel.target_table);
26 sql.push('"');
27 self.push_join_where(&mut sql, &rel.target_table, rel);
28
29 sql.push_str(") AS \"");
30 sql.push_str(&rel.field_name);
31 sql.push('"');
32 }
33
34 sql.push_str(" FROM \"");
35 sql.push_str(&self.source_table);
36 sql.push('"');
37
38 sql
39 }
40
41 pub fn to_sql(&self) -> String {
43 #[cfg(feature = "postgres")]
44 {
45 self.to_sql_postgres()
46 }
47 #[cfg(not(feature = "postgres"))]
48 {
49 self.to_sql_sqlite()
50 }
51 }
52}