aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* Speed up homogeneous AR lists / reduce allocationsAaron Patterson2018-06-255-2/+43
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit speeds up allocating homogeneous lists of AR objects. We can know if the result set contains an STI column before initializing every AR object, so this change pulls the "does this result set contain an STI column?" test up, then uses a specialized instantiation function. This way we only have to check for an STI column once rather than N times. This change also introduces a new initialization function that is meant for use when allocating AR objects that come from the database. Doing this allows us to eliminate one hash allocation per AR instance. Here is a benchmark: ```ruby require 'active_record' require 'benchmark/ips' ActiveRecord::Base.establish_connection adapter: "sqlite3", database: ":memory:" ActiveRecord::Migration.verbose = false ActiveRecord::Schema.define do create_table :users, force: true do |t| t.string :name t.timestamps null: false end end class User < ActiveRecord::Base; end 2000.times do User.create!(name: "Gorby") end Benchmark.ips do |x| x.report("find") do User.limit(2000).to_a end end ``` Results: Before: ``` [aaron@TC activerecord (master)]$ be ruby -I lib:~/git/allocation_tracer/lib speed.rb Warming up -------------------------------------- find 5.000 i/100ms Calculating ------------------------------------- find 56.192 (± 3.6%) i/s - 285.000 in 5.080940s ``` After: ``` [aaron@TC activerecord (homogeneous-allocation)]$ be ruby -I lib:~/git/allocation_tracer/lib speed.rb Warming up -------------------------------------- find 7.000 i/100ms Calculating ------------------------------------- find 72.204 (± 2.8%) i/s - 364.000 in 5.044592s ```
* Merge pull request #33221 from rails/lazy-aggregateAaron Patterson2018-06-252-1/+5
|\ | | | | Lazily add `Aggregations` to `composed_of` models
| * Lazily add `Aggregations` to `composed_of` modelsAaron Patterson2018-06-252-1/+5
| | | | | | | | | | | | | | | | `composed_of` is a fairly rare method to call on models. This commit adds the `Aggregations` module to models that call `composed_of` so that models that *don't* call `composed_of` don't need to instantiate the `aggregation_cache` hash. This saves one hash allocation per model instance that doesn't use `composed_of`
* | Allow passing multiple exceptions to retry_on/discard_onGeorge Claghorn2018-06-253-7/+32
|/
* `references(:developers_projects_join)` isn't needed if using `where` with ↵Ryuta Kamizono2018-06-261-16/+2
| | | | hash condition
* Use `reflection.alias_candidate` in `table_alias_for`Ryuta Kamizono2018-06-261-1/+1
| | | | | | | | | | | | | | | The "join" affix in `table_alias_for` was added 12 years ago at 02d3444 to address poor alias tracking. `AssociationScope` no longer uses the "join" suffixed alias since 0408e21 and had been removed at a1ec8b5. `table_alias_for` is the last place that using the useless legacy suffixed alias, but we can't remove the suffix since some test cases directly refers the alias name by `where` with string literal, so at least removing the suffix would break our test cases. (e.g. https://github.com/rails/rails/blob/b2eb1d1c55a59fee1e6c4cba7030d8ceb524267c/activerecord/test/cases/associations/has_and_belongs_to_many_associations_test.rb#L699-L731).
* Revert "Avoid Node.js v10.4.0 for now"yuuji.yaginuma2018-06-251-1/+1
| | | | | | | This reverts commit 691addbffad10aa249d5fb1b0e47b46a086e5332. Reason: v10.5.0 has been released, and it seems that the issue is fixed. Ref: https://github.com/nodejs/node/blob/master/doc/changelogs/CHANGELOG_V10.md#10.5.0
* Merge pull request #33191 from ↵George Claghorn2018-06-241-1/+1
|\ | | | | | | | | bogdanvlviv/change-rails_welcome-image-on-localhost3000 Changes Rails Welcome image on localhost:3000
| * Changes Rails Welcome image on localhost:3000bogdanvlviv2018-06-221-1/+1
| | | | | | | | | | | | | | | | | | Note that I used https://www.base64-image.de/ in order to convert the image to Base64 with enabled optimization status. Closes #33181. Closes #33186. Follow up #32735.
* | Add an assertion that `credentials:edit` works when `RAILS_MASTER_KEY` env ↵yuuji.yaginuma2018-06-241-1/+1
| | | | | | | | is specified
* | Merge pull request #33205 from ishanray/patch-1Ryuta Kamizono2018-06-241-1/+1
|\ \ | | | | | | | | | | | | Update service.rb [ci skip]
| * | Update service.rbishanray2018-06-241-1/+1
|/ /
* | Fix formatting of `primary_key` [ci skip]yuuji.yaginuma2018-06-241-2/+2
| |
* | Merge pull request #33204 from utilum/bump_raabroYuji Yaginuma2018-06-241-1/+1
|\ \ | | | | | | Update raabro to latest version
| * | Update raabro to latest versionutilum2018-06-231-1/+1
|/ / | | | | | | [v 1.1.6](https://github.com/floraison/raabro/blob/master/CHANGELOG.md#raabro-116--released-2018-06-22) fixes a warning we see on [Rails CI](https://travis-ci.org/rails/rails/jobs/395177524#L3763).
* | OS X -> macOS [Closes #30313]Xavier Noria2018-06-234-6/+6
| | | | | | | | [Jon Moss & Xavier Noria]
* | Merge pull request #33198 from henrik/patch-1George Claghorn2018-06-221-1/+5
|\ \ | |/ |/| Active Storage: Explicit form field in basic example
| * Active Storage: Explicit form field in basic exampleHenrik Nyh2018-06-221-1/+5
|/ | | Also fix syntax highlighting in the more advanced JS example.
* Merge pull request #33184 from ↵Prem Sichanugrist2018-06-221-0/+4
|\ | | | | | | | | bogdanvlviv/document-year_format-option-of-date_select Add to docs mention about `:year_format` option of date select
| * Add to docs mention about `:year_format` option of date selectbogdanvlviv2018-06-221-0/+4
|/ | | | | | Follow up #32190 [ci skip]
* Add missing test case for `find` with a large numberRyuta Kamizono2018-06-221-0/+6
|
* Permit configuring the default service URL expiryGeorge Claghorn2018-06-219-10/+17
|
* Merge pull request #33176 from utilum/bump_fugitYuji Yaginuma2018-06-211-2/+2
|\ | | | | Update fugit to latest version
| * Update fugit to latest versionutilum2018-06-211-2/+2
|/ | | | | | | [fugit 1.1.3](https://github.com/floraison/fugit/commit/03a3ee86f3cd5d929442dd25896b99acbd151947) fixes warnings that show up in ActiveJob tests. See [CI](https://travis-ci.org/rails/rails/jobs/394107740#L3764-L3778).
* Merge pull request #32190 from liwii/use_year_namesRyuta Kamizono2018-06-213-1/+71
|\ | | | | | | Add `use_year_names` option to date_select tag
| * Add `year_format` option to date_select tag. This option makes it possible ↵Koki Ryu2018-06-103-1/+69
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | to customize year names. Lambda should be passed to use this option. Example: date_select('user_birthday', '', start_year: 1998, end_year: 2000, year_format: ->year { "Heisei #{year - 1988}" }) The HTML produced: <select id="user_birthday__1i" name="user_birthday[(1i)]"> <option value="1998">Heisei 10</option> <option value="1999">Heisei 11</option> <option value="2000">Heisei 12</option> </select> /* The rest is omitted */
* | Merge pull request #33175 from gsamokovarov/fix-actionpack-typoRyuta Kamizono2018-06-211-1/+1
|\ \ | | | | | | | | | | | | Fix actionpack changelog typo [ci skip]
| * | Fix a typo in the Action Pack changelog [ci skip]Genadi Samokovarov2018-06-191-1/+1
| | | | | | | | | | | | I spotted it while working on a PR.
* | | Merge pull request #33172 from ↵Yuji Yaginuma2018-06-211-0/+2
|\ \ \ | | | | | | | | | | | | | | | | thomasdziedzic-pd/add-use_authenticated_message_encryption-documentation add documentation for config.active_support.use_authenticated_message_encryption
| * | | add documentation for ↵Thomas Dziedzic2018-06-201-0/+2
|/ / / | | | | | | | | | | | | | | | config.active_support.use_authenticated_message_encryption [ci skip] related to https://github.com/rails/rails/issues/33170
* | | Remove all `aliases` passing from `JoinDependency`Ryuta Kamizono2018-06-201-2/+2
| | | | | | | | | | | | Follow up of 15367a2c674bf19eeefa12ccb64391bdd50d883d.
* | | Remove useless `aliases` argument from `JoinDependency#construct`Ryuta Kamizono2018-06-201-5/+5
| | | | | | | | | | | | | | | Since `aliases` is a part of `JoinDependency` and already cached at 1a723c65bbe91ad969b67416233d20eff6d2a46a.
* | | Remove unused `rs` argument from `JoinDependency#construct`Ryuta Kamizono2018-06-201-5/+5
|/ / | | | | | | It was no longer used since d7ddaa530fd1b94e22d745cbaf2e8a5a34ee9734.
* | Convert hashes into parameters (#33076)Kevin Sjöberg2018-06-192-10/+29
| | | | | | | | | | | | | | | | | | | | | | | | * Convert hashes into parameters Ensure `ActionController::Parameters#transform_values` and `ActionController::Parameters#transform_values!` converts hashes into parameters. * fixup! Convert hashes into parameters [Rafael Mendonça França + Kevin Sjöberg]
* | Merge pull request #33074 from lsylvester/optimize-pluckRafael França2018-06-192-5/+26
|\ \ | | | | | | Reduce Memory Allocation when using .pluck
| * | Avoid creating temporary arrays in ActiveRecord::Result#cast_values in order ↵Lachlan Sylvester2018-06-192-5/+26
| | | | | | | | | | | | to speed up pluck
* | | Merge pull request #33158 from bogdan/cleanup-habtm-builderRyuta Kamizono2018-06-191-37/+16
|\ \ \ | | | | | | | | Removed useless utility classes inside HABTM association builder
| * | | Removed useless utility classes inside HABTM association builderBogdan Gusiev2018-06-191-37/+16
| |/ /
* | | Ensure to calculate column aliases after all table aliases are constructedRyuta Kamizono2018-06-1910-90/+135
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently, column aliases which is used for eager loading are calculated before constructing all table aliases in FROM clause. `JoinDependency#join_constraints` constructs table aliases for `joins` first, and then always re-constructs table aliases for eager loading. If both `joins` and eager loading are given a same table association, the re-construction would cause the discrepancy between column aliases and table aliases. To avoid the discrepancy, the column aliases should be calculated after all table aliases are constructed. Fixes #30603.
* | | Merge pull request #33134 from dasch/dasch/extra-cache-controlsEileen M. Uchitelle2018-06-193-2/+28
|\ \ \ | |/ / |/| | Add support for more HTTP cache controls
| * | Add support for more HTTP cache controlsDaniel Schierbeck2018-06-133-2/+28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | From <https://tools.ietf.org/html/rfc5861>: > The stale-if-error HTTP Cache-Control extension allows a cache to > return a stale response when an error -- e.g., a 500 Internal Server > Error, a network segment, or DNS failure -- is encountered, rather > than returning a "hard" error. This improves availability. > > The stale-while-revalidate HTTP Cache-Control extension allows a > cache to immediately return a stale response while it revalidates it > in the background, thereby hiding latency (both in the network and on > the server) from clients. These are useful, fully standardized parts of the HTTP protocol with widespread support among CDN vendors. Supporting them will make it easier to utilize reverse proxies and CDNs from Rails.
* | | Merge pull request #33152 from bogdanvlviv/fix-ruby-version-fileRafael França2018-06-182-2/+8
|\ \ \ | | | | | | | | Fix Ruby version in `.ruby-version`
| * | | Fix Ruby version in `.ruby-version`bogdanvlviv2018-06-182-2/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Since #30016 Rails generates `.ruby-version` file in order to help Ruby version manager tools like `rbenv`, `rvm` determine which Ruby version should be used for the current Rails project. Since #32649 Rails sets Ruby version to the file compatible with MRI/JRuby by default. Pull Request #31496 reports that `.ruby-version` doesn't match ruby version other than stable version and recommends to use `ENV["RBENV_VERSION"]`, and `ENV["rvm_ruby_string"]` in order to set correct Ruby version to the file that `rbenv` or `rvm` can understand. Also, there is another similar issue that reports the same case if use JRuby https://github.com/jruby/jruby/issues/5144. Closes #31496, https://github.com/jruby/jruby/issues/5144.
* | | | Merge pull request #33150 from vaidehijoshi/test-journey-or-tokenEileen M. Uchitelle2018-06-181-0/+6
|\ \ \ \ | | | | | | | | | | Add test case for the `|` token in Journey scanner
| * | | | Add test case for the `|` token in Journey scannervaidehijoshi2018-06-181-0/+6
|/ / / / | | | | | | | | | | | | | | | | | | | | | | | | Journey's scanner tokenizes the `|` (:OR) operator when scanning route urls such as `"/:foo|*bar"`. However, the current scanner test does not have any test cases for the `|` operator. This commit adds a test case for this particular token.
* | | | Merge pull request #33147 from nsgc/add-api-document-about-migration-methodsRyuta Kamizono2018-06-181-0/+5
|\ \ \ \ | | | | | | | | | | Add docs for ActiveRecord::Migration#say, #say_with_time, #suppress_messages [ci skip]
| * | | | Add docs for ActiveRecord::Migration#say, #say_with_time, #suppress_messages ↵Naoki Nishiguchi2018-06-181-0/+5
| | | | | | | | | | | | | | | | | | | | [ci skip]
* | | | | Fix `touch` option to behave consistently with `Persistence#touch` methodRyuta Kamizono2018-06-1810-51/+98
|/ / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `touch` option was added to `increment!` (#27660) and `update_counters` (#26995). But that option behaves inconsistently with `Persistence#touch` method. If `touch` option is passed attribute names, it won't update update_at/on attributes unlike `Persistence#touch` method. Due to changed from `Persistence#touch` to `increment!` with `touch` option, #31405 has a regression that `counter_cache` with `touch` option which is passed attribute names won't update update_at/on attributes. I think that the inconsistency is not intended. To get back consistency, ensure that `touch` option updates update_at/on attributes.
* / / / Remove unused requireyuuji.yaginuma2018-06-181-1/+0
|/ / / | | | | | | | | | `optparse` is unused since #26977.
* | | Fix "warning: Net::HTTPResponse#header is obsolete"yuuji.yaginuma2018-06-171-1/+1
| | | | | | | | | | | | Ref: https://github.com/ruby/ruby/blob/cc77a811298bd7ab1c422f7f999b93c858327da9/lib/net/http/response.rb#L138-L155