mirror of
https://gitcode.com/JianFeeeee/TrulyMEM-TrueHumanMEM.git
synced 2026-10-31 14:27:45 +00:00
fix: 修复SQLite UPDATE/DELETE别名语法导致的near 'r'错误
This commit is contained in:
@ -464,7 +464,6 @@ class EmbeddedGraphDB:
|
|||||||
# 构建查询条件
|
# 构建查询条件
|
||||||
conditions = []
|
conditions = []
|
||||||
params = []
|
params = []
|
||||||
joins = []
|
|
||||||
|
|
||||||
relation_type = criteria.get('relation') or criteria.get('relation_type', '')
|
relation_type = criteria.get('relation') or criteria.get('relation_type', '')
|
||||||
|
|
||||||
@ -472,18 +471,18 @@ class EmbeddedGraphDB:
|
|||||||
cursor.execute("SELECT id FROM entities WHERE name = ?", (criteria['source'],))
|
cursor.execute("SELECT id FROM entities WHERE name = ?", (criteria['source'],))
|
||||||
row = cursor.fetchone()
|
row = cursor.fetchone()
|
||||||
if row:
|
if row:
|
||||||
conditions.append("r.source_id = ?")
|
conditions.append("source_id = ?")
|
||||||
params.append(row['id'])
|
params.append(row['id'])
|
||||||
|
|
||||||
if criteria.get('target'):
|
if criteria.get('target'):
|
||||||
cursor.execute("SELECT id FROM entities WHERE name = ?", (criteria['target'],))
|
cursor.execute("SELECT id FROM entities WHERE name = ?", (criteria['target'],))
|
||||||
row = cursor.fetchone()
|
row = cursor.fetchone()
|
||||||
if row:
|
if row:
|
||||||
conditions.append("r.target_id = ?")
|
conditions.append("target_id = ?")
|
||||||
params.append(row['id'])
|
params.append(row['id'])
|
||||||
|
|
||||||
if relation_type:
|
if relation_type:
|
||||||
conditions.append("r.relation_type = ?")
|
conditions.append("relation_type = ?")
|
||||||
params.append(relation_type)
|
params.append(relation_type)
|
||||||
|
|
||||||
# 通过子查询支持实体属性过滤
|
# 通过子查询支持实体属性过滤
|
||||||
@ -493,7 +492,7 @@ class EmbeddedGraphDB:
|
|||||||
ids = [row['id'] for row in cursor.fetchall()]
|
ids = [row['id'] for row in cursor.fetchall()]
|
||||||
if ids:
|
if ids:
|
||||||
placeholders = ','.join(['?'] * len(ids))
|
placeholders = ','.join(['?'] * len(ids))
|
||||||
conditions.append(f"r.source_id IN ({placeholders})")
|
conditions.append(f"source_id IN ({placeholders})")
|
||||||
params.extend(ids)
|
params.extend(ids)
|
||||||
|
|
||||||
if criteria.get('target_contains'):
|
if criteria.get('target_contains'):
|
||||||
@ -502,7 +501,7 @@ class EmbeddedGraphDB:
|
|||||||
ids = [row['id'] for row in cursor.fetchall()]
|
ids = [row['id'] for row in cursor.fetchall()]
|
||||||
if ids:
|
if ids:
|
||||||
placeholders = ','.join(['?'] * len(ids))
|
placeholders = ','.join(['?'] * len(ids))
|
||||||
conditions.append(f"r.target_id IN ({placeholders})")
|
conditions.append(f"target_id IN ({placeholders})")
|
||||||
params.extend(ids)
|
params.extend(ids)
|
||||||
|
|
||||||
# 源实体类型过滤
|
# 源实体类型过滤
|
||||||
@ -512,7 +511,7 @@ class EmbeddedGraphDB:
|
|||||||
ids = [row['id'] for row in cursor.fetchall()]
|
ids = [row['id'] for row in cursor.fetchall()]
|
||||||
if ids:
|
if ids:
|
||||||
placeholders = ','.join(['?'] * len(ids))
|
placeholders = ','.join(['?'] * len(ids))
|
||||||
conditions.append(f"r.source_id IN ({placeholders})")
|
conditions.append(f"source_id IN ({placeholders})")
|
||||||
params.extend(ids)
|
params.extend(ids)
|
||||||
|
|
||||||
# 目标实体类型过滤
|
# 目标实体类型过滤
|
||||||
@ -522,36 +521,35 @@ class EmbeddedGraphDB:
|
|||||||
ids = [row['id'] for row in cursor.fetchall()]
|
ids = [row['id'] for row in cursor.fetchall()]
|
||||||
if ids:
|
if ids:
|
||||||
placeholders = ','.join(['?'] * len(ids))
|
placeholders = ','.join(['?'] * len(ids))
|
||||||
conditions.append(f"r.target_id IN ({placeholders})")
|
conditions.append(f"target_id IN ({placeholders})")
|
||||||
params.extend(ids)
|
params.extend(ids)
|
||||||
|
|
||||||
# 源实体状态过滤(检查 entity name 是否以特定后缀结尾等)
|
# 源实体状态过滤
|
||||||
if criteria.get('source_has_status'):
|
if criteria.get('source_has_status'):
|
||||||
status = criteria['source_has_status']
|
status = criteria['source_has_status']
|
||||||
# 匹配 entities 表中 type 字段包含状态信息的节点
|
|
||||||
cursor.execute("SELECT id FROM entities WHERE type LIKE ?",
|
cursor.execute("SELECT id FROM entities WHERE type LIKE ?",
|
||||||
(f'%{status}%',))
|
(f'%{status}%',))
|
||||||
ids = [row['id'] for row in cursor.fetchall()]
|
ids = [row['id'] for row in cursor.fetchall()]
|
||||||
if ids:
|
if ids:
|
||||||
placeholders = ','.join(['?'] * len(ids))
|
placeholders = ','.join(['?'] * len(ids))
|
||||||
conditions.append(f"r.source_id IN ({placeholders})")
|
conditions.append(f"source_id IN ({placeholders})")
|
||||||
params.extend(ids)
|
params.extend(ids)
|
||||||
|
|
||||||
if not conditions:
|
if not conditions:
|
||||||
return {"deleted": 0, "message": "无删除条件"}
|
return {"deleted": 0, "message": "无删除条件"}
|
||||||
|
|
||||||
conditions.append("r.status = 'active'")
|
conditions.append("status = 'active'")
|
||||||
where_clause = " AND ".join(conditions)
|
where_clause = " AND ".join(conditions)
|
||||||
|
|
||||||
if mode == "soft":
|
if mode == "soft":
|
||||||
cursor.execute(f"""
|
cursor.execute(f"""
|
||||||
UPDATE relations r
|
UPDATE relations
|
||||||
SET status = 'deleted', updated_at = CURRENT_TIMESTAMP
|
SET status = 'deleted', updated_at = CURRENT_TIMESTAMP
|
||||||
WHERE {where_clause}
|
WHERE {where_clause}
|
||||||
""", params)
|
""", params)
|
||||||
else:
|
else:
|
||||||
cursor.execute(f"""
|
cursor.execute(f"""
|
||||||
DELETE FROM relations r
|
DELETE FROM relations
|
||||||
WHERE {where_clause}
|
WHERE {where_clause}
|
||||||
""", params)
|
""", params)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user