module Sequel::Model::Associations::SingularAssociationReflection
Methods that turn an association that returns multiple objects into an association that returns a single object.
Public Instance Methods
Singular associations do not assign singular if they are using the ruby eager limit strategy and have a slice range, since they need to store the array of associated objects in order to pick the correct one with an offset.
# File lib/sequel/model/associations.rb 1131 def assign_singular? 1132 super && (eager_limit_strategy != :ruby || !slice_range) 1133 end
Add conditions when filtering by singular associations with orders, since the underlying relationship is probably not one-to-one.
# File lib/sequel/model/associations.rb 1137 def filter_by_associations_add_conditions? 1138 super || self[:order] || self[:eager_limit_strategy] || self[:filter_limit_strategy] 1139 end
Make sure singular associations always have 1 as the limit
# File lib/sequel/model/associations.rb 1142 def limit_and_offset 1143 r = super 1144 if r.first == 1 1145 r 1146 else 1147 [1, r[1]] 1148 end 1149 end
Singular associations always return a single object, not an array.
# File lib/sequel/model/associations.rb 1152 def returns_array? 1153 false 1154 end
Private Instance Methods
Only use a eager limit strategy by default if there is an offset or an order.
# File lib/sequel/model/associations.rb 1159 def default_eager_limit_strategy 1160 super if self[:order] || offset 1161 end
Use a strategy for filtering by associations if there is an order or an offset, or a specific limiting strategy has been specified.
# File lib/sequel/model/associations.rb 1165 def filter_by_associations_limit_strategy 1166 super if self[:order] || offset || self[:eager_limit_strategy] || self[:filter_limit_strategy] 1167 end
Use the DISTINCT ON eager limit strategy for true if the database supports it.
# File lib/sequel/model/associations.rb 1170 def true_eager_graph_limit_strategy 1171 if associated_class.dataset.supports_ordered_distinct_on? && !offset 1172 :distinct_on 1173 else 1174 super 1175 end 1176 end