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