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