diff --git a/src/database/executors/pgrx.rs b/src/database/executors/pgrx.rs index 4954699..bde39bb 100644 --- a/src/database/executors/pgrx.rs +++ b/src/database/executors/pgrx.rs @@ -24,21 +24,28 @@ impl DatabaseExecutor for SpiExecutor { } } - Spi::connect(|client| { - pgrx::notice!("JSPG_SQL: {}", sql); - match client.select(sql, Some(args_with_oid.len() as i64), &args_with_oid) { - Ok(tup_table) => { - let mut results = Vec::new(); - for row in tup_table { - if let Ok(Some(jsonb)) = row.get::(1) { - results.push(jsonb.0); + pgrx::PgTryBuilder::new(|| { + Spi::connect(|client| { + pgrx::notice!("JSPG_SQL: {}", sql); + match client.select(sql, Some(args_with_oid.len() as i64), &args_with_oid) { + Ok(tup_table) => { + let mut results = Vec::new(); + for row in tup_table { + if let Ok(Some(jsonb)) = row.get::(1) { + results.push(jsonb.0); + } } + Ok(Value::Array(results)) } - Ok(Value::Array(results)) + Err(e) => Err(format!("SPI Query Fetch Failure: {}", e)), } - Err(e) => Err(format!("SPI Query Fetch Failure: {}", e)), - } + }) }) + .catch_others(|cause| { + pgrx::warning!("JSPG Caught Native Postgres Error: {:?}", cause); + Err(format!("{:?}", cause)) + }) + .execute() } fn execute(&self, sql: &str, args: Option<&[Value]>) -> Result<(), String> { @@ -53,13 +60,20 @@ impl DatabaseExecutor for SpiExecutor { } } - Spi::connect_mut(|client| { - pgrx::notice!("JSPG_SQL: {}", sql); - match client.update(sql, Some(args_with_oid.len() as i64), &args_with_oid) { - Ok(_) => Ok(()), - Err(e) => Err(format!("SPI Execution Failure: {}", e)), - } + pgrx::PgTryBuilder::new(|| { + Spi::connect_mut(|client| { + pgrx::notice!("JSPG_SQL: {}", sql); + match client.update(sql, Some(args_with_oid.len() as i64), &args_with_oid) { + Ok(_) => Ok(()), + Err(e) => Err(format!("SPI Execution Failure: {}", e)), + } + }) }) + .catch_others(|cause| { + pgrx::warning!("JSPG Caught Native Postgres Error: {:?}", cause); + Err(format!("{:?}", cause)) + }) + .execute() } fn auth_user_id(&self) -> Result {