queryer_sql_polars/
dialect.rs1use sqlparser::dialect::Dialect;
2
3#[derive(Debug, Default)]
4pub struct TyrDialect;
5
6impl Dialect for TyrDialect {
8 fn is_identifier_start(&self, ch: char) -> bool {
9 ('a'..='z').contains(&ch) || ('A'..='Z').contains(&ch) || ch == '_'
10 }
11
12 fn is_identifier_part(&self, ch: char) -> bool {
14 ('a'..='z').contains(&ch)
15 || ('A'..='Z').contains(&ch)
16 || ('0'..='9').contains(&ch)
17 || [':', '/', '?', '&', '=', '-', '_', '.'].contains(&ch)
18 }
19}
20
21#[allow(dead_code)]
23fn example_sql() -> String {
24 let url = "https://raw.githubusercontent.com/owid/covid-19-data/master/public/data/latest/owid-covid-latest.csv";
25
26 let sql = format!(
27 "SELECT location name, total_cases, new_cases, total_deaths, new_deaths \
28 FROM {} where new_deaths >= 500 ORDER BY new_cases DESC LIMIT 6 OFFSET 5",
29 url
30 );
31
32 sql
33}
34
35#[cfg(test)]
36mod tests {
37 use super::*;
38 use sqlparser::parser::Parser;
39
40 #[test]
41 fn it_works() {
42 assert!(Parser::parse_sql(&TyrDialect::default(), &example_sql()).is_ok());
43 }
44}