]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/cats/sql.c
Fix #2060 about SQL false error message with "update volume fromallpools" command
[bacula/bacula] / bacula / src / cats / sql.c
index e241d09efdd80b6bc397fa187147b372260a8a51..eb8aefb860bab8dd2fd4698c891fe7b8eca6a69e 100644 (file)
@@ -280,8 +280,12 @@ bool BDB::InsertDB(JCR *jcr, char *cmd, const char *file, int line)
 /* Utility routine for updates. 
  *  Returns: false on failure 
  *           true  on success 
+ *
+ * Some UPDATE queries must update record(s), other queries might not update
+ * anything.
  */ 
-bool BDB::UpdateDB(JCR *jcr, char *cmd, const char *file, int line) 
+bool BDB::UpdateDB(JCR *jcr, char *cmd, bool can_be_empty,
+                   const char *file, int line) 
 { 
    if (!sql_query(cmd)) { 
       m_msg(file, line, &errmsg, _("update %s failed:\n%s\n"), cmd, sql_strerror()); 
@@ -292,7 +296,7 @@ bool BDB::UpdateDB(JCR *jcr, char *cmd, const char *file, int line)
       return false; 
    } 
    int num_rows = sql_affected_rows(); 
-   if (num_rows < 1) { 
+   if ((num_rows == 0 && !can_be_empty) || num_rows < 0) { 
       char ed1[30]; 
       m_msg(file, line, &errmsg, _("Update failed: affected_rows=%s for %s\n"), 
          edit_uint64(num_rows, ed1), cmd); 
@@ -686,7 +690,8 @@ list_result(JCR *jcr, BDB *mdb, DB_LIST_HANDLER *send, void *ctx, e_list_type ty
          } else if (mdb->sql_field_is_numeric(field->type) && !jcr->gui && is_an_integer(row[i])) { 
             bsnprintf(buf, sizeof(buf), " %*s |", max_len, 
                       add_commas(row[i], ewc)); 
-         } else { 
+         } else {
+            strip_trailing_junk(row[i]);
             bsnprintf(buf, sizeof(buf), " %-*s |", max_len, row[i]); 
          } 
          send(ctx, buf); 
@@ -711,7 +716,8 @@ vertical_list:
          } else if (mdb->sql_field_is_numeric(field->type) && !jcr->gui && is_an_integer(row[i])) { 
             bsnprintf(buf, sizeof(buf), " %*s: %s\n", max_len, field->name, 
                 add_commas(row[i], ewc)); 
-         } else { 
+         } else {
+            strip_trailing_junk(row[i]);
             bsnprintf(buf, sizeof(buf), " %*s: %s\n", max_len, field->name, row[i]); 
          } 
          send(ctx, buf);