Skip to content

Commit 1d89dc7

Browse files
committed
SQL: Use cratedb-sqlparse for implementing read-only mode
1 parent 5b0d8e9 commit 1d89dc7

File tree

2 files changed

+13
-2
lines changed

2 files changed

+13
-2
lines changed

cratedb_mcp/util/sql.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import logging
33
import typing as t
44

5+
import cratedb_sqlparse
56
import sqlparse
67

78
from cratedb_mcp.settings import PERMIT_ALL_STATEMENTS
@@ -39,12 +40,21 @@ class SqlStatementClassifier:
3940
expression: str
4041
permit_all: bool = False
4142

43+
_parsed_cratedb: t.Any = dataclasses.field(init=False, default=None)
4244
_parsed_sqlparse: t.Any = dataclasses.field(init=False, default=None)
4345

4446
def __post_init__(self) -> None:
4547
if self.expression:
4648
self.expression = self.expression.strip()
4749

50+
def parse_cratedb(self):
51+
"""
52+
Parse expression using `cratedb-sqlparse` library.
53+
"""
54+
if self._parsed_cratedb is None:
55+
self._parsed_cratedb = cratedb_sqlparse.sqlparse(self.expression)
56+
return self._parsed_cratedb
57+
4858
def parse_sqlparse(self):
4959
"""
5060
Parse expression using traditional `sqlparse` library.
@@ -82,8 +92,8 @@ def operation(self) -> str:
8292
"""
8393
The SQL operation: SELECT, INSERT, UPDATE, DELETE, CREATE, etc.
8494
"""
85-
parsed = self.parse_sqlparse()
86-
return parsed[0].get_type().upper()
95+
parsed = self.parse_cratedb()
96+
return parsed[0].type.upper()
8797

8898
@property
8999
def is_camouflage(self) -> bool:

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ dynamic = [
2121
]
2222
dependencies = [
2323
"attrs",
24+
"cratedb-sqlparse==0.0.14",
2425
"hishel<0.2",
2526
"mcp[cli]>=1.5.0",
2627
"sqlparse<0.6",

0 commit comments

Comments
 (0)