class ExplainTest

Public Instance Methods

base() click to toggle source
# File activerecord/test/cases/explain_test.rb, line 11
def base
  ActiveRecord::Base
end
connection() click to toggle source
# File activerecord/test/cases/explain_test.rb, line 15
def connection
  base.connection
end
test_collecting_queries_for_explain() click to toggle source
# File activerecord/test/cases/explain_test.rb, line 24
def test_collecting_queries_for_explain
  queries = ActiveRecord::Base.collecting_queries_for_explain do
    Car.where(name: "honda").to_a
  end

  sql, binds = queries[0]
  assert_match "SELECT", sql
  if binds.any?
    assert_equal 1, binds.length
    assert_equal "honda", binds.last.value
  else
    assert_match "honda", sql
  end
end
test_exec_explain_with_binds() click to toggle source
# File activerecord/test/cases/explain_test.rb, line 50
    def test_exec_explain_with_binds
      sqls    = %w(foo bar)
      binds   = [[bind_param("wadus", 1)], [bind_param("chaflan", 2)]]
      queries = sqls.zip(binds)

      stub_explain_for_query_plans(["query plan foo\n", "query plan bar\n"]) do
        expected = <<-SQL.strip_heredoc
          EXPLAIN for: #{sqls[0]} [["wadus", 1]]
          query plan foo

          EXPLAIN for: #{sqls[1]} [["chaflan", 2]]
          query plan bar
        SQL
        assert_equal expected, base.exec_explain(queries)
      end
    end
test_exec_explain_with_no_binds() click to toggle source
# File activerecord/test/cases/explain_test.rb, line 39
def test_exec_explain_with_no_binds
  sqls    = %w(foo bar)
  binds   = [[], []]
  queries = sqls.zip(binds)

  stub_explain_for_query_plans do
    expected = sqls.map { |sql| "EXPLAIN for: #{sql}\nquery plan #{sql}" }.join("\n")
    assert_equal expected, base.exec_explain(queries)
  end
end
test_relation_explain() click to toggle source
# File activerecord/test/cases/explain_test.rb, line 19
def test_relation_explain
  message = Car.where(name: "honda").explain
  assert_match(/^EXPLAIN for:/, message)
end
test_unsupported_connection_adapter() click to toggle source
# File activerecord/test/cases/explain_test.rb, line 67
def test_unsupported_connection_adapter
  connection.stub(:supports_explain?, false) do
    assert_not_called(base.logger, :warn) do
      Car.where(name: "honda").to_a
    end
  end
end

Private Instance Methods

bind_param(name, value) click to toggle source
# File activerecord/test/cases/explain_test.rb, line 85
def bind_param(name, value)
  ActiveRecord::Relation::QueryAttribute.new(name, value, ActiveRecord::Type::Value.new)
end
stub_explain_for_query_plans(query_plans = ["query plan foo", "query plan bar"]) { || ... } click to toggle source
# File activerecord/test/cases/explain_test.rb, line 77
def stub_explain_for_query_plans(query_plans = ["query plan foo", "query plan bar"])
  explain_called = 0

  connection.stub(:explain, proc { explain_called += 1; query_plans[explain_called - 1] }) do
    yield
  end
end