]> git.ipfire.org Git - thirdparty/bacula.git/commitdiff
Use regular LIKE for MySQL and SQLite, use ILIKE for PostgreSQL in .search command
authorEric Bollengier <eric@baculasystems.com>
Wed, 1 Jun 2022 15:04:55 +0000 (17:04 +0200)
committerEric Bollengier <eric@baculasystems.com>
Thu, 14 Sep 2023 11:56:58 +0000 (13:56 +0200)
The lower() trick doesn't work on MySQL because we use BLOB to store text.
So, we revert to LIKE and ILIKE for PostgreSQL

bacula/src/cats/sql_cmds.c
bacula/src/cats/sql_cmds.h
bacula/src/cats/sql_list.c

index d8a799e03ede8557787e8c3d4078ac32082ed07b..82d5a54cb9e66ab0f8574c1dee247a5780ab00cb 100644 (file)
@@ -925,7 +925,17 @@ const char *match_query[] =
    /* SQLite */
    "LIKE"                       /* MATCH doesn't seems to work anymore... */
 }; 
+
+const char *sql_like[] =
+{
+   /* MySQL */
+   "LIKE",
+   /* PostgreSQL */
+   "ILIKE",
+   /* SQLite */
+   "LIKE"
+};
+
 static const char *insert_counter_values_default =
    "INSERT INTO Counters (Counter, MinValue, "
    "MaxValue, CurrentValue, WrapCounter) "
index 634697fd111f25fa4a0d1d9f8b1ebc2be3aa6ab5..3b589cc47b968493bdb149c63d3400e5dabc4b30 100644 (file)
@@ -115,3 +115,4 @@ extern const char CATS_IMP_EXP *get_volume_size;
 extern const char CATS_IMP_EXP *escape_char_value[];
 extern const char CATS_IMP_EXP *regexp_value[];
 extern const char CATS_IMP_EXP *copy_object[];
+extern const char CATS_IMP_EXP *sql_like[];
index a47f906d1a20f2893ca6413539c951e4b2a3f838..e7d6bad70fc5af7360fc6204da18fdcce52eb984 100644 (file)
@@ -111,7 +111,7 @@ bool BDB::bdb_search_job_records(JCR *jcr, JOB_DBR *jr,
    Mmsg(cmd,
         "SELECT Job "
         "FROM Job "
-        " %s WHERE lower(Job.Job) LIKE lower('%%%s%%') %s", join, esc, where_tmp);
+        " %s WHERE Job.Job %s '%%%s%%' %s", join, sql_like[bdb_get_type_index()], esc, where_tmp);
 
    if (jr->limit > 0) {
       char ed1[50];
@@ -140,7 +140,8 @@ bool BDB::bdb_search_client_records(JCR *jcr, CLIENT_DBR *rec, DB_RESULT_HANDLER
    where_tmp = get_acls(DB_ACL_BIT(DB_ACL_CLIENT), 0);
 
    Mmsg(cmd, "SELECT Name "
-        "FROM Client WHERE lower(Name) LIKE lower('%%%s%%') %s",
+        "FROM Client WHERE Name %s '%%%s%%' %s",
+        sql_like[bdb_get_type_index()],
         esc, where_tmp);
 
    if (rec->limit > 0) {
@@ -443,8 +444,9 @@ bool BDB::bdb_search_media_records(JCR *jcr, MEDIA_DBR *mdbr,
       mdbr->limit = 50;
    }
 
-   Mmsg(cmd, "SELECT VolumeName FROM Media %s WHERE lower(Media.VolumeName) LIKE lower('%%%s%%') %s LIMIT %u",
+   Mmsg(cmd, "SELECT VolumeName FROM Media %s WHERE Media.VolumeName %s '%%%s%%' %s LIMIT %u",
         join,
+        sql_like[bdb_get_type_index()],
         esc,
         where,
         mdbr->limit);
@@ -811,7 +813,7 @@ void BDB::bdb_list_joblog_records(JCR *jcr, uint32_t JobId, const char *pattern,
       POOL_MEM esc;
       esc.check_size(strlen(pattern) * 2 + 1);
       bdb_escape_string(jcr, esc.c_str(), pattern, strlen(pattern));
-      Mmsg(tmp, "lower(Log.LogText) LIKE lower('%%%s%%') ", esc.c_str());
+      Mmsg(tmp, "Log.LogText %s '%%%s%%' ", sql_like[bdb_get_type_index()], esc.c_str());
       append_filter(where2.handle(), tmp.c_str());
    }