class RunQueryJob

Public Class Methods

===(other) click to toggle source
# File natural-backend/app/jobs/run_query_job.rb, line 6
def self.===(other)
  @block.call(other)
end

Public Instance Methods

exceptions_matching(&block) click to toggle source
# File natural-backend/app/jobs/run_query_job.rb, line 4
def exceptions_matching(&block)
  Class.new do
    def self.===(other)
      @block.call(other)
    end
  end.tap do |c|
    c.instance_variable_set(:@block, block)
  end
end
perform(query) click to toggle source
# File natural-backend/app/jobs/run_query_job.rb, line 14
def perform(query)
  db_user = ::Natural::DatabaseUser.new(query.database.project.db_username,
                                      query.database.project.db_password)
  db = ::Natural::Database.new(query.database.database_identifier)

  connection = ::Natural::Connection.new
  connection.db_user = db_user
  connection.database = db

  connection.establish_connection

  begin
    result = connection.exec(query.request_data).values
    query.update_attribute(:response_data, result)
  rescue exceptions_matching { |e| e.class.name.split('::')[0] == 'PG' } => e
    # TODO: Add error field to query and render a 500 + error message in queries#create in case of an error
    query.update_attribute(:response_data, {error: e.message})
  ensure
    connection.close
  end
end