#[allow(dead_code)]
#[derive(Clone, Copy, Debug, Ord, PartialOrd, PartialEq, Eq)]
pub enum PgLogLevel {
DEBUG5 = crate::DEBUG5 as isize,
DEBUG4 = crate::DEBUG4 as isize,
DEBUG3 = crate::DEBUG3 as isize,
DEBUG2 = crate::DEBUG2 as isize,
DEBUG1 = crate::DEBUG1 as isize,
LOG = crate::LOG as isize,
#[allow(non_camel_case_types)]
LOG_SERVER_ONLY = crate::LOG_SERVER_ONLY as isize,
INFO = crate::INFO as isize,
NOTICE = crate::NOTICE as isize,
WARNING = crate::WARNING as isize,
ERROR = crate::PGERROR as isize,
FATAL = crate::FATAL as isize,
PANIC = crate::PANIC as isize,
}
impl From<isize> for PgLogLevel {
#[inline]
fn from(i: isize) -> Self {
if i == PgLogLevel::DEBUG5 as isize {
PgLogLevel::DEBUG5
} else if i == PgLogLevel::DEBUG4 as isize {
PgLogLevel::DEBUG4
} else if i == PgLogLevel::DEBUG3 as isize {
PgLogLevel::DEBUG3
} else if i == PgLogLevel::DEBUG2 as isize {
PgLogLevel::DEBUG2
} else if i == PgLogLevel::DEBUG1 as isize {
PgLogLevel::DEBUG1
} else if i == PgLogLevel::INFO as isize {
PgLogLevel::INFO
} else if i == PgLogLevel::NOTICE as isize {
PgLogLevel::NOTICE
} else if i == PgLogLevel::WARNING as isize {
PgLogLevel::WARNING
} else if i == PgLogLevel::ERROR as isize {
PgLogLevel::ERROR
} else if i == PgLogLevel::FATAL as isize {
PgLogLevel::FATAL
} else if i == PgLogLevel::PANIC as isize {
PgLogLevel::PANIC
} else {
PgLogLevel::ERROR
}
}
}
impl From<i32> for PgLogLevel {
#[inline]
fn from(i: i32) -> Self {
(i as isize).into()
}
}
impl PgLogLevel {
#[doc(hidden)]
#[inline]
pub fn is_interesting(&self) -> bool {
#[cfg(not(feature = "pg13"))]
{
unsafe { crate::message_level_is_interesting(*self as _) }
}
#[cfg(feature = "pg13")]
{
let level = *self as i32;
unsafe {
level >= crate::PGERROR as i32
|| level >= crate::log_min_messages
|| level >= crate::client_min_messages
}
}
}
}
#[doc(hidden)]
pub trait IntoMessage {
fn into_message(self) -> std::borrow::Cow<'static, str>;
}
impl IntoMessage for &str {
#[inline]
fn into_message(self) -> std::borrow::Cow<'static, str> {
std::borrow::Cow::Owned(self.to_owned())
}
}
impl IntoMessage for String {
#[inline]
fn into_message(self) -> std::borrow::Cow<'static, str> {
std::borrow::Cow::Owned(self)
}
}
impl IntoMessage for std::fmt::Arguments<'_> {
#[inline]
fn into_message(self) -> std::borrow::Cow<'static, str> {
match self.as_str() {
Some(s) => std::borrow::Cow::Borrowed(s),
None => std::borrow::Cow::Owned(self.to_string()),
}
}
}
#[macro_export]
macro_rules! debug5 {
($($arg:tt)*) => { $crate::ereport!($crate::elog::PgLogLevel::DEBUG5, $crate::errcodes::PgSqlErrorCode::ERRCODE_SUCCESSFUL_COMPLETION, format_args!($($arg)*)) };
}
#[macro_export]
macro_rules! debug4 {
($($arg:tt)*) => { $crate::ereport!($crate::elog::PgLogLevel::DEBUG4, $crate::errcodes::PgSqlErrorCode::ERRCODE_SUCCESSFUL_COMPLETION, format_args!($($arg)*)) };
}
#[macro_export]
macro_rules! debug3 {
($($arg:tt)*) => { $crate::ereport!($crate::elog::PgLogLevel::DEBUG3, $crate::errcodes::PgSqlErrorCode::ERRCODE_SUCCESSFUL_COMPLETION, format_args!($($arg)*)) };
}
#[macro_export]
macro_rules! debug2 {
($($arg:tt)*) => { $crate::ereport!($crate::elog::PgLogLevel::DEBUG2, $crate::errcodes::PgSqlErrorCode::ERRCODE_SUCCESSFUL_COMPLETION, format_args!($($arg)*)) };
}
#[macro_export]
macro_rules! debug1 {
($($arg:tt)*) => { $crate::ereport!($crate::elog::PgLogLevel::DEBUG1, $crate::errcodes::PgSqlErrorCode::ERRCODE_SUCCESSFUL_COMPLETION, format_args!($($arg)*)) };
}
#[macro_export]
macro_rules! log {
($($arg:tt)*) => { $crate::ereport!($crate::elog::PgLogLevel::LOG, $crate::errcodes::PgSqlErrorCode::ERRCODE_SUCCESSFUL_COMPLETION, format_args!($($arg)*)) };
}
#[macro_export]
macro_rules! info {
($($arg:tt)*) => { $crate::ereport!($crate::elog::PgLogLevel::INFO, $crate::errcodes::PgSqlErrorCode::ERRCODE_SUCCESSFUL_COMPLETION, format_args!($($arg)*)) };
}
#[macro_export]
macro_rules! notice {
($($arg:tt)*) => { $crate::ereport!($crate::elog::PgLogLevel::NOTICE, $crate::errcodes::PgSqlErrorCode::ERRCODE_SUCCESSFUL_COMPLETION, format_args!($($arg)*)) };
}
#[macro_export]
macro_rules! warning {
($($arg:tt)*) => { $crate::ereport!($crate::elog::PgLogLevel::WARNING, $crate::errcodes::PgSqlErrorCode::ERRCODE_WARNING, format_args!($($arg)*)) };
}
#[macro_export]
macro_rules! error {
($($arg:tt)*) => {{ $crate::ereport!($crate::elog::PgLogLevel::ERROR, $crate::errcodes::PgSqlErrorCode::ERRCODE_INTERNAL_ERROR, format_args!($($arg)*)); unreachable!() }};
}
#[allow(non_snake_case)]
#[macro_export]
macro_rules! FATAL {
($($arg:tt)*) => {{ $crate::ereport!($crate::elog::PgLogLevel::FATAL, $crate::errcodes::PgSqlErrorCode::ERRCODE_INTERNAL_ERROR, format_args!($($arg)*)); unreachable!() }};
}
#[allow(non_snake_case)]
#[macro_export]
macro_rules! PANIC {
($($arg:tt)*) => {{ $crate::ereport!($crate::elog::PgLogLevel::PANIC, $crate::errcodes::PgSqlErrorCode::ERRCODE_INTERNAL_ERROR, format_args!($($arg)*)); unreachable!() }};
}
#[macro_export]
macro_rules! function_name {
() => {{
fn f() {}
fn type_name_of<T>(_: T) -> &'static str {
core::any::type_name::<T>()
}
let name = type_name_of(f);
&name[..name.len() - 3]
}};
}
#[macro_export]
macro_rules! ereport {
(ERROR, $errcode:expr, $message:expr $(, $detail:expr)? $(,)?) => {
$crate::panic::ErrorReport::new($errcode, $crate::elog::IntoMessage::into_message($message), $crate::function_name!())
$(.set_detail($detail))?
.report($crate::elog::PgLogLevel::ERROR);
unreachable!();
};
(PANIC, $errcode:expr, $message:expr $(, $detail:expr)? $(,)?) => {
$crate::panic::ErrorReport::new($errcode, $crate::elog::IntoMessage::into_message($message), $crate::function_name!())
$(.set_detail($detail))?
.report($crate::elog::PgLogLevel::PANIC);
unreachable!();
};
(FATAL, $errcode:expr, $message:expr $(, $detail:expr)? $(,)?) => {
$crate::panic::ErrorReport::new($errcode, $crate::elog::IntoMessage::into_message($message), $crate::function_name!())
$(.set_detail($detail))?
.report($crate::elog::PgLogLevel::FATAL);
unreachable!();
};
(WARNING, $errcode:expr, $message:expr $(, $detail:expr)? $(,)?) => {
if $crate::elog::PgLogLevel::WARNING.is_interesting() {
$crate::panic::ErrorReport::new($errcode, $crate::elog::IntoMessage::into_message($message), $crate::function_name!())
$(.set_detail($detail))?
.report($crate::elog::PgLogLevel::WARNING)
}
};
(NOTICE, $errcode:expr, $message:expr $(, $detail:expr)? $(,)?) => {
if $crate::elog::PgLogLevel::NOTICE.is_interesting() {
$crate::panic::ErrorReport::new($errcode, $crate::elog::IntoMessage::into_message($message), $crate::function_name!())
$(.set_detail($detail))?
.report($crate::elog::PgLogLevel::NOTICE)
}
};
(INFO, $errcode:expr, $message:expr $(, $detail:expr)? $(,)?) => {
if $crate::elog::PgLogLevel::INFO.is_interesting() {
$crate::panic::ErrorReport::new($errcode, $crate::elog::IntoMessage::into_message($message), $crate::function_name!())
$(.set_detail($detail))?
.report($crate::elog::PgLogLevel::INFO)
}
};
(LOG, $errcode:expr, $message:expr $(, $detail:expr)? $(,)?) => {
if $crate::elog::PgLogLevel::LOG.is_interesting() {
$crate::panic::ErrorReport::new($errcode, $crate::elog::IntoMessage::into_message($message), $crate::function_name!())
$(.set_detail($detail))?
.report($crate::elog::PgLogLevel::LOG)
}
};
(DEBUG5, $errcode:expr, $message:expr $(, $detail:expr)? $(,)?) => {
if $crate::elog::PgLogLevel::DEBUG5.is_interesting() {
$crate::panic::ErrorReport::new($errcode, $crate::elog::IntoMessage::into_message($message), $crate::function_name!())
$(.set_detail($detail))?
.report($crate::elog::PgLogLevel::DEBUG5)
}
};
(DEBUG4, $errcode:expr, $message:expr $(, $detail:expr)? $(,)?) => {
if $crate::elog::PgLogLevel::DEBUG4.is_interesting() {
$crate::panic::ErrorReport::new($errcode, $crate::elog::IntoMessage::into_message($message), $crate::function_name!())
$(.set_detail($detail))?
.report($crate::elog::PgLogLevel::DEBUG4)
}
};
(DEBUG3, $errcode:expr, $message:expr $(, $detail:expr)? $(,)?) => {
if $crate::elog::PgLogLevel::DEBUG3.is_interesting() {
$crate::panic::ErrorReport::new($errcode, $crate::elog::IntoMessage::into_message($message), $crate::function_name!())
$(.set_detail($detail))?
.report($crate::elog::PgLogLevel::DEBUG3)
}
};
(DEBUG2, $errcode:expr, $message:expr $(, $detail:expr)? $(,)?) => {
if $crate::elog::PgLogLevel::DEBUG2.is_interesting() {
$crate::panic::ErrorReport::new($errcode, $crate::elog::IntoMessage::into_message($message), $crate::function_name!())
$(.set_detail($detail))?
.report($crate::elog::PgLogLevel::DEBUG2)
}
};
(DEBUG1, $errcode:expr, $message:expr $(, $detail:expr)? $(,)?) => {
if $crate::elog::PgLogLevel::DEBUG1.is_interesting() {
$crate::panic::ErrorReport::new($errcode, $crate::elog::IntoMessage::into_message($message), $crate::function_name!())
$(.set_detail($detail))?
.report($crate::elog::PgLogLevel::DEBUG1)
}
};
($loglevel:expr, $errcode:expr, $message:expr $(, $detail:expr)? $(,)?) => {
if $loglevel.is_interesting() {
$crate::panic::ErrorReport::new($errcode, $crate::elog::IntoMessage::into_message($message), $crate::function_name!())
$(.set_detail($detail))?
.report($loglevel);
}
};
}
#[inline]
pub fn interrupt_pending() -> bool {
unsafe { crate::InterruptPending != 0 }
}
#[macro_export]
macro_rules! ereport_domain {
(ERROR, $domain:expr, $errcode:expr, $message:expr $(, $detail:expr)? $(,)?) => {
$crate::panic::ErrorReport::new($errcode, $crate::elog::IntoMessage::into_message($message), $crate::function_name!())
.set_domain($domain)
$(.set_detail($detail))?
.report($crate::elog::PgLogLevel::ERROR);
unreachable!();
};
(PANIC, $domain:expr, $errcode:expr, $message:expr $(, $detail:expr)? $(,)?) => {
$crate::panic::ErrorReport::new($errcode, $crate::elog::IntoMessage::into_message($message), $crate::function_name!())
.set_domain($domain)
$(.set_detail($detail))?
.report($crate::elog::PgLogLevel::PANIC);
unreachable!();
};
(FATAL, $domain:expr, $errcode:expr, $message:expr $(, $detail:expr)? $(,)?) => {
$crate::panic::ErrorReport::new($errcode, $crate::elog::IntoMessage::into_message($message), $crate::function_name!())
.set_domain($domain)
$(.set_detail($detail))?
.report($crate::elog::PgLogLevel::FATAL);
unreachable!();
};
(WARNING, $domain:expr, $errcode:expr, $message:expr $(, $detail:expr)? $(,)?) => {
if $crate::elog::PgLogLevel::WARNING.is_interesting() {
$crate::panic::ErrorReport::new($errcode, $crate::elog::IntoMessage::into_message($message), $crate::function_name!())
.set_domain($domain)
$(.set_detail($detail))?
.report($crate::elog::PgLogLevel::WARNING)
}
};
(NOTICE, $domain:expr, $errcode:expr, $message:expr $(, $detail:expr)? $(,)?) => {
if $crate::elog::PgLogLevel::NOTICE.is_interesting() {
$crate::panic::ErrorReport::new($errcode, $crate::elog::IntoMessage::into_message($message), $crate::function_name!())
.set_domain($domain)
$(.set_detail($detail))?
.report($crate::elog::PgLogLevel::NOTICE)
}
};
(INFO, $domain:expr, $errcode:expr, $message:expr $(, $detail:expr)? $(,)?) => {
if $crate::elog::PgLogLevel::INFO.is_interesting() {
$crate::panic::ErrorReport::new($errcode, $crate::elog::IntoMessage::into_message($message), $crate::function_name!())
.set_domain($domain)
$(.set_detail($detail))?
.report($crate::elog::PgLogLevel::INFO)
}
};
(LOG, $domain:expr, $errcode:expr, $message:expr $(, $detail:expr)? $(,)?) => {
if $crate::elog::PgLogLevel::LOG.is_interesting() {
$crate::panic::ErrorReport::new($errcode, $crate::elog::IntoMessage::into_message($message), $crate::function_name!())
.set_domain($domain)
$(.set_detail($detail))?
.report($crate::elog::PgLogLevel::LOG)
}
};
(DEBUG5, $domain:expr, $errcode:expr, $message:expr $(, $detail:expr)? $(,)?) => {
if $crate::elog::PgLogLevel::DEBUG5.is_interesting() {
$crate::panic::ErrorReport::new($errcode, $crate::elog::IntoMessage::into_message($message), $crate::function_name!())
.set_domain($domain)
$(.set_detail($detail))?
.report($crate::elog::PgLogLevel::DEBUG5)
}
};
(DEBUG4, $domain:expr, $errcode:expr, $message:expr $(, $detail:expr)? $(,)?) => {
if $crate::elog::PgLogLevel::DEBUG4.is_interesting() {
$crate::panic::ErrorReport::new($errcode, $crate::elog::IntoMessage::into_message($message), $crate::function_name!())
.set_domain($domain)
$(.set_detail($detail))?
.report($crate::elog::PgLogLevel::DEBUG4)
}
};
(DEBUG3, $domain:expr, $errcode:expr, $message:expr $(, $detail:expr)? $(,)?) => {
if $crate::elog::PgLogLevel::DEBUG3.is_interesting() {
$crate::panic::ErrorReport::new($errcode, $crate::elog::IntoMessage::into_message($message), $crate::function_name!())
.set_domain($domain)
$(.set_detail($detail))?
.report($crate::elog::PgLogLevel::DEBUG3)
}
};
(DEBUG2, $domain:expr, $errcode:expr, $message:expr $(, $detail:expr)? $(,)?) => {
if $crate::elog::PgLogLevel::DEBUG2.is_interesting() {
$crate::panic::ErrorReport::new($errcode, $crate::elog::IntoMessage::into_message($message), $crate::function_name!())
.set_domain($domain)
$(.set_detail($detail))?
.report($crate::elog::PgLogLevel::DEBUG2)
}
};
(DEBUG1, $domain:expr, $errcode:expr, $message:expr $(, $detail:expr)? $(,)?) => {
if $crate::elog::PgLogLevel::DEBUG1.is_interesting() {
$crate::panic::ErrorReport::new($errcode, $crate::elog::IntoMessage::into_message($message), $crate::function_name!())
.set_domain($domain)
$(.set_detail($detail))?
.report($crate::elog::PgLogLevel::DEBUG1)
}
};
($loglevel:expr, $domain:expr, $errcode:expr, $message:expr $(, $detail:expr)? $(,)?) => {
if $loglevel.is_interesting() {
$crate::panic::ErrorReport::new($errcode, $crate::elog::IntoMessage::into_message($message), $crate::function_name!())
.set_domain($domain)
$(.set_detail($detail))?
.report($loglevel);
}
};
}
#[macro_export]
macro_rules! check_for_interrupts {
() => {
#[allow(unused_unsafe)]
unsafe {
if $crate::InterruptPending != 0 {
$crate::ProcessInterrupts();
}
}
};
}