@@ -92,8 +92,6 @@ def test_default_allows_known_tables_and_cte_aliases(task, sql):
9292 "SELECT id FROM sales UNION ALL SELECT id FROM secret_payroll" ,
9393 "unauthorized tables: secret_payroll" ,
9494 ),
95- ("SELECT 1" , "unable to extract table names" ),
96- ("SELECT (" , "unable to extract table names" ),
9795 ],
9896)
9997def test_default_rejects_invalid_or_unknown_tables_before_save_and_execute (
@@ -107,16 +105,37 @@ def test_default_rejects_invalid_or_unknown_tables_before_save_and_execute(
107105 task .execute_sql .assert_not_called ()
108106
109107
110- @pytest .mark .parametrize ("sql" , ["SELECT * FROM secret_payroll" , "SELECT 1" ])
111- def test_explicit_skip_bypasses_extraction_and_keeps_remaining_flow (
108+ @pytest .mark .parametrize ("skip" , [False , True ])
109+ @pytest .mark .parametrize ("sql" , ["SELECT 1" , "SELECT (" ])
110+ def test_missing_tables_are_rejected_even_when_whitelist_check_is_skipped (
111+ task , monkeypatch , sql , skip
112+ ):
113+ monkeypatch .setattr (llm .settings , "SQLBOT_SKIP_TABLE_CHECK" , skip )
114+ result = run (task , sql )
115+ assert result ["success" ] is False
116+ assert "unable to extract table names" in result ["message" ]
117+ task .save_error .assert_called_once ()
118+ task .generate_filter .assert_not_called ()
119+ task .check_save_sql .assert_not_called ()
120+ task .execute_sql .assert_not_called ()
121+
122+
123+ @pytest .mark .parametrize (
124+ "sql" ,
125+ [
126+ "SELECT * FROM secret_payroll" ,
127+ "SELECT id FROM sales UNION ALL SELECT id FROM secret_payroll" ,
128+ ],
129+ )
130+ def test_explicit_skip_only_bypasses_whitelist_check_and_keeps_remaining_flow (
112131 task , monkeypatch , sql
113132):
114133 monkeypatch .setattr (llm .settings , "SQLBOT_SKIP_TABLE_CHECK" , True )
115- extract = Mock (side_effect = AssertionError ( "table extraction must be skipped" ) )
134+ extract = Mock (wraps = llm . extract_tables_from_sql )
116135 monkeypatch .setattr (llm , "extract_tables_from_sql" , extract )
117136 result = run (task , sql )
118137 assert result ["success" ] is True
119- extract .assert_not_called ( )
138+ extract .assert_called_once_with ( sql , ds_type = "pg" )
120139 task .generate_filter .assert_called_once ()
121140 task .check_save_sql .assert_called_once ()
122141 task .execute_sql .assert_called_once_with (sql = sql )
@@ -127,8 +146,8 @@ def test_explicit_skip_bypasses_extraction_and_keeps_remaining_flow(
127146 "sql" ,
128147 [
129148 "DELETE FROM sales" ,
130- "SELECT pg_read_file('/etc/passwd')" ,
131- "SHOW TABLES " ,
149+ "SELECT pg_read_file('/etc/passwd') FROM sales " ,
150+ "DESCRIBE sales " ,
132151 ],
133152)
134153def test_skip_keeps_database_execution_guards (task , monkeypatch , sql ):
0 commit comments