Created
June 3, 2014 14:41
-
-
Save SebastianZaha/6feeffe2660f2c61362d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
unless File.exist?('Gemfile') | |
File.write('Gemfile', <<-GEMFILE) | |
source 'https://rubygems.org' | |
gem 'rails', github: 'rails/rails' | |
gem 'arel', github: 'rails/arel' | |
gem 'sqlite3' | |
GEMFILE | |
system 'bundle' | |
end | |
require 'bundler' | |
Bundler.setup(:default) | |
require 'active_record' | |
require 'minitest/autorun' | |
require 'logger' | |
# This connection will do for database-independent bug reports. | |
ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: ':memory:') | |
ActiveRecord::Base.logger = Logger.new(STDOUT) | |
ActiveRecord::Schema.define do | |
create_table :t1s do |t| | |
end | |
create_table :t2s do |t| | |
t.integer :t1_id | |
end | |
create_table :t3s do |t| | |
t.integer :t2_id | |
end | |
create_table :t4s do |t| | |
t.integer :t3_id | |
end | |
create_table :t5s do |t| | |
t.integer :t4_id | |
end | |
end | |
class T1 < ActiveRecord::Base | |
end | |
class T2 < ActiveRecord::Base | |
belongs_to :t1 | |
end | |
class T3 < ActiveRecord::Base | |
belongs_to :t2 | |
end | |
class T4 < ActiveRecord::Base | |
belongs_to :t3 | |
end | |
class T5 < ActiveRecord::Base | |
belongs_to :t4 | |
end | |
class BugTest < Minitest::Test | |
def test_merge_joins | |
t1 = T1.create | |
rel1 = T1.where(id: t1.id) | |
assert_equal(rel1.to_sql, 'SELECT "t1s".* FROM "t1s" WHERE "t1s"."id" = 1') | |
rel2 = T2.joins(:t1).merge(rel1) | |
puts rel2.to_sql | |
assert(rel2.to_sql.index('FROM "t2s"') < rel2.to_sql.index('JOIN "t1s"')) | |
rel3 = T3.joins(:t2).merge(rel2) | |
puts rel3.to_sql | |
assert(rel3.to_sql.index('JOIN "t2s"') < rel3.to_sql.index('JOIN "t1s"')) | |
rel4 = T4.joins(:t3).merge(rel3) | |
puts rel4.to_sql | |
assert(rel4.to_sql.index('JOIN "t3s"') < rel4.to_sql.index('JOIN "t2s"')) | |
assert(rel4.to_sql.index('JOIN "t2s"') < rel4.to_sql.index('JOIN "t1s"')) | |
# Raises ActiveRecord::ConfigurationError | |
rel5 = T5.joins(:t4).merge(rel4) | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment