From dfb0a786d21a379b650041f37c5bb834fac85e1d Mon Sep 17 00:00:00 2001 From: giuseppe-g-gelardi Date: Fri, 13 Dec 2024 21:56:27 -0500 Subject: [PATCH] add countrows method update cargo toml and move main.rs, hopefully github doesnt complain --- .gitignore | 2 +- Cargo.toml | 6 ++--- src/database.rs | 58 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 62 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index e04fdc2..2ba40d3 100644 --- a/.gitignore +++ b/.gitignore @@ -24,7 +24,7 @@ cargobase.json cargobase-async.json cargobase-testing.json -main.rs +src/main.rs .env diff --git a/Cargo.toml b/Cargo.toml index f7d8691..805de29 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -29,6 +29,6 @@ tracing-test = "0.2.5" [lib] path = "src/lib.rs" -[[bin]] -name = "cargobase" -path = "main.rs" +# [[bin]] +# name = "cargobase" +# path = "main.rs" diff --git a/src/database.rs b/src/database.rs index fdb0644..9dc1d46 100644 --- a/src/database.rs +++ b/src/database.rs @@ -210,10 +210,22 @@ impl Database { Ok(()) } + + pub fn count_rows(&self, table_name: &str) -> Result { + if let Some(table) = self.tables.get(table_name) { + Ok(table.rows.len()) + } else { + Err(DatabaseError::TableNotFound(format!( + "Table {} not found", + table_name.to_string() + ))) + } + } } #[cfg(test)] mod tests { + use serde_json::json; use tracing_test::traced_test; use super::*; @@ -390,4 +402,50 @@ mod tests { assert!(matches!(result, Err(DatabaseError::TableNotFound(_)))); } + + #[tokio::test] + async fn test_count_rows() { + #[derive(Serialize, Deserialize, Debug, PartialEq, Clone, Default)] + pub struct User { + id: String, + name: String, + email: String, + } + let mut db = setup_temp_db().await; + + let user_columns = Columns::from_struct::(true); + // + let mut users_table = Table::new("users".to_string(), user_columns.clone()); + db.add_table(&mut users_table) + .await + .expect("failed to add users table"); + + let user1 = json!({ + "id": "1", + "name": "John Doe", + "email": "johndoe@example.com" + }); + let user2 = json!({ + "id": "2", + "name": "Jane Smith", + "email": "janesmith@example.com" + }); + let user3 = json!({ + "id": "3", + "name": "Alice Johnson", + "email": "alice@example.com" + }); + + users_table.add_row(&mut db, user1).await; + users_table.add_row(&mut db, user2).await; + users_table.add_row(&mut db, user3).await; + + // Count rows in the table + let row_count = db.count_rows("users").unwrap(); + assert_eq!(row_count, 3); + + // Attempt to count rows for a non-existent table + let result = db.count_rows("NonExistentTable"); + assert!(matches!(result, Err(DatabaseError::TableNotFound(_)))); + } }