optimizer optimized (AND[Or["abc"]] -> "abc"). ()-bugfix in where-clause.
This commit is contained in:
parent
ce81d21bd8
commit
08d1610987
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue