@@ -281,29 +281,25 @@ def get_memory_count(self, memory_type: str) -> int:
281281 query += "\n RETURN COUNT(n) AS count"
282282
283283 try :
284- print (f"\n ======> query: { query } \n " )
285284 result = self .client .execute (query )
286- print (result .one_or_none ()["count" ].value )
287285 return result .one_or_none ()["count" ].value
288286 except Exception as e :
289287 logger .error (f"[get_memory_count] Failed: { e } " )
290288 return - 1
291289
292- # TODO
293290 def count_nodes (self , scope : str ) -> int :
294291 query = f"""
295292 MATCH (n@Memory)
296293 WHERE n.memory_type = { scope }
297294 """
298295 if not self .config .use_multi_db and self .config .user_name :
299296 user_name = self .config .user_name
300- query += f"\n AND n.user_name = { user_name } "
297+ query += f"\n AND n.user_name = ' { user_name } ' "
301298 query += "\n RETURN count(n) AS count"
302299
303300 result = self .client .execute (query )
304- return result .one_or_none (). values () ["count" ]
301+ return result .one_or_none ()["count" ]. value
305302
306- # TODO
307303 def edge_exists (
308304 self , source_id : str , target_id : str , type : str = "ANY" , direction : str = "OUTGOING"
309305 ) -> bool :
@@ -319,26 +315,27 @@ def edge_exists(
319315 True if the edge exists, otherwise False.
320316 """
321317 # Prepare the relationship pattern
322- rel = "r" if type == "ANY" else f"r: { type } "
318+ rel = "r" if type == "ANY" else f"r@ { type } "
323319
324320 # Prepare the match pattern with direction
325321 if direction == "OUTGOING" :
326- pattern = f"(a@Memory {{id: { source_id } }})-[{ rel } ]->(b@Memory {{id: { target_id } }})"
322+ pattern = f"(a@Memory {{id: ' { source_id } ' }})-[{ rel } ]->(b@Memory {{id: ' { target_id } ' }})"
327323 elif direction == "INCOMING" :
328- pattern = f"(a@Memory {{id: { source_id } }})<-[{ rel } ]-(b@Memory {{id: { target_id } }})"
324+ pattern = f"(a@Memory {{id: ' { source_id } ' }})<-[{ rel } ]-(b@Memory {{id: ' { target_id } ' }})"
329325 elif direction == "ANY" :
330- pattern = f"(a@Memory {{id: { source_id } }})-[{ rel } ]-(b@Memory {{id: { target_id } }})"
326+ pattern = f"(a@Memory {{id: ' { source_id } ' }})-[{ rel } ]-(b@Memory {{id: ' { target_id } ' }})"
331327 else :
332328 raise ValueError (
333329 f"Invalid direction: { direction } . Must be 'OUTGOING', 'INCOMING', or 'ANY'."
334330 )
335331 query = f"MATCH { pattern } "
336332 if not self .config .use_multi_db and self .config .user_name :
337333 user_name = self .config .user_name
338- query += f"\n WHERE a.user_name = { user_name } AND b.user_name = { user_name } "
334+ query += f"\n WHERE a.user_name = ' { user_name } ' AND b.user_name = ' { user_name } ' "
339335 query += "\n RETURN r"
340336
341337 # Run the Cypher query
338+ print ("\n ======> query: " , query )
342339 result = self .client .execute (query )
343340 return result .one_or_none ().values () is not None
344341
@@ -374,7 +371,6 @@ def get_node(self, id: str) -> dict[str, Any] | None:
374371 logger .error (f"[get_node] Failed to retrieve node '{ id } ': { e } " )
375372 return None
376373
377- # TODO
378374 def get_nodes (self , ids : list [str ]) -> list [dict [str , Any ]]:
379375 """
380376 Retrieve the metadata and memory of a list of nodes.
@@ -392,14 +388,13 @@ def get_nodes(self, ids: list[str]) -> list[dict[str, Any]]:
392388
393389 where_user = ""
394390 if not self .config .use_multi_db and self .config .user_name :
395- where_user = f" AND n.user_name = { self .config .user_name } "
391+ where_user = f" AND n.user_name = ' { self .config .user_name } ' "
396392
397393 query = f"MATCH (n@Memory) WHERE n.id IN { ids } { where_user } RETURN n"
398394
399395 results = self .client .execute (query )
400- return [self ._parse_node (dict ( record . values () ["n" ]) ) for record in results ]
396+ return [self ._parse_node (record ["n" ]) for record in results ]
401397
402- # TODO
403398 def get_edges (self , id : str , type : str = "ANY" , direction : str = "ANY" ) -> list [dict [str , str ]]:
404399 """
405400 Get edges connected to a node, with optional type and direction filter.
@@ -417,28 +412,28 @@ def get_edges(self, id: str, type: str = "ANY", direction: str = "ANY") -> list[
417412 ]
418413 """
419414 # Build relationship type filter
420- rel_type = "" if type == "ANY" else f": { type } "
415+ rel_type = "" if type == "ANY" else f"@ { type } "
421416
422417 # Build Cypher pattern based on direction
423418 if direction == "OUTGOING" :
424419 pattern = f"(a@Memory)-[r{ rel_type } ]->(b@Memory)"
425- where_clause = f"a.id = { id } "
420+ where_clause = f"a.id = ' { id } ' "
426421 elif direction == "INCOMING" :
427422 pattern = f"(a@Memory)<-[r{ rel_type } ]-(b@Memory)"
428- where_clause = f"a.id = { id } "
423+ where_clause = f"a.id = ' { id } ' "
429424 elif direction == "ANY" :
430425 pattern = f"(a@Memory)-[r{ rel_type } ]-(b@Memory)"
431426 where_clause = f"a.id = { id } OR b.id = { id } "
432427 else :
433428 raise ValueError ("Invalid direction. Must be 'OUTGOING', 'INCOMING', or 'ANY'." )
434429
435430 if not self .config .use_multi_db and self .config .user_name :
436- where_clause += f" AND a.user_name = { self .config .user_name } AND b.user_name = { self .config .user_name } "
431+ where_clause += f" AND a.user_name = ' { self .config .user_name } ' AND b.user_name = ' { self .config .user_name } ' "
437432
438433 query = f"""
439434 MATCH { pattern }
440435 WHERE { where_clause }
441- RETURN a.id AS from_id, b.id AS to_id, type(r) AS type
436+ RETURN a.id AS from_id, b.id AS to_id, type(r) AS edge_type
442437 """
443438
444439 result = self .client .execute (query )
@@ -448,11 +443,12 @@ def get_edges(self, id: str, type: str = "ANY", direction: str = "ANY") -> list[
448443 {
449444 "from" : record ["from_id" ].value ,
450445 "to" : record ["to_id" ].value ,
451- "type" : record ["type " ].value ,
446+ "type" : record ["edge_type " ].value ,
452447 }
453448 )
454449 return edges
455450
451+ # TODO
456452 def get_neighbors_by_tag (
457453 self ,
458454 tags : list [str ],
@@ -544,7 +540,7 @@ def get_subgraph(
544540 collect(EDGES(p)) AS edge_chains
545541 """
546542
547- result = self .client .execute (gql ).one_or_none () # 执行查询
543+ result = self .client .execute (gql ).one_or_none ()
548544 if not result or result .size == 0 :
549545 return {"core_node" : None , "neighbors" : [], "edges" : []}
550546
@@ -734,7 +730,6 @@ def get_grouped_counts(
734730
735731 return output
736732
737- # TODO
738733 def clear (self ) -> None :
739734 """
740735 Clear the entire graph if the target database exists.
@@ -745,13 +740,11 @@ def clear(self) -> None:
745740 else :
746741 query = "MATCH (n) DETACH DELETE n"
747742
748- # Step 2: Clear the graph in that database
749743 self .client .execute (query )
750744 logger .info ("Cleared all nodes from database." )
751745
752746 except Exception as e :
753747 logger .error (f"[ERROR] Failed to clear database: { e } " )
754- raise
755748
756749 def export_graph (self ) -> dict [str , Any ]:
757750 """
0 commit comments