class ActiveGraph::Core::Query::PartitionedClauses

Public Class Methods

new(clauses) click to toggle source
    # File lib/active_graph/core/query.rb
417 def initialize(clauses)
418   @clauses = clauses
419   @partitioning = [[]]
420 end

Private Class Methods

clause_is_order_or_limit?(clause) click to toggle source
    # File lib/active_graph/core/query.rb
471 def clause_is_order_or_limit?(clause)
472   clause.is_a?(::ActiveGraph::Core::QueryClauses::OrderClause) ||
473     clause.is_a?(::ActiveGraph::Core::QueryClauses::LimitClause)
474 end

Public Instance Methods

each() { |partition| ... } click to toggle source
    # File lib/active_graph/core/query.rb
424 def each
425   generate_partitioning!
426 
427   @partitioning.each { |partition| yield partition }
428 end
generate_partitioning!() click to toggle source
    # File lib/active_graph/core/query.rb
430 def generate_partitioning!
431   @partitioning = [[]]
432 
433   @clauses.each do |clause|
434     if clause.nil? && !fresh_partition?
435       @partitioning << []
436     elsif clause_is_order_or_limit_directly_following_with_or_order?(clause)
437       second_to_last << clause
438     elsif clause_is_with_following_order_or_limit?(clause)
439       second_to_last << clause
440       second_to_last.sort_by! { |c| c.is_a?(::ActiveGraph::Core::QueryClauses::OrderClause) ? 1 : 0 }
441     else
442       @partitioning.last << clause
443     end
444   end
445 end

Private Instance Methods

clause_is_order_or_limit_directly_following_with_or_order?(clause) click to toggle source
    # File lib/active_graph/core/query.rb
457 def clause_is_order_or_limit_directly_following_with_or_order?(clause)
458   self.class.clause_is_order_or_limit?(clause) &&
459     @partitioning[-2] &&
460     @partitioning[-1].empty? &&
461     (@partitioning[-2].last.is_a?(::ActiveGraph::Core::QueryClauses::WithClause) ||
462       @partitioning[-2].last.is_a?(::ActiveGraph::Core::QueryClauses::OrderClause))
463 end
clause_is_with_following_order_or_limit?(clause) click to toggle source
    # File lib/active_graph/core/query.rb
465 def clause_is_with_following_order_or_limit?(clause)
466   clause.is_a?(::ActiveGraph::Core::QueryClauses::WithClause) &&
467     @partitioning[-2] && @partitioning[-2].any? { |c| self.class.clause_is_order_or_limit?(c) }
468 end
fresh_partition?() click to toggle source
    # File lib/active_graph/core/query.rb
449 def fresh_partition?
450   @partitioning.last == []
451 end
second_to_last() click to toggle source
    # File lib/active_graph/core/query.rb
453 def second_to_last
454   @partitioning[-2]
455 end