oak_sql/language/
mod.rs

1use oak_core::{Language, LanguageCategory};
2
3/// SQL 语言实现
4#[derive(Debug, Clone, Copy, PartialEq, Eq)]
5pub struct SqlLanguage {
6    /// 是否区分大小
7    pub case_sensitive: bool,
8    /// 是否允许双引号标识符
9    pub quoted_identifiers: bool,
10    /// 是否允许反引号标识符
11    pub backtick_identifiers: bool,
12    /// 是否允许方括号标识符
13    pub bracket_identifiers: bool,
14}
15
16impl SqlLanguage {
17    /// 创建标准 SQL 语言实例
18    pub fn standard() -> Self {
19        Self::default()
20    }
21
22    /// 创建 MySQL 风格SQL 语言实例
23    pub fn mysql() -> Self {
24        Self { case_sensitive: false, quoted_identifiers: true, backtick_identifiers: true, bracket_identifiers: false }
25    }
26
27    /// 创建 PostgreSQL 风格SQL 语言实例
28    pub fn postgresql() -> Self {
29        Self { case_sensitive: false, quoted_identifiers: true, backtick_identifiers: false, bracket_identifiers: false }
30    }
31
32    /// 创建 SQL Server 风格SQL 语言实例
33    pub fn sqlserver() -> Self {
34        Self { case_sensitive: false, quoted_identifiers: true, backtick_identifiers: false, bracket_identifiers: true }
35    }
36}
37
38impl Default for SqlLanguage {
39    fn default() -> Self {
40        Self { case_sensitive: false, quoted_identifiers: true, backtick_identifiers: false, bracket_identifiers: false }
41    }
42}
43
44impl Language for SqlLanguage {
45    const NAME: &'static str = "sql";
46    const CATEGORY: LanguageCategory = LanguageCategory::Dsl;
47
48    type TokenType = crate::kind::SqlSyntaxKind;
49    type ElementType = crate::kind::SqlSyntaxKind;
50    type TypedRoot = ();
51}