csvsql 0.1.4

SQL like engine that works on CSV file.
Documentation
use std::rc::Rc;

use sqlparser::ast::Values;

use crate::{
    engine::Engine,
    error::CvsSqlError,
    extractor::Extractor,
    group_by::GroupRow,
    projections::SingleConvert,
    result_set_metadata::SimpleResultSetMetadata,
    results::ResultSet,
    results_data::{DataRow, ResultsData},
};

impl Extractor for Values {
    fn extract(&self, engine: &Engine) -> Result<ResultSet, CvsSqlError> {
        let empty_metadat = SimpleResultSetMetadata::new(None).build();
        let empty_row = DataRow::new(vec![]);
        let empty_row = GroupRow {
            data: empty_row,
            group_rows: vec![],
        };
        let mut size = 0;
        let mut data = vec![];

        for row in &self.rows {
            if row.len() > size {
                size = row.len()
            }
            let mut line = vec![];
            for expr in row {
                let item = expr.convert_single(&empty_metadat, engine)?;
                let val = item.get(&empty_row).clone();
                line.push(val);
            }
            let row = DataRow::new(line);
            data.push(row);
        }

        let data = ResultsData::new(data);
        let mut metadata = SimpleResultSetMetadata::new(None);
        for i in 0..size {
            metadata.add_column(&format!("{i}"));
        }
        let metadata = Rc::new(metadata.build());

        Ok(ResultSet { data, metadata })
    }
}