Skip to content

Commit f4e1c6c

Browse files
committed
began to add document support
1 parent 8f622ec commit f4e1c6c

3 files changed

Lines changed: 80 additions & 0 deletions

File tree

src/dialect.rs

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
//! Module for handling dialect selection for parsing
2+
use sqlparser::dialect::AnsiDialect;
3+
use sqlparser::dialect::BigQueryDialect;
4+
use sqlparser::dialect::ClickHouseDialect;
5+
use sqlparser::dialect::DatabricksDialect;
6+
use sqlparser::dialect::DuckDbDialect;
7+
use sqlparser::dialect::GenericDialect;
8+
use sqlparser::dialect::HiveDialect;
9+
use sqlparser::dialect::MsSqlDialect;
10+
use sqlparser::dialect::MySqlDialect;
11+
use sqlparser::dialect::OracleDialect;
12+
use sqlparser::dialect::PostgreSqlDialect;
13+
use sqlparser::dialect::RedshiftSqlDialect;
14+
use sqlparser::dialect::SQLiteDialect;
15+
use sqlparser::dialect::SnowflakeDialect;
16+
17+
/// Enum used for SQL dialect selection
18+
#[derive(PartialEq, Eq)]
19+
pub enum Dialect {
20+
/// ANSI SQL dialect
21+
Ansi,
22+
/// Google BigQuery SQL dialect
23+
BigQuery,
24+
/// ClickHouse SQL dialect
25+
ClickHouse,
26+
/// Databricks SQL dialect
27+
Databricks,
28+
/// DuckDB SQL dialect
29+
DuckDb,
30+
/// Generic SQL dialect
31+
Generic,
32+
/// Apache Hive SQL dialect
33+
Hive,
34+
/// Microsoft SQL Server (T-SQL) dialect
35+
MsSql,
36+
/// MySQL SQL dialect
37+
MySql,
38+
/// Oracle SQL dialect
39+
Oracle,
40+
/// PostgreSQL SQL dialect
41+
PostgreSql,
42+
/// Amazon Redshift SQL dialect
43+
RedshiftSql,
44+
/// SQLite SQL dialect
45+
SQLite,
46+
/// Snowflake SQL dialect
47+
Snowflake,
48+
}
49+
50+
use sqlparser::dialect::Dialect as SqlDialectTrait;
51+
52+
impl Dialect {
53+
/// Execute a function with the selected `sqlparser` dialect.
54+
pub fn with_sqlparser_dialect<R>(
55+
self,
56+
f: impl FnOnce(&dyn SqlDialectTrait) -> R,
57+
) -> R {
58+
match self {
59+
Dialect::Ansi => f(&AnsiDialect {}),
60+
Dialect::BigQuery => f(&BigQueryDialect {}),
61+
Dialect::ClickHouse => f(&ClickHouseDialect {}),
62+
Dialect::Databricks => f(&DatabricksDialect {}),
63+
Dialect::DuckDb => f(&DuckDbDialect {}),
64+
Dialect::Generic => f(&GenericDialect {}),
65+
Dialect::Hive => f(&HiveDialect {}),
66+
Dialect::MsSql => f(&MsSqlDialect {}),
67+
Dialect::MySql => f(&MySqlDialect {}),
68+
Dialect::Oracle => f(&OracleDialect {}),
69+
Dialect::PostgreSql => f(&PostgreSqlDialect {}),
70+
Dialect::RedshiftSql => f(&RedshiftSqlDialect {}),
71+
Dialect::SQLite => f(&SQLiteDialect {}),
72+
Dialect::Snowflake => f(&SnowflakeDialect {}),
73+
}
74+
}
75+
}

src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,4 @@ pub mod files;
1818
pub mod source;
1919
pub mod sql_doc;
2020
pub use sql_doc::SqlDoc;
21+
pub mod dialect;

src/sql_doc.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ use std::{
66
vec,
77
};
88

9+
use sqlparser::dialect::Dialect;
10+
911
use crate::{
1012
ast::ParsedSqlFile,
1113
comments::{Comments, LeadingCommentCapture, MultiFlatten},
@@ -286,6 +288,8 @@ pub struct SqlDocBuilder<'a> {
286288
multiline_flat: MultiFlatten<'a>,
287289
/// Tracks the chosen setting for leading comment collection
288290
leading_type: LeadingCommentCapture,
291+
/// The dialect specified to use
292+
dialect: dyn Dialect,
289293
}
290294

291295
/// Enum for specifying a file doc source as a `directory` or a specific `file`

0 commit comments

Comments
 (0)