1pub mod ast;
35pub mod builder;
36pub mod dialects;
37pub mod diff;
38pub mod errors;
39pub mod executor;
40pub mod ffi;
41pub mod generator;
42pub mod optimizer;
43pub mod parser;
44pub mod planner;
45pub mod schema;
46pub mod tokens;
47
48pub use ast::{CommentType, Expr, MergeClauseKind, QuoteStyle, Statement};
49pub use builder::{
50 ConditionBuilder,
51 SelectBuilder,
52 add,
54 alias,
55 and_all,
56 between,
57 boolean,
58 cast,
60 column,
62 condition,
64 condition_dialect,
65 div,
66 eq,
68 exists,
69 func,
70 func_distinct,
71 gt,
72 gte,
73 in_list,
74 in_subquery,
75 is_not_null,
76 is_null,
77 like,
78 literal,
79 lt,
80 lte,
81 mul,
82 neq,
83 not,
84 not_in_list,
85 null,
86 or_all,
87 parse_condition,
88 parse_condition_dialect,
89 parse_expr,
91 parse_expr_dialect,
92 qualified_star,
93 select,
94 select_all,
95 select_distinct,
96 star,
98 string_literal,
99 sub,
100 subquery,
101 table,
102 table_full,
103};
104pub use dialects::Dialect;
105pub use dialects::plugin::{
106 DialectPlugin, DialectRef, DialectRegistry, register_dialect, resolve_dialect, transpile_ext,
107 transpile_statements_ext,
108};
109pub use dialects::time::{
110 FormatConversionResult, TimeFormatStyle, TsqlStyleCode, format_time, format_time_dialect,
111 format_time_with_warnings,
112};
113pub use diff::{AstNode, ChangeAction, diff as diff_ast, diff_sql};
114pub use errors::SqlglotError;
115pub use generator::{generate, generate_pretty};
116pub use optimizer::annotate_types::{TypeAnnotations, annotate_types};
117pub use optimizer::lineage::{
118 LineageConfig, LineageError, LineageGraph, LineageNode, lineage, lineage_sql,
119};
120pub use optimizer::pushdown_predicates::pushdown_predicates;
121pub use optimizer::scope_analysis::{Scope, ScopeType, build_scope, find_all_in_scope};
122pub use parser::parse;
123pub use parser::{parse_statements_with_comments, parse_with_comments};
124pub use planner::{Plan, Projection, Step, StepId, plan};
125
126pub fn transpile(
147 sql: &str,
148 read_dialect: Dialect,
149 write_dialect: Dialect,
150) -> errors::Result<String> {
151 let ast = parse(sql, read_dialect)?;
152 let transformed = dialects::transform(&ast, read_dialect, write_dialect);
153 Ok(generate(&transformed, write_dialect))
154}
155
156pub fn transpile_statements(
163 sql: &str,
164 read_dialect: Dialect,
165 write_dialect: Dialect,
166) -> errors::Result<Vec<String>> {
167 let stmts = parser::parse_statements(sql, read_dialect)?;
168 let mut results = Vec::with_capacity(stmts.len());
169 for stmt in &stmts {
170 let transformed = dialects::transform(stmt, read_dialect, write_dialect);
171 results.push(generate(&transformed, write_dialect));
172 }
173 Ok(results)
174}
175
176pub fn transpile_with_comments(
182 sql: &str,
183 read_dialect: Dialect,
184 write_dialect: Dialect,
185) -> errors::Result<String> {
186 let ast = parse_with_comments(sql, read_dialect)?;
187 let transformed = dialects::transform(&ast, read_dialect, write_dialect);
188 Ok(generate(&transformed, write_dialect))
189}