From d5a7065b1f91fcdea76195689cd5407f7aaca240 Mon Sep 17 00:00:00 2001 From: Ariel Barmat <140773+abarmat@users.noreply.github.com> Date: Wed, 18 Feb 2026 12:20:08 +0000 Subject: [PATCH] fix(ampsync): tighten temp table creation Update temp table creation to include DEFAULTS and ON COMMIT DROP so it stays within transaction scope, and add a regression test that verifies the generated SQL contains the expected clauses. --- crates/bin/ampsync/src/sql.rs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/crates/bin/ampsync/src/sql.rs b/crates/bin/ampsync/src/sql.rs index c04130220..3dafe10bf 100644 --- a/crates/bin/ampsync/src/sql.rs +++ b/crates/bin/ampsync/src/sql.rs @@ -159,13 +159,13 @@ pub fn copy_from_stdin(table_name: &str) -> String { /// # Example /// ```ignore /// let sql = create_temp_table_like("_temp_123", "users"); -/// // Produces: CREATE TEMP TABLE "_temp_123" (LIKE "users" INCLUDING ALL) +/// // Produces: CREATE TEMP TABLE "_temp_123" (LIKE "users" INCLUDING DEFAULTS) ON COMMIT DROP /// ``` pub fn create_temp_table_like(temp_name: &str, source_table: &str) -> String { let quoted_temp = quote_identifier(temp_name); let quoted_source = quote_identifier(source_table); format!( - "CREATE TEMP TABLE {} (LIKE {} INCLUDING ALL)", + "CREATE TEMP TABLE {} (LIKE {} INCLUDING DEFAULTS) ON COMMIT DROP", quoted_temp, quoted_source ) } @@ -341,4 +341,13 @@ mod tests { assert!(sql.contains("users") || sql.contains("\"users\"")); assert!(sql.contains("_tx_id BETWEEN $1 AND $2")); } + + #[test] + fn test_create_temp_table_like_is_transaction_scoped() { + let sql = create_temp_table_like("_temp_123", "users"); + assert!(sql.contains("CREATE TEMP TABLE")); + assert!(sql.contains("LIKE")); + assert!(sql.contains("INCLUDING DEFAULTS")); + assert!(sql.contains("ON COMMIT DROP")); + } }