From c4a6ad485a1ef65cf986c8117d2c3f430e510fd4 Mon Sep 17 00:00:00 2001 From: LucaCappelletti94 Date: Sat, 26 Sep 2026 12:04:21 +0200 Subject: [PATCH] Drop CREATE FOREIGN TABLE with a foreign data warning --- src/impls/translator_impls/statement.rs | 3 +++ tests/test_no_statement_is_silently_dropped.rs | 1 + tests/test_translation_warnings.rs | 11 +++++++++++ 3 files changed, 15 insertions(+) diff --git a/src/impls/translator_impls/statement.rs b/src/impls/translator_impls/statement.rs index 41f318ee5..53535e3a4 100644 --- a/src/impls/translator_impls/statement.rs +++ b/src/impls/translator_impls/statement.rs @@ -1997,6 +1997,9 @@ impl crate::traits::translator::TranslatorWithContext for Statement { drop_with_warning("ALTER FUNCTION", REASON_ACCESS_CONTROL, emit) } Self::CreateServer(_) => drop_with_warning("CREATE SERVER", REASON_FOREIGN_DATA, emit), + Self::CreateForeignTable(_) => { + drop_with_warning("CREATE FOREIGN TABLE", REASON_FOREIGN_DATA, emit) + } Self::CreateConnector(_) => { drop_with_warning("CREATE CONNECTOR", REASON_FOREIGN_DATA, emit) } diff --git a/tests/test_no_statement_is_silently_dropped.rs b/tests/test_no_statement_is_silently_dropped.rs index 29135433a..e379129c1 100644 --- a/tests/test_no_statement_is_silently_dropped.rs +++ b/tests/test_no_statement_is_silently_dropped.rs @@ -187,6 +187,7 @@ const CASES: &[Case] = &[ warned("DROP SEQUENCE seq"), // Warned and dropped: foreign data and credentials. warned("CREATE SERVER srv FOREIGN DATA WRAPPER postgres_fdw"), + warned("CREATE FOREIGN TABLE ft (id INT) SERVER srv"), warned("CREATE CONNECTOR c TYPE 'mysql'"), warned("ALTER CONNECTOR c SET URL 'u'"), warned("DROP CONNECTOR c"), diff --git a/tests/test_translation_warnings.rs b/tests/test_translation_warnings.rs index 226d29d53..8d1317682 100644 --- a/tests/test_translation_warnings.rs +++ b/tests/test_translation_warnings.rs @@ -106,6 +106,17 @@ fn create_server_emits_lossy_drop_warning() { assert_lossy_drop(&warns[0], "CREATE SERVER"); } +#[test] +fn create_foreign_table_emits_lossy_drop_warning() { + let warns = warnings_for( + "CREATE SERVER s FOREIGN DATA WRAPPER w;\n\ + CREATE FOREIGN TABLE f (id INT) SERVER s;", + ); + assert_eq!(warns.len(), 2); + assert_lossy_drop(&warns[0], "CREATE SERVER"); + assert_lossy_drop(&warns[1], "CREATE FOREIGN TABLE"); +} + #[test] fn create_role_emits_lossy_drop_warning() { let warns = warnings_for("CREATE ROLE alice;");