Class: Bmg::Sql::Processor::Where
- Inherits:
-
Bmg::Sql::Processor
- Object
- Sexpr::Rewriter
- Bmg::Sql::Processor
- Bmg::Sql::Processor::Where
- Defined in:
- lib/bmg/sql/processor/where.rb
Constant Summary
Constants inherited from Bmg::Sql::Processor
Instance Attribute Summary
Attributes inherited from Bmg::Sql::Processor
Instance Method Summary collapse
-
#initialize(predicate, builder) ⇒ Where
constructor
A new instance of Where.
- #on_select_exp(sexpr) ⇒ Object
- #on_union(sexpr) ⇒ Object
Methods inherited from Bmg::Sql::Processor
#on_set_operator, #on_with_exp
Constructor Details
#initialize(predicate, builder) ⇒ Where
Returns a new instance of Where.
6 7 8 9 |
# File 'lib/bmg/sql/processor/where.rb', line 6 def initialize(predicate, builder) super(builder) @predicate = predicate end |
Instance Method Details
#on_select_exp(sexpr) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# 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) ⇒ Object
11 12 13 14 15 16 17 18 19 20 |
# 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 |