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::time::{
105 FormatConversionResult, TimeFormatStyle, TsqlStyleCode, format_time, format_time_dialect,
106 format_time_with_warnings,
107};
108pub use diff::{AstNode, ChangeAction, diff as diff_ast, diff_sql};
109pub use errors::SqlglotError;
110pub use generator::{generate, generate_pretty};
111pub use optimizer::annotate_types::{TypeAnnotations, annotate_types};
112pub use optimizer::lineage::{
113 LineageConfig, LineageError, LineageGraph, LineageNode, lineage, lineage_sql,
114};
115pub use optimizer::pushdown_predicates::pushdown_predicates;
116pub use optimizer::scope_analysis::{Scope, ScopeType, build_scope, find_all_in_scope};
117pub use parser::parse;
118pub use planner::{Plan, Projection, Step, StepId, plan};
119
120pub fn transpile(
141 sql: &str,
142 read_dialect: Dialect,
143 write_dialect: Dialect,
144) -> errors::Result<String> {
145 let ast = parse(sql, read_dialect)?;
146 let transformed = dialects::transform(&ast, read_dialect, write_dialect);
147 Ok(generate(&transformed, write_dialect))
148}
149
150pub fn transpile_statements(
157 sql: &str,
158 read_dialect: Dialect,
159 write_dialect: Dialect,
160) -> errors::Result<Vec<String>> {
161 let stmts = parser::parse_statements(sql, read_dialect)?;
162 let mut results = Vec::with_capacity(stmts.len());
163 for stmt in &stmts {
164 let transformed = dialects::transform(stmt, read_dialect, write_dialect);
165 results.push(generate(&transformed, write_dialect));
166 }
167 Ok(results)
168}