Skip to content

Commit

Permalink
Allow detail argument and trailing commas in ereport! (#1472)
Browse files Browse the repository at this point in the history
I use `ereport!` because I like to include a `detail` entry but it comes
with some inconveniences. When I would write the following snippet in my
`Err` match arms, the compiler would complain about mismatch type output
from the match arms thus requiring the inclusion of `unreachable!`

```rust
pgrx::ereport!(
    PgLogLevel::ERROR,
    PgSqlErrorCode::ERRCODE_INTERNAL_ERROR,
    format!("{} failed", stringify!(snowflake_pool_stats)),
    err.to_string()
);

// necessary to satisfy the compiler
unreachable!()
```

After looking at the macro src for `ereport!` I realized why I started
writing `PgLogLevel::ERROR` rather than simply `ERROR`:
the `ERROR` case didn't support a `detail` argument so let's add that.
  • Loading branch information
hoodiecollin authored and workingjubilee committed Jan 24, 2024
1 parent e0a2370 commit 8ada4a3
Showing 1 changed file with 26 additions and 19 deletions.
45 changes: 26 additions & 19 deletions pgrx-pg-sys/src/submodules/elog.rs
Original file line number Diff line number Diff line change
Expand Up @@ -336,77 +336,84 @@ macro_rules! function_name {
/// ```
#[macro_export]
macro_rules! ereport {
(ERROR, $errcode:expr, $message:expr) => {
(ERROR, $errcode:expr, $message:expr $(, $detail:expr)? $(,)?) => {
$crate::panic::ErrorReport::new($errcode, $message, $crate::function_name!())
$(.set_detail($detail))?
.report($crate::elog::PgLogLevel::ERROR);
unreachable!();
};

(PANIC, $errcode:expr, $message:expr) => {
(PANIC, $errcode:expr, $message:expr $(, $detail:expr)? $(,)?) => {
$crate::panic::ErrorReport::new($errcode, $message, $crate::function_name!())
$(.set_detail($detail))?
.report($crate::elog::PgLogLevel::PANIC);
unreachable!();
};

(FATAL, $errcode:expr, $message:expr) => {
(FATAL, $errcode:expr, $message:expr $(, $detail:expr)? $(,)?) => {
$crate::panic::ErrorReport::new($errcode, $message, $crate::function_name!())
$(.set_detail($detail))?
.report($crate::elog::PgLogLevel::FATAL);
unreachable!();
};

(WARNING, $errcode:expr, $message:expr) => {
(WARNING, $errcode:expr, $message:expr $(, $detail:expr)? $(,)?) => {
$crate::panic::ErrorReport::new($errcode, $message, $crate::function_name!())
$(.set_detail($detail))?
.report($crate::elog::PgLogLevel::WARNING)
};

(NOTICE, $errcode:expr, $message:expr) => {
(NOTICE, $errcode:expr, $message:expr $(, $detail:expr)? $(,)?) => {
$crate::panic::ErrorReport::new($errcode, $message, $crate::function_name!())
$(.set_detail($detail))?
.report($crate::elog::PgLogLevel::NOTICE)
};

(INFO, $errcode:expr, $message:expr) => {
(INFO, $errcode:expr, $message:expr $(, $detail:expr)? $(,)?) => {
$crate::panic::ErrorReport::new($errcode, $message, $crate::function_name!())
$(.set_detail($detail))?
.report($crate::elog::PgLogLevel::INFO)
};

(LOG, $errcode:expr, $message:expr) => {
(LOG, $errcode:expr, $message:expr $(, $detail:expr)? $(,)?) => {
$crate::panic::ErrorReport::new($errcode, $message, $crate::function_name!())
$(.set_detail($detail))?
.report($crate::elog::PgLogLevel::LOG)
};

(DEBUG5, $errcode:expr, $message:expr) => {
(DEBUG5, $errcode:expr, $message:expr $(, $detail:expr)? $(,)?) => {
$crate::panic::ErrorReport::new($errcode, $message, $crate::function_name!())
$(.set_detail($detail))?
.report($crate::elog::PgLogLevel::DEBUG5)
};

(DEBUG4, $errcode:expr, $message:expr) => {
(DEBUG4, $errcode:expr, $message:expr $(, $detail:expr)? $(,)?) => {
$crate::panic::ErrorReport::new($errcode, $message, $crate::function_name!())
$(.set_detail($detail))?
.report($crate::elog::PgLogLevel::DEBUG4)
};

(DEBUG3, $errcode:expr, $message:expr) => {
(DEBUG3, $errcode:expr, $message:expr $(, $detail:expr)? $(,)?) => {
$crate::panic::ErrorReport::new($errcode, $message, $crate::function_name!())
$(.set_detail($detail))?
.report($crate::elog::PgLogLevel::DEBUG3)
};

(DEBUG2, $errcode:expr, $message:expr) => {
(DEBUG2, $errcode:expr, $message:expr $(, $detail:expr)? $(,)?) => {
$crate::panic::ErrorReport::new($errcode, $message, $crate::function_name!())
$(.set_detail($detail))?
.report($crate::elog::PgLogLevel::DEBUG2)
};

(DEBUG1, $errcode:expr, $message:expr) => {
(DEBUG1, $errcode:expr, $message:expr $(, $detail:expr)? $(,)?) => {
$crate::panic::ErrorReport::new($errcode, $message, $crate::function_name!())
$(.set_detail($detail))?
.report($crate::elog::PgLogLevel::DEBUG1)
};

($loglevel:expr, $errcode:expr, $message:expr) => {
($loglevel:expr, $errcode:expr, $message:expr $(, $detail:expr)? $(,)?) => {
$crate::panic::ErrorReport::new($errcode, $message, $crate::function_name!())
.report($loglevel);
};

($loglevel:expr, $errcode:expr, $message:expr, $detail:expr) => {
$crate::panic::ErrorReport::new($errcode, $message, $crate::function_name!())
.set_detail($detail)
$(.set_detail($detail))?
.report($loglevel);
};
}
Expand Down

0 comments on commit 8ada4a3

Please sign in to comment.