@@ -103,12 +103,18 @@ def _init_database(self):
103103 ''' )
104104
105105 # Create indexes for better query performance
106- conn .execute ('CREATE INDEX IF NOT EXISTS idx_elements_diagram_id ON elements (diagram_id)' )
107- conn .execute ('CREATE INDEX IF NOT EXISTS idx_elements_type ON elements (element_type)' )
108- conn .execute ('CREATE INDEX IF NOT EXISTS idx_relationships_diagram_id ON relationships (diagram_id)' )
109- conn .execute ('CREATE INDEX IF NOT EXISTS idx_relationships_type ON relationships (relationship_type)' )
110- conn .execute ('CREATE INDEX IF NOT EXISTS idx_relationships_source ON relationships (source_element_id)' )
111- conn .execute ('CREATE INDEX IF NOT EXISTS idx_relationships_target ON relationships (target_element_id)' )
106+ conn .execute (
107+ 'CREATE INDEX IF NOT EXISTS idx_elements_diagram_id ON elements (diagram_id)' )
108+ conn .execute (
109+ 'CREATE INDEX IF NOT EXISTS idx_elements_type ON elements (element_type)' )
110+ conn .execute (
111+ 'CREATE INDEX IF NOT EXISTS idx_relationships_diagram_id ON relationships (diagram_id)' )
112+ conn .execute (
113+ 'CREATE INDEX IF NOT EXISTS idx_relationships_type ON relationships (relationship_type)' )
114+ conn .execute (
115+ 'CREATE INDEX IF NOT EXISTS idx_relationships_source ON relationships (source_element_id)' )
116+ conn .execute (
117+ 'CREATE INDEX IF NOT EXISTS idx_relationships_target ON relationships (target_element_id)' )
112118
113119 def store_diagram (self , parsed_diagram ) -> int :
114120 """
@@ -186,9 +192,12 @@ def get_diagram(self, diagram_id: int) -> Optional[DiagramRecord]:
186192 id = row ['id' ],
187193 source_file = row ['source_file' ],
188194 diagram_type = row ['diagram_type' ],
189- created_at = datetime .fromisoformat (row ['created_at' ]) if row ['created_at' ] else None ,
190- updated_at = datetime .fromisoformat (row ['updated_at' ]) if row ['updated_at' ] else None ,
191- metadata = json .loads (row ['metadata' ]) if row ['metadata' ] else {},
195+ created_at = datetime .fromisoformat (
196+ row ['created_at' ]) if row ['created_at' ] else None ,
197+ updated_at = datetime .fromisoformat (
198+ row ['updated_at' ]) if row ['updated_at' ] else None ,
199+ metadata = json .loads (
200+ row ['metadata' ]) if row ['metadata' ] else {},
192201 tags = json .loads (row ['tags' ]) if row ['tags' ] else []
193202 )
194203 return None
@@ -209,8 +218,10 @@ def get_elements(self, diagram_id: int) -> List[ElementRecord]:
209218 element_id = row ['element_id' ],
210219 element_type = row ['element_type' ],
211220 name = row ['name' ],
212- properties = json .loads (row ['properties' ]) if row ['properties' ] else {},
213- position = json .loads (row ['position' ]) if row ['position' ] else None ,
221+ properties = json .loads (
222+ row ['properties' ]) if row ['properties' ] else {},
223+ position = json .loads (
224+ row ['position' ]) if row ['position' ] else None ,
214225 tags = json .loads (row ['tags' ]) if row ['tags' ] else []
215226 ))
216227
@@ -233,13 +244,15 @@ def get_relationships(self, diagram_id: int) -> List[RelationshipRecord]:
233244 source_element_id = row ['source_element_id' ],
234245 target_element_id = row ['target_element_id' ],
235246 relationship_type = row ['relationship_type' ],
236- properties = json .loads (row ['properties' ]) if row ['properties' ] else {},
247+ properties = json .loads (
248+ row ['properties' ]) if row ['properties' ] else {},
237249 tags = json .loads (row ['tags' ]) if row ['tags' ] else []
238250 ))
239251
240252 return relationships
241253
242- def search_elements_by_type (self , element_type : str ) -> List [ElementRecord ]:
254+ def search_elements_by_type (
255+ self , element_type : str ) -> List [ElementRecord ]:
243256 """Search elements by type across all diagrams."""
244257 with sqlite3 .connect (self .db_path ) as conn :
245258 conn .row_factory = sqlite3 .Row
@@ -255,8 +268,10 @@ def search_elements_by_type(self, element_type: str) -> List[ElementRecord]:
255268 element_id = row ['element_id' ],
256269 element_type = row ['element_type' ],
257270 name = row ['name' ],
258- properties = json .loads (row ['properties' ]) if row ['properties' ] else {},
259- position = json .loads (row ['position' ]) if row ['position' ] else None ,
271+ properties = json .loads (
272+ row ['properties' ]) if row ['properties' ] else {},
273+ position = json .loads (
274+ row ['position' ]) if row ['position' ] else None ,
260275 tags = json .loads (row ['tags' ]) if row ['tags' ] else []
261276 ))
262277
@@ -276,7 +291,8 @@ def search_by_tags(self, tags: List[str]) -> List[Dict[str, Any]]:
276291 ''' , (f'%{ tag } %' ,))
277292
278293 for row in cursor .fetchall ():
279- diagram_tags = json .loads (row ['tags' ]) if row ['tags' ] else []
294+ diagram_tags = json .loads (
295+ row ['tags' ]) if row ['tags' ] else []
280296 if tag in diagram_tags :
281297 results ['diagrams' ].append ({
282298 'id' : row ['id' ],
@@ -292,7 +308,8 @@ def search_by_tags(self, tags: List[str]) -> List[Dict[str, Any]]:
292308 ''' , (f'%{ tag } %' ,))
293309
294310 for row in cursor .fetchall ():
295- element_tags = json .loads (row ['tags' ]) if row ['tags' ] else []
311+ element_tags = json .loads (
312+ row ['tags' ]) if row ['tags' ] else []
296313 if tag in element_tags :
297314 results ['elements' ].append ({
298315 'id' : row ['id' ],
@@ -326,17 +343,21 @@ def get_all_diagrams(self) -> List[DiagramRecord]:
326343 """Retrieve all diagram records."""
327344 with sqlite3 .connect (self .db_path ) as conn :
328345 conn .row_factory = sqlite3 .Row
329- cursor = conn .execute ('SELECT * FROM diagrams ORDER BY created_at DESC' )
346+ cursor = conn .execute (
347+ 'SELECT * FROM diagrams ORDER BY created_at DESC' )
330348
331349 diagrams = []
332350 for row in cursor .fetchall ():
333351 diagrams .append (DiagramRecord (
334352 id = row ['id' ],
335353 source_file = row ['source_file' ],
336354 diagram_type = row ['diagram_type' ],
337- created_at = datetime .fromisoformat (row ['created_at' ]) if row ['created_at' ] else None ,
338- updated_at = datetime .fromisoformat (row ['updated_at' ]) if row ['updated_at' ] else None ,
339- metadata = json .loads (row ['metadata' ]) if row ['metadata' ] else {},
355+ created_at = datetime .fromisoformat (
356+ row ['created_at' ]) if row ['created_at' ] else None ,
357+ updated_at = datetime .fromisoformat (
358+ row ['updated_at' ]) if row ['updated_at' ] else None ,
359+ metadata = json .loads (
360+ row ['metadata' ]) if row ['metadata' ] else {},
340361 tags = json .loads (row ['tags' ]) if row ['tags' ] else []
341362 ))
342363
@@ -346,6 +367,7 @@ def delete_diagram(self, diagram_id: int) -> bool:
346367 """Delete a diagram and all its related records."""
347368 with sqlite3 .connect (self .db_path ) as conn :
348369 conn .execute ("PRAGMA foreign_keys = ON" )
349- cursor = conn .execute ('DELETE FROM diagrams WHERE id = ?' , (diagram_id ,))
370+ cursor = conn .execute (
371+ 'DELETE FROM diagrams WHERE id = ?' , (diagram_id ,))
350372 conn .commit ()
351- return cursor .rowcount > 0
373+ return cursor .rowcount > 0
0 commit comments