sqlite_fsr/command/sql/
select.rs

1
2use crate::command::sql::parser::sql_statement::{SelectStatement, AggregatorFunction};
3use crate::models::dbfile::dbtable::TableRow;
4use crate::models::dbfile::table::DBTable;
5
6pub fn select(table: &mut DBTable, mut statement: SelectStatement) -> Vec<TableRow> {
7
8    let records = table.to_table_rows(&statement);
9    let mut table_rows: Vec<TableRow> = records.into_iter()
10                                               .map(|record| TableRow::from(record))
11                                               .collect();
12                                            
13    let aggregator = statement.aggregator_function.take();
14    if let Some(aggregator_function) = aggregator {
15        table_rows = aggregate_table_rows(table_rows, aggregator_function);
16    }
17
18    table_rows
19}
20
21
22pub fn aggregate_table_rows(table_rows: Vec<TableRow>, aggregator_function: AggregatorFunction) -> Vec<TableRow>{
23    let mut aggregated_rows: Vec<TableRow> = Vec::new();
24    match aggregator_function {
25        AggregatorFunction::COUNT => {
26            let aggegated_row_count = table_rows.len();
27            let row_id = 1;
28            let column_values = vec![aggegated_row_count.to_string()];
29            let table_row = TableRow { row_id, column_values };
30            aggregated_rows.push(table_row);
31        }
32        _ => panic!()
33    }
34    return aggregated_rows;
35}