1. 19 7月, 2017 2 次提交
    • R
      Fix type casting a time for MariaDB · 8a91fe00
      Ryuta Kamizono 提交于
      Context #24542.
      
      Since 8ebe1f2f, it has lost stripping date part for a time value. But I
      confirmed it is still needed even if MariaDB 10.2.6 GA.
      
      MariaDB 10.2.6, `prepared_statements: true`:
      
      ```
      % ARCONN=mysql2 be ruby -w -Itest test/cases/time_precision_test.rb -n test_formatting_time_according_to_precision
      Using mysql2
      Run options: -n test_formatting_time_according_to_precision --seed 37614
      
      F
      
      Failure:
      TimePrecisionTest#test_formatting_time_according_to_precision [test/cases/time_precision_test.rb:53]:
      Failed assertion, no message given.
      
      bin/rails test test/cases/time_precision_test.rb:46
      
      Finished in 0.040279s, 24.8268 runs/s, 24.8268 assertions/s.
      
      1 runs, 1 assertions, 1 failures, 0 errors, 0 skips
      ```
      8a91fe00
    • 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 3 次提交
    • 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
  4. 16 7月, 2017 7 次提交
  5. 15 7月, 2017 1 次提交
  6. 14 7月, 2017 2 次提交
  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 2 次提交
    • K
    • K
      * Don't eagerly require Rails' minitest plugin. · 0d72489b
      Kasper Timm Hansen 提交于
      By making the Rails minitest behave like a standard minitest plugin
      we're much more likely to not break when people use other minitest
      plugins. Like minitest-focus and pride.
      
      To do this, we need to behave like minitest: require files up front
      and then perform the plugin behavior via the at_exit hook.
      This also saves us a fair bit of wrangling with test file loading.
      
      Finally, since the environment and warnings options have to be applied
      as early as possible, and since minitest loads plugins at_exit, they
      have to be moved to the test command.
      
      * Don't expect the root method.
      
      It's likely this worked because we eagerly loaded the Rails minitest plugin
      and that somehow defined a root method on `Rails`.
      
      * Assign a backtrace to failed exceptions.
      
      Otherwise Minitest pukes when attempting to filter the backtrace (which
      Rails' backtrace cleaner then removes).
      
      Means the exception message test has to be revised too.
      
      This is likely caused by the rails minitest plugin now being loaded for
      these tests and assigning a default backtrace cleaner.
      0d72489b
  10. 08 7月, 2017 1 次提交
    • P
      Don't allow uuids with orphan curly braces · 38b04171
      pdebelak 提交于
      The uuid validation regex was allowing uuids to have a single leading
      curly brace or single trailing curly brace. Saving with such a uuid
      would cause Postgres to generate an exception even though the record
      seemed valid. With this change, the regex requires both a leading *and*
      a trailing curly brace or neither to be valid.
      38b04171
  11. 07 7月, 2017 6 次提交
  12. 06 7月, 2017 2 次提交
    • 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
      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
  13. 05 7月, 2017 1 次提交
  14. 04 7月, 2017 3 次提交