From: Eric Bollengier Date: Wed, 1 Jun 2022 15:04:55 +0000 (+0200) Subject: Use regular LIKE for MySQL and SQLite, use ILIKE for PostgreSQL in .search command X-Git-Tag: Beta-15.0.0~561 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fdb97158da9f1f5a3ed27c8ea7f8ca4bc8529c7d;p=thirdparty%2Fbacula.git Use regular LIKE for MySQL and SQLite, use ILIKE for PostgreSQL in .search command The lower() trick doesn't work on MySQL because we use BLOB to store text. So, we revert to LIKE and ILIKE for PostgreSQL --- diff --git a/bacula/src/cats/sql_cmds.c b/bacula/src/cats/sql_cmds.c index d8a799e03..82d5a54cb 100644 --- a/bacula/src/cats/sql_cmds.c +++ b/bacula/src/cats/sql_cmds.c @@ -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) " diff --git a/bacula/src/cats/sql_cmds.h b/bacula/src/cats/sql_cmds.h index 634697fd1..3b589cc47 100644 --- a/bacula/src/cats/sql_cmds.h +++ b/bacula/src/cats/sql_cmds.h @@ -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[]; diff --git a/bacula/src/cats/sql_list.c b/bacula/src/cats/sql_list.c index a47f906d1..e7d6bad70 100644 --- a/bacula/src/cats/sql_list.c +++ b/bacula/src/cats/sql_list.c @@ -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()); }