feat: finish work on server

This commit is contained in:
Jindřich Moravec 2024-01-25 23:07:27 +01:00
parent 7b79dd69b4
commit 51ed3bbc5c
9 changed files with 356 additions and 145 deletions

View file

@ -1,3 +1,4 @@
use std::sync::Arc;
use crate::error::Error;
use crate::internals::row::ColumnPosition;
use crate::schema::{TableName, TableSchema};
@ -6,6 +7,7 @@ use crate::operation::{ColumnSelection, Condition, Operation};
use crate::result::DbResult;
use crate::type_system::{DbType, IndexableValue, Value};
use bimap::BiMap;
use tokio::sync::Mutex;
use crate::restricted_row::RestrictedRow;
// Use `TablePosition` as index
@ -21,7 +23,7 @@ pub struct State {
// #[derive(Debug)]
pub enum Response<'a> {
Selected(&'a TableSchema, Box<dyn Iterator<Item=RestrictedRow> + 'a>),
Selected(&'a TableSchema, Arc<Mutex<dyn Iterator<Item=RestrictedRow> + 'a + Send>>),
Inserted,
Deleted(usize), // how many were deleted
TableCreated,
@ -49,7 +51,7 @@ impl std::fmt::Debug for Response<'_> {
}
impl State {
fn new() -> Self {
pub fn new() -> Self {
Self {
table_name_position_mapping: BiMap::new(),
tables: vec![],
@ -100,7 +102,7 @@ impl State {
let selected_rows = match maybe_condition {
None => {
let x = table.select_all_rows(selected_column_positions);
Box::new(x) as Box<dyn Iterator<Item=RestrictedRow> + 'a>
Arc::new(Mutex::new(x)) as Arc<Mutex<dyn Iterator<Item=RestrictedRow> + 'a + Send>>
},
Some(Condition::Eq(eq_column_name, value)) => {
@ -113,7 +115,7 @@ impl State {
eq_column_position,
value,
)?;
Box::new(x) as Box<dyn Iterator<Item=RestrictedRow> + 'a>
Arc::new(Mutex::new(x)) as Arc<Mutex<dyn Iterator<Item=RestrictedRow> + 'a + Send>>
}
};