]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/cats/mysql.c
Print block errors once + add RunAfterFailedJob + improve db_find_job_start_time...
[bacula/bacula] / bacula / src / cats / mysql.c
index afa55b9f2cf8d15d2c9466e7802f4cec65a0a8ef..719aab5cd8db50da25287b4ff8fc3d15c673d2ac 100644 (file)
@@ -56,11 +56,15 @@ static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
  * never have errors, or it is really fatal.
  */
 B_DB *
-db_init_database(void *jcr, char *db_name, char *db_user, char *db_password, 
+db_init_database(JCR *jcr, char *db_name, char *db_user, char *db_password, 
                 char *db_address, int db_port, char *db_socket) 
 {
    B_DB *mdb;
 
+   if (!db_user) {             
+      Jmsg(jcr, M_FATAL, 0, _("A user name for MySQL must be supplied.\n"));
+      return NULL;
+   }
    P(mutex);                         /* lock DB queue */
    /* Look to see if DB already open */
    for (mdb=NULL; (mdb=(B_DB *)qnext(&db_list, &mdb->bq)); ) {
@@ -76,7 +80,9 @@ db_init_database(void *jcr, char *db_name, char *db_user, char *db_password,
    memset(mdb, 0, sizeof(B_DB));
    mdb->db_name = bstrdup(db_name);
    mdb->db_user = bstrdup(db_user);
-   mdb->db_password = bstrdup(db_password);
+   if (db_password) {
+      mdb->db_password = bstrdup(db_password);
+   }
    if (db_address) {
       mdb->db_address = bstrdup(db_address);
    }
@@ -104,7 +110,7 @@ db_init_database(void *jcr, char *db_name, char *db_user, char *db_password,
  * which are returned in the errmsg
  */
 int
-db_open_database(void *jcr, B_DB *mdb)
+db_open_database(JCR *jcr, B_DB *mdb)
 {
    int errstat;
 
@@ -138,7 +144,7 @@ db_open_database(void *jcr, B_DB *mdb)
        mdb->db_socket,               /* default = socket */
        CLIENT_FOUND_ROWS);           /* flags */
 
-   /* If no connect, try once more incase it is a timing problem */
+   /* If no connect, try once more in case it is a timing problem */
    if (mdb->db == NULL) {
       mdb->db = mysql_real_connect(
           &(mdb->mysql),                /* db */
@@ -148,7 +154,7 @@ db_open_database(void *jcr, B_DB *mdb)
           mdb->db_name,                 /* database name */
           mdb->db_port,                 /* default port */
           mdb->db_socket,               /* default = socket */
-          0);                           /* flags = none */
+          CLIENT_FOUND_ROWS);           /* flags */
    }
     
    Dmsg0(50, "mysql_real_connect done\n");
@@ -170,7 +176,9 @@ It is probably not running or your password is incorrect.\n"),
       return 0;
    }
 
+#ifdef HAVE_TREAD_SAFE_MYSQL
    my_thread_init();
+#endif
 
    mdb->connected = TRUE;
    V(mutex);
@@ -178,11 +186,13 @@ It is probably not running or your password is incorrect.\n"),
 }
 
 void
-db_close_database(void *jcr, B_DB *mdb)
+db_close_database(JCR *jcr, B_DB *mdb)
 {
    P(mutex);
    mdb->ref_count--;
+#ifdef HAVE_TREAD_SAFE_MYSQL
    my_thread_end();
+#endif
    if (mdb->ref_count == 0) {
       qdchain(&mdb->bq);
       if (mdb->connected && mdb->db) {
@@ -225,7 +235,7 @@ db_close_database(void *jcr, B_DB *mdb)
  * For MySQL, NULL causes the auto-increment value
  *  to be updated.
  */
-int db_next_index(void *jcr, B_DB *mdb, char *table, char *index)
+int db_next_index(JCR *jcr, B_DB *mdb, char *table, char *index)
 {
    strcpy(index, "NULL");
    return 1;
@@ -236,7 +246,7 @@ int db_next_index(void *jcr, B_DB *mdb, char *table, char *index)
  * Escape strings so that MySQL is happy
  *
  *   NOTE! len is the length of the old string. Your new
- *        string must be long enough (max 2*old) to hold
+ *        string must be long enough (max 2*old+1) to hold
  *        the escaped output.
  */
 void
@@ -352,7 +362,7 @@ list_dashes(B_DB *mdb, DB_LIST_HANDLER *send, void *ctx)
  * list on one line horizontally.      
  */
 void
-list_result(B_DB *mdb, DB_LIST_HANDLER *send, void *ctx, int full_list)
+list_result(B_DB *mdb, DB_LIST_HANDLER *send, void *ctx, e_list_type type)
 {
    SQL_FIELD *field;
    SQL_ROW row;
@@ -368,7 +378,7 @@ list_result(B_DB *mdb, DB_LIST_HANDLER *send, void *ctx, int full_list)
    for (i = 0; i < sql_num_fields(mdb); i++) {
       field = sql_fetch_field(mdb);
       col_len = strlen(field->name);
-      if (full_list) {
+      if (type == VERT_LIST) {
         if (col_len > max_len) {
            max_len = col_len;
         }
@@ -386,8 +396,8 @@ list_result(B_DB *mdb, DB_LIST_HANDLER *send, void *ctx, int full_list)
       }
    }
 
-   if (full_list) {
-      goto horizontal_list;
+   if (type == VERT_LIST) {
+      goto vertical_list;
    }
 
    list_dashes(mdb, send, ctx);
@@ -421,7 +431,7 @@ list_result(B_DB *mdb, DB_LIST_HANDLER *send, void *ctx, int full_list)
    list_dashes(mdb, send, ctx);
    return;
 
-horizontal_list:
+vertical_list:
    
    while ((row = sql_fetch_row(mdb)) != NULL) {
       sql_field_seek(mdb, 0);