Module: Queries::BiologicalAssociation

Defined in:
lib/queries/biological_association/filter.rb,
lib/queries/biological_association/autocomplete.rb

Defined Under Namespace

Classes: Autocomplete, Filter

Instance Method Summary collapse

Instance Method Details

#collection_object_facetObject

Unused



1021
1022
1023
# File 'lib/queries/biological_association/filter.rb', line 1021

def collection_object_facet
  subject_object_scope(subject_collection_object_query, object_collection_object_query, 'CollectionObject' )
end

#otu_facetObject

Unused



1016
1017
1018
# File 'lib/queries/biological_association/filter.rb', line 1016

def otu_facet
  subject_object_scope(subject_otu_query, object_otu_query, 'Otu' )
end

#subject_object_scope(subject_query, object_query, target = 'Otu') ⇒ Object

rubocop:disable Metrics/MethodLength This is “or”



960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
# File 'lib/queries/biological_association/filter.rb', line 960

def subject_object_scope(subject_query, object_query, target = 'Otu')
  a = subject_query
  b = object_query

  a_sql, b_sql = nil, nil

  if !a.nil? && !a.only_project?
    a_sql = a.all.to_sql
  end

  if !b.nil? && !b.only_project?
    b_sql = b.all.to_sql
  end

  return nil if a_sql.nil? and b_sql.nil?

  # Setup for "WITH" use
  t = []
  t.push 'a_objects AS (' + a_sql + ')' if a_sql
  t.push 'b_objects AS (' + b_sql + ')' if b_sql && (b_sql != a_sql)

  s = 'WITH ' + t.join(', ')

  # subject/object queries reference different params
  if a_sql && b_sql && (a_sql != b_sql)
    s << ' ' + ::BiologicalAssociation
      .joins("LEFT JOIN a_objects as a_objects1 on a_objects1.id = biological_associations.biological_association_subject_id AND biological_associations.biological_association_subject_type = '" + target + "'")
      .joins("LEFT JOIN b_objects as b_objects1 on b_objects1.id = biological_associations.biological_association_object_id AND biological_associations.biological_association_object_type = '" + target + "'")
      .where('a_objects1.id is not null').or('b_objects1.id is not null')
      .to_sql

    # subject/object queries reference same params
  elsif a_sql && b_sql
    s << ' ' + ::BiologicalAssociation
      .joins("LEFT JOIN a_objects as a_objects1 on a_objects1.id = biological_associations.biological_association_subject_id AND biological_associations.biological_association_subject_type = '" + target + "'")
      .joins("LEFT JOIN a_objects as a_objects2 on a_objects2.id = biological_associations.biological_association_object_id AND biological_associations.biological_association_object_type = '" + target + "'")
      .where('a_objects1.id is not null').or('a_objects2.id is not null')
      .to_sql

    # subject only
  elsif a_sql
    s << ' ' + ::BiologicalAssociation
      .joins("JOIN a_objects as a_objects1 on a_objects1.id = biological_associations.biological_association_subject_id AND biological_associations.biological_association_subject_type = '" + target + "'")
      .to_sql

    # object_only
  else
    s << ' ' + ::BiologicalAssociation
      .joins("JOIN b_objects as b_objects1 on b_objects1.id = biological_associations.biological_association_object_id AND biological_associations.biological_association_object_type = '" + target + "'")
      .to_sql
  end

  return ::BiologicalAssociation.from('(' + s + ') as biological_associations')
end