Skip to content

Commit 4e34716

Browse files
committed
SQL: Use cratedb-sqlparse for implementing read-only mode
1 parent acd3f85 commit 4e34716

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
from sqlparse.tokens import Keyword
78

@@ -40,6 +41,7 @@ class SqlStatementClassifier:
4041
expression: str
4142
permit_all: bool = False
4243

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

4547
def __post_init__(self) -> None:
@@ -48,6 +50,14 @@ def __post_init__(self) -> None:
4850
if self.expression:
4951
self.expression = self.expression.strip()
5052

53+
def parse_cratedb(self):
54+
"""
55+
Parse expression using `cratedb-sqlparse` library.
56+
"""
57+
if self._parsed_cratedb is None:
58+
self._parsed_cratedb = cratedb_sqlparse.sqlparse(self.expression)
59+
return self._parsed_cratedb
60+
5161
def parse_sqlparse(self) -> t.List[sqlparse.sql.Statement]:
5262
"""
5363
Parse expression using traditional `sqlparse` library.
@@ -85,8 +95,8 @@ def operation(self) -> str:
8595
"""
8696
The SQL operation: SELECT, INSERT, UPDATE, DELETE, CREATE, etc.
8797
"""
88-
parsed = self.parse_sqlparse()
89-
return parsed[0].get_type().upper()
98+
parsed = self.parse_cratedb()
99+
return parsed[0].type.upper()
90100

91101
@property
92102
def is_camouflage(self) -> bool:

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ dependencies = [
2323
"attrs",
2424
"cachetools<6",
2525
"cratedb-about==0.0.4",
26+
"cratedb-sqlparse==0.0.14",
2627
"hishel<0.2",
2728
"mcp[cli]>=1.5.0",
2829
"sqlparse<0.6",

0 commit comments

Comments
 (0)