module Sequel::Plugins::PgArrayAssociations::DatasetMethods
Private Instance Methods
many_to_pg_array_association_filter_expression(op, ref, obj)
click to toggle source
Support filtering by many_to_pg_array associations using a subquery.
# File lib/sequel/plugins/pg_array_associations.rb 534 def many_to_pg_array_association_filter_expression(op, ref, obj) 535 pk = ref.qualify(model.table_name, ref.primary_key) 536 key = ref[:key] 537 # :nocov: 538 expr = case obj 539 # :nocov: 540 when Sequel::Model 541 if (assoc_pks = obj.get_column_value(key)) && !assoc_pks.empty? 542 Sequel[pk=>assoc_pks.to_a] 543 end 544 when Array 545 if (assoc_pks = obj.map{|o| o.get_column_value(key)}.flatten.compact.uniq) && !assoc_pks.empty? 546 Sequel[pk=>assoc_pks] 547 end 548 when Sequel::Dataset 549 obj.select(ref.qualify(obj.model.table_name, ref[:key_column]).as(:key)).from_self.where{{pk=>any(:key)}}.select(1).exists 550 end 551 expr = Sequel::SQL::Constants::FALSE unless expr 552 expr = add_association_filter_conditions(ref, obj, expr) 553 association_filter_handle_inversion(op, expr, [pk]) 554 end
pg_array_to_many_association_filter_expression(op, ref, obj)
click to toggle source
Support filtering by pg_array_to_many associations using a subquery.
# File lib/sequel/plugins/pg_array_associations.rb 557 def pg_array_to_many_association_filter_expression(op, ref, obj) 558 key = ref.qualify(model.table_name, ref[:key_column]) 559 # :nocov: 560 expr = case obj 561 # :nocov: 562 when Sequel::Model 563 if pkv = obj.get_column_value(ref.primary_key_method) 564 Sequel.pg_array_op(key).contains(Sequel.pg_array([pkv], ref.array_type)) 565 end 566 when Array 567 if (pkvs = obj.map{|o| o.get_column_value(ref.primary_key_method)}.compact) && !pkvs.empty? 568 Sequel.pg_array(key).overlaps(Sequel.pg_array(pkvs, ref.array_type)) 569 end 570 when Sequel::Dataset 571 Sequel.function(:coalesce, Sequel.pg_array_op(key).overlaps(obj.select{array_agg(ref.qualify(obj.model.table_name, ref.primary_key))}), Sequel::SQL::Constants::FALSE) 572 end 573 expr = Sequel::SQL::Constants::FALSE unless expr 574 expr = add_association_filter_conditions(ref, obj, expr) 575 association_filter_handle_inversion(op, expr, [key]) 576 end