use crate::utils::quote_identifier;
use pgrx::prelude::*;
#[pg_extern]
#[allow(clippy::needless_pass_by_value)] fn pg_tviews_convert_table(table_name: String) -> Result<(), Box<dyn std::error::Error>> {
let Some((schema_name, select_sql)) = crate::hooks::take_pending_tview_select(&table_name)
else {
return Ok(());
};
let schema_override: Option<&str> = if schema_name.is_empty() {
None
} else {
Some(schema_name.as_str())
};
let drop_sql = match schema_override {
Some(s) => format!(
"DROP TABLE IF EXISTS {}.{} CASCADE",
quote_identifier(s),
quote_identifier(&table_name),
),
None => format!(
"DROP TABLE IF EXISTS {} CASCADE",
quote_identifier(&table_name)
),
};
Spi::run(&drop_sql).map_err(|e| format!("Failed to drop table '{table_name}': {e}"))?;
crate::ddl::create_tview(&table_name, &select_sql, schema_override, true)
.map_err(|e| format!("Failed to create TVIEW '{table_name}': {e}"))?;
Ok(())
}