Class: Hotdog::Commands::Search::UnaryExpressionNode

Inherits:
ExpressionNode show all
Defined in:
lib/hotdog/commands/search.rb

Instance Method Summary collapse

Constructor Details

#initialize(op, expression) ⇒ UnaryExpressionNode



180
181
182
183
# File 'lib/hotdog/commands/search.rb', line 180

def initialize(op, expression)
  @op = op
  @expression = expression
end

Instance Method Details

#evaluate(environment) ⇒ Object



184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
# File 'lib/hotdog/commands/search.rb', line 184

def evaluate(environment)
  case @op
  when "!", "~", /\Anot\z/i
    values = @expression.evaluate(environment)
    if values.empty?
      environment.execute("        SELECT DISTINCT host_id FROM hosts_tags;\n      EOS\n    else\n      environment.execute(<<-EOS % values.map { \"?\" }.join(\", \"), values).map { |row| row.first }\n        SELECT DISTINCT host_id FROM hosts_tags WHERE host_id NOT IN (%s);\n      EOS\n    end\n  else\n    raise(SyntaxError.new(\"unknown unary operator: \#{@op}\"))\n  end\nend\n").map { |row| row.first }