1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
use crate::ts_generator::errors::TsGeneratorError;

use crate::ts_generator::sql_parser::translate_delete::translate_delete;
use crate::ts_generator::sql_parser::translate_insert::translate_insert;
use crate::ts_generator::sql_parser::translate_query::translate_query;
use crate::ts_generator::sql_parser::translate_update::translate_update;
use crate::ts_generator::types::db_conn::DBConn;
use crate::ts_generator::types::ts_query::TsQuery;

use sqlparser::ast::Statement;

pub fn translate_stmt(
    ts_query: &mut TsQuery,
    sql_statement: &Statement,
    db_conn: &DBConn,
) -> Result<(), TsGeneratorError> {
    match sql_statement {
        Statement::Query(query) => {
            translate_query(ts_query, query, db_conn, false)?;
        }
        Statement::Insert {
            or: _,
            into: _,
            table_name,
            columns,
            overwrite: _,
            source,
            partitioned: _,
            after_columns: _,
            table: _,
            on: _,
        } => {
            let table_name = table_name.to_string();
            let table_name = table_name.as_str();
            translate_insert(ts_query, columns, source, table_name, db_conn)?;
        }
        Statement::Delete { table_name, selection } => {
            let table_name = table_name.to_string();
            let table_name = table_name.as_str();
            let selection = selection.to_owned().unwrap();
            translate_delete(ts_query, &selection, table_name, db_conn)?;
        }
        Statement::Update {
            table,
            assignments,
            from,
            selection,
        } => {
            translate_update(ts_query, table, assignments, from, selection, db_conn)?;
        }
        _ => {}
    }
    Ok(())
}