pub mod convert;
pub mod create;
pub mod drop;
pub use convert::convert_existing_table_to_tview;
pub use create::create_tview;
pub use drop::drop_tview;
use pgrx::prelude::*;
#[pg_extern]
fn pg_tviews_create(tview_name: &str, select_sql: &str) -> Result<String, String> {
crate::validation::validate_sql_identifier(tview_name, "tview_name")
.map_err(|e| format!("Invalid TVIEW name: {e}"))?;
unsafe {
crate::hooks::ensure_hook_installed();
}
match create_tview(tview_name, select_sql, None, false) {
Ok(()) => Ok(format!("TVIEW '{tview_name}' created successfully")),
Err(e) => Err(format!("Failed to create TVIEW: {e}")),
}
}
#[pg_extern]
fn pg_tviews_drop(
tview_name: &str,
if_exists: default!(bool, false),
cascade: default!(bool, false),
) -> Result<String, String> {
crate::validation::validate_sql_identifier(tview_name, "tview_name")
.map_err(|e| format!("Invalid TVIEW name: {e}"))?;
match drop_tview(tview_name, if_exists, cascade) {
Ok(()) => Ok(format!("TVIEW '{tview_name}' dropped successfully")),
Err(e) => Err(format!("Failed to drop TVIEW: {e}")),
}
}
#[pg_extern]
fn pg_tviews_convert_existing_table(table_name: &str) -> Result<String, String> {
crate::validation::validate_sql_identifier(table_name, "table_name")
.map_err(|e| format!("Invalid table name: {e}"))?;
match convert_existing_table_to_tview(table_name) {
Ok(()) => Ok(format!(
"Table '{table_name}' converted to TVIEW successfully"
)),
Err(e) => Err(format!("Failed to convert table to TVIEW: {e}")),
}
}