From eca7f15224d9221735ad44009d4920c3b642ce84 Mon Sep 17 00:00:00 2001 From: Nasr Date: Thu, 12 Sep 2024 11:41:38 -0400 Subject: [PATCH 1/3] fix(torii-grpc): member clause should never error out if no entities --- crates/torii/grpc/src/server/mod.rs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/crates/torii/grpc/src/server/mod.rs b/crates/torii/grpc/src/server/mod.rs index d6f6894d67..a13f190ccf 100644 --- a/crates/torii/grpc/src/server/mod.rs +++ b/crates/torii/grpc/src/server/mod.rs @@ -521,7 +521,14 @@ impl DojoWorld { "#, compute_selector_from_names(namespace, model) ); - let (models_str,): (String,) = sqlx::query_as(&models_query).fetch_one(&self.pool).await?; + + let models_result: Option<(String,)> = sqlx::query_as(&models_query).fetch_optional(&self.pool).await?; + // we return an empty array of entities if the table is empty + if models_result.is_none() { + return Ok((Vec::new(), 0)); + } + + let (models_str,) = models_result.unwrap(); let model_ids = models_str .split(',') From 9e0283d28f881703d949c4eea3042d083c88c8c4 Mon Sep 17 00:00:00 2001 From: Nasr Date: Thu, 12 Sep 2024 14:09:44 -0400 Subject: [PATCH 2/3] fix: total count --- crates/torii/grpc/src/server/mod.rs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/crates/torii/grpc/src/server/mod.rs b/crates/torii/grpc/src/server/mod.rs index a13f190ccf..b3580fa2f4 100644 --- a/crates/torii/grpc/src/server/mod.rs +++ b/crates/torii/grpc/src/server/mod.rs @@ -257,7 +257,7 @@ impl DojoWorld { "# ); // total count of rows without limit and offset - let total_count: u32 = sqlx::query_scalar(&count_query).fetch_one(&self.pool).await?; + let total_count: u32 = sqlx::query_scalar(&count_query).fetch_optional(&self.pool).await?.unwrap_or(0); if total_count == 0 { return Ok((Vec::new(), 0)); @@ -376,7 +376,7 @@ impl DojoWorld { ); let total_count = - sqlx::query_scalar(&count_query).bind(&keys_pattern).fetch_one(&self.pool).await?; + sqlx::query_scalar(&count_query).bind(&keys_pattern).fetch_optional(&self.pool).await?.unwrap_or(0); if total_count == 0 { return Ok((Vec::new(), 0)); @@ -552,8 +552,9 @@ impl DojoWorld { let total_count = sqlx::query_scalar(&count_query) .bind(comparison_value.clone()) - .fetch_one(&self.pool) - .await?; + .fetch_optional(&self.pool) + .await? + .unwrap_or(0); let db_entities = sqlx::query(&entity_query) .bind(comparison_value.clone()) @@ -678,7 +679,7 @@ impl DojoWorld { count_query = count_query.bind(value); } - let total_count = count_query.fetch_one(&self.pool).await?; + let total_count = count_query.fetch_optional(&self.pool).await?.unwrap_or(0); if total_count == 0 { return Ok((Vec::new(), 0)); From 365af7f916f1c5810a0c66100798311011cccb27 Mon Sep 17 00:00:00 2001 From: Nasr Date: Thu, 12 Sep 2024 14:09:56 -0400 Subject: [PATCH 3/3] fmt --- crates/torii/grpc/src/server/mod.rs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/crates/torii/grpc/src/server/mod.rs b/crates/torii/grpc/src/server/mod.rs index b3580fa2f4..30054029c1 100644 --- a/crates/torii/grpc/src/server/mod.rs +++ b/crates/torii/grpc/src/server/mod.rs @@ -257,7 +257,8 @@ impl DojoWorld { "# ); // total count of rows without limit and offset - let total_count: u32 = sqlx::query_scalar(&count_query).fetch_optional(&self.pool).await?.unwrap_or(0); + let total_count: u32 = + sqlx::query_scalar(&count_query).fetch_optional(&self.pool).await?.unwrap_or(0); if total_count == 0 { return Ok((Vec::new(), 0)); @@ -375,8 +376,11 @@ impl DojoWorld { } ); - let total_count = - sqlx::query_scalar(&count_query).bind(&keys_pattern).fetch_optional(&self.pool).await?.unwrap_or(0); + let total_count = sqlx::query_scalar(&count_query) + .bind(&keys_pattern) + .fetch_optional(&self.pool) + .await? + .unwrap_or(0); if total_count == 0 { return Ok((Vec::new(), 0)); @@ -521,8 +525,9 @@ impl DojoWorld { "#, compute_selector_from_names(namespace, model) ); - - let models_result: Option<(String,)> = sqlx::query_as(&models_query).fetch_optional(&self.pool).await?; + + let models_result: Option<(String,)> = + sqlx::query_as(&models_query).fetch_optional(&self.pool).await?; // we return an empty array of entities if the table is empty if models_result.is_none() { return Ok((Vec::new(), 0));