1. 29 8月, 2018 1 次提交
    • E
      Drop load_database_yaml and fix test · 6b5df90f
      Eileen Uchitelle 提交于
      We originally did the whole `load_database_yaml` thing because this test
      wasn't cooperating and we needed to finish the namespaced rake tasks for
      multiple databases.
      
      However, it turns out that YAML can't eval ERB if you don't tell it it's
      ERB so you get Pysch parse errors if you're using multi-line ERB or
      ERB with conditionals. It's a hot mess.
      
      After trying a few things and thinking it over we decided that it wasn't
      worth bandaiding over, the test needed to be improved. The test was
      added in #31135 to test that the env is loaded in these tasks. But it
      was blowing up because we were trying to read a database name out of the
      configuration - however that's not the purpose of this change. We want
      to read environment files in the rake tasks, but not in the config
      file.
      
      In this PR we changed the test to test what the PR was actually fixing.
      We've also deleted the `load_database_yaml` because it caused more
      problems than it was worth. This should fix the issues described in
      https://github.com/rails/rails/pull/32274#issuecomment-384161057. We
      also had these problems at GitHub.
      Co-authored-by: Nalimi <aibrahim2k2@gmail.com>
      6b5df90f
  2. 28 8月, 2018 2 次提交
    • Y
      Mutation tracker should be cleared before continuing around callbacks · 34f075fe
      Yuya Tanaka 提交于
      `changes_applied` should be called before continuing around callback
      chain. Otherwise the mutation tracker returns old value for methods like
      `changed`? or `id_in_database` in around callbacks. Also methods depend
      on `id_in_database`, like `update_column`, are not working in
      `around_create` callbacks.
      
      ```
      class Foo < ActiveRecord::Base
        around_create :around_create_callback
      
        def around_create_callback
          ...
          yield
          p id_in_database # => nil
          update_column(:generated_column, generate_value) # silently fails
        end
      
        ...
      end
      ```
      34f075fe
    • N
      Add documentation for `:collation` column option (#33733) · 626958ce
      Nate Pinsky 提交于
      * Add documentation for `:collation` option
      
      The table definition supports a `:collation` option for string and text columns, but this is not documented anywhere that I could find.
      
      I'm not sure if the "If not specified" part is accurate. From [this PR](https://github.com/rails/rails/commit/1515c4d98da3f730ef971fa5a13cad828bd9bef4), it looks like it passes `nil` and lets the database handle the collation, but I'm happy to change it if I misread the code.
      
      [ci skip]
      
      * FIX remove whitespace
      
      [Nate Pinsky + Rafael Mendonça França]
      626958ce
  3. 27 8月, 2018 1 次提交
  4. 25 8月, 2018 4 次提交
  5. 23 8月, 2018 1 次提交
  6. 22 8月, 2018 2 次提交
  7. 20 8月, 2018 4 次提交
  8. 19 8月, 2018 4 次提交
  9. 15 8月, 2018 3 次提交
  10. 14 8月, 2018 2 次提交
  11. 13 8月, 2018 4 次提交
    • E
      Omit BEGIN/COMMIT statements for empty transactions · 0ac81ee6
      Eugene Kenny 提交于
      If a transaction is opened and closed without any queries being run, we
      can safely omit the `BEGIN` and `COMMIT` statements, as they only exist
      to modify the connection's behaviour inside the transaction. This
      removes the overhead of those statements when saving a record with no
      changes, which makes workarounds like `save if changed?` unnecessary.
      
      This implementation buffers transactions inside the transaction manager
      and materializes them the next time the connection is used. For this to
      work, the adapter needs to guard all connection use with a call to
      `materialize_transactions`. Because of this, adapters must opt in to get
      this new behaviour by implementing `supports_lazy_transactions?`.
      
      If `raw_connection` is used to get a reference to the underlying
      database connection, the behaviour is disabled and transactions are
      opened eagerly, as we can't know how the connection will be used.
      However when the connection is checked back into the pool, we can assume
      that the application won't use the reference again and reenable lazy
      transactions. This prevents a single `raw_connection` call from
      disabling lazy transactions for the lifetime of the connection.
      0ac81ee6
    • R
      Fix numericality validator not to be affected by custom getter · 2fece903
      Ryuta Kamizono 提交于
      Since fe9547b6, numericality validator would parse raw value only when a
      value came from user to work type casting to a value from database.
      
      But that was caused a regression that the validator would work against
      getter value instead of parsed raw value, a getter is sometimes
      customized by people. #33550
      
      There we never guarantees that the value before type cast was going to
      the used in this validation (actually here is only place that getter
      value might not be used), but we should not change the behavior unless
      there is some particular reason.
      
      The purpose of fe9547b6 is to work type casting to a value from
      database. We could achieve the purpose by using `read_attribute`,
      without using getter value.
      
      Fixes #33550.
      2fece903
    • U
      Add method_call_assertions and use them instead of Mocha · a72bca82
      utilum 提交于
      Six Mocha calls prove quite resistant to Minitestification. For example,
      if we replace
      
      ```
        ActiveRecord::Associations::HasManyAssociation
          .any_instance
          .expects(:reader)
          .never
      ```
      
      with `assert_not_called`, Minitest wisely raises
      
      ```
      NameError: undefined method `reader' for class `ActiveRecord::Associations::HasManyAssociation'
      ```
      
      as `:reader` comes from a deeply embedded abstract class,
      `ActiveRecord::Associations::CollectionAssociation`.
      
      This patch tackles this difficulty by adding
      `ActiveSupport::Testing::MethodCallAsserts#assert_called_on_instance_of`
      which injects a stubbed method into `klass`, and verifies the number of
      times it is called, similar to `assert_called`. It also adds  a convenience
      method, `assert_not_called_on_instance_of`, mirroring
      `assert_not_called`.
      
      It uses the new method_call_assertions to replace the remaining Mocha
      calls in `ActiveRecord` tests.
      
      [utilum + bogdanvlviv + kspath]
      a72bca82
    • U
      Stub with Minitest and test with MethodCallAssertions · bef6c8bb
      utilum 提交于
      bef6c8bb
  12. 11 8月, 2018 2 次提交
  13. 08 8月, 2018 2 次提交
  14. 03 8月, 2018 1 次提交
  15. 02 8月, 2018 3 次提交
  16. 01 8月, 2018 3 次提交
  17. 31 7月, 2018 1 次提交
    • R
      Avoid extra scoping when using `Relation#update` · c83e30da
      Ryuta Kamizono 提交于
      Since 9ac7dd47, class level `update`, `destroy`, and `delete` were placed
      in the `Persistence` module as class methods.
      
      But `Relation#update` without passing ids which was introduced at #11898
      is not a class method, and it was caused the extra scoping regression
      #33470.
      
      I moved the relation method back into the `Relation` to fix the
      regression.
      
      Fixes #33470.
      c83e30da