oak_sql/language/
mod.rs

1use crate::{ast::SqlRoot, kind::SqlSyntaxKind};
2use oak_core::Language;
3
4/// SQL 语言实现
5#[derive(Debug, Clone, Copy, PartialEq, Eq)]
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 standard() -> Self {
20        Self::default()
21    }
22
23    /// 创建 MySQL 风格SQL 语言实例
24    pub fn mysql() -> Self {
25        Self { case_sensitive: false, quoted_identifiers: true, backtick_identifiers: true, bracket_identifiers: false }
26    }
27
28    /// 创建 PostgreSQL 风格SQL 语言实例
29    pub fn postgresql() -> Self {
30        Self { case_sensitive: false, quoted_identifiers: true, backtick_identifiers: false, bracket_identifiers: false }
31    }
32
33    /// 创建 SQL Server 风格SQL 语言实例
34    pub fn sqlserver() -> Self {
35        Self { case_sensitive: false, quoted_identifiers: true, backtick_identifiers: false, bracket_identifiers: true }
36    }
37}
38
39impl Default for SqlLanguage {
40    fn default() -> Self {
41        Self { case_sensitive: false, quoted_identifiers: true, backtick_identifiers: false, bracket_identifiers: false }
42    }
43}
44
45impl Language for SqlLanguage {
46    type SyntaxKind = SqlSyntaxKind;
47    type TypedRoot = SqlRoot;
48}