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,58 @@ 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_select_multiple_rejected ():
28+ """Multiple SQL statements are rejected"""
29+ assert sql_expression_permitted ("SELECT 42; SELECT 42;" ) is False
30+
31+
32+ def test_sql_expression_create_rejected ():
33+ """DDL statements are rejected"""
34+ assert sql_expression_permitted ("CREATE TABLE foobar AS SELECT 42" ) is False
35+
36+
37+ def test_sql_expression_insert_rejected ():
38+ """DML statements are rejected"""
39+ assert sql_expression_permitted ("INSERT INTO foobar" ) is False
40+
41+
42+ def test_sql_expression_select_into_rejected ():
43+ """SELECT+DML statements are rejected"""
44+ assert sql_expression_permitted ("SELECT * INTO foobar FROM bazqux" ) is False
45+
46+
47+ def test_sql_expression_empty ():
48+ """Empty statements are rejected"""
49+ assert sql_expression_permitted ("" ) is False
50+
51+
52+ def test_sql_expression_almost_empty ():
53+ """Quasi-empty statements are rejected"""
54+ assert sql_expression_permitted (" " ) is False
55+
56+
57+ def test_sql_expression_none ():
58+ """Void statements are rejected"""
59+ assert sql_expression_permitted (None ) is False
60+
61+
62+ def test_sql_expression_insert_allowed (mocker ):
63+ """When explicitly allowed, permit any kind of statement"""
64+ mocker .patch .object (cratedb_mcp .knowledge , "PERMIT_ALL_STATEMENTS" , True )
65+ assert sql_expression_permitted ("INSERT INTO foobar" ) is True
66+
67+
68+ def test_query_sql_forbidden_multiple_statements ():
69+ assert sql_expression_permitted ("SELECT 42; INSERT INTO foo VALUES (1)" ) is False
70+
71+
72+ def test_query_sql_forbidden_with_comments ():
73+ assert sql_expression_permitted (
74+ "/* Sneaky comment */ INSERT /* another comment */ INTO foo VALUES (1)" ) is False
0 commit comments