Commit 420d48c7 authored by Paul Asmuth's avatar Paul Asmuth
Browse files

query parsing finished :)

parent 9df58dd4
Loading
Loading
Loading
Loading

doc/numtimeseries.json

0 → 100644
+18 −0
Original line number Diff line number Diff line
{
  "klass": "NumericTimeseriesReport",
  "since": 1336836558,
  "until": 1336876558,
  "config": {
    "ticks": [10, 30, 60],
    "series": {
      "with_filter": {
        "title": "Searches with Filter",
        "query": "filter(_type = 'search_with_filter')"
      },
      "without_filter": {
        "title": "Searches with Filter",
        "query": "filter(_type = 'search_without_filter')"
      }
    }
  }
}
 No newline at end of file
+36 −0
Original line number Diff line number Diff line
@@ -71,6 +71,42 @@ private
    @until = parse_time(arg)
  end

  def eval_filter(arg)
    arg.gsub!("\\'", "@!!!!!@") # FIXPAUL: hack! ;)
    if m = arg.match(/^([a-zA-Z_-]+) *= *'(.*)'$/)
      @filters << [m[1], :equals, m[2]]
    elsif m = arg.match(/^([a-zA-Z_-]+) *= *([0-9]+)$/)
      @filters << [m[1], :equals, m[2].to_i]
    elsif m = arg.match(/^([a-zA-Z_-]+) *= *([0-9]+\.[0-9]+)$/)
      @filters << [m[1], :equals, m[2].to_f]
    elsif m = arg.match(/^([a-zA-Z_-]+) *< *([0-9]+)$/)
      @filters << [m[1], :less_than, m[2].to_i]
    elsif m = arg.match(/^([a-zA-Z_-]+) *< *([0-9]+\.[0-9]+)$/)
      @filters << [m[1], :less_than, m[2].to_f]
    elsif m = arg.match(/^([a-zA-Z_-]+) *> *([0-9]+)$/)
      @filters << [m[1], :greater_than, m[2].to_i]
    elsif m = arg.match(/^([a-zA-Z_-]+) *> *([0-9]+\.[0-9]+)$/)
      @filters << [m[1], :greater_than, m[2].to_f]
    elsif m = arg.match(/^([a-zA-Z_-]+) *~ *([0-9]+)-([0-9]+)$/)
      @filters << [m[1], :range_include, (m[2].to_i..m[3].to_i)]
    elsif m = arg.match(/^([a-zA-Z_-]+) *~ *([0-9]+\.[0-9]+)-([0-9]+\.[0-9]+)$/)
      @filters << [m[1], :range_include, (m[2].to_f..m[3].to_f)]
    elsif m = arg.match(/^([a-zA-Z_-]+) *& *(([0-9]+),)+([0-9]+)$/)
      @filters << [m[1], :list_include, m[2..-1].map(&:to_i)]
    elsif m = arg.match(/^([a-zA-Z_-]+) *& *(([0-9]+\.[0-9]+),)+([0-9]+\.[0-9]+)$/)
      @filters << [m[1], :list_include, m[2..-1].map(&:to_f)]
    elsif m = arg.match(/^([a-zA-Z_-]+) *& *('[^']*',)+'[^']*'$/)
      lst = arg.match(/^([a-zA-Z_-]+) *& *(.*)/)[2].scan(/'([^']*)',?/).map do |x|
        x.first.gsub("@!!!!!@", "'")
      end
      @filters << [m[1], :list_include, lst.to_a]
    elsif m = arg.match(/^([a-zA-Z_-]+)$/)
      @filters << [m[1], :exists, nil]
    else
      raise InvalidQueryError.new("invalid filter: filter(#{arg})")
    end
  end

  def parse_time(str)
    return :now     if str == "now"
    return str.to_i if str =~ /^[0-9]+$/
+2 −2

File changed.

Contains only whitespace changes.

+1 −1

File changed.

Contains only whitespace changes.