class Bmg::Sql::Processor::Where
Public Class Methods
new(predicate, builder)
click to toggle source
Calls superclass method
Bmg::Sql::Processor::new
# File lib/bmg/sql/processor/where.rb, line 6 def initialize(predicate, builder) super(builder) @predicate = predicate end
Public Instance Methods
on_select_exp(sexpr)
click to toggle source
# File lib/bmg/sql/processor/where.rb, line 22 def on_select_exp(sexpr) if sexpr.group_by_clause || sexpr.has_computed_attributes? sexpr = builder.from_self(sexpr) call(sexpr) else pred = @predicate.rename(sexpr.desaliaser(true)) if sexpr.where_clause sexpr_p = Predicate.new(sexpr.where_clause.predicate) sexpr.with_update(:where_clause, [ :where_clause, (sexpr_p & pred).sexpr ]) else sexpr.with_insert(4, [ :where_clause, pred.sexpr ]) end end end
on_union(sexpr)
click to toggle source
# File lib/bmg/sql/processor/where.rb, line 11 def on_union(sexpr) non_falsy = sexpr[2..-1].reject{|expr| falsy?(expr) } if non_falsy.empty? apply(sexpr.head_expr) elsif non_falsy.size == 1 apply(non_falsy.first) else [sexpr[0], sexpr[1]] + non_falsy.map{|nf| apply(nf) } end end
Private Instance Methods
falsy?(sexpr)
click to toggle source
# File lib/bmg/sql/processor/where.rb, line 39 def falsy?(sexpr) return false unless sexpr.respond_to?(:predicate) return false if sexpr.predicate.nil? left = Predicate.new(Predicate::Grammar.sexpr(sexpr.predicate)).unqualify right = Predicate.new(Predicate::Grammar.sexpr(@predicate.sexpr)).unqualify return (left & right).contradiction? end