aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
Commit message (Collapse)AuthorAgeFilesLines
* Only merge DATABASE_URL settings into the current envJohn Crepezzi2019-07-252-18/+36
| | | | | | | This commit fixes a regression where when the `DATABASE_URL` environment variable was set and the current Rails environment had a valid configuration defined in the database config, settings from the environment variable would affect _all_ environments (not just the current one).
* Merge pull request #36766 from jhawthorn/call_connection_error_numberJohn Hawthorn2019-07-252-4/+9
|\ | | | | Use connection.error_number in MySQLDatabaseTasks
| * Use connection.error_number in MySQLDatabaseTasksJohn Hawthorn2019-07-252-4/+9
| | | | | | | | | | | | | | | | | | | | | | MySQLDatabaseTasks, like AbstractMysqlAdapter, should be able to operate on any mysql adapter, not just mysql2. Errors having a .error_number attribute is a mysql2 specific API, which we (Rails) don't control, so we should instead use connection.error_number(err), which we do. This also updates tests to better test how this really works, previously it stubbed create_database to raise Tasks::DatabaseAlreadyExists, which can never happen.
* | Merge pull request #36380 from ↵Rafael Mendonça França2019-07-253-0/+39
|\ \ | |/ |/| | | | | | | edudepetris/ed/36272-better-negative-scope-warning Add a warning for enum elements with 'not_' prefix.
| * Add a warning for enum elements with 'not_' prefix.Edu Depetris2019-06-303-0/+39
| | | | | | | | | | | | | | | | | | | | When a enum element contains the prefix 'not_'. I warns to users to be aware of this new feature. Example code: class Foo < ActiveRecord::Base enum status: [:sent, :not_sent] end
* | Merge pull request #36412 from robotdana/compact_blankRafael Mendonça França2019-07-255-12/+12
|\ \ | | | | | | | | | Add compact_blank shortcut for reject(&:blank?)
| * | Use compact_blank throughout railsDana Sherson2019-06-055-12/+12
| | |
* | | Make sure AR can load without Railseileencodes2019-07-251-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | In #36560 I accidentally re-introduced a bug where ActiveRecord can't be used without Rails. This returns an empty hash if we're outside the context of Rails since we can't create the database tasks without loading and reading the database yaml which is something only Railties can do.
* | | Merge pull request #36740 from ↵Rafael França2019-07-252-3/+5
|\ \ \ | | | | | | | | | | | | | | | | stanhu/sh-fix-index-exists-postgresql-partial-index Fix index_exists? for PostgreSQL expression indexes
| * | | Fix index_exists? for PostgreSQL expression indexesStan Hu2019-07-242-3/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously Rails expected indexes to be an array of columns, but for PostgreSQL a expression index can just be a string of text. Handle this by forcing `Index#columns` to be an Array inside `index_exists?`. Closes #36739
* | | | Merge pull request #36492 from kamipo/remove_depth_first_visitorRyuta Kamizono2019-07-257-518/+7
|\ \ \ \ | | | | | | | | | | Remove unused `DepthFirst` visitor
| * | | | Remove unused `DepthFirst` visitorRyuta Kamizono2019-06-157-518/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We only use `ToSQL` visitors in the our codebase, do not use `DepthFirst` and `Dot` visitors. The `DepthFirst` visitor (which was introduced at c86c37e5f) is used to traverse an Arel (partial) ast with depth first. Is there any worth to keep that undocumented feature with much code and test cases. This removes that unused `DepthFirst` code and test cases.
* | | | | Merge pull request #36756 from seejohnrun/env-urls-with-multiple-databasesEileen M. Uchitelle2019-07-242-12/+42
|\ \ \ \ \ | | | | | | | | | | | | Fix multiple database support for DATABASE_URL env variable
| * | | | | Fix multiple database support for DATABASE_URL env variableJohn Crepezzi2019-07-242-12/+42
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit fixes an issue where multi-database configurations were incompatible with setting a `DATABASE_URL` environment variable. As part of this work, this commit also includes a light refactor to make both multi and single database configurations lead into the same code path so they behave the same. As mentioned in #36736, this regression was introduced as part of f2ad69fe7a605b01bb7c37eeac6a9b4e7deb488e
* | | | | | Merge pull request #36580 from Shopify/schema-cache-deuplication-from-databaseRafael França2019-07-241-5/+15
|\ \ \ \ \ \ | | | | | | | | | | | | | | Also deduplicate schema cache structure when they are read from the database
| * | | | | | Also deduplicate schema cache structure when they are read from the databaseJean Boussier2019-07-011-5/+15
| | |_|_|_|/ | |/| | | |
* | | | | | Merge pull request #36671 from ↵Eileen M. Uchitelle2019-07-245-1/+37
|\ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | wjessop/do_not_validate_non_dirty_association_targets Don't validate non dirty association targets
| * | | | | | Don't validate non dirty association targetsWill Jessop2019-07-155-1/+37
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixes #36581. This fixes an issue where validations would return differently when a previously saved invalid association was loaded between calls: assert_equal true, squeak.valid? assert_equal true, squeak.mouse.present? assert_equal true, squeak.valid? Here the second assert would return Expected: true Actual: false Limiting validations to associations that would be normally saved (using autosave: true) due to changes means that loading invalid associated relations will not change the return value of the parent relations's `valid?` method.
* | | | | | | Merge pull request #36744 from freeletics/fix-db-prepareEileen M. Uchitelle2019-07-241-3/+4
|\ \ \ \ \ \ \ | |_|_|_|_|/ / |/| | | | | | Fixed db:prepare task to not touch schema when it is disabled
| * | | | | | Fixed db:prepare task to not touch schema when dump_schema_after_migration ↵Wojciech Wnętrzak2019-07-241-3/+4
| | |_|/ / / | |/| | | | | | | | | | | | | | | | is false.
* | | | | | Merge pull request #36665 from jmschneider/masterRafael Mendonça França2019-07-233-2/+10
|\ \ \ \ \ \ | |/ / / / / |/| | | | | | | | | | | Make currency symbols optional for money column type in PostgreSQL
| * | | | | Make currency symbols optional for money column type in PostgreSQLJoel Schneider2019-07-123-2/+10
| |/ / / /
* | | | | Merge pull request #36706 from kirs/dedup-optimizer-hintsRyuta Kamizono2019-07-192-1/+8
|\ \ \ \ \ | | | | | | | | | | | | [ActiveRecord] Deduplicate optimizer hints
| * | | | | [ActiveRecord] Deduplicate optimizer hintsKir Shatrov2019-07-192-1/+8
| | | | | |
* | | | | | Include common commands in rails help outputTekin Suleyman2019-07-191-4/+4
|/ / / / / | | | | | | | | | | | | | | | | | | | | | | | | | With their descriptions commented out these commands were not included in the rails help command's output, which is a shame as they are useful, particularly during the development of more complex migrations.
* | | | | Support beginless ranges in hash conditions.Josh Goodall2019-07-173-2/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ruby 2.7 introduces beginless ranges (..value and ...value) and as with endless ranges we can turn these into inequalities, enabling expressions such as Order.where(created_at: ..1.year.ago) User.where(karma: ...0)
* | | | | [ActiveRecord] Superclass for aborted queriesKir Shatrov2019-07-163-5/+12
| | | | |
* | | | | Add missing period [ci skip]Rafael Mendonça França2019-07-161-1/+1
| | | | |
* | | | | Raise specific exception on Mysql2::Error::TimeoutErrorKir Shatrov2019-07-163-1/+23
| | | | |
* | | | | Move the `ActiveModel:Errors#full_message` method to the `Error` class:Edouard CHIN2019-07-161-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - One regression introduced by the "AM errors as object" features is about the `full_messages` method. It's currently impossible to call that method if the `base` object passed in the constructor of `AM::Errors` doesn't respond to the `errors` method. That's because `full_messages` now makes a weird back and forth trip `AM::Errors#full_messages` -> `AM::Error#full_message` -> `AM::Errors#full_message` Since `full_message` (singular) isn't needed by AM::Errors, I moved it to the `AM::Error` (singular) class. This way we don't need to grab the `AM::Errors` object from the base.
* | | | | active_support/core_ext/object/duplicable is not in use hereRyuta Kamizono2019-07-161-1/+0
| | | | |
* | | | | Merge pull request #36640 from Edouard-chin/ec-uniq-validation-fixRafael França2019-07-151-1/+2
|\ \ \ \ \ | |/ / / / |/| | | | Fix errors getting duplicated when passed validations options:
| * | | | Fix errors getting duplicated when passed validations options:Edouard CHIN2019-07-101-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - In 86620cc3aa8e2630bc8d934b1a86453276b9eee9, a change was made on how we remove error duplication on a record for autosave association This fix has one caveat where validation having a `if` / `unless` options passed as a proc would be considered different. Example: ```ruby class Book < ApplicationRecord has_one :author validates :title, presence: true, if -> { true } validates :title, presence: true, if -> { true } end Book.new.valid? # false Book.errors.full_messages # ["title can't be blank", "title can't be blank"] ``` While this example might sound strange, I think it's better to ignore `AM::Validations` options (if, unless ...) when making the comparison.
* | | | | active_support/deprecation has to be already required via ↵Akira Matsuda2019-07-123-4/+0
| | | | | | | | | | | | | | | | | | | | active_support/rails.rb
* | | | | No Woman, No tryAkira Matsuda2019-07-121-1/+0
| | | | |
* | | | | Merge pull request #36647 from ↵Ryuta Kamizono2019-07-112-1/+6
|\ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | giraffate/fix_exists_with_distinct_and_offset_and_order_in_postgresql Fix `relation.exists?` with giving `distinct`, `offset` and `order` for joined table
| * | | | | Fix `relation.exists?` with giving `distinct`, `offset` and `order` for ↵Takayuki Nakata2019-07-102-1/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | joined table The error happens in PostgreSQL when using `relation.exists?` with `distinct`, `offset` and `order` for joined table. However, the error does not happen if either `distinct` or `offset` is removed. This behavior is confusing. Fixes #36632
* | | | | | Merge pull request #36653 from y-yagi/check_error_number_instead_of_messageYuji Yaginuma2019-07-112-2/+6
|\ \ \ \ \ \ | | | | | | | | | | | | | | MySQL: Check error number instead of a message
| * | | | | | MySQL: Check error number instead of a messageyuuji.yaginuma2019-07-112-2/+6
| |/ / / / / | | | | | | | | | | | | | | | | | | To be able to check regardless of locale.
* | | | | | Merge pull request #36645 from Shopify/arel-dispatch-cacheRyuta Kamizono2019-07-111-1/+1
|\ \ \ \ \ \ | | | | | | | | | | | | | | Share the Arel dispatch cache between connections
| * | | | | | Share the Arel dispatch cache between connectionsJean Boussier2019-07-101-1/+1
| |/ / / / /
* | | | | | Merge pull request #36637 from Shopify/share-quote-cacheRyuta Kamizono2019-07-114-7/+14
|\ \ \ \ \ \ | | | | | | | | | | | | | | Share the column and table name quote cache between connections
| * | | | | | Share the column and table name quote cache between connectionsJean Boussier2019-07-094-7/+14
| |/ / / / /
* | | | | | Merge pull request #36618 from engwan/fix-query-cache-with-shared-ar-connectionEileen M. Uchitelle2019-07-103-5/+26
|\ \ \ \ \ \ | |/ / / / / |/| | | | | Fix query cache when using shared connections
| * | | | | Fix query cache when using shared connectionsHeinrich Lee Yu2019-07-083-5/+26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Enables the query cache on the correct connection when shared connections across threads are enabled
* | | | | | Merge pull request #36612 from ↵Yuji Yaginuma2019-07-091-1/+1
|\ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | y-yagi/make_setup_works_when_using_with_locales_other_than_en Make "bin/setup" works when using PostgreSQL with locales other than en locale
| * | | | | | Make "bin/setup" works when using PostgreSQL with locales other than en localeyuuji.yaginuma2019-07-071-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The PostgreSQL adapter uses an error message to determine if a database exists or not. https://github.com/rails/rails/blob/74ef67b16de67d2ae2f996e50a18a93aebf68fe6/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb#L49 However, this message is properly converted according to the locale. So this check does not work correctly for non-en locales. As a result, `db:prepare` cannot correctly determine if a database exists, and `bin/setup`, which depends on the task, does not work correctly if the database does not exist. It checks to exist if the "does not exist" exists, but that message is also used in other error messages(e.g. "role does not exist"). So cannot check correctly also in en locale. https://github.com/postgres/postgres/blob/master/src/backend/po/ja.po#L10542 It would be fine could check the status, but in my understanding, when a connecting fails, only the status `CONNECTION_BAD` be used, and it seems that details cannot be checked. https://www.postgresql.org/docs/11/libpq-status.html#LIBPQ-PQSTATUS I fixed to check whether the error message contains a database name. This is probably not accurate but can check it better now.
* | | | | | | Fix indentation 💇‍♀️Roberto Miranda2019-07-081-1/+1
| | | | | | | | | | | | | | | | | | | | | Ref https://github.com/rails/rails/pull/36621#discussion_r301208961
* | | | | | | Merge branch 'master' into add_database_exist_methodGuillermo Iguaran2019-07-0847-176/+421
|\ \ \ \ \ \ \ | | |_|/ / / / | |/| | | | |
| * | | | | | When DATABASE_URL is specified don't trample envs that use a url: keyWill Jessop2019-07-082-5/+24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | fixes #36610