From 44acd75bc5b9cc6001a15fa5fb1e2886d53bbc8b Mon Sep 17 00:00:00 2001 From: git-user-cpp Date: Sun, 28 May 2023 16:05:17 +0300 Subject: [PATCH] A skeleton for module 'Queries' was implemented --- src/main.rs | 4 +- .../controller/create_table_handler.rs | 10 +- src/main_module/model/data/data_handler.rs | 26 ++-- src/main_module/model/data/data_object.rs | 16 +-- src/main_module/model/data/table.rs | 133 +++++++++--------- src/main_module/model/mod.rs | 3 +- .../queries/commands/abstract_command.rs | 23 --- .../queries/commands/create_table_command.rs | 25 +++- .../queries/commands/insert_into_command.rs | 12 +- src/main_module/model/queries/commands/mod.rs | 4 +- .../model/queries/commands/querry_command.rs | 6 +- src/main_module/model/queries/query.rs | 8 +- .../model/queries/query_element.rs | 6 +- src/main_module/model/queries/query_entity.rs | 4 +- .../model/queries/query_keyword.rs | 10 +- 15 files changed, 162 insertions(+), 128 deletions(-) delete mode 100644 src/main_module/model/queries/commands/abstract_command.rs diff --git a/src/main.rs b/src/main.rs index ab45b86..09692af 100644 --- a/src/main.rs +++ b/src/main.rs @@ -27,6 +27,6 @@ use crate::main_module::model::data::data_object::DataObject; pub mod main_module; fn main() { - let new_obj = DataObject::new("name", "Oleg"); - println!("{:?}", new_obj); + let new_obj = DataObject::new("name", "Oleg"); + println!("{:?}", new_obj); } diff --git a/src/main_module/controller/create_table_handler.rs b/src/main_module/controller/create_table_handler.rs index bb15943..9c33f58 100644 --- a/src/main_module/controller/create_table_handler.rs +++ b/src/main_module/controller/create_table_handler.rs @@ -25,13 +25,13 @@ use crate::main_module::model::data::data_handler::DataHandler; pub struct CreateTableHandler { - data_handler: DataHandler, + data_handler: DataHandler, } impl CreateTableHandler { - pub fn new() -> Self { - let data_handler = DataHandler::new(); + pub fn new() -> Self { + let data_handler = DataHandler::new(); - CreateTableHandler { data_handler } - } + CreateTableHandler { data_handler } + } } diff --git a/src/main_module/model/data/data_handler.rs b/src/main_module/model/data/data_handler.rs index dd7b7d3..5ab4da4 100644 --- a/src/main_module/model/data/data_handler.rs +++ b/src/main_module/model/data/data_handler.rs @@ -22,26 +22,26 @@ * SOFTWARE. */ -use std::collections::HashMap; +use std::collections::{HashMap, HashSet}; use crate::main_module::model::data::table::Table; pub struct DataHandler { - tables: HashMap, + tables: HashMap, } impl DataHandler { - pub fn new() -> Self { - DataHandler { - tables: HashMap::new(), - } - } + pub fn new() -> Self { + DataHandler { + tables: HashMap::new(), + } + } - pub fn create_new_table() { - todo!() - } + pub fn create_new_table(str: &str, set: HashSet) { + todo!() + } - pub fn insert_into_table() { - todo!() - } + pub fn insert_into_table() { + todo!() + } } diff --git a/src/main_module/model/data/data_object.rs b/src/main_module/model/data/data_object.rs index aa9da01..22b3a85 100644 --- a/src/main_module/model/data/data_object.rs +++ b/src/main_module/model/data/data_object.rs @@ -24,15 +24,15 @@ #[derive(Debug)] pub struct DataObject { - field_name: String, - value: String, + field_name: String, + value: String, } impl DataObject { - pub fn new(field_name: &str, field_value: &str) -> Self { - DataObject { - field_name: String::from(field_name), - value: String::from(field_value), - } - } + pub fn new(field_name: &str, field_value: &str) -> Self { + DataObject { + field_name: String::from(field_name), + value: String::from(field_value), + } + } } diff --git a/src/main_module/model/data/table.rs b/src/main_module/model/data/table.rs index 6f66f5a..c6d5e24 100644 --- a/src/main_module/model/data/table.rs +++ b/src/main_module/model/data/table.rs @@ -27,74 +27,73 @@ use std::collections::{HashMap, HashSet}; use crate::main_module::model::data::data_object::DataObject; pub struct Table { - error_id: String, - error_arg: String, - error_rws: String, - column_names: HashSet, - rows: HashMap>, + error_id: String, + error_arg: String, + error_rws: String, + column_names: HashSet, + rows: HashMap>, } impl Table { - pub fn new() -> Self { - Table { - error_id: String::from("[ERROR] [Incorrect ID]"), - error_arg: String::from("[ERROR] [Incorrect rows in insert data package"), - error_rws: String::from("[ERROR] [Trying to reach an empty row]"), - column_names: HashSet::new(), - rows: HashMap::new(), - } - } - - //TODO: implement all these functions - fn generate_unique_id() { - todo!() - } - - fn verify_id() { - todo!() - } - - fn verify_field() { - todo!() - } - - fn verify_rows() { - todo!() - } - - fn verify_column_names_correct() { - todo!() - } - - fn verify_id_and_field() { - todo!() - } - - fn verify_id_and_columns() { - todo!() - } - - pub fn row_is_empty() { - todo!() - } - - pub fn get_field_value() { - todo!() - } - - pub fn add_row() { - todo!() - } - - pub fn return_row() { - todo!() - } - - pub fn remove_row() { - todo!() - } - - pub fn update_row_field_values() { - todo!() - } + pub fn new() -> Self { + Table { + error_id: String::from("[ERROR] [Incorrect ID]"), + error_arg: String::from("[ERROR] [Incorrect rows in insert data package"), + error_rws: String::from("[ERROR] [Trying to reach an empty row]"), + column_names: HashSet::new(), + rows: HashMap::new(), + } + } + + fn generate_unique_id() { + todo!() + } + + fn verify_id() { + todo!() + } + + fn verify_field() { + todo!() + } + + fn verify_rows() { + todo!() + } + + fn verify_column_names_correct() { + todo!() + } + + fn verify_id_and_field() { + todo!() + } + + fn verify_id_and_columns() { + todo!() + } + + pub fn row_is_empty() { + todo!() + } + + pub fn get_field_value() { + todo!() + } + + pub fn add_row() { + todo!() + } + + pub fn return_row() { + todo!() + } + + pub fn remove_row() { + todo!() + } + + pub fn update_row_field_values() { + todo!() + } } diff --git a/src/main_module/model/mod.rs b/src/main_module/model/mod.rs index f0e4049..c0d96d9 100644 --- a/src/main_module/model/mod.rs +++ b/src/main_module/model/mod.rs @@ -21,5 +21,6 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ + pub mod data; -pub mod queries; \ No newline at end of file +pub mod queries; diff --git a/src/main_module/model/queries/commands/abstract_command.rs b/src/main_module/model/queries/commands/abstract_command.rs deleted file mode 100644 index 32f4880..0000000 --- a/src/main_module/model/queries/commands/abstract_command.rs +++ /dev/null @@ -1,23 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2023 Andrew Kushyk - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ \ No newline at end of file diff --git a/src/main_module/model/queries/commands/create_table_command.rs b/src/main_module/model/queries/commands/create_table_command.rs index 32f4880..3ac5af5 100644 --- a/src/main_module/model/queries/commands/create_table_command.rs +++ b/src/main_module/model/queries/commands/create_table_command.rs @@ -20,4 +20,27 @@ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. - */ \ No newline at end of file + */ + +use std::collections::HashSet; + +use crate::main_module::model::data::data_handler::DataHandler; +use crate::main_module::model::queries::commands::querry_command::QueryCommand; + +pub struct CreateTableCommand {} + +impl QueryCommand for CreateTableCommand { + fn execute_command(command_line: String) { + let binding = command_line.replace("\\);", ""); + let binding = binding.split(" \\("); + let mut command_addr = binding; + + let table_name = command_addr.next().unwrap(); + let column_name = command_addr.next().unwrap(); + let mut column_names: HashSet = HashSet::new(); + column_names.insert(column_name.to_string()); + let temp: HashSet = HashSet::new(); + + DataHandler::create_new_table(table_name, temp); + } +} diff --git a/src/main_module/model/queries/commands/insert_into_command.rs b/src/main_module/model/queries/commands/insert_into_command.rs index 32f4880..a82d71e 100644 --- a/src/main_module/model/queries/commands/insert_into_command.rs +++ b/src/main_module/model/queries/commands/insert_into_command.rs @@ -20,4 +20,14 @@ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. - */ \ No newline at end of file + */ + +use crate::main_module::model::queries::commands::querry_command::QueryCommand; + +pub struct InsertIntoCommand {} + +impl QueryCommand for InsertIntoCommand { + fn execute_command(command_line: String) { + todo!() + } +} diff --git a/src/main_module/model/queries/commands/mod.rs b/src/main_module/model/queries/commands/mod.rs index 04902bb..d58871e 100644 --- a/src/main_module/model/queries/commands/mod.rs +++ b/src/main_module/model/queries/commands/mod.rs @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -pub mod abstract_command; + pub mod create_table_command; pub mod insert_into_command; -pub mod querry_command; \ No newline at end of file +pub mod querry_command; diff --git a/src/main_module/model/queries/commands/querry_command.rs b/src/main_module/model/queries/commands/querry_command.rs index 32f4880..ad77ea2 100644 --- a/src/main_module/model/queries/commands/querry_command.rs +++ b/src/main_module/model/queries/commands/querry_command.rs @@ -20,4 +20,8 @@ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. - */ \ No newline at end of file + */ + +pub trait QueryCommand { + fn execute_command(command_line: String); +} diff --git a/src/main_module/model/queries/query.rs b/src/main_module/model/queries/query.rs index 32f4880..26e4253 100644 --- a/src/main_module/model/queries/query.rs +++ b/src/main_module/model/queries/query.rs @@ -20,4 +20,10 @@ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. - */ \ No newline at end of file + */ + +use crate::main_module::model::queries::query_element::QueryElement; + +pub struct Query { + query_elements: Vec, +} diff --git a/src/main_module/model/queries/query_element.rs b/src/main_module/model/queries/query_element.rs index 32f4880..9c2fd4a 100644 --- a/src/main_module/model/queries/query_element.rs +++ b/src/main_module/model/queries/query_element.rs @@ -20,4 +20,8 @@ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. - */ \ No newline at end of file + */ + +pub struct QueryElement { + query_composition: Vec, +} diff --git a/src/main_module/model/queries/query_entity.rs b/src/main_module/model/queries/query_entity.rs index 32f4880..9ad7ade 100644 --- a/src/main_module/model/queries/query_entity.rs +++ b/src/main_module/model/queries/query_entity.rs @@ -20,4 +20,6 @@ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. - */ \ No newline at end of file + */ + +pub struct QueryEntity {} diff --git a/src/main_module/model/queries/query_keyword.rs b/src/main_module/model/queries/query_keyword.rs index 32f4880..35f1558 100644 --- a/src/main_module/model/queries/query_keyword.rs +++ b/src/main_module/model/queries/query_keyword.rs @@ -20,4 +20,12 @@ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. - */ \ No newline at end of file + */ + +pub enum QueryKeyword { + CREATE_TABLE, + SELECT, + UPDATE, + DELETE, + INSERT_INTO, +}