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