@@ -39,22 +39,57 @@ def db_create_clusters_table() -> None:
3939 conn .close ()
4040
4141
42- def db_insert_clusters_batch (clusters : List [ClusterData ]) -> List [ClusterId ]:
42+ def db_delete_all_clusters (cursor : Optional [sqlite3 .Cursor ] = None ) -> int :
43+ """
44+ Delete all clusters from the database.
45+
46+ Args:
47+ cursor: Optional existing database cursor. If None, creates a new connection.
48+
49+ Returns:
50+ Number of deleted clusters
51+ """
52+ own_connection = cursor is None
53+ if own_connection :
54+ conn = sqlite3 .connect (DATABASE_PATH )
55+ cursor = conn .cursor ()
56+
57+ try :
58+ cursor .execute ("DELETE FROM face_clusters" )
59+ deleted_count = cursor .rowcount
60+ if own_connection :
61+ conn .commit ()
62+ return deleted_count
63+ except Exception :
64+ if own_connection :
65+ conn .rollback ()
66+ print ("Error deleting all clusters." )
67+ raise
68+ finally :
69+ if own_connection :
70+ conn .close ()
71+
72+
73+ def db_insert_clusters_batch (
74+ clusters : List [ClusterData ], cursor : Optional [sqlite3 .Cursor ] = None
75+ ) -> List [ClusterId ]:
4376 """
4477 Insert multiple clusters into the database in batch.
4578
4679 Args:
4780 clusters: List of ClusterData objects containing cluster information.
48- cluster_id: should be provided as UUID strings .
81+ cursor: Optional existing database cursor. If None, creates a new connection .
4982
5083 Returns:
5184 List of cluster IDs of the newly created clusters
5285 """
5386 if not clusters :
5487 return []
5588
56- conn = sqlite3 .connect (DATABASE_PATH )
57- cursor = conn .cursor ()
89+ own_connection = cursor is None
90+ if own_connection :
91+ conn = sqlite3 .connect (DATABASE_PATH )
92+ cursor = conn .cursor ()
5893
5994 try :
6095 cluster_ids = []
@@ -72,14 +107,20 @@ def db_insert_clusters_batch(clusters: List[ClusterData]) -> List[ClusterId]:
72107 """
73108 INSERT INTO face_clusters (cluster_id, cluster_name, face_image_base64)
74109 VALUES (?, ?, ?)
75- """ ,
110+ """ ,
76111 insert_data ,
77112 )
78113
79- conn .commit ()
114+ if own_connection :
115+ conn .commit ()
80116 return cluster_ids
117+ except Exception :
118+ if own_connection :
119+ conn .rollback ()
120+ raise
81121 finally :
82- conn .close ()
122+ if own_connection :
123+ conn .close ()
83124
84125
85126def db_get_cluster_by_id (cluster_id : ClusterId ) -> Optional [ClusterData ]:
@@ -145,18 +186,24 @@ def db_get_all_clusters() -> List[ClusterData]:
145186def db_update_cluster (
146187 cluster_id : ClusterId ,
147188 cluster_name : Optional [ClusterName ] = None ,
189+ conn : Optional [sqlite3 .Connection ] = None ,
148190) -> bool :
149191 """
150192 Update an existing cluster.
151193
152194 Args:
153195 cluster_id: The ID of the cluster to update
154196 cluster_name: New cluster name (optional)
197+ conn: Optional existing database connection. If None, creates a new connection.
155198
156199 Returns:
157200 True if the cluster was updated, False if not found
158201 """
159- conn = sqlite3 .connect (DATABASE_PATH )
202+ # Use provided connection or create a new one
203+ own_connection = conn is None
204+ if own_connection :
205+ conn = sqlite3 .connect (DATABASE_PATH )
206+
160207 cursor = conn .cursor ()
161208
162209 try :
@@ -185,26 +232,6 @@ def db_update_cluster(
185232 conn .close ()
186233
187234
188- def db_delete_all_clusters () -> int :
189- """
190- Delete all entries from the face_clusters table.
191-
192- Returns:
193- Number of clusters deleted
194- """
195- conn = sqlite3 .connect (DATABASE_PATH )
196- cursor = conn .cursor ()
197-
198- try :
199- cursor .execute ("DELETE FROM face_clusters" )
200-
201- deleted_count = cursor .rowcount
202- conn .commit ()
203- return deleted_count
204- finally :
205- conn .close ()
206-
207-
208235def db_get_all_clusters_with_face_counts () -> (
209236 List [Dict [str , Union [str , Optional [str ], int ]]]
210237):
0 commit comments