1. 28 5月, 2019 12 次提交
    • R
      Don't round off subseconds unless necessary · 497e52f8
      Ryuta Kamizono 提交于
      Currently, if `:datetime` type has a precision, type casting always does
      round off subseconds regardless of whether necessary or not, it is a bit
      slow.
      
      Since #34970, `t.timestamps` with `precision: 6` by default, so
      `pluck(:created_at)` in newly created app will always be affected by the
      round off.
      
      This avoids the round off if possible, it makes `pluck(:created_at)`
      about 25% faster.
      
      https://gist.github.com/kamipo/e029539f2632aee9f5e711fe66fc8842
      
      Before (0a87d7c9 with postgresql adapter):
      
      ```
      Warming up --------------------------------------
          users.pluck(:id)      344.000  i/100ms
        users.pluck(:name)      336.000  i/100ms
      users.pluck(:created_at)  206.000  i/100ms
      Calculating -------------------------------------
          users.pluck(:id)      3.620k (± 8.5%) i/s -     18.232k in   5.077316s
        users.pluck(:name)      3.579k (± 9.4%) i/s -     17.808k in   5.020230s
      users.pluck(:created_at)  2.069k (± 8.0%) i/s -     10.300k in   5.019284s
      ```
      
      Before (0a87d7c9 with mysql2 adapter):
      
      ```
      Warming up --------------------------------------
          users.pluck(:id)      245.000  i/100ms
        users.pluck(:name)      240.000  i/100ms
      users.pluck(:created_at)  180.000  i/100ms
      Calculating -------------------------------------
          users.pluck(:id)      2.548k (± 9.4%) i/s -     12.740k in   5.066574s
        users.pluck(:name)      2.513k (± 8.0%) i/s -     12.480k in   5.011260s
      users.pluck(:created_at)  1.771k (±11.2%) i/s -      8.820k in   5.084473s
      ```
      
      After (this change with postgresql adapter):
      
      ```
      Warming up --------------------------------------
          users.pluck(:id)      348.000  i/100ms
        users.pluck(:name)      357.000  i/100ms
      users.pluck(:created_at)  254.000  i/100ms
      Calculating -------------------------------------
          users.pluck(:id)      3.628k (± 8.2%) i/s -     18.096k in   5.024748s
        users.pluck(:name)      3.624k (±12.4%) i/s -     17.850k in   5.020959s
      users.pluck(:created_at)  2.567k (± 7.0%) i/s -     12.954k in   5.081153s
      ```
      
      After (this change with mysql2 adapter):
      
      ```
      Warming up --------------------------------------
          users.pluck(:id)      268.000  i/100ms
        users.pluck(:name)      265.000  i/100ms
      users.pluck(:created_at)  207.000  i/100ms
      Calculating -------------------------------------
          users.pluck(:id)      2.586k (±10.9%) i/s -     12.864k in   5.050546s
        users.pluck(:name)      2.543k (±10.2%) i/s -     12.720k in   5.067726s
      users.pluck(:created_at)  2.263k (±14.5%) i/s -     10.971k in   5.004039s
      ```
      497e52f8
    • R
      Merge pull request #36350 from kamipo/fast_pluck · 0a87d7c9
      Ryuta Kamizono 提交于
      Allow symbol (i.e. quoted identifier) as safe SQL string
      0a87d7c9
    • R
      Allow symbol (i.e. quoted identifier) as safe SQL string · bc837892
      Ryuta Kamizono 提交于
      `pluck(:id)` / `order(:id)` are very common use case, and passed symbol
      (i.e. quoted identifier) is obviously safe argument, but
      `:id.to_s.split(/\s*,\s*/).all? { |part| permit.match?(part) }` is
      useless and a bit expensive operation for each such safe symbols (will
      make extra 2 mutable strings, 1 array, 1 proc).
      
      This avoids the expensive operation to such safe symbols, it makes
      `pluck(:id)` / `order(:id)` itself about 9% faster.
      
      https://gist.github.com/kamipo/11d428b57f3629a72ae89c6f21721326
      
      Before (93e64073):
      
      ```
      Warming up --------------------------------------
          users.pluck(:id)     1.217k i/100ms
      users.order(:id).to_sql  1.848k i/100ms
      Calculating -------------------------------------
          users.pluck(:id)     12.239k (± 8.2%) i/s -     60.850k in   5.013839s
      users.order(:id).to_sql  19.111k (± 7.5%) i/s -     96.096k in   5.064450s
      ```
      
      After (this change):
      
      ```
      Warming up --------------------------------------
          users.pluck(:id)     1.293k i/100ms
      users.order(:id).to_sql  2.036k i/100ms
      Calculating -------------------------------------
          users.pluck(:id)     13.257k (± 6.9%) i/s -     65.943k in   5.002568s
      users.order(:id).to_sql  20.957k (± 7.6%) i/s -    105.872k in   5.086102s
      ```
      bc837892
    • R
      Merge pull request #36348 from corprew/docs-stringify-keys-stable-result · 93e64073
      Ryuta Kamizono 提交于
      [documentation][ci skip] stringify_keys and symbolize_keys have stable results.
      93e64073
    • R
      Merge pull request #36347 from causztic/master · 5b5c6c13
      Ryuta Kamizono 提交于
      Remove unused requires from debug_exceptions
      5b5c6c13
    • C
      stringify_keys and symbolize_keys have stable results. · 82ee7a0f
      Corprew Reed 提交于
      Rails 6 uses the `Hash.transform_keys` found in Ruby 2.5 and later, and that method enumerates keys based on insertion order.  Calling `symbolize_keys`, `stringify_keys`, and their bang variants will result in the same hash every time -- the value for any key where a collision occurs is the last assigned in that enumeration
      
      In the docs for Hash --  https://ruby-doc.org/core-2.5.0/Hash.html
      
      > Hashes enumerate their values in the order that the corresponding keys were inserted.
      82ee7a0f
    • Y
      remove unused requires from debug_exceptions · 430d9317
      yaojie 提交于
      430d9317
    • P
      Merge pull request #36346 from corprew/day_of_week_doc_fix · e85eaf49
      Prem Sichanugrist 提交于
      [documentation][ci skip] changes 'Week day' to 'day of week'
      e85eaf49
    • C
      changes 'Week day' to 'day of week' · 2e3d374b
      Corprew Reed 提交于
      'Week day' has a specific meaning in English -- see https://en.wiktionary.org/wiki/weekday for details -- that is not meant here.  'Day of week' is more appropriate.
      
      [ci skip]
      2e3d374b
    • A
      ruby < 2.5 is no longer supported · f09ca65e
      Akira Matsuda 提交于
      f09ca65e
    • R
      Merge pull request #36345 from jhawthorn/weakref_reaper · 1da0e25b
      Rafael França 提交于
      Use WeakRef in Reaper to avoid leaking connection pools
      1da0e25b
    • J
      Use WeakRef to avoid leaking connection pools · 6302e56d
      John Hawthorn 提交于
      Prior to 3e2e8eeb the Reaper thread
      would hold a reference to connection pools indefinitely, preventing the
      connection pool from being garbage collected, and also leaking the
      Thread.
      
      Since 3e2e8eeb, there is only one Reaper
      Thread for all pools, however all pools are still stored in a class
      variable, preventing them from being garbage collected.
      
      This commit instead holds reference to the pools through a WeakRef. This
      way, connection pools referenced elsewhere will be reaped, any others
      will be able to be garbage collected.
      
      I don't love resorting to WeakRef to solve this, but I believe it's the
      simplest way to accomplish the the desired behaviour.
      6302e56d
  2. 27 5月, 2019 2 次提交
  3. 26 5月, 2019 1 次提交
  4. 25 5月, 2019 3 次提交
  5. 24 5月, 2019 8 次提交
  6. 23 5月, 2019 8 次提交
  7. 22 5月, 2019 6 次提交