X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/4a093ba4a1e14275a9500f2c65dd48528bc1e095..d7a5e6e37e9e9251177f9fad98d867f477e69537:/services/api/lib/record_filters.rb diff --git a/services/api/lib/record_filters.rb b/services/api/lib/record_filters.rb index 9839413fcd..c8f024291c 100644 --- a/services/api/lib/record_filters.rb +++ b/services/api/lib/record_filters.rb @@ -44,6 +44,14 @@ module RecordFilters cond_out = [] + if attrs_in == 'any' && (operator.casecmp('ilike').zero? || operator.casecmp('like').zero?) && (operand.is_a? String) && operand.match('^[%].*[%]$') + # Trigram index search + cond_out << model_class.full_text_trgm + " #{operator} ?" + param_out << operand + # Skip the generic per-column operator loop below + attrs = [] + end + if operator == '@@' # Full-text search if attrs_in != 'any' @@ -197,9 +205,14 @@ module RecordFilters operand.each do |op| cl = ArvadosModel::kind_class op if cl - if attr == 'uuid' and model_class.uuid_prefix == cl.uuid_prefix - cond << "1=1" + if attr == 'uuid' + if model_class.uuid_prefix == cl.uuid_prefix + cond << "1=1" + else + cond << "1=0" + end else + # Use a substring query to support remote uuids cond << "substring(#{ar_table_name}.#{attr}, 7, 5) = ?" param_out << cl.uuid_prefix end