X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/9ec15072e6631578584bd9c08d26025e807a8d48..66fc74001e777ac7ceff2b02cfc459b1368f42f3:/services/api/lib/record_filters.rb?ds=sidebyside diff --git a/services/api/lib/record_filters.rb b/services/api/lib/record_filters.rb index 900b784cd0..dc427c12c1 100644 --- a/services/api/lib/record_filters.rb +++ b/services/api/lib/record_filters.rb @@ -66,8 +66,8 @@ module RecordFilters col = model_class.columns.select { |c| c.name == subproperty[0] }.first if subproperty.length == 2 - if col.type != :jsonb - raise ArgumentError.new("Invalid attribute '#{subproperty[0]}' for operator '#{operator}' in filter") + if col.nil? or col.type != :jsonb + raise ArgumentError.new("Invalid attribute '#{subproperty[0]}' for subproperty filter") end if subproperty[1][0] == "<" and subproperty[1][-1] == ">" @@ -109,10 +109,12 @@ module RecordFilters "for '#{operator}' operator in filters") end when 'exists' - if operand + if operand == true cond_out << "jsonb_exists(#{ar_table_name}.#{subproperty[0]}, ?)" - else + elsif operand == false cond_out << "(NOT jsonb_exists(#{ar_table_name}.#{subproperty[0]}, ?)) OR #{ar_table_name}.#{subproperty[0]} is NULL" + else + raise ArgumentError.new("Invalid operand '#{operand}' for '#{operator}' must be true or false") end param_out << subproperty[1] else