diff --git a/src/databases/database.rs b/src/data/databases/database.rs
similarity index 59%
rename from src/databases/database.rs
rename to src/data/databases/database.rs
index e29673d..6e9733a 100644
--- a/src/databases/database.rs
+++ b/src/data/databases/database.rs
@@ -16,34 +16,27 @@
* along with this program. If not, see .
*/
+use std::collections::HashMap;
+
use super::tables::table::Table;
#[derive(Debug)]
-pub struct Database {
- pub name: String,
- pub tables: Vec
,
+pub struct Database {
+ pub tables: HashMap>,
}
-impl Database {
- pub fn create_database(name: String) -> Self {
+impl Database {
+ pub fn create_database() -> Self {
Self {
- name,
- tables: Vec::new(),
+ tables: HashMap::new(),
}
}
- pub fn add_table(&mut self, name: String) {
- self.tables.push(Table::create_table(name));
+ pub fn add_table(&mut self, name: &str, table: Table) {
+ self.tables.insert(name.to_string(), table);
}
- pub fn delete_table(&mut self, name: String) {
- let mut ind = 0;
- while ind != self.tables.len() {
- if self.tables[ind].name == name {
- self.tables.remove(ind);
- } else {
- ind += 1;
- }
- }
+ pub fn delete_table(&mut self, name: &str) {
+ self.tables.remove(name);
}
}
\ No newline at end of file
diff --git a/src/databases/tables/mod.rs b/src/data/databases/mod.rs
similarity index 94%
rename from src/databases/tables/mod.rs
rename to src/data/databases/mod.rs
index d583250..c6740c6 100644
--- a/src/databases/tables/mod.rs
+++ b/src/data/databases/mod.rs
@@ -16,5 +16,5 @@
* along with this program. If not, see .
*/
-pub(crate) mod table;
-pub(crate) mod rows;
\ No newline at end of file
+pub mod database;
+pub mod tables;
\ No newline at end of file
diff --git a/src/databases/mod.rs b/src/data/databases/tables/mod.rs
similarity index 93%
rename from src/databases/mod.rs
rename to src/data/databases/tables/mod.rs
index d1b8d37..0d4fd8b 100644
--- a/src/databases/mod.rs
+++ b/src/data/databases/tables/mod.rs
@@ -16,5 +16,5 @@
* along with this program. If not, see .
*/
-pub(crate) mod database;
-pub(crate) mod tables;
\ No newline at end of file
+pub mod table;
+pub mod rows;
\ No newline at end of file
diff --git a/src/databases/tables/rows/mod.rs b/src/data/databases/tables/rows/mod.rs
similarity index 97%
rename from src/databases/tables/rows/mod.rs
rename to src/data/databases/tables/rows/mod.rs
index 759536c..8260e80 100644
--- a/src/databases/tables/rows/mod.rs
+++ b/src/data/databases/tables/rows/mod.rs
@@ -16,4 +16,4 @@
* along with this program. If not, see .
*/
-pub(crate) mod row;
\ No newline at end of file
+pub mod row;
\ No newline at end of file
diff --git a/src/databases/tables/rows/row.rs b/src/data/databases/tables/rows/row.rs
similarity index 59%
rename from src/databases/tables/rows/row.rs
rename to src/data/databases/tables/rows/row.rs
index 4d108ac..87d9b3a 100644
--- a/src/databases/tables/rows/row.rs
+++ b/src/data/databases/tables/rows/row.rs
@@ -16,32 +16,25 @@
* along with this program. If not, see .
*/
+use std::collections::HashMap;
+
#[derive(Debug)]
-pub struct Row {
- pub primary_key: u32,
- pub columns: Vec,
+pub struct Row {
+ pub columns: HashMap,
}
-impl Row {
- pub fn create_row(primary_key: u32) -> Self {
+impl Row {
+ pub fn create_row() -> Self {
Self {
- primary_key,
- columns: Vec::new(),
+ columns: HashMap::new(),
}
}
- pub fn create_column(&mut self, name: String) {
- self.columns.push(name);
+ pub fn create_column(&mut self, name: &str, value: Value) {
+ self.columns.insert(name.to_string(), value);
}
- pub fn delete_column(&mut self, name: String) {
- let mut ind = 0;
- while ind != self.columns.len() {
- if self.columns[ind] == name {
- self.columns.remove(ind);
- } else {
- ind += 1;
- }
- }
+ pub fn delete_column(&mut self, name: &str) {
+ self.columns.remove(name);
}
}
\ No newline at end of file
diff --git a/src/databases/tables/table.rs b/src/data/databases/tables/table.rs
similarity index 60%
rename from src/databases/tables/table.rs
rename to src/data/databases/tables/table.rs
index b880186..c6ce16f 100644
--- a/src/databases/tables/table.rs
+++ b/src/data/databases/tables/table.rs
@@ -16,34 +16,26 @@
* along with this program. If not, see .
*/
-use crate::databases::tables::rows::row::Row;
+use std::collections::HashMap;
+use crate::data::databases::tables::rows::row::Row;
#[derive(Debug)]
-pub struct Table {
- pub name: String,
- pub rows: Vec,
+pub struct Table {
+ pub rows: HashMap>,
}
-impl Table {
- pub fn create_table(name: String) -> Self {
+impl Table {
+ pub fn create_table() -> Self {
Self {
- name,
- rows: Vec::new(),
+ rows: HashMap::new(),
}
}
- pub fn add_row(&mut self, primary_key: u32) {
- self.rows.push(Row::create_row(primary_key));
+ pub fn add_row(&mut self, primary_key: u32, row: Row) {
+ self.rows.insert(primary_key, row);
}
pub fn delete_row(&mut self, primary_key: u32) {
- let mut ind = 0;
- while ind != self.rows.len() {
- if self.rows[ind].primary_key == primary_key {
- self.rows.remove(ind);
- } else {
- ind += 1;
- }
- }
+ self.rows.remove(&primary_key);
}
}
\ No newline at end of file
diff --git a/src/data/mod.rs b/src/data/mod.rs
new file mode 100644
index 0000000..0adda9a
--- /dev/null
+++ b/src/data/mod.rs
@@ -0,0 +1 @@
+pub mod databases;
\ No newline at end of file
diff --git a/src/lib.rs b/src/lib.rs
index 8aeb6e9..5dd1738 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -16,33 +16,28 @@
* along with this program. If not, see .
*/
-pub(crate) mod databases;
-use crate::databases::database::Database;
+pub mod data;
+use std::collections::HashMap;
+
+use crate::data::databases::database::Database;
#[derive(Debug)]
-pub struct RNSQL {
- pub databases: Vec,
+pub struct RNSQL {
+ pub databases: HashMap>,
}
-impl RNSQL {
+impl RNSQL {
pub fn new() -> Self {
Self {
- databases: Vec::new(),
+ databases: HashMap::new(),
}
}
- pub fn add_database(&mut self, name: String) {
- self.databases.push(Database::create_database(name));
+ pub fn add_database(&mut self, name: &str, database: Database) {
+ self.databases.insert(name.to_string(), database);
}
- pub fn delete_database(&mut self, name: String) {
- let mut ind = 0;
- while ind != self.databases.len() {
- if self.databases[ind].name == name {
- self.databases.remove(ind);
- } else {
- ind += 1;
- }
- }
+ pub fn delete_database(&mut self, name: &str) {
+ self.databases.remove(name);
}
}
\ No newline at end of file
diff --git a/src/main.rs b/src/main.rs
index 76ef0b2..3122faa 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -15,42 +15,78 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
+
use rapid_naive_sql::RNSQL;
-
+use rapid_naive_sql::data::databases::database::Database;
+use rapid_naive_sql::data::databases::tables::table::Table;
+use rapid_naive_sql::data::databases::tables::rows::row::Row;
+
fn main() {
+ const DB_NAME: &str = "db1";
+ const TB_NAME: &str = "tb1";
+ const RW_NAME: u32 = 1;
+ const CL_NAME: &str = "cl1";
+
let mut project = RNSQL::new();
println!("{:#?}\n\n", project);
- project.add_database(String::from("db1"));
+ let db1 = Database::create_database();
+ project.add_database(DB_NAME, db1);
println!("{:#?}\n\n", project);
- project.databases[0].add_table(String::from("tb1"));
+ if let Some(database) = project.databases.get_mut(DB_NAME) {
+ let tb1 = Table::create_table();
+ database.add_table(TB_NAME, tb1);
+ }
println!("{:#?}\n\n", project);
- project.databases[0].tables[0].add_row(1);
+ if let Some(database) = project.databases.get_mut(DB_NAME) {
+ if let Some(table) = database.tables.get_mut(TB_NAME) {
+ let rw1 = Row::create_row();
+ table.add_row(RW_NAME, rw1);
+ }
+ }
println!("{:#?}\n\n", project);
- project.databases[0].tables[0].rows[0].create_column(String::from("name"));
+ if let Some(database) = project.databases.get_mut(DB_NAME) {
+ if let Some(table) = database.tables.get_mut(TB_NAME) {
+ if let Some(row) = table.rows.get_mut(&RW_NAME) {
+ row.create_column(CL_NAME, String::from("hello"));
+ }
+ }
+ }
println!("{:#?}\n\n", project);
- project.databases[0].tables[0].rows[0].delete_column(String::from("name"));
+ if let Some(database) = project.databases.get_mut(DB_NAME) {
+ if let Some(table) = database.tables.get_mut(TB_NAME) {
+ if let Some(row) = table.rows.get_mut(&RW_NAME) {
+ row.delete_column(CL_NAME);
+ }
+ }
+ }
println!("{:#?}\n\n", project);
- project.databases[0].tables[0].delete_row(1);
+ if let Some(database) = project.databases.get_mut(DB_NAME) {
+ if let Some(table) = database.tables.get_mut(TB_NAME) {
+ table.delete_row(RW_NAME);
+ }
+ }
println!("{:#?}\n\n", project);
- project.databases[0].delete_table(String::from("tb1"));
+ if let Some(database) = project.databases.get_mut(DB_NAME) {
+ database.delete_table(TB_NAME);
+ }
println!("{:#?}\n\n", project);
- project.delete_database(String::from("db1"));
+ project.delete_database(DB_NAME);
println!("{:#?}", project);
}
\ No newline at end of file