- char ed1[50], ed2[50];
- if (mr->InChanger != 0 && mr->Slot != 0) {
- Mmsg(mdb->cmd, "UPDATE Media SET InChanger=0 WHERE "
- "Slot=%d AND StorageId=%s AND MediaId!=%s",
- mr->Slot,
- edit_int64(mr->StorageId, ed1), edit_int64(mr->MediaId, ed2));
- Dmsg1(400, "%s\n", mdb->cmd);
- UPDATE_DB(jcr, mdb, mdb->cmd);
+ char ed1[50];
+ char esc[MAX_ESCAPE_NAME_LENGTH];
+
+ if (mr->InChanger != 0 && mr->Slot != 0 && mr->StorageId != 0) {
+ if (!mr->sid_group) {
+ mr->sid_group = edit_int64(mr->StorageId, mr->sid);
+ }
+ if (mr->MediaId != 0) {
+ Mmsg(cmd, "UPDATE Media SET InChanger=0, Slot=0 WHERE "
+ "Slot=%d AND StorageId IN (%s) AND MediaId!=%s",
+ mr->Slot,
+ mr->sid_group, edit_int64(mr->MediaId, ed1));
+
+ } else if (*mr->VolumeName) {
+ bdb_escape_string(jcr, esc,mr->VolumeName,strlen(mr->VolumeName));
+ Mmsg(cmd, "UPDATE Media SET InChanger=0, Slot=0 WHERE "
+ "Slot=%d AND StorageId IN (%s) AND VolumeName!='%s'",
+ mr->Slot, mr->sid_group, esc);
+
+ } else { /* used by ua_label to reset all volume with this slot */
+ Mmsg(cmd, "UPDATE Media SET InChanger=0, Slot=0 WHERE "
+ "Slot=%d AND StorageId IN (%s)",
+ mr->Slot, mr->sid_group, mr->VolumeName);
+ }
+ Dmsg1(dbglevel1, "%s\n", cmd);
+ UpdateDB(jcr, cmd, true);