blob: b9794c571001e8c10c40f30cb9a1e0b64caeacfc (
plain) (
tree)
|
|
# frozen_string_literal: true
require "cases/helper"
require "models/post"
if supports_optimizer_hints?
class Mysql2OptimzerHintsTest < ActiveRecord::Mysql2TestCase
fixtures :posts
def test_optimizer_hints
assert_sql(%r{\ASELECT /\*\+ NO_RANGE_OPTIMIZATION\(posts index_posts_on_author_id\) \*/}) do
posts = Post.optimizer_hints("NO_RANGE_OPTIMIZATION(posts index_posts_on_author_id)")
posts = posts.select(:id).where(author_id: [0, 1])
assert_includes posts.explain, "| index | index_posts_on_author_id | index_posts_on_author_id |"
end
end
def test_optimizer_hints_is_sanitized
assert_sql(%r{\ASELECT /\*\+ NO_RANGE_OPTIMIZATION\(posts index_posts_on_author_id\) \*/}) do
posts = Post.optimizer_hints("/*+ NO_RANGE_OPTIMIZATION(posts index_posts_on_author_id) */")
posts = posts.select(:id).where(author_id: [0, 1])
assert_includes posts.explain, "| index | index_posts_on_author_id | index_posts_on_author_id |"
end
assert_sql(%r{\ASELECT /\*\+ `posts`\.\*, \*/}) do
posts = Post.optimizer_hints("**// `posts`.*, //**")
posts = posts.select(:id).where(author_id: [0, 1])
assert_equal({ "id" => 1 }, posts.first.as_json)
end
end
def test_optimizer_hints_with_unscope
assert_sql(%r{\ASELECT `posts`\.`id`}) do
posts = Post.optimizer_hints("/*+ NO_RANGE_OPTIMIZATION(posts index_posts_on_author_id) */")
posts = posts.select(:id).where(author_id: [0, 1])
posts.unscope(:optimizer_hints).load
end
end
end
end
|