sqlt 0.3.2

SQL parser, translator, and linter for MySQL, MariaDB, Postgres, MSSQL, SQLite
Documentation
pub mod rewrite;
pub mod warn;

pub use warn::{CollectingSink, StderrSink, WarnCode, WarnSink, Warning};

use crate::dialect::DialectId;
use crate::error::{Error, Result};
use crate::{emit, parse};

#[derive(Debug, Default, Clone, Copy)]
pub struct TranslateOptions {
    pub strict: bool,
}

pub fn translate(
    sql: &str,
    src: DialectId,
    dst: DialectId,
    sink: &mut dyn WarnSink,
    opts: &TranslateOptions,
) -> Result<String> {
    let mut stmts = parse::parse(sql, src)?;
    rewrite::rewrite(&mut stmts, src, dst, sink);
    let out = emit::emit(&stmts, dst)?;
    if opts.strict && sink.count() > 0 {
        return Err(Error::StrictWarnings);
    }
    Ok(out)
}