1. 18 5月, 2019 1 次提交
  2. 15 5月, 2019 1 次提交
  3. 13 5月, 2019 1 次提交
    • R
      Don't track implicit `touch` mutation · dcb82590
      Ryuta Kamizono 提交于
      This partly reverts the effect of d1107f4d.
      
      d1107f4d makes `touch` tracks the mutation whether the `touch` is
      occurred by explicit or not.
      
      Existing apps expects that the previous changes tracks only the changes
      which is explicit action by users.
      
      I'd revert the implicit `touch` mutation tracking since I'd not like to
      break existing apps.
      
      Fixes #36219.
      dcb82590
  4. 12 5月, 2019 2 次提交
  5. 07 5月, 2019 3 次提交
    • Y
      Remove ignored_sql from SQLCounter by adding "TRANSACTION" to log name · 6a32e8aa
      Yasuo Honda 提交于
      This commit adds "TRANSACTION" to savepoint and commit, rollback statements
      because none of savepoint statements were removed by #36153 since they are not "SCHEMA" statements.
      
      Although, only savepoint statements can be labeled as "TRANSACTION"
      I think all of transaction related method should add this label.
      
      Follow up #36153
      6a32e8aa
    • A
      Properly give defaults for DatabaseSelector options · cecbc234
      Akira Matsuda 提交于
      The initializer receives `nil` for these options when no cofigurations were given:
      https://github.com/rails/rails/blob/v6.0.0.rc1/activerecord/lib/active_record/railtie.rb#L91-L97
      cecbc234
    • R
      Should attempt `committed!`/`rolledback!` to all enrolled records in the transaction · 718a32ca
      Ryuta Kamizono 提交于
      Currently, `committed!`/`rolledback!` will only be attempted for the
      first enrolled record in the transaction, that will cause some
      problematic behaviors.
      
      The first one problem, `clear_transaction_record_state` won't be called
      even if the transaction is finalized except the first enrolled record.
      This means that de-duplicated records in the transaction won't refer
      latest state (e.g. won't happen rolling back record state).
      
      The second one problem, the enrolled order is not always the same as the
      order in which the actions actually happened, the first enrolled record
      may succeed no actions (e.g. `destroy` has already succeeded on another
      record during `before_destroy`), it will lose to fire any transactional
      callbacks.
      
      To avoid both problems, we should attempt `committed!`/`rolledback!` to
      all enrolled records in the transaction.
      718a32ca
  6. 02 5月, 2019 2 次提交
  7. 30 4月, 2019 2 次提交
  8. 29 4月, 2019 1 次提交
  9. 27 4月, 2019 1 次提交
    • R
      Fix merging left_joins to maintain its own `join_type` context · 20ede2e2
      Ryuta Kamizono 提交于
      This fixes a regression for #35864.
      
      Usually, stashed joins (mainly eager loading) are performed as LEFT
      JOINs.
      But the case of merging joins/left_joins of different class, that
      (stashed) joins are performed as the same `join_type` as the parent
      context for now.
      Since #35864, both (joins/left_joins) stashed joins might be contained
      in `joins_values`, so each stashed joins should maintain its own
      `join_type` context.
      
      Fixes #36103.
      20ede2e2
  10. 25 4月, 2019 2 次提交
  11. 24 4月, 2019 8 次提交
  12. 22 4月, 2019 5 次提交
    • R
      5454cc40
    • R
      70e255b9
    • R
      Remove useless `set_value` / `get_value` helper methods · 89b86640
      Ryuta Kamizono 提交于
      Those helper methods makes relation values access 15% slower.
      
      https://gist.github.com/kamipo/e64439f7a206e1c5b5c69d92d982828e
      
      Before (02b5b8cb):
      
      ```
      Warming up --------------------------------------
              #limit_value   237.074k i/100ms
          #limit_value = 1   222.052k i/100ms
      Calculating -------------------------------------
              #limit_value      6.477M (± 2.9%) i/s -     32.479M in   5.019475s
          #limit_value = 1      5.297M (± 4.3%) i/s -     26.424M in   4.999933s
      ```
      
      After (this change):
      
      ```
      Warming up --------------------------------------
              #limit_value   261.109k i/100ms
          #limit_value = 1   239.646k i/100ms
      Calculating -------------------------------------
              #limit_value      7.412M (± 1.6%) i/s -     37.077M in   5.003345s
          #limit_value = 1      6.134M (± 1.0%) i/s -     30.675M in   5.000908s
      ```
      89b86640
    • R
      PERF: 20% faster pk attribute access · b6828fc9
      Ryuta Kamizono 提交于
      I've realized that `user.id` is 20% slower than `user.name` in the
      benchmark (https://github.com/rails/rails/pull/35987#issuecomment-483882480).
      
      The reason that performance difference is that `self.class.primary_key`
      method call is a bit slow.
      
      Avoiding that method call will make almost attribute access faster and
      `user.id` will be completely the same performance with `user.name`.
      
      Before (02b5b8cb):
      
      ```
      Warming up --------------------------------------
                   user.id   140.535k i/100ms
                user['id']    96.549k i/100ms
                 user.name   158.110k i/100ms
              user['name']    94.507k i/100ms
             user.changed?    19.003k i/100ms
       user.saved_changes?    25.404k i/100ms
      Calculating -------------------------------------
                   user.id      2.231M (± 0.9%) i/s -     11.243M in   5.040066s
                user['id']      1.310M (± 1.3%) i/s -      6.565M in   5.012607s
                 user.name      2.683M (± 1.2%) i/s -     13.439M in   5.009392s
              user['name']      1.322M (± 0.9%) i/s -      6.615M in   5.003239s
             user.changed?    201.999k (±10.9%) i/s -      1.007M in   5.091195s
       user.saved_changes?    258.214k (±17.1%) i/s -      1.245M in   5.007421s
      ```
      
      After (this change):
      
      ```
      Warming up --------------------------------------
                   user.id   158.364k i/100ms
                user['id']   106.412k i/100ms
                 user.name   158.644k i/100ms
              user['name']   107.518k i/100ms
             user.changed?    19.082k i/100ms
       user.saved_changes?    24.886k i/100ms
      Calculating -------------------------------------
                   user.id      2.768M (± 1.1%) i/s -     13.936M in   5.034957s
                user['id']      1.507M (± 2.1%) i/s -      7.555M in   5.017211s
                 user.name      2.727M (± 1.5%) i/s -     13.643M in   5.004766s
              user['name']      1.521M (± 1.3%) i/s -      7.634M in   5.018321s
             user.changed?    200.865k (±11.1%) i/s -    992.264k in   5.044868s
       user.saved_changes?    269.652k (±10.5%) i/s -      1.344M in   5.077972s
      ```
      b6828fc9
    • R
      Remove never used `database_selector` class accessor · 02b5b8cb
      Ryuta Kamizono 提交于
      It was never used from the beginning.
      02b5b8cb
  13. 21 4月, 2019 1 次提交
    • R
      Avoid method call if `@transaction_state` is not finalized · f9326e56
      Ryuta Kamizono 提交于
      Method call in Ruby is a bit slow.
      
      This makes attribute access 10% faster by avoiding method call
      (`sync_with_transaction_state`).
      
      Before (96cf7e0e):
      
      ```
      Warming up --------------------------------------
                   user.id   131.291k i/100ms
                user['id']    91.786k i/100ms
                 user.name   151.605k i/100ms
              user['name']    92.664k i/100ms
             user.changed?    17.772k i/100ms
       user.saved_changes?    23.909k i/100ms
      Calculating -------------------------------------
                   user.id      1.988M (± 7.0%) i/s -      9.978M in   5.051474s
                user['id']      1.155M (± 5.8%) i/s -      5.783M in   5.022672s
                 user.name      2.450M (± 4.3%) i/s -     12.280M in   5.021234s
              user['name']      1.263M (± 2.1%) i/s -      6.394M in   5.066638s
             user.changed?    175.070k (±13.3%) i/s -    853.056k in   5.011555s
       user.saved_changes?    259.114k (±11.8%) i/s -      1.267M in   5.001260s
      ```
      
      After (this change):
      
      ```
      Warming up --------------------------------------
                   user.id   137.625k i/100ms
                user['id']    96.054k i/100ms
                 user.name   156.379k i/100ms
              user['name']    94.795k i/100ms
             user.changed?    18.172k i/100ms
       user.saved_changes?    24.337k i/100ms
      Calculating -------------------------------------
                   user.id      2.201M (± 0.5%) i/s -     11.010M in   5.002955s
                user['id']      1.320M (± 1.0%) i/s -      6.628M in   5.021293s
                 user.name      2.677M (± 1.6%) i/s -     13.449M in   5.024399s
              user['name']      1.314M (± 1.8%) i/s -      6.636M in   5.051444s
             user.changed?    190.588k (±11.1%) i/s -    944.944k in   5.065848s
       user.saved_changes?    262.782k (±12.1%) i/s -      1.290M in   5.028080s
      ```
      f9326e56
  14. 20 4月, 2019 3 次提交
    • A
    • E
      Remove description for namespaced `db:migrate:up` · 5cc74660
      eileencodes 提交于
      This was accidentally left in, the standard `db:migrate:up` doesn't have
      a description so `db:migrate:up:namespace` shouldn't have one either.
      5cc74660
    • E
      Handle up/down for multiple databases · f9244c65
      eileencodes 提交于
      This change adds the ability to run up/down for a database in a multi-db
      environment.
      
      If you have an app with a primary and animals database the following
      tasks will be generated:
      
      ```
      VERSION=123 rake db:migrate:up:primary
      VERSION=123 rake db:migrate:up:primary
      
      VERSION=123 rake db:migrate:down:primary
      VERSION=123 rake db:migrate:up:animals
      ```
      
      I didn't generate descriptions with them since we don't generate a
      description for a single database application.
      
      In addition to this change I've made it so if your application has
      multiple databases Rails will raise if you try to run `up` or `down`
      without a namespace. This is because we don't know which DB you want to
      run `up` or `down` against unless the app tells us, so it's safer to
      just block it and recommend using namespaced versions of up/down
      respectively.
      
      The output for the raise looks like:
      
      ```
      You're using a multiple database application. To use `db:migrate:down`
      you must run the namespaced task with a VERSION. Available tasks are
      db:migrate:down:primary and db:migrate:down:animals.
      ```
      f9244c65
  15. 19 4月, 2019 7 次提交