1. 19 7月, 2017 1 次提交
    • S
      Don't convert dates to strings when using prepared statements in mysql · 8ebe1f2f
      Sean Griffin 提交于
      Dates are able to be natively handled by the mysql2 gem. libmysql (and
      the wire protocol) represent each portion of the date as an integer,
      which is significantly faster to encode and decode. By passing the Ruby
      date objects through directly, we can save a good bit of time and
      memory.
      8ebe1f2f
  2. 18 7月, 2017 8 次提交
  3. 17 7月, 2017 4 次提交
    • S
      Allow multiparameter assigned attributes to be used with `text_field` · 1519e976
      Sean Griffin 提交于
      Between 4.2 and 5.0 the behavior of how multiparameter attributes
      interact with `_before_type_cast` changed. In 4.2 it returns the
      post-type-cast value. After 5.0, it returns the hash that gets sent to
      the type. This behavior is correct, but will cause an issue if you then
      tried to render that value in an input like `text_field` or
      `hidden_field`.
      
      In this case, we want those fields to use the post-type-cast form,
      instead of the `_before_type_cast` (the main reason it uses
      `_before_type_cast` at all is to avoid losing data when casting a
      non-numeric string to integer).
      
      I've opted to modify `came_from_user?` rather than introduce a new
      method for this as I want to avoid complicating that contract further,
      and technically the multiparameter hash didn't come from assignment, it
      was constructed internally by AR.
      
      Close #27888.
      1519e976
    • S
      Post.joins(:users) should not be affected by `User.current_scope` · 5c71000d
      Sean Griffin 提交于
      This change was introduced by #18109. The intent of that change was to
      specifically apply `unscoped`, not to allow all changes to
      `current_scope` to affect the join. The idea of allowing `current_scope`
      to affect joins is interesting and potentially more consistent, but has
      sever problems associated with it. The fact that we're specifically
      stripping out joins indicates one such problem (and potentially leads to
      invalid queries).
      
      Ultimately it's difficult to reason about what `Posts.joins(:users)`
      actually means if it's affected by `User.current_scope`, and it's
      difficult to specifically control what does or doesn't get added. If we
      were starting from scratch, I don't think I'd have `joins` be affected
      by `default_scope` either, but that's too big of a breaking change to
      make at this point.
      
      With this change, we no longer apply `current_scope` when bringing in
      joins, with the singular exception of the motivating use case which
      introduced this bug, which is providing a way to *opt-out* of having the
      default scope apply to joins.
      
      Fixes #29338.
      5c71000d
    • R
      Remove useless `arel_engine` · a0ebab52
      Ryuta Kamizono 提交于
      `arel_engine` is only used in `raise_record_not_found_exception!` to use
      `engine.connection` (and `connection.visitor`) in `arel.where_sql`.
      
      https://github.com/rails/arel/blob/v8.0.0/lib/arel/select_manager.rb#L183
      
      But `klass.connection` will work as expected even if not using
      `arel_engine` (described by `test_connection`). So `arel_engine` is no
      longer needed.
      a0ebab52
    • R
      Enable `Layout/FirstParameterIndentation` cop · 4183d5df
      Ryuta Kamizono 提交于
      We have some indentation cops. But now there is a little inconsistent
      params indentations. Enable `Layout/FirstParameterIndentation` cop to
      prevent newly inconsistent indentation added and auto-correct to
      existing violations.
      4183d5df
  4. 16 7月, 2017 4 次提交
    • R
      Don't cache `scope_for_create` · d476553d
      Ryuta Kamizono 提交于
      I investigated where `scope_for_create` is reused in tests with the
      following code:
      
      ```diff
      --- a/activerecord/lib/active_record/relation.rb
      +++ b/activerecord/lib/active_record/relation.rb
      @@ -590,6 +590,10 @@ def where_values_hash(relation_table_name = table_name)
           end
      
           def scope_for_create
      +      if defined?(@scope_for_create) && @scope_for_create
      +        puts caller
      +        puts "defined"
      +      end
             @scope_for_create ||= where_values_hash.merge!(create_with_value.stringify_keys)
           end
      ```
      
      It was hit only `test_scope_for_create_is_cached`. This means that
      `scope_for_create` will not be reused in normal use cases. So we can
      remove caching `scope_for_create` to respect changing `where_clause` and
      `create_with_value`.
      d476553d
    • R
      Fix `create_with` with multiparameter attributes · 57e9495e
      Ryuta Kamizono 提交于
      57e9495e
    • R
      Fix `create_with` using both string and symbol · 01c85097
      Ryuta Kamizono 提交于
      This is related with #27680.
      
      Since `where_values_hash` keys constructed by `where` are string, so we
      need `stringify_keys` to `create_with_value` before merging it.
      01c85097
    • R
      Use `where(id: 10)` rather than `where(relation.table[:id].eq(10))` · 189b8a06
      Ryuta Kamizono 提交于
      Because Arel is a private API and to describe `where_values_hash` keys
      constructed by `where` are string.
      189b8a06
  5. 15 7月, 2017 3 次提交
  6. 14 7月, 2017 3 次提交
  7. 13 7月, 2017 1 次提交
  8. 12 7月, 2017 1 次提交
    • L
      Change sqlite3 boolean serialization to use 1 and 0 · 52e050ed
      Lisa Ugray 提交于
      Abstract boolean serialization has been using 't' and 'f', with MySQL
      overriding that to use 1 and 0.
      
      This has the advantage that SQLite natively recognizes 1 and 0 as true
      and false, but does not natively recognize 't' and 'f'.
      
      This change in serialization requires a migration of stored boolean data
      for SQLite databases, so it's implemented behind a configuration flag
      whose default false value is deprecated. The flag itself can be
      deprecated in a future version of Rails.  While loaded models will give
      the correct result for boolean columns without migrating old data,
      where() clauses will interact incorrectly with old data.
      
      While working in this area, also change the abstract adapter to use
      `"TRUE"` and `"FALSE"` as quoted values and `true` and `false` for
      unquoted.  These are supported by PostreSQL, and MySQL remains
      overriden.
      52e050ed
  9. 11 7月, 2017 1 次提交
  10. 08 7月, 2017 3 次提交
  11. 07 7月, 2017 4 次提交
  12. 06 7月, 2017 4 次提交
    • E
      Skip query cache for in_batches and friends · 6658e374
      Eugene Kenny 提交于
      The `find_each`, `find_in_batches` and `in_batches` APIs usually operate
      on large numbers of records, where it's preferable not to load them all
      into memory at once.
      
      If the query cache is enabled, it will hold onto the query results until
      the end of the execution context (request/job), which means the memory
      used is still proportional to the total number of records. These queries
      are typically not repeated, so the query cache isn't desirable here.
      6658e374
    • D
      Fix indentation style for private method. · 06e89c92
      Dennis Taylor 提交于
      06e89c92
    • D
      Don't translate non-database exceptions. · ad0bde58
      Dennis Taylor 提交于
      The AbstractAdapter will translate all StandardErrors generated during the course of a query into ActiveRecord::StatementInvalids. Unfortunately, it'll also mangle non-database-related errors generated in ActiveSupport::Notification callbacks after the query has successfully completed. This should prevent it from translating errors from ActiveSupport::Notifications.
      ad0bde58
    • L
      Fix `ActiveModel::Type::DateTime#serialize` · 7b2dfdea
      Lisa Ugray 提交于
      `ActiveModel::Type::DateTime#serialize` should return a `Time` object
      so that finding by a datetime column works correctly.
      7b2dfdea
  13. 04 7月, 2017 2 次提交
  14. 02 7月, 2017 1 次提交