lib/sequel/plugins/many_through_many.rb in sequel-4.3.0 vs lib/sequel/plugins/many_through_many.rb in sequel-4.4.0

- old
+ new

@@ -136,10 +136,17 @@ :associated_key_table=>final_reverse_edge[:alias], } h.each{|k, v| cached_set(k, v)} h end + + def filter_by_associations_add_conditions_dataset_filter(ds) + reverse_edges.each{|t| ds = ds.join(t[:table], Array(t[:left]).zip(Array(t[:right])), :table_alias=>t[:alias], :qualify=>:deep)} + ft = final_reverse_edge + ds.join(ft[:table], Array(ft[:left]).zip(Array(ft[:right])), :table_alias=>ft[:alias], :qualify=>:deep). + select(*qualify(ft[:alias], Array(self[:left_key]))) + end end module ClassMethods # Create a many_through_many association. Arguments: # * name - Same as associate, the name of the association. @@ -273,16 +280,17 @@ ref.qualify(obj.model.table_name, ref.right_primary_keys) else ref.right_primary_key_methods end - exp = association_filter_key_expression(ref.qualify(last_alias, Array(ref.final_edge[:left])), meths, obj) - if exp == SQL::Constants::FALSE - association_filter_handle_inversion(op, exp, Array(lpks)) - else - ds = ds.where(exp).exclude(SQL::BooleanExpression.from_value_pairs(ds.opts[:select].zip([]), :OR)) - association_filter_handle_inversion(op, SQL::BooleanExpression.from_value_pairs(lpks=>ds), Array(lpks)) + expr = association_filter_key_expression(ref.qualify(last_alias, Array(ref.final_edge[:left])), meths, obj) + unless expr == SQL::Constants::FALSE + ds = ds.where(expr).exclude(SQL::BooleanExpression.from_value_pairs(ds.opts[:select].zip([]), :OR)) + expr = SQL::BooleanExpression.from_value_pairs(lpks=>ds) + expr = add_association_filter_conditions(ref, obj, expr) end + + association_filter_handle_inversion(op, expr, Array(lpks)) end end end end end