Skip to content

Commit

Permalink
Ignore affected rows in UPDATE_DB
Browse files Browse the repository at this point in the history
We get an error  message from UPDATE_DB , when
the number of affected rows is < 1.

In some cases, its ok to have no affected rows,
like in "update all volumes from all pools", when
there is a pool with no volumes inside.

Fixes #62: update all volumes from all pools gives error when a pool doesnt contain volumes

Signed-off-by: Marco van Wieringen <marco.van.wieringen@bareos.com>
  • Loading branch information
pstorz authored and Marco van Wieringen committed Feb 17, 2015
1 parent d318518 commit 989193c
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 1 deletion.
2 changes: 2 additions & 0 deletions src/cats/cats.h
Expand Up @@ -544,6 +544,7 @@ class B_DB: public SMARTALLOC {

/* Use for better error location printing */
#define UPDATE_DB(jcr, db, cmd) UpdateDB(__FILE__, __LINE__, jcr, db, cmd)
#define UPDATE_DB_NO_AFR(jcr, db, cmd) UpdateDB_no_afr(__FILE__, __LINE__, jcr, db, cmd)
#define INSERT_DB(jcr, db, cmd) InsertDB(__FILE__, __LINE__, jcr, db, cmd)
#define QUERY_DB(jcr, db, cmd) QueryDB(__FILE__, __LINE__, jcr, db, cmd)
#define DELETE_DB(jcr, db, cmd) DeleteDB(__FILE__, __LINE__, jcr, db, cmd)
Expand Down Expand Up @@ -631,5 +632,6 @@ bool QueryDB(const char *file, int line, JCR *jcr, B_DB *db, char *select_cmd);
bool InsertDB(const char *file, int line, JCR *jcr, B_DB *db, char *select_cmd);
int DeleteDB(const char *file, int line, JCR *jcr, B_DB *db, char *delete_cmd);
bool UpdateDB(const char *file, int line, JCR *jcr, B_DB *db, char *update_cmd);
bool UpdateDB_no_afr(const char *file, int line, JCR *jcr, B_DB *db, char *update_cmd);
void split_path_and_file(JCR *jcr, B_DB *mdb, const char *fname);
#endif /* __CATS_H_ */
22 changes: 22 additions & 0 deletions src/cats/sql.c
Expand Up @@ -288,6 +288,28 @@ bool UpdateDB(const char *file, int line, JCR *jcr, B_DB *mdb, char *cmd)
return true;
}

/* Utility routine for updates.
* Returns: false on failure
* true on success
* sames as UpdateDB() but ignores the number of affected rows
*/
bool UpdateDB_no_afr(const char *file, int line, JCR *jcr, B_DB *mdb, char *cmd)
{
int num_rows;

if (!sql_query(mdb, cmd)) {
m_msg(file, line, &mdb->errmsg, _("update %s failed:\n%s\n"), cmd, sql_strerror(mdb));
j_msg(file, line, jcr, M_ERROR, 0, "%s", mdb->errmsg);
if (verbose) {
j_msg(file, line, jcr, M_INFO, 0, "%s\n", cmd);
}
return false;
}
num_rows = sql_affected_rows(mdb);
mdb->changes++;
return true;
}

/*
* Utility routine for deletes
*
Expand Down
2 changes: 1 addition & 1 deletion src/cats/sql_update.c
Expand Up @@ -484,7 +484,7 @@ db_make_inchanger_unique(JCR *jcr, B_DB *mdb, MEDIA_DBR *mr)
edit_int64(mr->StorageId, ed1), mr->VolumeName);
}
Dmsg1(100, "%s\n", mdb->cmd);
UPDATE_DB(jcr, mdb, mdb->cmd);
UPDATE_DB_NO_AFR(jcr, mdb, mdb->cmd);
}
}

Expand Down

0 comments on commit 989193c

Please sign in to comment.