aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* Add test for cookie being modified by rotationMilo Winningham2019-06-221-0/+13
|
* Indentation >>Akira Matsuda2019-06-221-6/+6
|
* Schema Cache: extract deduplication commonalityKasper Timm Hansen2019-06-211-10/+15
|
* Merge pull request #36529 from Shopify/schema-cache-deduplication-init-withKasper Timm Hansen2019-06-211-6/+6
|\ | | | | Also deduplicate schema cache data when using the init_with interface
| * Also deduplicate schema cache data when using the init_with interfaceJean Boussier2019-06-211-6/+6
|/
* Merge pull request #36490 from y-yagi/revise_36034Yuji Yaginuma2019-06-217-1/+79
|\ | | | | Make `ActionDispatch::Response#content_type` behavior configurable
| * Make `ActionDispatch::Response#content_type` behavior configurableyuuji.yaginuma2019-06-217-1/+79
|/ | | | | | | | | I changed return value of `ActionDispatch::Response#content_type` in #36034. But this change seems to an obstacle to upgrading. https://github.com/rails/rails/pull/36034#issuecomment-498795893 Therefore, I restored the behavior of `ActionDispatch::Response#content_type` to 5.2 and deprecated old behavior. Also, made it possible to control the behavior with the config.
* Merge pull request #36526 from yahonda/test_statement_cache_with_in_clause_pgRyuta Kamizono2019-06-211-1/+1
|\ | | | | Address test_statement_cache_with_in_clause failure
| * Address test_statement_cache_with_in_clause failure due to nondeterministic ↵Yasuo Honda2019-06-201-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | sort order This failure is occasional, does not always reproduce. ```ruby $ cd activerecord $ bundle exec rake test_postgresql ... snip ... ....F Failure: ActiveRecord::BindParameterTest#test_statement_cache_with_in_clause [/home/yahonda/git/rails/activerecord/test/cases/bind_parameter_test.rb:97]: Expected: [1, 3] Actual: [3, 1] rails test home/yahonda/git/rails/activerecord/test/cases/bind_parameter_test.rb:93 ```
* | Merge pull request #36525 from ↵Rafael França2019-06-203-3/+4
|\ \ | |/ |/| | | | | eileencodes/revert-integer-change-to-schema-migration Revert schema dumper to use strings rather than integers
| * Revert schema dumper to use strings rather than integerseileencodes2019-06-203-3/+4
|/ | | | | | | | | | | I think we should change this, but not in 6-0-stable since that's already in RC and I was trying to only make changes that won't require any app changes. This reverts a portion of https://github.com/rails/rails/pull/36439 that made all schema migration version numbers get dumped as an integer. While it doesn't _really_ matter it did change behavior. We should bring this back in 6.1 with a deprecation.
* Merge pull request #36520 from kamipo/test_case_for_deterministic_orderRyuta Kamizono2019-06-201-0/+6
|\ | | | | Add test cases to ensure deterministic order for ordinal methods
| * Add test cases to ensure deterministic order for ordinal methodsRyuta Kamizono2019-06-191-0/+6
| | | | | | | | | | | | Before 1340498d2, `order` with no-op value (e.g. `nil`, `""`) had broken the contract of ordinal methods, which returns a result deterministic ordered.
* | Merge pull request #36523 from ↵Yuji Yaginuma2019-06-202-0/+3
|\ \ | | | | | | | | | | | | y-yagi/include_bcc_in_mail_sent_from_development_page Include BCC in the mail that sent from the development page
| * | Include BCC in the mail that sent from the development pageyuuji.yaginuma2019-06-202-0/+3
|/ / | | | | | | | | The BCC should be included as we show input field for BCC in view. https://github.com/rails/rails/blob/bf625f7fecabbcda22b388e088ad5c29016b2385/actionmailbox/app/views/rails/conductor/action_mailbox/inbound_emails/new.html.erb#L21-L24
* | Merge pull request #36486 from benthorner/masterYuji Yaginuma2019-06-204-6/+32
|\ \ | | | | | | Allow using env var to specify pidfile
| * | Allow using env var to specify pidfileBen Thorner2019-06-194-6/+32
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously it was only possible to specify the location of the pidfile for the 'rails server' command with the '-P' flag. This adds support for specifying the pidfile using a PIDFILE env var, which can still be overridden by the '-P' flag and with the default pidfile path unchanged. The motivation for this feature comes from using Docker to run multiple instances of the same rails app. When developing a rails app with Docker, it's common to bind-mount the rails root directory in the running container, so that changes to files are shared between the container and the host. However, this doesn't work so well with the pidfile and it's necessary to (remember to) add a '-P' flag to the 'rails server' command line; being able to specify this flag using an env var would make developing with Rails+Docker a bit simpler.
* | | Merge pull request #36518 from Shopify/drop-schema-cache-column-hashKasper Timm Hansen2019-06-191-8/+5
|\ \ \ | | | | | | | | Stop serializing and parsing columns_hash in Active Record schema caches
| * | | Stop serializing and parsing columns_hash in Active Record schema cachesJean Boussier2019-06-191-8/+5
| | |/ | |/|
* | | Merge pull request #36521 from itsWill/autoloading_in_exceptionsGannon McGibbon2019-06-192-0/+5
|\ \ \ | | | | | | | | Autoload SyntaxErrorInTemplate
| * | | Autoload SyntaxErrorInTemplateGuilherme Mansur2019-06-192-0/+5
| |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When a SyntaxError is detected in a template we raise this exception. On a first request to the server the exception we get a NameError since the exception is not required from `active_view/template/error.rb` yet. However later on it gets required and a second request will succeed. On the first request we see the rails "Something Wen Wrong" page and not the expected syntax error in template error page with the webconsole and stacktrace. By autoloading the constant we fix this issue. Co-authored-by: Gannon McGibbon <gannon.mcgibbon@gmail.com>
* | | Merge pull request #36279 from itsWill/better_error_messages_for_abstract_tableGannon McGibbon2019-06-194-0/+19
|\ \ \ | |/ / |/| | Better error message for calling columns_hash
| * | Better error message for calling columns_hashGuilherme Mansur2019-06-194-0/+19
|/ / | | | | | | | | | | | | | | | | | | | | | | When a record does not have a table name, as in the case for a record with `self.abstract_class = true` and no `self.table_name` set the error message raises a cryptic: "ActiveRecord::StatementInvalid: Could not find table ''" this patch now raises a new `TableNotSpecified Error` Fixes: #36274 Co-Authored-By: Eugene Kenny <elkenny@gmail.com>
* | Merge pull request #35891 from Shopify/schema-cache-deduplicationKasper Timm Hansen2019-06-1912-16/+123
|\ \ | | | | | | Deduplicate various Active Record schema cache structures
| * | Deduplicate various Active Record schema cache structuresJean Boussier2019-06-0312-16/+123
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Real world database schemas contain a lot of duplicated data. Some column names like `id`, `created_at` etc can easily be repeated hundreds of times. Same for SqlTypeMetada, most database will contain only a limited number of possible combinations. This result in a lot of wasted memory. The idea here is to make these data sctructures immutable, use a registry to substitute similar instances with pre-existing ones.
* | | Merge pull request #36508 from kamipo/avoid_getutcRyuta Kamizono2019-06-183-10/+10
|\ \ \ | | | | | | | | Avoid redundant `time.getutc` call if it is already utc time object
| * | | Avoid redundant `time.getutc` call if it is already utc time objectRyuta Kamizono2019-06-183-10/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently `type.serialize` and `connection.{quote|type_cast}` for a time object always does `time.getutc` call regardless of whether it is already utc time object or not, that duplicated proccess (`connection.type_cast(type.serialize(time))`) allocates extra/useless time objects for each type casting. This avoids that redundant `time.getutc` call if it is already utc time object. In the case of a model has timestamps (`created_at` and `updated_at`), it avoids 6,000 time objects allocation for 1,000 times `model.save`. ```ruby ObjectSpace::AllocationTracer.setup(%i{path line type}) pp ObjectSpace::AllocationTracer.trace { 1_000.times { User.create } }.select { |k, _| k[0].end_with?("quoting.rb", "time_value.rb") } ``` Before (c104bfe424e6cebe9c8e85a38515327a6c88b1f8): ``` {["~/rails/activerecord/lib/active_record/connection_adapters/abstract/quoting.rb", 203, :T_ARRAY]=>[1004, 0, 778, 0, 1, 0], ["~/rails/activerecord/lib/active_record/connection_adapters/abstract/quoting.rb", 220, :T_STRING]=>[2, 0, 2, 1, 1, 0], ["~/rails/activerecord/lib/active_record/connection_adapters/abstract/quoting.rb", 209, :T_ARRAY]=>[8, 0, 8, 1, 1, 0], ["~/rails/activerecord/lib/active_record/connection_adapters/abstract/quoting.rb", 57, :T_ARRAY]=>[4, 0, 4, 1, 1, 0], ["~/rails/activemodel/lib/active_model/type/helpers/time_value.rb", 17, :T_DATA]=>[4000, 0, 3096, 0, 1, 0], ["~/rails/activerecord/lib/active_record/connection_adapters/abstract/quoting.rb", 120, :T_DATA]=>[2000, 0, 1548, 0, 1, 0], ["~/rails/activerecord/lib/active_record/connection_adapters/abstract/quoting.rb", 126, :T_STRING]=>[4000, 0, 3096, 0, 1, 0]} ``` After (this change): ``` {["~/rails/activerecord/lib/active_record/connection_adapters/abstract/quoting.rb", 203, :T_ARRAY]=>[1004, 0, 823, 0, 1, 0], ["~/rails/activerecord/lib/active_record/connection_adapters/abstract/quoting.rb", 220, :T_STRING]=>[2, 0, 2, 1, 1, 0], ["~/rails/activerecord/lib/active_record/connection_adapters/abstract/quoting.rb", 209, :T_ARRAY]=>[8, 0, 8, 1, 1, 0], ["~/rails/activerecord/lib/active_record/connection_adapters/abstract/quoting.rb", 57, :T_ARRAY]=>[4, 0, 4, 1, 1, 0], ["~/rails/activerecord/lib/active_record/connection_adapters/abstract/quoting.rb", 126, :T_STRING]=>[2000, 0, 1638, 0, 1, 0]} ```
* | | | Merge pull request #36482 from Shopify/fix-translation-helper-default-hashRafael França2019-06-172-1/+6
|\ \ \ \ | |/ / / |/| | | Fix TranslationHelper#translate handling of Hash defaults
| * | | Fix TranslationHelper#translate handling of Hash defaultsJean Boussier2019-06-142-1/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It is sometimes expected of the `translate` methods to return a Hash, for instance it's the case of the `number.format` key. As such users might need to specify a Hash default, e.g. `translate(:'some.format', default: { separator: '.', delimiter: ',' })`. This works as expected with the `I18n.translate` methods, however `TranslationHelper#translate` apply `Array()` on the default value. As a result the default value end up as `[:separator, '.', :delimiter, ',']`.
* | | | Merge pull request #36506 from ↵Ryuta Kamizono2019-06-185-12/+30
|\ \ \ \ | | | | | | | | | | | | | | | | | | | | kamipo/group_by_with_order_by_virtual_count_attribute PostgreSQL: Fix GROUP BY with ORDER BY virtual count attribute
| * | | | PostgreSQL: Fix GROUP BY with ORDER BY virtual count attributeRyuta Kamizono2019-06-175-12/+30
|/ / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | GROUP BY with virtual count attribute is invalid for almost all databases, but it is valid for PostgreSQL, and it had worked until Rails 5.2.2, so it is a regression for Rails 5.2.3 (caused by 311f001). I can't find perfectly solution for fixing this for now, but I would not like to break existing apps, so I decided to allow referencing virtual count attribute in ORDER BY clause when GROUP BY aggrigation (it partly revert the effect of 311f001) to fix the regression #36022. Fixes #36022.
* | | | Merge pull request #36502 from ↵Prem Sichanugrist2019-06-171-1/+1
|\ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | abhaynikam/fix-typo-in-active-record-multiple-database-guides Fix typo initialzer -> initializer [ci skip]
| * | | | Fix typo initialzer -> initializer [ci skip]Abhay Nikam2019-06-171-1/+1
|/ / / /
* | | | Merge pull request #36497 from soartec-lab/move_date_and_time_method_to_timeRyuta Kamizono2019-06-166-128/+112
|\ \ \ \ | | | | | | | | | | Delete method definition in rails that is compatible with ruby defini…
| * | | | Delete `DateAndTime` method definition in rails that is compatible with ruby ↵soartec-lab2019-06-166-128/+112
|/ / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | definition Tests are also only on the `Time` class Update doc forgetting to erase when moved Update guide `Date` class to `Time` class and defined file Update guide correction omission
* | | | Update default value of `variable_content_types` and ↵yuuji.yaginuma2019-06-161-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | `content_types_to_serve_as_binary` [ci skip] Ref: bcf370d689673031073ba2ac5588afe41cc315c9, 06ab7b27ea1c1ab357085439abacdb464f6742bf.
* | | | Merge pull request #36493 from kamipo/remove_unused_attributes_forRyuta Kamizono2019-06-164-70/+1
|\ \ \ \ | | | | | | | | | | Remove unused `Arel::Attributes.for`
| * | | | Remove unused `Arel::Attributes.for`Ryuta Kamizono2019-06-154-70/+1
| | | | | | | | | | | | | | | | | | | | `Arel::Attributes.for` is no longer used since https://github.com/rails/arel/pull/196.
* | | | | Merge pull request #36494 from ↵Ryuta Kamizono2019-06-161-3/+3
|\ \ \ \ \ | |/ / / / |/| | | | | | | | | | | | | | soartec-lab/fix/guide_delete_description_for_date_and_time Delete 'ruby' in the description of the method defined in rails [skip ci]
| * | | | Delete 'ruby' in the description of the method defined in rails [skip ci]soartec-lab2019-06-161-3/+3
|/ / / /
* | | | Merge pull request #36483 from kamipo/no_allocation_to_sql_visitRyuta Kamizono2019-06-154-33/+34
|\ \ \ \ | | | | | | | | | | No allocation `Arel::Visitors::ToSql#visit`
| * | | | No allocation `Arel::Visitors::ToSql#visit`Ryuta Kamizono2019-06-154-33/+34
|/ / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Each `visit o, collector` allocates one extra array due to receiving args by splat array. https://github.com/rails/rails/blob/2c3332cc4c0fa77dbe2e13e8a792f80fbd8f4ad3/activerecord/lib/arel/visitors/visitor.rb#L27-L29 Currently 1,000 times `User.where(id: 1).to_sql` allocates 13,000 arrays in `visitor.accept`. This avoids receiving args by splat array, it makes `visitor.accept` no array allocation. ```ruby ObjectSpace::AllocationTracer.setup(%i{path line type}) pp ObjectSpace::AllocationTracer.trace { 1_000.times { User.where(id: 1).to_sql } }.select { |k, _| k[2] == :T_ARRAY && k[0].end_with?("visitor.rb", "to_sql.rb") } ``` Before (2c3332cc4c0fa77dbe2e13e8a792f80fbd8f4ad3): ``` {["~/rails/activerecord/lib/arel/visitors/to_sql.rb", 18, :T_ARRAY]=>[1000, 0, 0, 0, 0, 0], ["~/rails/activerecord/lib/active_record/connection_adapters/determine_if_preparable_visitor.rb", 11, :T_ARRAY]=>[1000, 0, 0, 0, 0, 0], ["~/rails/activerecord/lib/arel/visitors/visitor.rb", 12, :T_ARRAY]=>[1000, 0, 0, 0, 0, 0], ["~/rails/activerecord/lib/arel/visitors/to_sql.rb", 788, :T_ARRAY]=>[3000, 0, 0, 0, 0, 0], ["~/rails/activerecord/lib/arel/visitors/to_sql.rb", 794, :T_ARRAY]=>[3000, 0, 0, 0, 0, 0], ["~/rails/activerecord/lib/arel/visitors/to_sql.rb", 156, :T_ARRAY]=>[1000, 0, 0, 0, 0, 0], ["~/rails/activerecord/lib/arel/visitors/to_sql.rb", 443, :T_ARRAY]=>[1000, 0, 0, 0, 0, 0], ["~/rails/activerecord/lib/arel/visitors/to_sql.rb", 603, :T_ARRAY]=>[1000, 0, 0, 0, 0, 0], ["~/rails/activerecord/lib/arel/visitors/to_sql.rb", 611, :T_ARRAY]=>[1000, 0, 0, 0, 0, 0]} ``` After (this change): ``` {} ```
* | | | :golf:Akira Matsuda2019-06-151-6/+2
| | | |
* | | | Should find last created recordRyuta Kamizono2019-06-151-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Tables in tests are not always empty so `klass.first` does not always find last created record. Fixes #36479.
* | | | Ensure to reset actually used `@connection.schema_migration`'s table nameRyuta Kamizono2019-06-151-4/+4
| | | | | | | | | | | | | | | | https://buildkite.com/rails/rails/builds/61744#f12cc6cf-7458-4131-917a-9735615f6259/999-1010
* | | | Fix `test_schema_names` to include "hint_plan" schemaRyuta Kamizono2019-06-151-1/+5
| | | |
* | | | Merge pull request #36469 from ↵Eileen M. Uchitelle2019-06-148-49/+111
|\ \ \ \ | | | | | | | | | | | | | | | | | | | | eileencodes/move-while_preventing_writes-to-handler Move while_preventing_writes from conn to handler
| * | | | Move while_preventing_writes from conn to handlereileencodes2019-06-148-49/+111
|/ / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If we put the `while_preventing_writes` on the connection then the middleware that sends reads to the primary and ensures they can't write will not work. The `while_preventing_writes` will only be applied to the connection which it's called on - which in the case of the middleware is Ar::Base. This worked fine if you called it directly like `OtherDbConn.connection.while_preventing_writes` but Rails didn't have a way of knowing you wanted to call it on all the connections. The change here moves the `while_preventing_writes` method from the connection to the handler so that it can block writes to all queries for that handler. This will apply to all the connections associated with that handler.
* | | | Merge pull request #36488 from eileencodes/update-multi-db-docsEileen M. Uchitelle2019-06-141-1/+20
|\ \ \ \ | | | | | | | | | | Update multi-db docs
| * | | | Update multi-db docseileencodes2019-06-141-1/+20
|/ / / / | | | | | | | | | | | | | | | | | | | | * Add note about schema cache * Add note about opening too many connections * Improve headers in caveats section