1- from cratedb_mcp .knowledge import DOCUMENTATION_INDEX , Queries
1+ import cratedb_mcp
2+ from cratedb_mcp .knowledge import DOCUMENTATION_INDEX , Queries , sql_expression_permitted
23
34
45def test_documentation_index ():
@@ -16,3 +17,83 @@ def test_queries():
1617 assert "sys.health" in Queries .TABLES_METADATA
1718 assert "WITH partitions_health" in Queries .TABLES_METADATA
1819 assert "LEFT JOIN" in Queries .TABLES_METADATA
20+
21+
22+ def test_sql_expression_select_permitted ():
23+ """Regular SQL SELECT statements are permitted"""
24+ assert sql_expression_permitted ("SELECT 42" ) is True
25+
26+
27+ def test_sql_expression_insert_allowed (mocker ):
28+ """When explicitly allowed, permit any kind of statement"""
29+ mocker .patch .object (cratedb_mcp .knowledge , "PERMIT_ALL_STATEMENTS" , True )
30+ assert sql_expression_permitted ("INSERT INTO foobar" ) is True
31+
32+
33+ def test_sql_expression_select_multiple_rejected ():
34+ """Multiple SQL statements are rejected"""
35+ assert sql_expression_permitted ("SELECT 42; SELECT 42;" ) is False
36+
37+
38+ def test_sql_expression_create_rejected ():
39+ """DDL statements are rejected"""
40+ assert sql_expression_permitted ("CREATE TABLE foobar AS SELECT 42" ) is False
41+
42+
43+ def test_sql_expression_insert_rejected ():
44+ """DML statements are rejected"""
45+ assert sql_expression_permitted ("INSERT INTO foobar" ) is False
46+
47+
48+ def test_sql_expression_select_into_rejected ():
49+ """SELECT+DML statements are rejected"""
50+ assert sql_expression_permitted ("SELECT * INTO foobar FROM bazqux" ) is False
51+
52+
53+ def test_sql_expression_empty_rejected ():
54+ """Empty statements are rejected"""
55+ assert sql_expression_permitted ("" ) is False
56+
57+
58+ def test_sql_expression_almost_empty_rejected ():
59+ """Quasi-empty statements are rejected"""
60+ assert sql_expression_permitted (" " ) is False
61+
62+
63+ def test_sql_expression_none_rejected ():
64+ """Void statements are rejected"""
65+ assert sql_expression_permitted (None ) is False
66+
67+
68+ def test_sql_expression_multiple_statements_rejected ():
69+ assert sql_expression_permitted ("SELECT 42; INSERT INTO foo VALUES (1)" ) is False
70+
71+
72+ def test_sql_expression_with_comments_rejected ():
73+ assert sql_expression_permitted (
74+ "/* Sneaky comment */ INSERT /* another comment */ INTO foo VALUES (1)" ) is False
75+
76+
77+ def test_sql_expression_update_rejected ():
78+ """UPDATE statements are rejected"""
79+ assert sql_expression_permitted ("UPDATE foobar SET column = 'value'" ) is False
80+
81+
82+ def test_sql_expression_delete_rejected ():
83+ """DELETE statements are rejected"""
84+ assert sql_expression_permitted ("DELETE FROM foobar" ) is False
85+
86+
87+ def test_sql_expression_truncate_rejected ():
88+ """TRUNCATE statements are rejected"""
89+ assert sql_expression_permitted ("TRUNCATE TABLE foobar" ) is False
90+
91+
92+ def test_sql_expression_drop_rejected ():
93+ """DROP statements are rejected"""
94+ assert sql_expression_permitted ("DROP TABLE foobar" ) is False
95+
96+
97+ def test_sql_expression_alter_rejected ():
98+ """ALTER statements are rejected"""
99+ assert sql_expression_permitted ("ALTER TABLE foobar ADD COLUMN newcol INTEGER" ) is False
0 commit comments