optimizer optimized (AND[Or["abc"]] -> "abc"). ()-bugfix in where-clause.

This commit is contained in:
Denis Knauf 2012-01-18 13:34:26 +01:00
parent ce81d21bd8
commit 08d1610987
2 changed files with 11 additions and 8 deletions

View file

@ -1 +1 @@
0.0.5.2 0.0.5.3

View file

@ -248,12 +248,14 @@ class SmqlToAR
def optimize! def optimize!
ext = [] ext = []
collect! do |sub| collect! do |sub|
sub = sub.optimize! if sub.kind_of? Array sub = sub.optimize! if sub.kind_of? SubBuilder
if self.class == sub.class if self.class == sub.class
ext.push *sub ext.push *sub
nil nil
elsif sub.blank? elsif sub.blank?
nil nil
elsif 1 == sub.size
sub.first
else else
sub sub
end end
@ -267,21 +269,22 @@ class SmqlToAR
end end
def default() SmqlToAR::And end def default() SmqlToAR::And end
def default_new( parent) default.new self, parent, false end def default_new( parent) default.new self, parent, false end
def collect_build_where def collect_build_where indent = nil
collect {|x| x.respond_to?( :build_where) ? x.build_where : x.to_s } indent = (indent||0) + 1
collect {|x| "(#{x.respond_to?( :build_where) ? x.build_where( indent) : x.to_s})" }
end end
end end
class And < SubBuilder class And < SubBuilder
def default; SmqlToAR::Or; end def default; SmqlToAR::Or; end
def build_where def build_where indent = nil
collect_build_where.join ' AND ' collect_build_where( indent).join " AND\n"+"\t"*(indent||0)
end end
end end
class Or < SubBuilder class Or < SubBuilder
def build_where def build_where indent = nil
collect_build_where.join ' OR ' collect_build_where( indent).join " OR\n"+"\t"*(indent||0)
end end
end end
end end