sea-schema-sync 0.17.0-rc.16

🌿 SQL schema definition and discovery
Documentation
use crate::{Connection, debug_print, rusqlite_types::RusqliteRow};
use rusqlite::{Connection as RusqliteConnection, Error as RusqliteError};
use sea_query::{SelectStatement, SqliteQueryBuilder};
use sea_query_rusqlite::{RusqliteBinder, rusqlite};

pub struct Executor {
    conn: RusqliteConnection,
}

pub trait IntoExecutor {
    fn into_executor(self) -> Executor;
}

impl IntoExecutor for RusqliteConnection {
    fn into_executor(self) -> Executor {
        Executor { conn: self }
    }
}

impl Connection for Executor {
    fn query_all(&self, select: SelectStatement) -> Result<Vec<RusqliteRow>, RusqliteError> {
        let (sql, values) = select.build_rusqlite(SqliteQueryBuilder);
        debug_print!("{}, {:?}", sql, values);

        let mut stmt = self.conn.prepare(sql.as_str())?;
        let mut rows = stmt.query(&*values.as_params())?;
        let mut res = Vec::new();

        while let Some(row) = rows.next()? {
            res.push(RusqliteRow::from_row(row));
        }

        Ok(res)
    }

    fn query_all_raw(&self, sql: String) -> Result<Vec<RusqliteRow>, RusqliteError> {
        debug_print!("{}", sql);

        let mut stmt = self.conn.prepare(sql.as_str())?;
        let mut rows = stmt.query(())?;
        let mut res = Vec::new();

        while let Some(row) = rows.next()? {
            res.push(RusqliteRow::from_row(row));
        }

        Ok(res)
    }
}