# # patch "ChangeLog" # from [097d8f47e66d6e5bb6a37dd162dcb10f785b8f40] # to [0702abf2c4c5342cec4a73e83f5d3f06c1d7de60] # # patch "database.cc" # from [1ce26993177acbeb3e3d18aba17f43700372fa3c] # to [e0f0e3eee93afac83265188bba8e33ac438b8f59] # --- ChangeLog +++ ChangeLog @@ -1,3 +1,8 @@ +2005-06-25 Brian Downing + + * database.cc: Makes 'b:' selector be interpreted as a glob + instead of as a partial string match. + 2005-06-24 Nathaniel Smith * unix/process.cc (process_spawn): Format log output correctly. --- database.cc +++ database.cc @@ -2168,14 +2168,18 @@ using selectors::selector_type; static void selector_to_certname(selector_type ty, - string & s) + string & s, + string & prefix, + string & suffix) { + prefix = suffix = "*"; switch (ty) { case selectors::sel_author: s = author_cert_name; break; case selectors::sel_branch: + prefix = suffix = ""; s = branch_cert_name; break; case selectors::sel_date: @@ -2268,7 +2272,9 @@ else { string certname; - selector_to_certname(i->first, certname); + string prefix; + string suffix; + selector_to_certname(i->first, certname, prefix, suffix); lim += (F("SELECT id FROM revision_certs WHERE name='%s' AND ") % certname).str(); switch (i->first) { @@ -2279,7 +2285,8 @@ lim += (F("unbase64(value) > X'%s'") % encode_hexenc(i->second)).str(); break; default: - lim += (F("unbase64(value) glob '*%s*'") % i->second).str(); + lim += (F("unbase64(value) glob '%s%s%s'") + % prefix % i->second % suffix).str(); break; } } @@ -2298,6 +2305,8 @@ } else { + string prefix = "*"; + string suffix = "*"; query = "SELECT value FROM revision_certs WHERE"; if (ty == selectors::sel_unknown) { @@ -2310,12 +2319,13 @@ else { string certname; - selector_to_certname(ty, certname); + selector_to_certname(ty, certname, prefix, suffix); query += (F(" (name='%s')") % certname).str(); } - query += (F(" AND (unbase64(value) GLOB '*%s*')") % partial).str(); + query += (F(" AND (unbase64(value) GLOB '%s%s%s')") + % prefix % partial % suffix).str(); query += (F(" AND (id IN %s)") % lim).str(); }