1. 30 6月, 2017 1 次提交
  2. 29 6月, 2017 10 次提交
    • R
      Deprecate delegating to `arel` in `Relation` · d9fca84d
      Ryuta Kamizono 提交于
      Active Record doesn't rely delegating to `arel` in the internal since
      425f2cac. The delegation is a lower priority than delegating to `klass`,
      so it is pretty unclear which method is delegated to `arel`.
      
      For example, `bind_values` method was removed at b06f64c3 (a series of
      changes https://github.com/rails/rails/compare/79f71d3...b06f64c). But a
      relation still could respond to the method because `arel` also have the
      same named method (#28976).
      
      Removing the delegation will achieve predictable behavior.
      d9fca84d
    • R
      Should use the same connection in using query cache · abbc8351
      Ryuta Kamizono 提交于
      `test_cache_is_available_when_using_a_not_connected_connection` is
      always failed if running only the test since #29609.
      
      ```
      % ARCONN=mysql2 be ruby -w -Itest test/cases/query_cache_test.rb -n test_cache_is_available_when_using_a_not_connected_connection
      Using mysql2
      Run options: -n test_cache_is_available_when_using_a_not_connected_connection --seed 15043
      
      F
      
      Finished in 0.070519s, 14.1806 runs/s, 28.3612 assertions/s.
      
        1) Failure:
      QueryCacheTest#test_cache_is_available_when_using_a_not_connected_connection [test/cases/query_cache_test.rb:336]:
      2 instead of 1 queries were executed.
      Queries:
      SELECT  `tasks`.* FROM `tasks` WHERE `tasks`.`id` = ? LIMIT ?
      SET NAMES utf8 COLLATE utf8_unicode_ci,  @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ',STRICT_ALL_TABLES'), ',NO_AUTO_VALUE_ON_ZERO'),  @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483.
      Expected: 1
        Actual: 2
      
      1 runs, 2 assertions, 1 failures, 0 errors, 0 skips
      ```
      
      This failure is due to `LogSubscriber` will use not connected
      `ActiveRecord::Base.connection` even if `Task.connection` is connected.
      I fixed to always pass `type_casted_binds` to log subscriber to avoid
      the issue.
      abbc8351
    • R
      Fix to scoping is correctly restored · 99912ed9
      Ryuta Kamizono 提交于
      This regression was caused by #23004.
      
      If STI subclass is using scoping in parent class scoping,
      `current_scope` in subclass is never restored.
      I fixed to restore `current_scope` to previous value correctly.
      99912ed9
    • R
      Remove unused `aliased_table_name` in `Association` · 4aa4a449
      Ryuta Kamizono 提交于
      `aliased_table_name` in `Association` was added at a3502c41.
      `aliased_table_name` in `JoinDependency` (added at 55854c41) is used, but
      it looks like that added one in `Association` is never used from the
      beginning.
      4aa4a449
    • R
      Remove delegating to arel in a relation · 425f2cac
      Ryuta Kamizono 提交于
      The delegation was needed since passing `relation` with
      `relation.bound_attributes`. It should use `relation.arel` in that case.
      425f2cac
    • R
      Show query cache keys in `test_middleware_caches` · 4cf41833
      Ryuta Kamizono 提交于
      `test_middleware_caches` also failed same as #29600.
      
      https://travis-ci.org/rails/rails/jobs/248017174#L487-L489
      4cf41833
    • R
      b084fe90
    • T
      Enable query cache if set a configurations · 1b4360de
      Tsukasa OISHI 提交于
      ActiveRecord query cache is available when a connection is connected.
      Therefore, query cache is unavailable when entering the ActiveRecord::Base.cache block without being connected.
      
      ```ruby
      ActiveRecord::Base.cache do
        Task.find(1) # access to database.
        Task.find(1) # access to database. unavailable query cache
      end
      ```
      
      If we use query cache with batch script etc, we need to connect before that.
      ```ruby
      Task.connection
      
      ActiveRecord::Base.cache do
        Task.find(1) # access to database.
        Task.find(1) # available query cache
      end
      ```
      
      Before version 3.1, query cache had been enabled if a configuration was set up.
      In order to solve the `DATABASE_URL` issue(#8074), ActiveRecord has checked whether a connection is connected or not.
      
      Today, ActiveRecord.configurations respect `DATABASE_URL`.
      https://github.com/rails/rails/blob/master/activerecord/lib/active_record/core.rb#L46
      1b4360de
    • R
      Don't passing `klass.connection` to `AssociationScope` · eacec5de
      Ryuta Kamizono 提交于
      Passing `klass.connection` is redundant because `AssociationScope` is
      passed an association itself and an association has `klass`.
      eacec5de
    • R
      Add a test case for unscoping `default_scope` in associations · daec73aa
      Ryuta Kamizono 提交于
      Unscoping `default_scope` in associations has already supported (#17360
      for preloading, c9cf8b8d for eager loading).
      
      Fixes #20679.
      Closes #16531.
      daec73aa
  3. 28 6月, 2017 4 次提交
  4. 26 6月, 2017 1 次提交
  5. 25 6月, 2017 1 次提交
  6. 22 6月, 2017 4 次提交
  7. 21 6月, 2017 5 次提交
    • M
      Keep INNER JOIN when merging relations · 249ddd0c
      Maxime Lapointe 提交于
      Doing `Author.joins(:posts).merge(Post.joins(:comments))` does this
      `SELECT ... INNER JOIN posts ON... LEFT OUTER JOIN comments ON...`
      instead of doing
      `SELECT ... INNER JOIN posts ON... INNER JOIN comments ON...`.
      
      This behavior is unexpected and makes little sense as, basically, doing
      `Post.joins(:comments)` means I want posts that have comments. Turning
      it to a LEFT JOIN means I want posts and join the comments data, if
      any.
      
      We can see this problem directly in the existing tests.
      The test_relation_merging_with_merged_joins_as_symbols only does joins
      from posts to comments to ratings while the ratings fixture isn't
      loaded, but the count is non-zero.
      249ddd0c
    • J
      Clear offset cache on CollectionProxy reset/reload · c7f669af
      John Hawthorn 提交于
      The `@offsets` cache is used by FinderMethods to cache records found by
      find_nth. This cache is cleared in AR::Relation#reset, but not in
      CollectionProxy#reset or CollectionProxy#reload.
      
      Because of this, since #29098, calling #first/#find_nth/etc after
      calling #reload or #reset on an association could return a stale record.
      This is an issue both when the full association target is loaded and
      when the item is loaded in #find_nth.
      
      This commit solves the problem by clearing the `@offsets` cache in
      CollectionProxy#reset and CollectionProxy#reload.
      c7f669af
    • B
      Fix ActiveRecord::Persistence#touch with locking · 4d1264cb
      bogdanvlviv 提交于
      `ActiveRecord::Persistence#touch` does not work well when optimistic
      locking enabled and `locking_column`, without default value, is null in
      the database.
      4d1264cb
    • B
      Fix destroy with locking_column value null · f08bc757
      bogdanvlviv 提交于
      Fix destroying existing object does not work well when optimistic
      locking enabled and `locking column` is null in the database.
      
      Follow 22a822e5, #28914
      f08bc757
    • K
      Use bulk INSERT to insert fixtures · 4ee42379
      Kir Shatrov 提交于
      Improves the performance from O(n) to O(1).
      Previously it would require 50 queries to
      insert 50 fixtures. Now it takes only one query.
      
      Disabled on sqlite which doesn't support multiple inserts.
      4ee42379
  8. 20 6月, 2017 2 次提交
  9. 18 6月, 2017 2 次提交
  10. 17 6月, 2017 1 次提交
    • K
      Remove FK together with column in MySQL · 675a912e
      Kir Shatrov 提交于
      Unlike with other databses, MySQL doesn't let you remove the column
      if there's a FK on this column.
      
      For better developer experience we want to remove the FK together with
      the column.
      675a912e
  11. 16 6月, 2017 1 次提交
  12. 15 6月, 2017 7 次提交
    • E
      Don't map id to primary key in raw_write_attribute · 2e4fe3a4
      Eugene Kenny 提交于
      The `raw_write_attribute` method is used to update a record's attributes
      to reflect the new state of the database in `update_columns`. The hash
      provided to `update_columns` is turned into an UPDATE query directly,
      which means passing an `id` key results in an update to the `id` column,
      even if the model uses a different attribute as its primary key. When
      updating the record, we don't want to apply the `id` column change to
      the primary key attribute, since that's not what happened in the query.
      
      Without the code to handle this case, `write_attribute_with_type_cast`
      no longer contains any logic shared between `raw_write_attribute` and
      `write_attribute`, so we can inline the code into those two methods.
      2e4fe3a4
    • R
      Fix `dump_schema_information` with empty versions · 28b54c6b
      Ryuta Kamizono 提交于
      Fixes #29460.
      28b54c6b
    • D
    • R
    • R
      Fix `Relation#exists?` queries with query cache · 9276ebc7
      Ryuta Kamizono 提交于
      If a connection adapter overrides `select_*` methods, query caching will
      doesn't work. This patch changes `select_value` to `select_one` in
      `Relation#exists?` to ensure query caching.
      
      Fixes #29449.
      9276ebc7
    • R
      Add test cases for #28274 · 249fcbec
      Ryuta Kamizono 提交于
      `object.id` is correctly restored since #29378 has merged.
      
      Closes #28274, Closes #28395.
      
      [Ryuta Kamizono & Eugene Kenny]
      249fcbec
    • E
      Allow `uuid_test.rb` to be loaded on all adapters · b0180c91
      Eugene Kenny 提交于
      Running `bin/test` from the activerecord directory produces this error:
      
          test/cases/adapters/postgresql/uuid_test.rb:43:in `<class:PostgresqlUUIDTest>': undefined method `supports_pgcrypto_uuid?' for #<ActiveRecord::ConnectionAdapters::SQLite3Adapter:0x007fc405e72a68> (NoMethodError)
      
      The test only actually runs on the PostgreSQL adapter; we can avoid
      triggering the error on other adapters with this `respond_to?` guard.
      b0180c91
  13. 14 6月, 2017 1 次提交