Merge branch 'master' into 15106-trgm-text-search
authorEric Biagiotti <ebiagiotti@veritasgenetics.com>
Mon, 10 Jun 2019 14:07:59 +0000 (10:07 -0400)
committerEric Biagiotti <ebiagiotti@veritasgenetics.com>
Mon, 10 Jun 2019 14:07:59 +0000 (10:07 -0400)
refs #15106

Arvados-DCO-1.1-Signed-off-by: Eric Biagiotti <ebiagiotti@veritasgenetics.com>

1  2 
services/api/app/models/arvados_model.rb

index bd2ac3fad2d161dc4da93fc933598684adea2c94,efef7b812022868bc855dc12393ffa6ea341cd12..91c5a1923c95beaa674dc255835dda50153b5661
@@@ -27,7 -27,6 +27,6 @@@ class ArvadosModel < ApplicationRecor
    after_create :log_create
    after_update :log_update
    after_destroy :log_destroy
-   after_find :convert_serialized_symbols_to_strings
    before_validation :normalize_collection_uuids
    before_validation :set_default_owner
    validate :ensure_valid_uuids
      end.map(&:name)
    end
  
 +  def self.full_text_coalesce
 +    full_text_searchable_columns.collect do |column|
 +      is_jsonb = self.columns.select{|x|x.name == column}[0].type == :jsonb
 +      cast = (is_jsonb || serialized_attributes[column]) ? '::text' : ''
 +      "coalesce(#{column}#{cast},'')"
 +    end
 +  end
 +
 +  def self.full_text_trgm
 +    "(#{full_text_coalesce.join(" || ' ' || ")})"
 +  end
 +
    def self.full_text_tsvector
      parts = full_text_searchable_columns.collect do |column|
        is_jsonb = self.columns.select{|x|x.name == column}[0].type == :jsonb
      false
    end
  
-   def self.has_symbols? x
-     if x.is_a? Hash
-       x.each do |k,v|
-         return true if has_symbols?(k) or has_symbols?(v)
-       end
-     elsif x.is_a? Array
-       x.each do |k|
-         return true if has_symbols?(k)
-       end
-     elsif x.is_a? Symbol
-       return true
-     elsif x.is_a? String
-       return true if x.start_with?(':') && !x.start_with?('::')
-     end
-     false
-   end
-   def self.recursive_stringify x
-     if x.is_a? Hash
-       Hash[x.collect do |k,v|
-              [recursive_stringify(k), recursive_stringify(v)]
-            end]
-     elsif x.is_a? Array
-       x.collect do |k|
-         recursive_stringify k
-       end
-     elsif x.is_a? Symbol
-       x.to_s
-     elsif x.is_a? String and x.start_with?(':') and !x.start_with?('::')
-       x[1..-1]
-     else
-       x
-     end
-   end
    def self.where_serialized(colname, value, md5: false)
      colsql = colname.to_s
      if md5
      self.class.serialized_attributes
    end
  
-   def convert_serialized_symbols_to_strings
-     # ensure_serialized_attribute_type should prevent symbols from
-     # getting into the database in the first place. If someone managed
-     # to get them into the database (perhaps using an older version)
-     # we'll convert symbols to strings when loading from the
-     # database. (Otherwise, loading and saving an object with existing
-     # symbols in a serialized field will crash.)
-     jsonb_cols = self.class.columns.select{|c| c.type == :jsonb}.collect{|j| j.name}
-     (jsonb_cols + self.class.serialized_attributes.keys).uniq.each do |colname|
-       if self.class.has_symbols? attributes[colname]
-         attributes[colname] = self.class.recursive_stringify attributes[colname]
-         send(colname + '=',
-              self.class.recursive_stringify(attributes[colname]))
-       end
-     end
-   end
    def foreign_key_attributes
      attributes.keys.select { |a| a.match(/_uuid$/) }
    end