aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test/cases
Commit message (Collapse)AuthorAgeFilesLines
* Merge pull request #36380 from ↵Rafael Mendonça França2019-07-251-0/+22
|\ | | | | | | | | | | 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-301-0/+22
| | | | | | | | | | | | | | | | | | | | 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 #36740 from ↵Rafael França2019-07-251-2/+4
|\ \ | | | | | | | | | | | | stanhu/sh-fix-index-exists-postgresql-partial-index Fix index_exists? for PostgreSQL expression indexes
| * | Fix index_exists? for PostgreSQL expression indexesStan Hu2019-07-241-2/+4
| | | | | | | | | | | | | | | | | | | | | | | | 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-254-306/+7
|\ \ \ | | | | | | | | Remove unused `DepthFirst` visitor
| * | | Remove unused `DepthFirst` visitorRyuta Kamizono2019-06-154-306/+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-241-0/+24
|\ \ \ \ | | | | | | | | | | Fix multiple database support for DATABASE_URL env variable
| * | | | Fix multiple database support for DATABASE_URL env variableJohn Crepezzi2019-07-241-0/+24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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 #36671 from ↵Eileen M. Uchitelle2019-07-241-0/+16
|\ \ \ \ \ | |_|_|/ / |/| | | | | | | | | | | | | | wjessop/do_not_validate_non_dirty_association_targets Don't validate non dirty association targets
| * | | | Don't validate non dirty association targetsWill Jessop2019-07-151-0/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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 #36665 from jmschneider/masterRafael Mendonça França2019-07-231-0/+4
|\ \ \ \ \ | |_|/ / / |/| | | | | | | | | Make currency symbols optional for money column type in PostgreSQL
| * | | | Make currency symbols optional for money column type in PostgreSQLJoel Schneider2019-07-121-0/+4
| |/ / /
* | | | [ActiveRecord] Deduplicate optimizer hintsKir Shatrov2019-07-191-0/+7
| | | |
* | | | Support beginless ranges in hash conditions.Josh Goodall2019-07-171-0/+24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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-162-2/+5
| | | |
* | | | Raise specific exception on Mysql2::Error::TimeoutErrorKir Shatrov2019-07-161-0/+14
| | | |
* | | | 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.
* | | Merge pull request #36647 from ↵Ryuta Kamizono2019-07-111-0/+5
|\ \ \ | | | | | | | | | | | | | | | | | | | | 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-101-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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 #36618 from engwan/fix-query-cache-with-shared-ar-connectionEileen M. Uchitelle2019-07-101-0/+17
|\ \ \ \ | |/ / / |/| | | Fix query cache when using shared connections
| * | | Fix query cache when using shared connectionsHeinrich Lee Yu2019-07-081-0/+17
| | | | | | | | | | | | | | | | | | | | Enables the query cache on the correct connection when shared connections across threads are enabled
* | | | Merge branch 'master' into add_database_exist_methodGuillermo Iguaran2019-07-0819-124/+222
|\ \ \ \
| * | | | When DATABASE_URL is specified don't trample envs that use a url: keyWill Jessop2019-07-081-0/+19
| | | | | | | | | | | | | | | | | | | | fixes #36610
| * | | | Merge pull request #36616 from kamipo/dont_use_alias_for_grouped_fieldRyuta Kamizono2019-07-081-0/+7
| |\ \ \ \ | | |/ / / | |/| | | Do not use aliases in GROUP BY clause
| | * | | Do not use aliases in GROUP BY clauseRyuta Kamizono2019-07-081-0/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It appears that Oracle does not allow using aliases in GROUP BY clause unlike ORDER BY clause. Fixes #36613.
| * | | | Should `Regexp.escape` quoted table name in regexRyuta Kamizono2019-07-087-115/+51
| |/ / / | | | | | | | | | | | | | | | | It is for agnostic test case, since quoted table name may include `.` for all adapters, and `[` / `]` for sqlserver adapter.
| * | / MySQL: Fix schema dumping `enum` and `set` columns correctlyRyuta Kamizono2019-07-053-1/+47
| | |/ | |/| | | | | | | | | | | | | | | | | | | | | | `enum` and `set` are typed cast as `:string`, but currently the `:string` type is incorrectly reused for schema dumping. A cast type on columns is not always the same with `sql_type`, this fixes schema dumping `enum` and `set` columns to use `sql_type` instead of `type` correctly.
| * | Fix broken url configseileencodes2019-06-272-1/+32
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This PR is to fix #36559 but I also found other issues that haven't been reported. The check for `(config.size == 1 && config.values.all? { |v| v.is_a? String })` was naive. The only reason this passed was because we had tests that had single hash size configs, but that doesn't mean we don't want to create a hash config in other cases. So this now checks for `config["database"] || config["adapter"] || ENV["DATABASE_URL"]`. In the end for url configs we still get a UrlConfig but we need to pass through the HashConfig to create the right kind of UrlConfig. The UrlConfig's are really complex and I don't necessarily understand everything that's needed in order to act the same as Rails 5.2. I edited the connection handler test to demonstrate how the previous implementation was broken when checking config size. Now old and new tests pass so I think this is closer to 5.2. Fixes #36559
| * | `length(title)` is a safe SQL string since #36448Ryuta Kamizono2019-06-261-2/+2
| | |
| * | Merge pull request #36210 from ↵Rafael França2019-06-241-0/+41
| |\ \ | | | | | | | | | | | | | | | | vishaltelangre/raise-record-invalid-when-associations-fail-to-save-due-to-uniqueness-failure Fix: ActiveRecord::RecordInvalid is not raised when an associated record fails to #save! due to uniqueness validation failure
| | * | Fix: ActiveRecord::RecordInvalid is not raised when an associated record ↵Vishal Telangre2019-05-101-0/+41
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | fails to #save! due to uniqueness validation failure Add tests Fix tests failing due to introduction of uniquness rule added to Book model
| * | | 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 ```
| * | | | Revert schema dumper to use strings rather than integerseileencodes2019-06-201-0/+1
| |/ / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
| * | | | Better error message for calling columns_hashGuilherme Mansur2019-06-191-0/+8
| |/ / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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-192-4/+7
| |\ \ \ | | | | | | | | | | Deduplicate various Active Record schema cache structures
| | * | | Deduplicate various Active Record schema cache structuresJean Boussier2019-06-032-4/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* | | | | Add database_exists? method to connection adaptersGuilherme Mansur2019-06-173-0/+40
|/ / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | When SQLite connects it will silently create a database if the database does not exist. This behaviour causes different issues because of inconsistent behaviour between adapters: #36383, #32914. This commit adds a `database_exists?` method as a way to check the database without creating it. This is a stepping stone to fully resolving the above issues.
* | | | PostgreSQL: Fix GROUP BY with ORDER BY virtual count attributeRyuta Kamizono2019-06-172-2/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* | | | Remove unused `Arel::Attributes.for`Ryuta Kamizono2019-06-151-41/+0
| |_|/ |/| | | | | | | | `Arel::Attributes.for` is no longer used since https://github.com/rails/arel/pull/196.
* | | 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
| | |
* | | Move while_preventing_writes from conn to handlereileencodes2019-06-145-32/+92
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* | | Move SchemaMigration to migration_contexteileencodes2019-06-149-114/+355
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This PR moves the `schema_migration` to `migration_context` so that we can access the `schema_migration` per connection. This does not change behavior of the SchemaMigration if you are using one database. This also does not change behavior of any public APIs. `Migrator` is private as is `MigrationContext` so we can change these as needed. We now need to pass a `schema_migration` to `Migrator` so that we can run migrations on the right connection outside the context of a rake task. The bugs this fixes were discovered while debugging the issues around the SchemaCache on initialization with multiple database. It was clear that `get_all_versions` wouldn't work without these changes outside the context of a rake task (because in the rake task we establish a connection and change AR::Base.connection to the db we're running on). Because the `SchemaCache` relies on the `SchemaMigration` information we need to make sure we store it per-connection rather than on ActiveRecord::Base. [Eileen M. Uchitelle & Aaron Patterson]
* | | Fix rubocop violationsRyuta Kamizono2019-06-141-2/+2
| | |
* | | Make ActiveRecord `ConnectionPool.connections` thread-safe. (#36473)jeffdoering2019-06-131-0/+22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Make ActiveRecord `ConnectionPool.connections` thread-safe. ConnectionPool documentation is clear on the need to synchronize access to @connections but also states that public methods do not require synchronization. Existing code exposed @connections directly via attr_reader. The fix uses synchronize() to lock @connections then returns a copy to the caller using Array.dup(). Includes comments on the connections method that thread-safe access to the connections array does not imply thread-safety of accessing methods on the actual connections. Adds a test-case that modifies the pool using a supported method in one thread while a second thread accesses pool.connections. The test fails without this patch. Fixes #36465. * Update activerecord/test/cases/connection_pool_test.rb [jeffdoering + Rafael Mendonça França]
* | | Ensure to reset migration version after testing migrationRyuta Kamizono2019-06-131-2/+2
| | | | | | | | | | | | | | | | | | | | | "schema_migrations" table may be hard dropped before, so the reset migration version should be done in ensure block. https://buildkite.com/rails/rails/builds/61697#18d6f3ac-2257-4f4b-8efc-4010464c4d9a/999-1011