INSERT INTO ai_agent_snapshot ( id, agent_id, user_id, version_no, snapshot_data, changed_fields, source, restore_from_snapshot_id, restore_from_version_no, creator, created_at, redaction_version ) SELECT #{snapshot.id}, #{snapshot.agentId}, #{snapshot.userId}, COALESCE(MAX(version_no), 0) + 1, #{snapshot.snapshotData}, #{snapshot.changedFields}, #{snapshot.source}, #{snapshot.restoreFromSnapshotId}, #{snapshot.restoreFromVersionNo}, #{snapshot.creator}, #{snapshot.createdAt}, #{snapshot.redactionVersion} FROM ai_agent_snapshot WHERE agent_id = #{snapshot.agentId} DELETE FROM ai_agent_snapshot WHERE agent_id = #{agentId} AND id NOT IN ( SELECT id FROM ( SELECT id FROM ai_agent_snapshot WHERE agent_id = #{agentId} ORDER BY version_no DESC LIMIT #{keepLimit} ) retained_snapshots ) UPDATE ai_agent_snapshot SET snapshot_data = CASE id WHEN #{snapshot.id} THEN #{snapshot.snapshotData} ELSE snapshot_data END, redaction_version = #{redactionVersion} WHERE redaction_version < #{redactionVersion} AND id IN #{snapshot.id}