sqlite_fsr/command/sql/
select.rs1
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}