]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/cats/sqlite.c
Fix get_basename() -- rewrite
[bacula/bacula] / bacula / src / cats / sqlite.c
index d26632c53c1751a51ff0bce26e9ad505c1f923ed..e012a7fd8e62673ad3f5899612ec3a029d4e0e27 100644 (file)
@@ -112,6 +112,13 @@ B_DB_SQLITE::B_DB_SQLITE(JCR *jcr,
    esc_obj  = get_pool_memory(PM_FNAME);
    m_allow_transactions = mult_db_connections;
 
+   /* At this time, when mult_db_connections == true, this is for 
+    * specific console command such as bvfs or batch mode, and we don't
+    * want to share a batch mode or bvfs. In the future, we can change
+    * the creation function to add this parameter.
+    */
+   m_dedicated = mult_db_connections; 
+
    /*
     * Initialize the private members.
     */
@@ -302,28 +309,14 @@ void B_DB_SQLITE::db_escape_string(JCR *jcr, char *snew, char *old, int len)
  */
 char *B_DB_SQLITE::db_escape_object(JCR *jcr, char *old, int len)
 {
-   char *n, *o;
+   int l;
+   int max = len*2;           /* TODO: too big, should be *4/3 */
+
+   esc_obj = check_pool_memory_size(esc_obj, max);
+   l = bin_to_base64(esc_obj, max, old, len, true);
+   esc_obj[l] = 0;
+   ASSERT(l < max);    /* TODO: add check for l */
 
-   n = esc_obj = check_pool_memory_size(esc_obj, len*2+1);
-   o = old;
-   while (len--) {
-      switch (*o) {
-      case '\'':
-         *n++ = '\'';
-         *n++ = '\'';
-         o++;
-         break;
-      case 0:
-         *n++ = '\\';
-         *n++ = 0;
-         o++;
-         break;
-      default:
-         *n++ = *o++;
-         break;
-      }
-   }
-   *n = 0;
    return esc_obj;
 }
 
@@ -332,6 +325,7 @@ char *B_DB_SQLITE::db_escape_object(JCR *jcr, char *old, int len)
  *
  * TODO: need to be implemented (escape \0)
  */
+
 void B_DB_SQLITE::db_unescape_object(JCR *jcr, char *from, int32_t expected_len,
                                      POOLMEM **dest, int32_t *dest_len)
 {
@@ -341,8 +335,8 @@ void B_DB_SQLITE::db_unescape_object(JCR *jcr, char *from, int32_t expected_len,
       return;
    }
    *dest = check_pool_memory_size(*dest, expected_len+1);
+   base64_to_bin(*dest, expected_len+1, from, strlen(from));
    *dest_len = expected_len;
-   memcpy(*dest, from, expected_len);
    (*dest)[expected_len]=0;
 }
 
@@ -413,7 +407,7 @@ struct rh_data {
 /*
  * Convert SQLite's callback into Bacula DB callback
  */
-static int sqlite_sqlite_result(void *arh_data, int num_fields, char **rows, char **col_names)
+static int sqlite_result_handler(void *arh_data, int num_fields, char **rows, char **col_names)
 {
    struct rh_data *rh_data = (struct rh_data *)arh_data;
 
@@ -455,7 +449,7 @@ bool B_DB_SQLITE::db_sql_query(const char *query, DB_RESULT_HANDLER *result_hand
    rh_data.initialized = false;
    rh_data.result_handler = result_handler;
 
-   stat = sqlite3_exec(m_db_handle, query, sqlite_sqlite_result,
+   stat = sqlite3_exec(m_db_handle, query, sqlite_result_handler,
                        (void *)&rh_data, &m_sqlite_errmsg);
    
    if (stat != SQLITE_OK) {
@@ -482,9 +476,7 @@ bool B_DB_SQLITE::sql_query(const char *query, int flags)
 
    Dmsg1(500, "sql_query starts with '%s'\n", query);
 
-   if (m_result) {
-      sql_free_result();
-   }
+   sql_free_result();
    if (m_sqlite_errmsg) {
       sqlite3_free(m_sqlite_errmsg);
       m_sqlite_errmsg = NULL;
@@ -666,7 +658,7 @@ bool B_DB_SQLITE::sql_batch_start(JCR *jcr)
                               "Name blob,"
                               "LStat tinyblob,"
                               "MD5 tinyblob,"
-                              "MarkId integer)");
+                              "DeltaSeq integer)");
    db_unlock(this);
 
    return retval;
@@ -690,7 +682,6 @@ bool B_DB_SQLITE::sql_batch_end(JCR *jcr, const char *error)
  */
 bool B_DB_SQLITE::sql_batch_insert(JCR *jcr, ATTR_DBR *ar)
 {
-   size_t len;
    const char *digest;
    char ed1[50];
 
@@ -706,10 +697,10 @@ bool B_DB_SQLITE::sql_batch_insert(JCR *jcr, ATTR_DBR *ar)
       digest = ar->Digest;
    }
 
-   len = Mmsg(cmd, "INSERT INTO batch VALUES "
-                   "(%u,%s,'%s','%s','%s','%s',%u)",
-                   ar->FileIndex, edit_int64(ar->JobId,ed1), esc_path,
-                   esc_name, ar->attr, digest, ar->DeltaSeq);
+   Mmsg(cmd, "INSERT INTO batch VALUES "
+        "(%u,%s,'%s','%s','%s','%s',%u)",
+        ar->FileIndex, edit_int64(ar->JobId,ed1), esc_path,
+        esc_name, ar->attr, digest, ar->DeltaSeq);
 
    return sql_query(cmd);
 }