Index: /branches/eam_branches/ipp-20230313/ippTools/src/addtool.c
===================================================================
--- /branches/eam_branches/ipp-20230313/ippTools/src/addtool.c	(revision 42736)
+++ /branches/eam_branches/ipp-20230313/ippTools/src/addtool.c	(revision 42737)
@@ -1683,8 +1683,8 @@
   // required
   PXOPT_LOOKUP_STR(minidvodb_group, config->args, "-set_minidvodb_group", true, false);
-  PXOPT_LOOKUP_STR(minidvodb_path, config->args, "-set_minidvodb_path", false, false);
+  PXOPT_LOOKUP_STR(minidvodb_path_raw, config->args, "-set_minidvodb_path", false, false);
   PXOPT_LOOKUP_STR(minidvodb_host, config->args, "-set_minidvodb_host", false, false);
   //optional
-  PXOPT_LOOKUP_STR(minidvodb_name, config->args, "-set_minidvodb_name", false, false);
+  PXOPT_LOOKUP_STR(minidvodb_name_raw, config->args, "-set_minidvodb_name", false, false);
   PXOPT_LOOKUP_STR(state, config->args, "-set_state", false, false);
   PXOPT_LOOKUP_STR(note,            config->args, "-set_note",            false, false);
@@ -1695,19 +1695,9 @@
   }
 
-//  psString minidvodbpath = "NULL";
-
-  // I don't know how to get around the complaints of minidvodb_path can't be null. this 'fixes' it, but someone smarter can fix it properly.
-//  if (minidvodb_path) {
-//    minidvodbpath = minidvodb_path;
-//  } else {
-//    psError(PS_ERR_UNKNOWN, false, "require minidvodb_path");
-//    return false;
-//  }
-  
   if (!minidvodbRunInsert(config->dbh,
 			  0, // job_id
-			  minidvodb_name,
+			  minidvodb_name_raw,
 			  minidvodb_group,
-			  minidvodb_path,
+			  minidvodb_path_raw,
 			  minidvodb_host,
 			  "new",
@@ -1730,26 +1720,45 @@
   printf("%" PRId64 "\n", minidvodb_id);
 
-  
-  if (!minidvodb_name) {
-    psStringAppend(&minidvodb_name, "%s.%" PRIu64,minidvodb_group,minidvodb_id);
-  }
-  if (minidvodb_path) {
-    psStringAppend(&minidvodb_path,"/%s",minidvodb_name);
-  }
-
-  psString query = NULL;
-
-  psStringAppend(&query, "UPDATE minidvodbRun SET minidvodb_path = '%s', minidvodb_name = '%s' where minidvodb_id = %" PRIu64";", minidvodb_path, minidvodb_name, minidvodb_id);
-
-  if (!p_psDBRunQuery(config->dbh, query)) {
-    psError(PS_ERR_UNKNOWN, false, "database error");
-    psFree(query);
-    return false;
-  }
-
-  if (!psDBCommit(config->dbh)) {
-    psError(PS_ERR_UNKNOWN, false, "database error");
-    return false;
-  }
+  // we created a new entry using the values supplied above for minidvodb_name_raw, minidvodb_host_raw.
+  // If minidvodb_name is not specified, it will be generated based on the value of minidvodb_group and
+  // the minidvodb_id of the new entry.  But this means we need to insert first, get the ID, then update.
+
+  bool doUpdate = false;
+
+  // if minidvodb_name_raw is not specified above, create it from minidvodb_group
+  psString minidvodb_name = NULL;
+  if (minidvodb_name_raw) {
+    minidvodb_name = psStringCopy (minidvodb_name_raw);
+  } else {
+    psStringAppend(&minidvodb_name, "%s.%" PRIu64, minidvodb_group, minidvodb_id);
+    doUpdate = true;
+  }
+
+  // if minidvodb_path_raw IS specified above, update it with the minidvodb_name
+  psString minidvodb_path = NULL;
+  if (minidvodb_path_raw) {
+    psStringAppend(&minidvodb_path, "%s/%s", minidvodb_path_raw, minidvodb_name);
+    doUpdate = true;
+  }
+
+  if (doUpdate) {
+    psString query = NULL;
+
+    psStringAppend(&query, "UPDATE minidvodbRun SET minidvodb_path = '%s', minidvodb_name = '%s' where minidvodb_id = %" PRIu64";", minidvodb_path, minidvodb_name, minidvodb_id);
+
+    if (!p_psDBRunQuery(config->dbh, query)) {
+      psError(PS_ERR_UNKNOWN, false, "database error");
+      psFree(query);
+      return false;
+    }
+
+    if (!psDBCommit(config->dbh)) {
+      psError(PS_ERR_UNKNOWN, false, "database error");
+      return false;
+    }
+  }
+
+  psFree (minidvodb_name);
+  psFree (minidvodb_path);
 
   return true;
