Skip to main content

oak_sql/language/
mod.rs

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