Created
August 26, 2014 08:50
-
-
Save mumoshu/d70eb4cefcdf02ed40bd to your computer and use it in GitHub Desktop.
bundle exec ruby ar_relation_test.rb
This file contains hidden or 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
| require 'active_record' | |
| require 'mysql2' | |
| require 'minitest/autorun' | |
| require 'logger' | |
| puts "ActiveRecord: #{ActiveRecord::VERSION::STRING}" | |
| ActiveRecord::Base.establish_connection(adapter: "mysql2", host: "localhost", database: "test") | |
| ActiveRecord::Base.logger = Logger.new(STDOUT) | |
| class Author < ActiveRecord::Base | |
| connection.create_table table_name, force: true do |t| | |
| t.string :name | |
| end | |
| has_many :posts | |
| end | |
| class Post < ActiveRecord::Base | |
| connection.create_table table_name, force: true do |t| | |
| t.column :author_id, :integer | |
| t.string :title | |
| t.string :body | |
| end | |
| belongs_to :author | |
| scope :failing_scope, -> { | |
| foo = Post.whose_title_is_foo.where_values.reduce(:and) | |
| bar = Post.whose_title_is_bar.where_values.reduce(:and) | |
| title_is_foo_or_bar = foo.or(bar).to_sql | |
| where(title_is_foo_or_bar) | |
| } | |
| scope :whose_title_is_foo, -> { where(title: 'foo') } | |
| scope :whose_title_is_bar, -> { where(title: 'bar') } | |
| end | |
| class BugTest < MiniTest::Unit::TestCase | |
| def test_select_values_works_with_arel_binds | |
| connection = ActiveRecord::Base.connection | |
| author = Author.create!(name: 'john') | |
| Post.create!(author: author, title: 'foo', body: 'bar') | |
| query = author.posts.select(:title) | |
| p author.posts.failing_scope | |
| args = [query] ## uncomment this line, and comment the next to fail | |
| # args = [query.arel, nil, query.bind_values] | |
| assert_equal({"title" => "foo"}, connection.select_one(*args)) | |
| end | |
| end |
This file contains hidden or 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
| MiniTest::Unit::TestCase is now Minitest::Test. From test.rb:37:in `<main>' | |
| ActiveRecord: 4.1.4 | |
| D, [2014-08-26T17:49:44.090093 #97160] DEBUG -- : [1m[36m (2.9ms)[0m [1mDROP TABLE `authors`[0m | |
| D, [2014-08-26T17:49:44.104548 #97160] DEBUG -- : [1m[35m (14.2ms)[0m CREATE TABLE `authors` (`id` int(11) auto_increment PRIMARY KEY, `name` varchar(255)) ENGINE=InnoDB | |
| D, [2014-08-26T17:49:44.111983 #97160] DEBUG -- : [1m[36m (1.7ms)[0m [1mDROP TABLE `posts`[0m | |
| D, [2014-08-26T17:49:44.121134 #97160] DEBUG -- : [1m[35m (9.0ms)[0m CREATE TABLE `posts` (`id` int(11) auto_increment PRIMARY KEY, `author_id` int(11), `title` varchar(255), `body` varchar(255)) ENGINE=InnoDB | |
| Run options: --seed 54347 | |
| # Running: | |
| D, [2014-08-26T17:49:44.147478 #97160] DEBUG -- : [1m[36m (0.1ms)[0m [1mBEGIN[0m | |
| D, [2014-08-26T17:49:44.152473 #97160] DEBUG -- : [1m[35mSQL (0.3ms)[0m INSERT INTO `authors` (`name`) VALUES ('john') | |
| D, [2014-08-26T17:49:44.153059 #97160] DEBUG -- : [1m[36m (0.3ms)[0m [1mCOMMIT[0m | |
| D, [2014-08-26T17:49:44.167574 #97160] DEBUG -- : [1m[35m (0.1ms)[0m BEGIN | |
| D, [2014-08-26T17:49:44.168458 #97160] DEBUG -- : [1m[36mSQL (0.1ms)[0m [1mINSERT INTO `posts` (`author_id`, `body`, `title`) VALUES (1, 'bar', 'foo')[0m | |
| D, [2014-08-26T17:49:44.168966 #97160] DEBUG -- : [1m[35m (0.4ms)[0m COMMIT | |
| E | |
| Finished in 0.047078s, 21.2413 runs/s, 0.0000 assertions/s. | |
| 1) Error: | |
| BugTest#test_select_values_works_with_arel_binds: | |
| NoMethodError: undefined method `reverse' for nil:NilClass | |
| /Users/mumoshu/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/activerecord-4.1.4/lib/active_record/connection_adapters/abstract/database_statements.rb:14:in `block in to_sql' | |
| /Users/mumoshu/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/arel-5.0.1.20140414130214/lib/arel/visitors/bind_visitor.rb:26:in `call' | |
| /Users/mumoshu/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/arel-5.0.1.20140414130214/lib/arel/visitors/bind_visitor.rb:26:in `visit_Arel_Nodes_BindParam' | |
| /Users/mumoshu/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/arel-5.0.1.20140414130214/lib/arel/visitors/visitor.rb:22:in `visit' | |
| /Users/mumoshu/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/arel-5.0.1.20140414130214/lib/arel/visitors/to_sql.rb:515:in `visit_Arel_Nodes_Equality' | |
| /Users/mumoshu/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/arel-5.0.1.20140414130214/lib/arel/visitors/visitor.rb:22:in `visit' | |
| /Users/mumoshu/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/arel-5.0.1.20140414130214/lib/arel/visitors/to_sql.rb:496:in `block in visit_Arel_Nodes_And' | |
| /Users/mumoshu/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/arel-5.0.1.20140414130214/lib/arel/visitors/to_sql.rb:496:in `map' | |
| /Users/mumoshu/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/arel-5.0.1.20140414130214/lib/arel/visitors/to_sql.rb:496:in `visit_Arel_Nodes_And' | |
| /Users/mumoshu/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/arel-5.0.1.20140414130214/lib/arel/visitors/visitor.rb:22:in `visit' | |
| /Users/mumoshu/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/arel-5.0.1.20140414130214/lib/arel/visitors/to_sql.rb:500:in `visit_Arel_Nodes_Or' | |
| /Users/mumoshu/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/arel-5.0.1.20140414130214/lib/arel/visitors/visitor.rb:22:in `visit' | |
| /Users/mumoshu/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/arel-5.0.1.20140414130214/lib/arel/visitors/to_sql.rb:343:in `visit_Arel_Nodes_Grouping' | |
| /Users/mumoshu/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/arel-5.0.1.20140414130214/lib/arel/visitors/visitor.rb:22:in `visit' | |
| /Users/mumoshu/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/arel-5.0.1.20140414130214/lib/arel/visitors/visitor.rb:5:in `accept' | |
| /Users/mumoshu/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/arel-5.0.1.20140414130214/lib/arel/visitors/bind_visitor.rb:11:in `accept' | |
| /Users/mumoshu/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/arel-5.0.1.20140414130214/lib/arel/nodes/node.rb:45:in `to_sql' | |
| test.rb:29:in `block in <class:Post>' | |
| /Users/mumoshu/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/activerecord-4.1.4/lib/active_record/scoping/named.rb:151:in `call' | |
| /Users/mumoshu/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/activerecord-4.1.4/lib/active_record/scoping/named.rb:151:in `block (2 levels) in scope' | |
| /Users/mumoshu/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/activerecord-4.1.4/lib/active_record/relation.rb:285:in `scoping' | |
| /Users/mumoshu/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/activerecord-4.1.4/lib/active_record/scoping/named.rb:151:in `block in scope' | |
| /Users/mumoshu/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/activerecord-4.1.4/lib/active_record/relation/delegation.rb:94:in `public_send' | |
| /Users/mumoshu/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/activerecord-4.1.4/lib/active_record/relation/delegation.rb:94:in `block in method_missing' | |
| /Users/mumoshu/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/activerecord-4.1.4/lib/active_record/associations/collection_proxy.rb:876:in `block in scoping' | |
| /Users/mumoshu/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/activerecord-4.1.4/lib/active_record/relation.rb:285:in `scoping' | |
| /Users/mumoshu/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/activerecord-4.1.4/lib/active_record/associations/collection_proxy.rb:876:in `scoping' | |
| /Users/mumoshu/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/activerecord-4.1.4/lib/active_record/relation/delegation.rb:94:in `method_missing' | |
| test.rb:43:in `test_select_values_works_with_arel_binds' | |
| 1 runs, 0 assertions, 0 failures, 1 errors, 0 skips |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment