]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/cats/sql.c
Add %D option to edit_job_code, simplify callbacks on director side
[bacula/bacula] / bacula / src / cats / sql.c
index 3bb8a9c1703b2eba945b0d67c7d39b708bd72af9..5374b089104e62259113afffa22d89676bd8a85b 100644 (file)
@@ -99,6 +99,21 @@ int db_int64_handler(void *ctx, int num_fields, char **row)
    return 0;
 }
 
+/*
+ * Called here to retrieve a btime from the database.
+ *   The returned integer will be extended to 64 bit.
+ */
+int db_strtime_handler(void *ctx, int num_fields, char **row)
+{
+   db_int64_ctx *lctx = (db_int64_ctx *)ctx;
+
+   if (row[0]) {
+      lctx->value = str_to_utime(row[0]);
+      lctx->count++;
+   }
+   return 0;
+}
+
 /*
  * Use to build a comma separated list of values from a query. "10,20,30"
  */
@@ -122,7 +137,7 @@ struct max_connections_context {
 /*
  *  * Called here to retrieve an integer from the database
  *   */
-static int db_max_connections_handler(void *ctx, int num_fields, char **row)
+static inline int db_max_connections_handler(void *ctx, int num_fields, char **row)
 {
    struct max_connections_context *context;
    uint32_t index;
@@ -416,16 +431,17 @@ static int max_length(int max_length)
 /*
  * List dashes as part of header for listing SQL results in a table
  */
-void
-list_dashes(B_DB *mdb, DB_LIST_HANDLER *send, void *ctx)
+void list_dashes(B_DB *mdb, DB_LIST_HANDLER *send, void *ctx)
 {
    SQL_FIELD  *field;
    int i, j;
    int len;
+   int num_fields;
 
    sql_field_seek(mdb, 0);
    send(ctx, "+");
-   for (i = 0; i < sql_num_fields(mdb); i++) {
+   num_fields = sql_num_fields(mdb);
+   for (i = 0; i < num_fields; i++) {
       field = sql_fetch_field(mdb);
       if (!field) {
          break;
@@ -450,6 +466,7 @@ int list_result(void *vctx, int nb_col, char **row)
 {
    SQL_FIELD *field;
    int i, col_len, max_len = 0;
+   int num_fields;
    char buf[2000], ewc[30];
 
    LIST_CTX *pctx = (LIST_CTX *)vctx;
@@ -459,13 +476,14 @@ int list_result(void *vctx, int nb_col, char **row)
    void *ctx = pctx->ctx;
    JCR *jcr = pctx->jcr;
 
+   num_fields = sql_num_fields(mdb);
    if (!pctx->once) {
       pctx->once = true;
 
-      Dmsg1(800, "list_result starts looking at %d fields\n", sql_num_fields(mdb));
+      Dmsg1(800, "list_result starts looking at %d fields\n", num_fields);
       /* determine column display widths */
       sql_field_seek(mdb, 0);
-      for (i = 0; i < sql_num_fields(mdb); i++) {
+      for (i = 0; i < num_fields; i++) {
          Dmsg1(800, "list_result processing field %d\n", i);
          field = sql_fetch_field(mdb);
          if (!field) {
@@ -497,8 +515,7 @@ int list_result(void *vctx, int nb_col, char **row)
          goto vertical_list;
       }
 
-      Dmsg1(800, "list_result starts second loop looking at %d fields\n", 
-            sql_num_fields(mdb));
+      Dmsg1(800, "list_result starts second loop looking at %d fields\n", num_fields);
 
       /* Keep the result to display the same line at the end of the table */
       list_dashes(mdb, last_line_handler, pctx);
@@ -506,7 +523,7 @@ int list_result(void *vctx, int nb_col, char **row)
 
       send(ctx, "|");
       sql_field_seek(mdb, 0);
-      for (i = 0; i < sql_num_fields(mdb); i++) {
+      for (i = 0; i < num_fields; i++) {
          Dmsg1(800, "list_result looking at field %d\n", i);
          field = sql_fetch_field(mdb);
          if (!field) {
@@ -520,12 +537,11 @@ int list_result(void *vctx, int nb_col, char **row)
       list_dashes(mdb, send, ctx);      
    }
    
-   Dmsg1(800, "list_result starts third loop looking at %d fields\n", 
-         sql_num_fields(mdb));
+   Dmsg1(800, "list_result starts third loop looking at %d fields\n", num_fields);
 
    sql_field_seek(mdb, 0);
    send(ctx, "|");
-   for (i = 0; i < sql_num_fields(mdb); i++) {
+   for (i = 0; i < num_fields; i++) {
       field = sql_fetch_field(mdb);
       if (!field) {
          break;
@@ -546,10 +562,10 @@ int list_result(void *vctx, int nb_col, char **row)
 
 vertical_list:
 
-   Dmsg1(800, "list_result starts vertical list at %d fields\n", sql_num_fields(mdb));
+   Dmsg1(800, "list_result starts vertical list at %d fields\n", num_fields);
 
    sql_field_seek(mdb, 0);
-   for (i = 0; i < sql_num_fields(mdb); i++) {
+   for (i = 0; i < num_fields; i++) {
       field = sql_fetch_field(mdb);
       if (!field) {
          break;
@@ -572,12 +588,12 @@ vertical_list:
  * If full_list is set, we list vertically, otherwise, we
  * list on one line horizontally.
  */
-void
-list_result(JCR *jcr, B_DB *mdb, DB_LIST_HANDLER *send, void *ctx, e_list_type type)
+void list_result(JCR *jcr, B_DB *mdb, DB_LIST_HANDLER *send, void *ctx, e_list_type type)
 {
    SQL_FIELD *field;
    SQL_ROW row;
    int i, col_len, max_len = 0;
+   int num_fields;
    char buf[2000], ewc[30];
 
    Dmsg0(800, "list_result starts\n");
@@ -586,10 +602,11 @@ list_result(JCR *jcr, B_DB *mdb, DB_LIST_HANDLER *send, void *ctx, e_list_type t
       return;
    }
 
-   Dmsg1(800, "list_result starts looking at %d fields\n", sql_num_fields(mdb));
+   num_fields = sql_num_fields(mdb);
+   Dmsg1(800, "list_result starts looking at %d fields\n", num_fields);
    /* determine column display widths */
    sql_field_seek(mdb, 0);
-   for (i = 0; i < sql_num_fields(mdb); i++) {
+   for (i = 0; i < num_fields; i++) {
       Dmsg1(800, "list_result processing field %d\n", i);
       field = sql_fetch_field(mdb);
       if (!field) {
@@ -619,11 +636,11 @@ list_result(JCR *jcr, B_DB *mdb, DB_LIST_HANDLER *send, void *ctx, e_list_type t
       goto vertical_list;
    }
 
-   Dmsg1(800, "list_result starts second loop looking at %d fields\n", sql_num_fields(mdb));
+   Dmsg1(800, "list_result starts second loop looking at %d fields\n", num_fields);
    list_dashes(mdb, send, ctx);
    send(ctx, "|");
    sql_field_seek(mdb, 0);
-   for (i = 0; i < sql_num_fields(mdb); i++) {
+   for (i = 0; i < num_fields; i++) {
       Dmsg1(800, "list_result looking at field %d\n", i);
       field = sql_fetch_field(mdb);
       if (!field) {
@@ -636,11 +653,11 @@ list_result(JCR *jcr, B_DB *mdb, DB_LIST_HANDLER *send, void *ctx, e_list_type t
    send(ctx, "\n");
    list_dashes(mdb, send, ctx);
 
-   Dmsg1(800, "list_result starts third loop looking at %d fields\n", sql_num_fields(mdb));
+   Dmsg1(800, "list_result starts third loop looking at %d fields\n", num_fields);
    while ((row = sql_fetch_row(mdb)) != NULL) {
       sql_field_seek(mdb, 0);
       send(ctx, "|");
-      for (i = 0; i < sql_num_fields(mdb); i++) {
+      for (i = 0; i < num_fields; i++) {
          field = sql_fetch_field(mdb);
          if (!field) {
             break;
@@ -663,10 +680,10 @@ list_result(JCR *jcr, B_DB *mdb, DB_LIST_HANDLER *send, void *ctx, e_list_type t
 
 vertical_list:
 
-   Dmsg1(800, "list_result starts vertical list at %d fields\n", sql_num_fields(mdb));
+   Dmsg1(800, "list_result starts vertical list at %d fields\n", num_fields);
    while ((row = sql_fetch_row(mdb)) != NULL) {
       sql_field_seek(mdb, 0);
-      for (i = 0; i < sql_num_fields(mdb); i++) {
+      for (i = 0; i < num_fields; i++) {
          field = sql_fetch_field(mdb);
          if (!field) {
             break;