]> git.sur5r.net Git - bacula/bacula/commitdiff
Fix NumVols in Pools, implement full listing of DB tables
authorKern Sibbald <kern@sibbald.com>
Thu, 3 Apr 2003 16:01:58 +0000 (16:01 +0000)
committerKern Sibbald <kern@sibbald.com>
Thu, 3 Apr 2003 16:01:58 +0000 (16:01 +0000)
git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@414 91ce42f0-d328-0410-95d8-f526ca767f89

20 files changed:
bacula/scripts/startmysql.in
bacula/src/cats/create_mysql_database.in
bacula/src/cats/create_sqlite_database.in
bacula/src/cats/drop_mysql_tables.in
bacula/src/cats/grant_mysql_privileges.in
bacula/src/cats/make_mysql_tables.in
bacula/src/cats/make_sqlite_tables.in
bacula/src/cats/mysql.c
bacula/src/cats/mysql.in
bacula/src/cats/protos.h
bacula/src/cats/sql_list.c
bacula/src/cats/sqlite.c
bacula/src/dird/backup.c
bacula/src/dird/dird.c
bacula/src/dird/protos.h
bacula/src/dird/ua_cmds.c
bacula/src/dird/ua_output.c
bacula/src/dird/ua_restore.c
bacula/src/dird/ua_select.c
bacula/src/version.h

index ee60a5b865cb04b1d1b50389654d7a3c4cca67e7..dc35bd786c4d9ae74309723d650e75dd69bed2ac 100755 (executable)
@@ -1,11 +1,11 @@
 #!/bin/sh
 cd @SQL_BINDIR@
 if [ -x ./safe_mysqld ]; then
-  ./safe_mysqld &
+  ./safe_mysqld $* &
   exit $?
 fi
 if [ -x ./mysqld_safe ]; then
-  ./mysqld_safe &
+  ./mysqld_safe $* &
   exit $?
 fi
 echo "Neither safe_mysqld nor mysqld_safe found!"
index f0bae06f484dede67f7b556d4f79e9e7178e5d95..88753cf6961a975c0fb9a1e97f0935c346312650 100644 (file)
@@ -5,7 +5,7 @@
 
 bindir=@SQL_BINDIR@
 
-if $bindir/mysql -f <<END-OF-DATA
+if $bindir/mysql $* -f <<END-OF-DATA
 CREATE DATABASE bacula;
 END-OF-DATA
 then
index e2bb8ee0ef2dc9d125c2fb603f4c1307702e60c7..4cbd7338a68fa7902d1ccd961c40ad51c4f2106c 100644 (file)
@@ -5,6 +5,6 @@
 bindir=@SQL_BINDIR@
 cd @working_dir@
 
-$bindir/sqlite bacula.db <<END-OF-DATA
+$bindir/sqlite $* bacula.db <<END-OF-DATA
 END-OF-DATA
 exit 0
index 86be989676368d6a0a3f5baafa9758f77ab34a2b..19b1c3fa45167f5ffa127af8d9b310fc56afed0c 100644 (file)
@@ -4,7 +4,7 @@
 
 bindir=@SQL_BINDIR@
 
-if $bindir/mysql <<END-OF-DATA
+if $bindir/mysql *$ <<END-OF-DATA
 USE bacula;
 DROP TABLE IF EXISTS Filename;
 DROP TABLE IF EXISTS Path;
index d66c884a339eb3db1730ad3286d85830c98a6603..b51561bde7b53e4178f7f1ee653fe40c955777e3 100644 (file)
@@ -5,7 +5,7 @@
 
 bindir=@SQL_BINDIR@
 
-if $bindir/mysql -u root -f <<END-OF-DATA
+if $bindir/mysql $* -u root -f <<END-OF-DATA
 use mysql
 grant all privileges on *.* to kern@localhost with grant option;
 grant all privileges on *.* to kern@"%" with grant option;
index daa339907a5ab05dd7319d763c4825d024ab0540..ae962c483e0d3498ed3c36152397585f1be37ad1 100644 (file)
@@ -4,7 +4,7 @@
 #
 bindir=@SQL_BINDIR@
 
-if $bindir/mysql -f <<END-OF-DATA
+if $bindir/mysql $* -f <<END-OF-DATA
 USE bacula;
 CREATE TABLE Filename (
   FilenameId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
index 5caa6114280961e2e77b93f28734b94bb8bc70ef..4859d35540aa10809d6849aed25ab9294c764320 100644 (file)
@@ -5,7 +5,7 @@
 bindir=@SQL_BINDIR@
 cd @working_dir@
 
-$bindir/sqlite bacula.db <<END-OF-DATA
+$bindir/sqlite $* bacula.db <<END-OF-DATA
 CREATE TABLE Filename (
   FilenameId INTEGER UNSIGNED AUTOINCREMENT,
   Name TEXT DEFAULT "",
index 731107513bf037cd2d7c014ae55151769b9a46d4..3ad7a84eb6a28437b18e2422ebeef5e7a518e306 100644 (file)
@@ -340,12 +340,16 @@ list_dashes(B_DB *mdb, DB_LIST_HANDLER *send, void *ctx)
    send(ctx, "\n");
 }
 
+/*
+ * If full_list is set, we list vertically, otherwise, we 
+ * list on one line horizontally.      
+ */
 void
-list_result(B_DB *mdb, DB_LIST_HANDLER *send, void *ctx)
+list_result(B_DB *mdb, DB_LIST_HANDLER *send, void *ctx, int full_list)
 {
    SQL_FIELD *field;
-   SQL_ROW    row;
-   unsigned int i, col_len;
+   SQL_ROW row;
+   unsigned int i, col_len, max_len = 0;
    char buf[2000], ewc[30];
 
    if (mdb->result == NULL) {
@@ -356,15 +360,27 @@ list_result(B_DB *mdb, DB_LIST_HANDLER *send, void *ctx)
    sql_field_seek(mdb, 0);
    for (i = 0; i < sql_num_fields(mdb); i++) {
       field = sql_fetch_field(mdb);
-      if (IS_NUM(field->type) && field->max_length > 0) { /* fixup for commas */
-        field->max_length += (field->max_length - 1) / 3;
-      }
       col_len = strlen(field->name);
-      if (col_len < field->max_length)
-             col_len = field->max_length;
-      if (col_len < 4 && !IS_NOT_NULL(field->flags))
-              col_len = 4;    /* 4 = length of the word "NULL" */
-      field->max_length = col_len;    /* reset column info */
+      if (full_list) {
+        if (col_len > max_len) {
+           max_len = col_len;
+        }
+      } else {
+        if (IS_NUM(field->type) && field->max_length > 0) { /* fixup for commas */
+           field->max_length += (field->max_length - 1) / 3;
+        }
+        if (col_len < field->max_length) {
+           col_len = field->max_length;
+        }
+        if (col_len < 4 && !IS_NOT_NULL(field->flags)) {
+            col_len = 4;                 /* 4 = length of the word "NULL" */
+        }
+        field->max_length = col_len;    /* reset column info */
+      }
+   }
+
+   if (full_list) {
+      goto horizontal_list;
    }
 
    list_dashes(mdb, send, ctx);
@@ -372,7 +388,7 @@ list_result(B_DB *mdb, DB_LIST_HANDLER *send, void *ctx)
    sql_field_seek(mdb, 0);
    for (i = 0; i < sql_num_fields(mdb); i++) {
       field = sql_fetch_field(mdb);
-      sprintf(buf, " %-*s |", (int)field->max_length, field->name);
+      bsnprintf(buf, sizeof(buf), " %-*s |", (int)field->max_length, field->name);
       send(ctx, buf);
    }
    send(ctx, "\n");
@@ -384,18 +400,39 @@ list_result(B_DB *mdb, DB_LIST_HANDLER *send, void *ctx)
       for (i = 0; i < sql_num_fields(mdb); i++) {
         field = sql_fetch_field(mdb);
         if (row[i] == NULL) {
-            sprintf(buf, " %-*s |", (int)field->max_length, "NULL");
+            bsnprintf(buf, sizeof(buf), " %-*s |", (int)field->max_length, "NULL");
         } else if (IS_NUM(field->type)) {
-            sprintf(buf, " %*s |", (int)field->max_length,       
+            bsnprintf(buf, sizeof(buf), " %*s |", (int)field->max_length,       
               add_commas(row[i], ewc));
         } else {
-            sprintf(buf, " %-*s |", (int)field->max_length, row[i]);
+            bsnprintf(buf, sizeof(buf), " %-*s |", (int)field->max_length, row[i]);
         }
         send(ctx, buf);
       }
       send(ctx, "\n");
    }
    list_dashes(mdb, send, ctx);
+   return;
+
+horizontal_list:
+   
+   while ((row = sql_fetch_row(mdb)) != NULL) {
+      sql_field_seek(mdb, 0);
+      for (i = 0; i < sql_num_fields(mdb); i++) {
+        field = sql_fetch_field(mdb);
+        if (row[i] == NULL) {
+            bsnprintf(buf, sizeof(buf), " %*s: %s\n", max_len, field->name, "NULL");
+        } else if (IS_NUM(field->type)) {
+            bsnprintf(buf, sizeof(buf), " %*s: %s\n", max_len, field->name, 
+              add_commas(row[i], ewc));
+        } else {
+            bsnprintf(buf, sizeof(buf), " %*s: %s\n", max_len, field->name, row[i]);
+        }
+        send(ctx, buf);
+      }
+      send(ctx, "\n");
+   }
+   return;
 }
 
 
index e1252dadf2b973160ee7899da6db76b1b4f37a24..094e3b28b47a6177fa3362c9026a739138d450a7 100644 (file)
@@ -4,4 +4,4 @@
 #
 bindir=@SQL_BINDIR@
 
-$bindir/mysql bacula
+$bindir/mysql $* bacula
index d0cc24cb15559ba4b32d4d84358bd6a8cfeade6e..71fe9fccdd51ebee352df0de16289b5e7475367d 100644 (file)
@@ -51,7 +51,7 @@ int db_create_job_record(void *jcr, B_DB *db, JOB_DBR *jr);
 int db_create_media_record(void *jcr, B_DB *db, MEDIA_DBR *media_dbr);
 int db_create_client_record(void *jcr, B_DB *db, CLIENT_DBR *cr);
 int db_create_fileset_record(void *jcr, B_DB *db, FILESET_DBR *fsr);
-int db_create_pool_record(void *jcr, B_DB *db, POOL_DBR *pool_dbr);
+int db_create_pool_record(void *jcr, B_DB *db, POOL_DBR *pool_dbr);          
 int db_create_jobmedia_record(void *jcr, B_DB *mdb, JOBMEDIA_DBR *jr);
 
 /* delete.c */
@@ -81,14 +81,14 @@ int db_get_client_record(void *jcr, B_DB *mdb, CLIENT_DBR *cdbr);
 
 
 /* list.c */
-void db_list_pool_records(void *jcr, B_DB *db, DB_LIST_HANDLER sendit, void *ctx);
-void db_list_job_records(void *jcr, B_DB *db, JOB_DBR *jr, DB_LIST_HANDLER sendit, void *ctx);
+void db_list_pool_records(void *jcr, B_DB *db, DB_LIST_HANDLER sendit, void *ctx, int full);
+void db_list_job_records(void *jcr, B_DB *db, JOB_DBR *jr, DB_LIST_HANDLER sendit, void *ctx, int full);
 void db_list_job_totals(void *jcr, B_DB *db, JOB_DBR *jr, DB_LIST_HANDLER sendit, void *ctx);
 void db_list_files_for_job(void *jcr, B_DB *db, uint32_t jobid, DB_LIST_HANDLER sendit, void *ctx);
-void db_list_media_records(void *jcr, B_DB *mdb, MEDIA_DBR *mdbr, DB_LIST_HANDLER *sendit, void *ctx);
-void db_list_jobmedia_records(void *jcr, B_DB *mdb, uint32_t JobId, DB_LIST_HANDLER *sendit, void *ctx);
-int  db_list_sql_query(void *jcr, B_DB *mdb, char *query, DB_LIST_HANDLER *sendit, void *ctx, int verbose);
-void db_list_client_records(void *jcr, B_DB *mdb, DB_LIST_HANDLER *sendit, void *ctx);
+void db_list_media_records(void *jcr, B_DB *mdb, MEDIA_DBR *mdbr, DB_LIST_HANDLER *sendit, void *ctx, int full);
+void db_list_jobmedia_records(void *jcr, B_DB *mdb, uint32_t JobId, DB_LIST_HANDLER *sendit, void *ctx, int full);
+int  db_list_sql_query(void *jcr, B_DB *mdb, char *query, DB_LIST_HANDLER *sendit, void *ctx, int verbose, int full);
+void db_list_client_records(void *jcr, B_DB *mdb, DB_LIST_HANDLER *sendit, void *ctx, int full);
 
 /* update.c */
 int  db_update_job_start_record(void *jcr, B_DB *db, JOB_DBR *jr);
index 58676a0e5b2063f8710f1c42820d311f0474e411..e53b91760c93c8f55127cb46f5bce36c4e4126ac 100644 (file)
@@ -44,7 +44,7 @@
  */
 
 /* Imported subroutines */
-extern void list_result(B_DB *mdb, DB_LIST_HANDLER *sendit, void *ctx);
+extern void list_result(B_DB *mdb, DB_LIST_HANDLER *sendit, void *ctx, int full_list);
 extern int QueryDB(char *file, int line, void *jcr, B_DB *db, char *select_cmd);
 
 
@@ -52,7 +52,7 @@ extern int QueryDB(char *file, int line, void *jcr, B_DB *db, char *select_cmd);
  * Submit general SQL query
  */
 int db_list_sql_query(void *jcr, B_DB *mdb, char *query, DB_LIST_HANDLER *sendit, 
-                     void *ctx, int verbose)
+                     void *ctx, int verbose, int full)
 {
    db_lock(mdb);
    if (sql_query(mdb, query) != 0) {
@@ -67,7 +67,7 @@ int db_list_sql_query(void *jcr, B_DB *mdb, char *query, DB_LIST_HANDLER *sendit
    mdb->result = sql_store_result(mdb);
 
    if (mdb->result) {
-      list_result(mdb, sendit, ctx);
+      list_result(mdb, sendit, ctx, full);
       sql_free_result(mdb);
    }
    db_unlock(mdb);
@@ -75,10 +75,17 @@ int db_list_sql_query(void *jcr, B_DB *mdb, char *query, DB_LIST_HANDLER *sendit
 }
 
 void
-db_list_pool_records(void *jcr, B_DB *mdb, DB_LIST_HANDLER *sendit, void *ctx) 
+db_list_pool_records(void *jcr, B_DB *mdb, DB_LIST_HANDLER *sendit, void *ctx, int full
 {
-   Mmsg(&mdb->cmd, "SELECT PoolId,Name,NumVols,MaxVols,PoolType,LabelFormat "
-"FROM Pool ORDER BY PoolId");
+   if (full) {
+      Mmsg(&mdb->cmd, "SELECT PoolId,Name,NumVols,MaxVols,UseOnce,UseCatalog,"
+         "AcceptAnyVolume,VolRetention,VolUseDuration,MaxVolJobs,MaxVolBytes,"
+         "AutoPrune,Recycle,PoolType,LabelFormat "
+          "FROM Pool ORDER BY PoolId");
+   } else {
+      Mmsg(&mdb->cmd, "SELECT PoolId,Name,NumVols,MaxVols,PoolType,LabelFormat "
+        "FROM Pool ORDER BY PoolId");
+   }
 
    db_lock(mdb);
    if (!QUERY_DB(jcr, mdb, mdb->cmd)) {
@@ -86,17 +93,23 @@ db_list_pool_records(void *jcr, B_DB *mdb, DB_LIST_HANDLER *sendit, void *ctx)
       return;
    }
 
-   list_result(mdb, sendit, ctx);
+   list_result(mdb, sendit, ctx, full);
    
    sql_free_result(mdb);
    db_unlock(mdb);
 }
 
 void
-db_list_client_records(void *jcr, B_DB *mdb, DB_LIST_HANDLER *sendit, void *ctx
+db_list_client_records(void *jcr, B_DB *mdb, DB_LIST_HANDLER *sendit, void *ctx, int full)
 {
-   Mmsg(&mdb->cmd, "SELECT ClientId,Name,FileRetention,JobRetention "
-"FROM Client ORDER BY ClientId");
+   if (full) {
+      Mmsg(&mdb->cmd, "SELECT ClientId,Name,Uname,AutoPrune,FileRetention,"
+         "FileRetention,JobRetention "
+         "FROM Client ORDER BY ClientId");
+   } else {
+      Mmsg(&mdb->cmd, "SELECT ClientId,Name,FileRetention,JobRetention "
+         "FROM Client ORDER BY ClientId");
+   }
 
    db_lock(mdb);
    if (!QUERY_DB(jcr, mdb, mdb->cmd)) {
@@ -104,7 +117,7 @@ db_list_client_records(void *jcr, B_DB *mdb, DB_LIST_HANDLER *sendit, void *ctx)
       return;
    }
 
-   list_result(mdb, sendit, ctx);
+   list_result(mdb, sendit, ctx, full);
    
    sql_free_result(mdb);
    db_unlock(mdb);
@@ -112,11 +125,21 @@ db_list_client_records(void *jcr, B_DB *mdb, DB_LIST_HANDLER *sendit, void *ctx)
 
 
 void
-db_list_media_records(void *jcr, B_DB *mdb, MEDIA_DBR *mdbr, DB_LIST_HANDLER *sendit, void *ctx)
+db_list_media_records(void *jcr, B_DB *mdb, MEDIA_DBR *mdbr, 
+                     DB_LIST_HANDLER *sendit, void *ctx, int full)
 {
-   Mmsg(&mdb->cmd, "SELECT MediaId,VolumeName,MediaType,VolStatus,\
-VolBytes,LastWritten,VolRetention,Recycle,Slot \
-FROM Media WHERE Media.PoolId=%u ORDER BY MediaId", mdbr->PoolId);
+   if (full) {
+      Mmsg(&mdb->cmd, "SELECT MediaId,VolumeName,Slot,PoolId,"
+         "MediaType,FirstWritten,LastWritten,LabelDate,VolJobs,"
+         "VolFiles,VolBlocks,VolMounts,VolBytes,VolErrors,VolWrites,"
+         "VolCapacityBytes,VolStatus,Recycle,VolRetention,"
+         "VolUseDuration,MaxVolJobs,MaxVolFiles,MaxVolBytes "
+         "FROM Media WHERE Media.PoolId=%u ORDER BY MediaId", mdbr->PoolId);
+   } else {
+      Mmsg(&mdb->cmd, "SELECT MediaId,VolumeName,MediaType,VolStatus,"
+         "VolBytes,LastWritten,VolRetention,Recycle,Slot "
+         "FROM Media WHERE Media.PoolId=%u ORDER BY MediaId", mdbr->PoolId);
+   }
 
    db_lock(mdb);
    if (!QUERY_DB(jcr, mdb, mdb->cmd)) {
@@ -124,30 +147,44 @@ FROM Media WHERE Media.PoolId=%u ORDER BY MediaId", mdbr->PoolId);
       return;
    }
 
-   list_result(mdb, sendit, ctx);
+   list_result(mdb, sendit, ctx, full);
    
    sql_free_result(mdb);
    db_unlock(mdb);
 }
 
-void db_list_jobmedia_records(void *jcr, B_DB *mdb, uint32_t JobId, DB_LIST_HANDLER *sendit, void *ctx)
+void db_list_jobmedia_records(void *jcr, B_DB *mdb, uint32_t JobId, 
+                             DB_LIST_HANDLER *sendit, void *ctx, int full)
 {
-   if (JobId > 0) {                  /* do by JobId */
-      Mmsg(&mdb->cmd, "SELECT JobId, Media.VolumeName, FirstIndex, LastIndex \
-FROM JobMedia, Media WHERE Media.MediaId=JobMedia.MediaId and JobMedia.JobId=%u", 
-          JobId);
+   if (full) {
+      if (JobId > 0) {                  /* do by JobId */
+         Mmsg(&mdb->cmd, "SELECT JobMediaId,JobId,MediaId,Media.VolumeName,"
+            "FirstIndex,LastIndex,StartFile,EndFile,StartBlock,EndBlock "
+            "FROM JobMedia,Media WHERE Media.MediaId=JobMedia.MediaId "
+            "AND JobMedia.JobId=%u", JobId);
+      } else {
+         Mmsg(&mdb->cmd, "SELECT JobMediaId,JobId,MediaId,Media.VolumeName,"
+            "FirstIndex,LastIndex,StartFile,EndFile,StartBlock,EndBlock "
+            "FROM JobMedia,Media WHERE Media.MediaId=JobMedia.MediaId");
+      }
+
    } else {
-      Mmsg(&mdb->cmd, "SELECT JobId, Media.VolumeName, FirstIndex, LastIndex \
-FROM JobMedia, Media WHERE Media.MediaId=JobMedia.MediaId");
+      if (JobId > 0) {                  /* do by JobId */
+         Mmsg(&mdb->cmd, "SELECT JobId,Media.VolumeName,FirstIndex,LastIndex"
+            "FROM JobMedia,Media WHERE Media.MediaId=JobMedia.MediaId "
+            "AND JobMedia.JobId=%u", JobId);
+      } else {
+         Mmsg(&mdb->cmd, "SELECT JobId,Media.VolumeName,FirstIndex,LastIndex "
+            "FROM JobMedia,Media WHERE Media.MediaId=JobMedia.MediaId");
+      }
    }
-
    db_lock(mdb);
    if (!QUERY_DB(jcr, mdb, mdb->cmd)) {
       db_unlock(mdb);
       return;
    }
 
-   list_result(mdb, sendit, ctx);
+   list_result(mdb, sendit, ctx, full);
    
    sql_free_result(mdb);
    db_unlock(mdb);
@@ -162,24 +199,48 @@ FROM JobMedia, Media WHERE Media.MediaId=JobMedia.MediaId");
  *  only the job with the specified id.
  */
 void
-db_list_job_records(void *jcr, B_DB *mdb, JOB_DBR *jr, DB_LIST_HANDLER *sendit, void *ctx)
+db_list_job_records(void *jcr, B_DB *mdb, JOB_DBR *jr, DB_LIST_HANDLER *sendit, 
+                   void *ctx, int full)
 {
-   if (jr->JobId == 0 && jr->Job[0] == 0) {
-      Mmsg(&mdb->cmd, 
-"SELECT JobId,Name,StartTime,Type,Level,JobFiles,JobBytes,JobStatus "
-"FROM Job ORDER BY JobId");
-   } else {                          /* single record */
-      Mmsg(&mdb->cmd, "SELECT JobId,Name,StartTime,Type,Level,\
-JobFiles,JobBytes,JobStatus FROM Job WHERE Job.JobId=%u", jr->JobId);
+   if (full) {
+      if (jr->JobId == 0 && jr->Job[0] == 0) {
+        Mmsg(&mdb->cmd, 
+            "SELECT JobId,Job,Job.Name,PurgedFiles,Type,Level,"
+            "Job.ClientId,Client.Name,JobStatus,SchedTime,"
+            "StartTime,EndTime,JobTDate,"
+            "VolSessionId,VolSessionTime,JobFiles,JobErrors,"
+            "JobMissingFiles,Job.PoolId,Pool.Name,Job.FileSetId,FileSet.FileSet "
+            "FROM Job,Client,Pool,FileSet WHERE "
+            "Client.ClientId=Job.ClientId AND Pool.PoolId=Job.PoolId "
+            "AND FileSet.FileSetId=Job.FileSetId  ORDER BY JobId");
+      } else {                          /* single record */
+        Mmsg(&mdb->cmd, 
+            "SELECT JobId,Job,Job.Name,PurgedFiles,Type,Level,"
+            "Job.ClientId,Client.Name,JobStatus,SchedTime,"
+            "StartTime,EndTime,JobTDate,"
+            "VolSessionId,VolSessionTime,JobFiles,JobErrors,"
+            "JobMissingFiles,Job.PoolId,Pool.Name,Job.FileSetId,FileSet.FileSet "
+            "FROM Job,Client,Pool,FileSet WHERE Job.JobId=%u AND "
+            "Client.ClientId=Job.ClientId AND Pool.PoolId=Job.PoolId "
+            "AND FileSet.FileSetId=Job.FileSetId", jr->JobId);
+      }
+   } else {
+      if (jr->JobId == 0 && jr->Job[0] == 0) {
+        Mmsg(&mdb->cmd, 
+           "SELECT JobId,Name,StartTime,Type,Level,JobFiles,JobBytes,JobStatus "
+           "FROM Job ORDER BY JobId");
+      } else {                          /* single record */
+         Mmsg(&mdb->cmd, "SELECT JobId,Name,StartTime,Type,Level,"
+            "JobFiles,JobBytes,JobStatus FROM Job WHERE JobId=%u", jr->JobId);
+      }
    }
-
    db_lock(mdb);
    if (!QUERY_DB(jcr, mdb, mdb->cmd)) {
       db_unlock(mdb);
       return;
    }
 
-   list_result(mdb, sendit, ctx);
+   list_result(mdb, sendit, ctx, full);
    
    sql_free_result(mdb);
    db_unlock(mdb);
@@ -203,7 +264,7 @@ AS Files, sum(JobBytes) AS Bytes, Name AS Job FROM Job GROUP BY Name");
       return;
    }
 
-   list_result(mdb, sendit, ctx);
+   list_result(mdb, sendit, ctx, 0);
    
    sql_free_result(mdb);
 
@@ -216,7 +277,7 @@ AS Files,sum(JobBytes) As Bytes FROM Job");
       return;
    }
 
-   list_result(mdb, sendit, ctx);
+   list_result(mdb, sendit, ctx, 0);
    
    sql_free_result(mdb);
    db_unlock(mdb);
@@ -238,7 +299,7 @@ AND Path.PathId=File.PathId",
       return;
    }
 
-   list_result(mdb, sendit, ctx);
+   list_result(mdb, sendit, ctx, 0);
    
    sql_free_result(mdb);
    db_unlock(mdb);
index 9049e7bf60412a62daaab8244dd94ac2134c4ecb..acf91cde323c98d503c79bdb475193eded1195be 100644 (file)
@@ -401,12 +401,16 @@ list_dashes(B_DB *mdb, DB_LIST_HANDLER *send, void *ctx)
    send(ctx, "\n");
 }
 
+/*
+ * If full_list is set, we list vertically, otherwise, we 
+ * list on one line horizontally.      
+ */
 void
-list_result(B_DB *mdb, DB_LIST_HANDLER *send, void *ctx)
+list_result(B_DB *mdb, DB_LIST_HANDLER *send, void *ctx, int full_list)
 {
    SQL_FIELD *field;
    SQL_ROW row;
-   unsigned int i, col_len;
+   unsigned int i, col_len, max_len = 0;
    char buf[2000], ewc[30];
 
    if (mdb->result == NULL || mdb->nrow == 0) {
@@ -417,15 +421,27 @@ list_result(B_DB *mdb, DB_LIST_HANDLER *send, void *ctx)
    sql_field_seek(mdb, 0);
    for (i = 0; i < sql_num_fields(mdb); i++) {
       field = sql_fetch_field(mdb);
-      if (IS_NUM(field->type) && field->max_length > 0) { /* fixup for commas */
-        field->max_length += (field->max_length - 1) / 3;
-      }
       col_len = strlen(field->name);
-      if (col_len < field->max_length)
-             col_len = field->max_length;
-      if (col_len < 4 && !IS_NOT_NULL(field->flags))
-              col_len = 4;    /* 4 = length of the word "NULL" */
-      field->max_length = col_len;    /* reset column info */
+      if (full_list) {
+        if (col_len > max_len) {
+           max_len = col_len;
+        }
+      } else {
+        if (IS_NUM(field->type) && field->max_length > 0) { /* fixup for commas */
+           field->max_length += (field->max_length - 1) / 3;
+        }
+        if (col_len < field->max_length) {
+           col_len = field->max_length;
+        }
+        if (col_len < 4 && !IS_NOT_NULL(field->flags)) {
+            col_len = 4;                 /* 4 = length of the word "NULL" */
+        }
+        field->max_length = col_len;    /* reset column info */
+      }
+   }
+
+   if (full_list) {
+      goto horizontal_list;
    }
 
    list_dashes(mdb, send, ctx);
@@ -433,7 +449,7 @@ list_result(B_DB *mdb, DB_LIST_HANDLER *send, void *ctx)
    sql_field_seek(mdb, 0);
    for (i = 0; i < sql_num_fields(mdb); i++) {
       field = sql_fetch_field(mdb);
-      sprintf(buf, " %-*s |", field->max_length, field->name);
+      bsnprintf(buf, sizeof(buf), " %-*s |", (int)field->max_length, field->name);
       send(ctx, buf);
    }
    send(ctx, "\n");
@@ -445,18 +461,39 @@ list_result(B_DB *mdb, DB_LIST_HANDLER *send, void *ctx)
       for (i = 0; i < sql_num_fields(mdb); i++) {
         field = sql_fetch_field(mdb);
         if (row[i] == NULL) {
-            sprintf(buf, " %-*s |", field->max_length, "NULL");
+            bsnprintf(buf, sizeof(buf), " %-*s |", (int)field->max_length, "NULL");
         } else if (IS_NUM(field->type)) {
-            sprintf(buf, " %*s |", field->max_length,       
+            bsnprintf(buf, sizeof(buf), " %*s |", (int)field->max_length,       
               add_commas(row[i], ewc));
         } else {
-            sprintf(buf, " %-*s |", field->max_length, row[i]);
+            bsnprintf(buf, sizeof(buf), " %-*s |", (int)field->max_length, row[i]);
         }
         send(ctx, buf);
       }
       send(ctx, "\n");
    }
    list_dashes(mdb, send, ctx);
+   return;
+
+horizontal_list:
+   
+   while ((row = sql_fetch_row(mdb)) != NULL) {
+      sql_field_seek(mdb, 0);
+      for (i = 0; i < sql_num_fields(mdb); i++) {
+        field = sql_fetch_field(mdb);
+        if (row[i] == NULL) {
+            bsnprintf(buf, sizeof(buf), " %*s: %s\n", max_len, field->name, "NULL");
+        } else if (IS_NUM(field->type)) {
+            bsnprintf(buf, sizeof(buf), " %*s: %s\n", max_len, field->name, 
+              add_commas(row[i], ewc));
+        } else {
+            bsnprintf(buf, sizeof(buf), " %*s: %s\n", max_len, field->name, row[i]);
+        }
+        send(ctx, buf);
+      }
+      send(ctx, "\n");
+   }
+   return;
 }
 
 
index b854ecd51175fe217e58db831eacb90c15e9d6c3..577c1298c0470233cff7f4d91a2cec293a56f969 100644 (file)
@@ -148,7 +148,7 @@ int do_backup(JCR *jcr)
    strcpy(pr.Name, jcr->pool->hdr.name);
    while (!db_get_pool_record(jcr, jcr->db, &pr)) { /* get by Name */
       /* Try to create the pool */
-      if (create_pool(jcr, jcr->db, jcr->pool, 0) < 0) {
+      if (create_pool(jcr, jcr->db, jcr->pool, 1) < 0) {
          Jmsg(jcr, M_FATAL, 0, _("Pool %s not in database. %s"), pr.Name, 
            db_strerror(jcr->db));
         goto bail_out;
index a8ced2eae95cb0c9f9da9b59449fc24d08f44785..1495df2164037614c2898ec17834068c007d3e66 100644 (file)
@@ -379,7 +379,7 @@ Without that I don't know who I am :-(\n"), configfile);
             *  record if it is not already created. 
             */
            if (job->pool) {
-              create_pool(NULL, db, job->pool, 1);
+              create_pool(NULL, db, job->pool, 0);  /* update request */
            }
            db_close_database(NULL, db);
         }
index d4178c1cf855ade3879aab26c2320a4e896815ab..c9a11cbc67d743e8fe537f3b5aff87608b11b2e8 100644 (file)
@@ -48,13 +48,13 @@ extern char *level_to_str(int level);
 
 /* fd_cmds.c */
 extern int connect_to_file_daemon(JCR *jcr, int retry_interval,
-                                  int max_retry_time, int verbose);
+                                 int max_retry_time, int verbose);
 extern int send_include_list(JCR *jcr);
 extern int send_exclude_list(JCR *jcr);
 extern int get_attributes_and_put_in_catalog(JCR *jcr);
 extern int get_attributes_and_compare_to_catalog(JCR *jcr, JobId_t JobId);
 extern int put_file_into_catalog(JCR *jcr, long file_index, char *fname, 
-                          char *link, char *attr, int stream);
+                         char *link, char *attr, int stream);
 
 /* job.c */
 extern void set_jcr_defaults(JCR *jcr, JOB *job);
@@ -67,7 +67,7 @@ extern void mount_request(JCR *jcr, BSOCK *bs, char *buf);
 
 /* msgchan.c */
 extern int connect_to_storage_daemon(JCR *jcr, int retry_interval,    
-                              int max_retry_time, int verbose);
+                             int max_retry_time, int verbose);
 extern int start_storage_daemon_job(JCR *jcr);
 extern int start_storage_daemon_message_thread(JCR *jcr);
 extern int32_t bget_msg(BSOCK *bs, int type);
@@ -83,7 +83,7 @@ int do_a_dot_command(UAContext *ua, char *cmd);
 int qmessagescmd(UAContext *ua, char *cmd);
 int open_db(UAContext *ua);
 void close_db(UAContext *ua);
-int create_pool(JCR *jcr, B_DB *db, POOL *pool, int update);
+int create_pool(JCR *jcr, B_DB *db, POOL *pool, int create);
 void set_pool_dbr_defaults_in_media_dbr(MEDIA_DBR *mr, POOL_DBR *pr);
 
 /* ua_input.c */
@@ -98,27 +98,27 @@ void prtit(void *ctx, char *msg);
 void bsendmsg(void *sock, char *fmt, ...);
 
 /* ua_select.c */
-STORE   *select_storage_resource(UAContext *ua);
-JOB     *select_job_resource(UAContext *ua);
-JOB     *select_restore_job_resource(UAContext *ua);
-CLIENT  *select_client_resource(UAContext *ua);
+STORE  *select_storage_resource(UAContext *ua);
+JOB    *select_job_resource(UAContext *ua);
+JOB    *select_restore_job_resource(UAContext *ua);
+CLIENT *select_client_resource(UAContext *ua);
 FILESET *select_fileset_resource(UAContext *ua);
-int     select_pool_and_media_dbr(UAContext *ua, POOL_DBR *pr, MEDIA_DBR *mr);
-int     select_pool_dbr(UAContext *ua, POOL_DBR *pr);
-int     select_client_dbr(UAContext *ua, CLIENT_DBR *cr);
-
-void    start_prompt(UAContext *ua, char *msg);
-void    add_prompt(UAContext *ua, char *prompt);
-int     do_prompt(UAContext *ua, char *msg, char *prompt, int max_prompt);
-CAT    *get_catalog_resource(UAContext *ua);           
+int    select_pool_and_media_dbr(UAContext *ua, POOL_DBR *pr, MEDIA_DBR *mr);
+int    select_pool_dbr(UAContext *ua, POOL_DBR *pr);
+int    select_client_dbr(UAContext *ua, CLIENT_DBR *cr);
+
+void   start_prompt(UAContext *ua, char *msg);
+void   add_prompt(UAContext *ua, char *prompt);
+int    do_prompt(UAContext *ua, char *msg, char *prompt, int max_prompt);
+CAT    *get_catalog_resource(UAContext *ua);          
 STORE  *get_storage_resource(UAContext *ua, char *cmd);
-int     get_media_type(UAContext *ua, char *MediaType, int max_media);
-int     get_pool_dbr(UAContext *ua, POOL_DBR *pr);
-int     get_client_dbr(UAContext *ua, CLIENT_DBR *cr);
+int    get_media_type(UAContext *ua, char *MediaType, int max_media);
+int    get_pool_dbr(UAContext *ua, POOL_DBR *pr);
+int    get_client_dbr(UAContext *ua, CLIENT_DBR *cr);
 POOL   *get_pool_resource(UAContext *ua);
 POOL   *select_pool_resource(UAContext *ua);
 CLIENT *get_client_resource(UAContext *ua);
-int     get_job_dbr(UAContext *ua, JOB_DBR *jr);
+int    get_job_dbr(UAContext *ua, JOB_DBR *jr);
 
 int find_arg_keyword(UAContext *ua, char **list);
 int do_keyword_prompt(UAContext *ua, char *msg, char **list);
index fd15a4ff05d0d7bd0513eba7b3e71cd14489e46a..310b3a3d5de8e7c904770a86f2e7e8ef7a1f8ca0 100644 (file)
@@ -161,7 +161,6 @@ void set_pool_dbr_defaults_in_media_dbr(MEDIA_DBR *mr, POOL_DBR *pr)
 
 /*
  *  Add Volumes to an existing Pool
- *
  */
 static int addcmd(UAContext *ua, char *cmd) 
 {
@@ -516,7 +515,7 @@ void set_pooldbr_from_poolres(POOL_DBR *pr, POOL *pool, int create)
  *          1  record created
  */
 
-int create_pool(JCR *jcr, B_DB *db, POOL *pool, int update)
+int create_pool(JCR *jcr, B_DB *db, POOL *pool, int create)
 {
    POOL_DBR  pr;
 
@@ -526,8 +525,8 @@ int create_pool(JCR *jcr, B_DB *db, POOL *pool, int update)
 
    if (db_get_pool_record(jcr, db, &pr)) {
       /* Pool Exists */
-      if (update) {
-        set_pooldbr_from_poolres(&pr, pool, 1);
+      if (!create) {  /* update request */
+        set_pooldbr_from_poolres(&pr, pool, 0);
         db_update_pool_record(jcr, db, &pr);
       }
       return 0;                      /* exists */
@@ -560,7 +559,7 @@ static int createcmd(UAContext *ua, char *cmd)
       return 1;
    }
 
-   switch (create_pool(ua->jcr, ua->db, pool, 0)) {
+   switch (create_pool(ua->jcr, ua->db, pool, 1)) {
    case 0:
       bsendmsg(ua, _("Error: Pool %s already exists.\n\
 Use update to change it.\n"), pool->hdr.name);
@@ -928,7 +927,7 @@ static int update_pool(UAContext *ua)
    }
    query = get_pool_memory(PM_MESSAGE);
    Mmsg(&query, list_pool, pr.PoolId);
-   db_list_sql_query(ua->jcr, ua->db, query, prtit, ua, 1);
+   db_list_sql_query(ua->jcr, ua->db, query, prtit, ua, 1, 0);
    free_pool_memory(query);
    bsendmsg(ua, _("Pool DB record updated from resource.\n"));
    return 1;
index 5d15c3f58b8047923fde6dd5ffc7419a69408dc1..658bc84df1666281c043df70a6b57a217be461c7 100644 (file)
@@ -229,7 +229,7 @@ static int do_listcmd(UAContext *ua, char *cmd, int llist)
    for (i=1; i<ua->argc; i++) {
       /* List JOBS */
       if (strcasecmp(ua->argk[i], _("jobs")) == 0) {
-        db_list_job_records(ua->jcr, ua->db, &jr, prtit, ua);
+        db_list_job_records(ua->jcr, ua->db, &jr, prtit, ua, llist);
 
         /* List JOBTOTALS */
       } else if (strcasecmp(ua->argk[i], _("jobtotals")) == 0) {
@@ -241,7 +241,7 @@ static int do_listcmd(UAContext *ua, char *cmd, int llist)
            jobid = atoi(ua->argv[i]);
            if (jobid > 0) {
               jr.JobId = jobid;
-              db_list_job_records(ua->jcr, ua->db, &jr, prtit, ua);
+              db_list_job_records(ua->jcr, ua->db, &jr, prtit, ua, llist);
            }
         }
 
@@ -249,7 +249,7 @@ static int do_listcmd(UAContext *ua, char *cmd, int llist)
       } else if (strcasecmp(ua->argk[i], _("job")) == 0 && ua->argv[i]) {
         bstrncpy(jr.Job, ua->argv[i], MAX_NAME_LENGTH);
         jr.JobId = 0;
-        db_list_job_records(ua->jcr, ua->db, &jr, prtit, ua);
+        db_list_job_records(ua->jcr, ua->db, &jr, prtit, ua, llist);
 
       /* List FILES */
       } else if (strcasecmp(ua->argk[i], _("files")) == 0) {
@@ -284,20 +284,20 @@ static int do_listcmd(UAContext *ua, char *cmd, int llist)
            } else {
               continue;
            }
-           db_list_jobmedia_records(ua->jcr, ua->db, jobid, prtit, ua);
+           db_list_jobmedia_records(ua->jcr, ua->db, jobid, prtit, ua, llist);
            done = TRUE;
         }
         if (!done) {
            /* List for all jobs (jobid=0) */
-           db_list_jobmedia_records(ua->jcr, ua->db, 0, prtit, ua);
+           db_list_jobmedia_records(ua->jcr, ua->db, 0, prtit, ua, llist);
         }
 
       /* List POOLS */
       } else if (strcasecmp(ua->argk[i], _("pools")) == 0) {
-        db_list_pool_records(ua->jcr, ua->db, prtit, ua);
+        db_list_pool_records(ua->jcr, ua->db, prtit, ua, llist);
 
       } else if (strcasecmp(ua->argk[i], _("clients")) == 0) {
-        db_list_client_records(ua->jcr, ua->db, prtit, ua);
+        db_list_client_records(ua->jcr, ua->db, prtit, ua, llist);
 
 
       /* List MEDIA or VOLUMES */
@@ -332,7 +332,7 @@ static int do_listcmd(UAContext *ua, char *cmd, int llist)
                     return 1;
                  }
                  mr.PoolId = pr.PoolId;
-                 db_list_media_records(ua->jcr, ua->db, &mr, prtit, ua);
+                 db_list_media_records(ua->jcr, ua->db, &mr, prtit, ua, llist);
                  return 1;
               }
            }
@@ -351,7 +351,7 @@ static int do_listcmd(UAContext *ua, char *cmd, int llist)
                   bsendmsg(ua, _("Pool: %s\n"), pr.Name);
               }
               mr.PoolId = ids[i];
-              db_list_media_records(ua->jcr, ua->db, &mr, prtit, ua);
+              db_list_media_records(ua->jcr, ua->db, &mr, prtit, ua, llist);
            }
            free(ids);
            return 1;
index fa03450b1f52aaf13288d7096ed546599ad844a7..77e91858f710ee7f35783765090221dda1a5880a 100644 (file)
@@ -317,7 +317,7 @@ static int user_select_jobids(UAContext *ua, JobIds *ji)
       case -1:                       /* error */
         return 0;
       case 0:                        /* list last 20 Jobs run */
-        db_list_sql_query(ua->jcr, ua->db, uar_list_jobs, prtit, ua, 1);
+        db_list_sql_query(ua->jcr, ua->db, uar_list_jobs, prtit, ua, 1, 0);
         done = 0;
         break;
       case 1:                        /* list where a file is saved */
@@ -332,7 +332,7 @@ static int user_select_jobids(UAContext *ua, JobIds *ji)
         query = get_pool_memory(PM_MESSAGE);
         Mmsg(&query, uar_file, fname);
         free(fname);
-        db_list_sql_query(ua->jcr, ua->db, query, prtit, ua, 1);
+        db_list_sql_query(ua->jcr, ua->db, query, prtit, ua, 1, 0);
         free_pool_memory(query);
         done = 0;
         break;
@@ -346,7 +346,7 @@ static int user_select_jobids(UAContext *ua, JobIds *ji)
          if (!get_cmd(ua, _("Enter SQL list command: "))) {
            return 0;
         }
-        db_list_sql_query(ua->jcr, ua->db, ua->cmd, prtit, ua, 1);
+        db_list_sql_query(ua->jcr, ua->db, ua->cmd, prtit, ua, 1, 0);
         done = 0;
         break;
       case 4:                        /* Select the most recent backups */
@@ -414,7 +414,7 @@ static int user_select_jobids(UAContext *ua, JobIds *ji)
             bsendmsg(ua, "%s\n", db_strerror(ua->db));
         }
         free_pool_memory(query);
-        db_list_sql_query(ua->jcr, ua->db, uar_list_temp, prtit, ua, 1);
+        db_list_sql_query(ua->jcr, ua->db, uar_list_temp, prtit, ua, 1, 0);
 
         if (!db_sql_query(ua->db, uar_sel_jobid_temp, jobid_handler, (void *)ji)) {
             bsendmsg(ua, "%s\n", db_strerror(ua->db));
index f365f2aa03c9c25cb6cb2d9606376e49a89a43a8..824602a6e8649d08021c4ef7e8ec7ef2399fc277 100644 (file)
@@ -444,7 +444,7 @@ int select_pool_and_media_dbr(UAContext *ua, POOL_DBR *pr, MEDIA_DBR *mr)
       bstrncpy(mr->VolumeName, ua->argv[i], sizeof(mr->VolumeName));
    }
    if (mr->VolumeName[0] == 0) {
-      db_list_media_records(ua->jcr, ua->db, mr, prtit, ua);
+      db_list_media_records(ua->jcr, ua->db, mr, prtit, ua, 0);
       if (!get_cmd(ua, _("Enter MediaId or Volume name: "))) {
         return 0;
       }
@@ -511,7 +511,7 @@ POOL *get_pool_resource(UAContext *ua)
  */
 int select_job_dbr(UAContext *ua, JOB_DBR *jr)
 {
-   db_list_job_records(ua->jcr, ua->db, jr, prtit, ua);
+   db_list_job_records(ua->jcr, ua->db, jr, prtit, ua, 0);
    if (!get_cmd(ua, _("Enter the JobId to select: "))) {
       return 0;
    }
index 5c79b5b4da61c42e1cebf93ffc47f1565c182ccd..74e4586876634df1304df095d6ffc54b3212d982 100644 (file)
@@ -1,8 +1,8 @@
 /* */
 #define VERSION "1.30"
 #define VSTRING "1"
-#define BDATE   "02 April 2003"
-#define LSMDATE "02Apr03"
+#define BDATE   "03 April 2003"
+#define LSMDATE "03Apr03"
 
 /* Debug flags */
 #define DEBUG 1