qail_core/transpiler/sql/
bigquery.rs

1use super::super::traits::SqlGenerator;
2
3pub struct BigQueryGenerator;
4
5impl SqlGenerator for BigQueryGenerator {
6    fn quote_identifier(&self, id: &str) -> String {
7        format!("`{}`", id.replace('`', "\\`"))
8    }
9
10    fn placeholder(&self, _index: usize) -> String {
11        "?".to_string()
12    }
13
14    fn fuzzy_operator(&self) -> &str {
15        "LIKE"
16    }
17
18    fn bool_literal(&self, val: bool) -> String {
19        if val { "true".to_string() } else { "false".to_string() }
20    }
21
22    fn string_concat(&self, parts: &[&str]) -> String {
23        // BigQuery uses CONCAT(s1, s2, ...)
24        format!("CONCAT({})", parts.join(", "))
25    }
26
27    fn limit_offset(&self, limit: Option<usize>, offset: Option<usize>) -> String {
28        // BigQuery standard SQL supports LIMIT x OFFSET y
29        let mut sql = String::new();
30        if let Some(n) = limit {
31            sql.push_str(&format!(" LIMIT {}", n));
32        }
33        if let Some(n) = offset {
34            sql.push_str(&format!(" OFFSET {}", n));
35        }
36        sql
37    }
38}