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,90 @@ 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+ assert sql_expression_permitted (" SELECT 42" ) is True
26+ assert sql_expression_permitted ("select 42" ) is True
27+
28+
29+ def test_sql_expression_select_rejected ():
30+ """Bogus SQL SELECT statements are rejected"""
31+ assert sql_expression_permitted (r"--\; select 42" ) is False
32+
33+
34+ def test_sql_expression_insert_allowed (mocker ):
35+ """When explicitly allowed, permit any kind of statement"""
36+ mocker .patch .object (cratedb_mcp .knowledge , "PERMIT_ALL_STATEMENTS" , True )
37+ assert sql_expression_permitted ("INSERT INTO foobar" ) is True
38+
39+
40+ def test_sql_expression_select_multiple_rejected ():
41+ """Multiple SQL statements are rejected"""
42+ assert sql_expression_permitted ("SELECT 42; SELECT 42;" ) is False
43+
44+
45+ def test_sql_expression_create_rejected ():
46+ """DDL statements are rejected"""
47+ assert sql_expression_permitted ("CREATE TABLE foobar AS SELECT 42" ) is False
48+
49+
50+ def test_sql_expression_insert_rejected ():
51+ """DML statements are rejected"""
52+ assert sql_expression_permitted ("INSERT INTO foobar" ) is False
53+
54+
55+ def test_sql_expression_select_into_rejected ():
56+ """SELECT+DML statements are rejected"""
57+ assert sql_expression_permitted ("SELECT * INTO foobar FROM bazqux" ) is False
58+
59+
60+ def test_sql_expression_empty_rejected ():
61+ """Empty statements are rejected"""
62+ assert sql_expression_permitted ("" ) is False
63+
64+
65+ def test_sql_expression_almost_empty_rejected ():
66+ """Quasi-empty statements are rejected"""
67+ assert sql_expression_permitted (" " ) is False
68+
69+
70+ def test_sql_expression_none_rejected ():
71+ """Void statements are rejected"""
72+ assert sql_expression_permitted (None ) is False
73+
74+
75+ def test_sql_expression_multiple_statements_rejected ():
76+ assert sql_expression_permitted ("SELECT 42; INSERT INTO foo VALUES (1)" ) is False
77+
78+
79+ def test_sql_expression_with_comments_rejected ():
80+ assert sql_expression_permitted (
81+ "/* Sneaky comment */ INSERT /* another comment */ INTO foo VALUES (1)" ) is False
82+
83+
84+ def test_sql_expression_update_rejected ():
85+ """UPDATE statements are rejected"""
86+ assert sql_expression_permitted ("UPDATE foobar SET column = 'value'" ) is False
87+
88+
89+ def test_sql_expression_delete_rejected ():
90+ """DELETE statements are rejected"""
91+ assert sql_expression_permitted ("DELETE FROM foobar" ) is False
92+
93+
94+ def test_sql_expression_truncate_rejected ():
95+ """TRUNCATE statements are rejected"""
96+ assert sql_expression_permitted ("TRUNCATE TABLE foobar" ) is False
97+
98+
99+ def test_sql_expression_drop_rejected ():
100+ """DROP statements are rejected"""
101+ assert sql_expression_permitted ("DROP TABLE foobar" ) is False
102+
103+
104+ def test_sql_expression_alter_rejected ():
105+ """ALTER statements are rejected"""
106+ assert sql_expression_permitted ("ALTER TABLE foobar ADD COLUMN newcol INTEGER" ) is False
0 commit comments