class Neo4j::Core::Query::PartitionedClauses

Public Class Methods

new(clauses) click to toggle source
    # File lib/neo4j/core/query.rb
436 def initialize(clauses)
437   @clauses = clauses
438   @partitioning = [[]]
439 end

Private Class Methods

clause_is_order_or_limit?(clause) click to toggle source
    # File lib/neo4j/core/query.rb
490 def clause_is_order_or_limit?(clause)
491   clause.is_a?(::Neo4j::Core::QueryClauses::OrderClause) ||
492     clause.is_a?(::Neo4j::Core::QueryClauses::LimitClause)
493 end

Public Instance Methods

each() { |partition| ... } click to toggle source
    # File lib/neo4j/core/query.rb
443 def each
444   generate_partitioning!
445 
446   @partitioning.each { |partition| yield partition }
447 end
generate_partitioning!() click to toggle source
    # File lib/neo4j/core/query.rb
449 def generate_partitioning!
450   @partitioning = [[]]
451 
452   @clauses.each do |clause|
453     if clause.nil? && !fresh_partition?
454       @partitioning << []
455     elsif clause_is_order_or_limit_directly_following_with_or_order?(clause)
456       second_to_last << clause
457     elsif clause_is_with_following_order_or_limit?(clause)
458       second_to_last << clause
459       second_to_last.sort_by! { |c| c.is_a?(::Neo4j::Core::QueryClauses::OrderClause) ? 1 : 0 }
460     else
461       @partitioning.last << clause
462     end
463   end
464 end

Private Instance Methods

clause_is_order_or_limit_directly_following_with_or_order?(clause) click to toggle source
    # File lib/neo4j/core/query.rb
476 def clause_is_order_or_limit_directly_following_with_or_order?(clause)
477   self.class.clause_is_order_or_limit?(clause) &&
478     @partitioning[-2] &&
479     @partitioning[-1].empty? &&
480     (@partitioning[-2].last.is_a?(::Neo4j::Core::QueryClauses::WithClause) ||
481       @partitioning[-2].last.is_a?(::Neo4j::Core::QueryClauses::OrderClause))
482 end
clause_is_with_following_order_or_limit?(clause) click to toggle source
    # File lib/neo4j/core/query.rb
484 def clause_is_with_following_order_or_limit?(clause)
485   clause.is_a?(::Neo4j::Core::QueryClauses::WithClause) &&
486     @partitioning[-2] && @partitioning[-2].any? { |c| self.class.clause_is_order_or_limit?(c) }
487 end
fresh_partition?() click to toggle source
    # File lib/neo4j/core/query.rb
468 def fresh_partition?
469   @partitioning.last == []
470 end
second_to_last() click to toggle source
    # File lib/neo4j/core/query.rb
472 def second_to_last
473   @partitioning[-2]
474 end