Module: ActiveRecord::QueryMethods
- Defined in:
- lib/active_record_cte/relation/query_methods.rb
Instance Attribute Summary collapse
-
#is_recursive ⇒ Object
Returns the value of attribute is_recursive.
-
#with_values ⇒ Object
Returns the value of attribute with_values.
Instance Method Summary collapse
- #build_arel_with_cte ⇒ Object
- #build_with_clause(arel) ⇒ Object
- #with(query) ⇒ Object
- #with_recursive(query) ⇒ Object
Instance Attribute Details
#is_recursive ⇒ Object
Returns the value of attribute is_recursive.
3 4 5 |
# File 'lib/active_record_cte/relation/query_methods.rb', line 3 def is_recursive @is_recursive end |
#with_values ⇒ Object
Returns the value of attribute with_values.
3 4 5 |
# File 'lib/active_record_cte/relation/query_methods.rb', line 3 def with_values @with_values end |
Instance Method Details
#build_arel_with_cte ⇒ Object
43 44 45 46 47 |
# File 'lib/active_record_cte/relation/query_methods.rb', line 43 def build_arel_with_cte arel = build_arel_without_cte build_with_clause(arel) unless @with_values.empty? arel end |
#build_with_clause(arel) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/active_record_cte/relation/query_methods.rb', line 22 def build_with_clause(arel) ctes = with_values.map do |cte_query| table = Arel::Table.new(cte_query[0]) query = cte_query[1] case query when Arel::Nodes::Union Arel::Nodes::As.new(table, query) else raise 'Not Implemented!' end end if is_recursive arel.with(:recursive, *ctes) else arel.with(*ctes) end end |
#with(query) ⇒ Object
5 6 7 8 9 10 11 |
# File 'lib/active_record_cte/relation/query_methods.rb', line 5 def with(query) return self if query.blank? relation = clone relation.with_values << query.flatten relation end |
#with_recursive(query) ⇒ Object
13 14 15 16 17 18 19 20 |
# File 'lib/active_record_cte/relation/query_methods.rb', line 13 def with_recursive(query) return self if query.blank? relation = clone relation.is_recursive = true relation.with_values << query.flatten relation end |