]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/cats/sql.c
Implement InChanger code + fix Volume ordering
[bacula/bacula] / bacula / src / cats / sql.c
index cd9e10b1016458f822f932bacba07fdc1ebd0bca..d8eb522741272dc6432082f05de91a76b42a5ff4 100644 (file)
 
 #if    HAVE_MYSQL | HAVE_SQLITE
 
-#ifdef HAVE_MYSQL
-char catalog_db[] = "MySQL";
-#else
-char catalog_db[] = "SQLite";
-#endif
+uint32_t bacula_db_version = 0;
 
 /* Forward referenced subroutines */
 void print_dashes(B_DB *mdb);
@@ -71,27 +67,27 @@ static int int_handler(void *ctx, int num_fields, char **row)
  */
 
 /* Check that the tables correspond to the version we want */
-int check_tables_version(void *jcr, B_DB *mdb)
+int check_tables_version(JCR *jcr, B_DB *mdb)
 {
-   uint32_t version;
    char *query = "SELECT VersionId FROM Version";
   
-   version = 0;
-   db_sql_query(mdb, query, int_handler, (void *)&version);
-   if (version != BDB_VERSION) {
+   bacula_db_version = 0;
+   db_sql_query(mdb, query, int_handler, (void *)&bacula_db_version);
+   if (bacula_db_version != BDB_VERSION) {
       Mmsg(&mdb->errmsg, "Version error for database \"%s\". Wanted %d, got %d\n",
-        mdb->db_name, BDB_VERSION, version);
+        mdb->db_name, BDB_VERSION, bacula_db_version);
       Jmsg(jcr, M_FATAL, 0, "%s", mdb->errmsg);
       return 0;
    }
    return 1;
 }
 
-/* Utility routine for queries */
+/* Utility routine for queries. The database MUST be locked before calling here. */
 int
-QueryDB(char *file, int line, void *jcr, B_DB *mdb, char *cmd)
+QueryDB(char *file, int line, JCR *jcr, B_DB *mdb, char *cmd)
 {
-   if (sql_query(mdb, cmd)) {
+   int status;
+   if ((status=sql_query(mdb, cmd)) != 0) {
       m_msg(file, line, &mdb->errmsg, _("query %s failed:\n%s\n"), cmd, sql_strerror(mdb));
       j_msg(file, line, jcr, M_FATAL, 0, "%s", mdb->errmsg);
       if (verbose) {
@@ -99,8 +95,9 @@ QueryDB(char *file, int line, void *jcr, B_DB *mdb, char *cmd)
       }
       return 0;
    }
+
    mdb->result = sql_store_result(mdb);
-   
+
    return mdb->result != NULL;
 }
 
@@ -110,7 +107,7 @@ QueryDB(char *file, int line, void *jcr, B_DB *mdb, char *cmd)
  *         1 on success
  */
 int
-InsertDB(char *file, int line, void *jcr, B_DB *mdb, char *cmd)
+InsertDB(char *file, int line, JCR *jcr, B_DB *mdb, char *cmd)
 {
    if (sql_query(mdb, cmd)) {
       m_msg(file, line, &mdb->errmsg,  _("insert %s failed:\n%s\n"), cmd, sql_strerror(mdb));
@@ -143,7 +140,7 @@ InsertDB(char *file, int line, void *jcr, B_DB *mdb, char *cmd)
  *          1 on success  
  */
 int
-UpdateDB(char *file, int line, void *jcr, B_DB *mdb, char *cmd)
+UpdateDB(char *file, int line, JCR *jcr, B_DB *mdb, char *cmd)
 {
 
    if (sql_query(mdb, cmd)) {
@@ -174,7 +171,7 @@ UpdateDB(char *file, int line, void *jcr, B_DB *mdb, char *cmd)
  *          n number of rows affected
  */
 int
-DeleteDB(char *file, int line, void *jcr, B_DB *mdb, char *cmd)
+DeleteDB(char *file, int line, JCR *jcr, B_DB *mdb, char *cmd)
 {
 
    if (sql_query(mdb, cmd)) {
@@ -197,7 +194,7 @@ DeleteDB(char *file, int line, void *jcr, B_DB *mdb, char *cmd)
  * Returns: -1 on failure
  *         count on success
  */
-int get_sql_record_max(void *jcr, B_DB *mdb)
+int get_sql_record_max(JCR *jcr, B_DB *mdb)
 {
    SQL_ROW row;
    int stat = 0;
@@ -245,7 +242,7 @@ void _db_unlock(char *file, int line, B_DB *mdb)
  *  much more efficient. Usually started when inserting 
  *  file attributes.
  */
-void db_start_transaction(void *jcr, B_DB *mdb)
+void db_start_transaction(JCR *jcr, B_DB *mdb)
 {
 #ifdef xAVE_SQLITE
    db_lock(mdb);
@@ -263,7 +260,7 @@ void db_start_transaction(void *jcr, B_DB *mdb)
 
 }
 
-void db_end_transaction(void *jcr, B_DB *mdb)
+void db_end_transaction(JCR *jcr, B_DB *mdb)
 {
 #ifdef xAVE_SQLITE
    db_lock(mdb);
@@ -282,7 +279,7 @@ void db_end_transaction(void *jcr, B_DB *mdb)
  *  and filename parts. They are returned in pool memory
  *  in the mdb structure.
  */
-void split_path_and_filename(void *jcr, B_DB *mdb, char *fname)
+void split_path_and_filename(JCR *jcr, B_DB *mdb, char *fname)
 {
    char *p, *f;