Add drop support for TiDB
This commit is contained in:
@@ -20,7 +20,7 @@ if not pm.is_installed("pymysql"):
|
|||||||
if not pm.is_installed("sqlalchemy"):
|
if not pm.is_installed("sqlalchemy"):
|
||||||
pm.install("sqlalchemy")
|
pm.install("sqlalchemy")
|
||||||
|
|
||||||
from sqlalchemy import create_engine, text
|
from sqlalchemy import create_engine, text # type: ignore
|
||||||
|
|
||||||
|
|
||||||
class TiDB:
|
class TiDB:
|
||||||
@@ -278,6 +278,21 @@ class TiDBKVStorage(BaseKVStorage):
|
|||||||
# Ti handles persistence automatically
|
# Ti handles persistence automatically
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
async def drop(self) -> dict[str, str]:
|
||||||
|
"""Drop the storage"""
|
||||||
|
try:
|
||||||
|
table_name = namespace_to_table_name(self.namespace)
|
||||||
|
if not table_name:
|
||||||
|
return {"status": "error", "message": f"Unknown namespace: {self.namespace}"}
|
||||||
|
|
||||||
|
drop_sql = SQL_TEMPLATES["drop_specifiy_table_workspace"].format(
|
||||||
|
table_name=table_name
|
||||||
|
)
|
||||||
|
await self.db.execute(drop_sql, {"workspace": self.db.workspace})
|
||||||
|
return {"status": "success", "message": "data dropped"}
|
||||||
|
except Exception as e:
|
||||||
|
return {"status": "error", "message": str(e)}
|
||||||
|
|
||||||
|
|
||||||
@final
|
@final
|
||||||
@dataclass
|
@dataclass
|
||||||
@@ -416,6 +431,21 @@ class TiDBVectorDBStorage(BaseVectorStorage):
|
|||||||
# Ti handles persistence automatically
|
# Ti handles persistence automatically
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
async def drop(self) -> dict[str, str]:
|
||||||
|
"""Drop the storage"""
|
||||||
|
try:
|
||||||
|
table_name = namespace_to_table_name(self.namespace)
|
||||||
|
if not table_name:
|
||||||
|
return {"status": "error", "message": f"Unknown namespace: {self.namespace}"}
|
||||||
|
|
||||||
|
drop_sql = SQL_TEMPLATES["drop_specifiy_table_workspace"].format(
|
||||||
|
table_name=table_name
|
||||||
|
)
|
||||||
|
await self.db.execute(drop_sql, {"workspace": self.db.workspace})
|
||||||
|
return {"status": "success", "message": "data dropped"}
|
||||||
|
except Exception as e:
|
||||||
|
return {"status": "error", "message": str(e)}
|
||||||
|
|
||||||
async def search_by_prefix(self, prefix: str) -> list[dict[str, Any]]:
|
async def search_by_prefix(self, prefix: str) -> list[dict[str, Any]]:
|
||||||
"""Search for records with IDs starting with a specific prefix.
|
"""Search for records with IDs starting with a specific prefix.
|
||||||
|
|
||||||
@@ -710,6 +740,18 @@ class TiDBGraphStorage(BaseGraphStorage):
|
|||||||
# Ti handles persistence automatically
|
# Ti handles persistence automatically
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
async def drop(self) -> dict[str, str]:
|
||||||
|
"""Drop the storage"""
|
||||||
|
try:
|
||||||
|
drop_sql = """
|
||||||
|
DELETE FROM LIGHTRAG_GRAPH_EDGES WHERE workspace = :workspace;
|
||||||
|
DELETE FROM LIGHTRAG_GRAPH_NODES WHERE workspace = :workspace;
|
||||||
|
"""
|
||||||
|
await self.db.execute(drop_sql, {"workspace": self.db.workspace})
|
||||||
|
return {"status": "success", "message": "graph data dropped"}
|
||||||
|
except Exception as e:
|
||||||
|
return {"status": "error", "message": str(e)}
|
||||||
|
|
||||||
async def delete_node(self, node_id: str) -> None:
|
async def delete_node(self, node_id: str) -> None:
|
||||||
"""Delete a node and all its related edges
|
"""Delete a node and all its related edges
|
||||||
|
|
||||||
@@ -1129,4 +1171,6 @@ SQL_TEMPLATES = {
|
|||||||
FROM LIGHTRAG_DOC_CHUNKS
|
FROM LIGHTRAG_DOC_CHUNKS
|
||||||
WHERE chunk_id LIKE :prefix_pattern AND workspace = :workspace
|
WHERE chunk_id LIKE :prefix_pattern AND workspace = :workspace
|
||||||
""",
|
""",
|
||||||
|
# Drop tables
|
||||||
|
"drop_specifiy_table_workspace": "DELETE FROM {table_name} WHERE workspace = :workspace",
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user