db->transaction(function () use ($siteId, $sourceId): array { $row = $this->db->selectOne('SELECT status FROM {knowledge_sources} WHERE id = ? AND site_id = ?', [$sourceId, $siteId]); if ($row === null || !in_array($row['status'], ['deleting', 'deleted'], true)) { return ['chunks' => 0, 'versions' => 0]; } $chunks = $this->db->execute('DELETE FROM {knowledge_chunks} WHERE source_id = ? AND site_id = ?', [$sourceId, $siteId]); $versions = $this->db->execute('DELETE FROM {knowledge_versions} WHERE source_id = ? AND site_id = ?', [$sourceId, $siteId]); $this->db->execute('DELETE FROM {knowledge_claims} WHERE source_id = ? AND site_id = ?', [$sourceId, $siteId]); $this->db->execute('DELETE FROM {bot_sources} WHERE source_id = ? AND site_id = ?', [$sourceId, $siteId]); $this->db->execute('DELETE FROM {knowledge_blobs} WHERE source_id = ? AND site_id = ?', [$sourceId, $siteId]); $this->db->execute("UPDATE {message_citations} SET title = '[deleted source]', url = NULL WHERE source_id = ? AND site_id = ?", [$sourceId, $siteId]); $this->db->execute( "UPDATE {knowledge_sources} SET status = 'deleted', title = '[deleted]', url = NULL, origin_ref = ?, current_version_id = NULL, error = NULL, updated_at = ? WHERE id = ? AND site_id = ?", ['deleted:' . $sourceId, $this->clock->now(), $sourceId, $siteId] ); return ['chunks' => $chunks, 'versions' => $versions]; }); } }