aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test/cases/finder_test.rb
Commit message (Collapse)AuthorAgeFilesLines
* 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
* Should `Regexp.escape` quoted table name in regexRyuta Kamizono2019-07-081-1/+2
| | | | | It is for agnostic test case, since quoted table name may include `.` for all adapters, and `[` / `]` for sqlserver adapter.
* 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.
* Fix random CI failure due to non-deterministic sorting orderRyuta Kamizono2019-03-111-5/+6
| | | | | | | An `author` has a lots of `posts` in the fixtures, so the result of `author.post` and finding a `post` by `author_id` is non-deterministic. https://travis-ci.org/rails/rails/jobs/504332292#L1202-L1208
* Remove duplicated protected params definitionsRyuta Kamizono2019-02-241-3/+3
| | | | Use "support/stubs/strong_parameters" instead.
* Fix `relation.exists?` with giving both `distinct` and `offset`Ryuta Kamizono2019-02-081-0/+10
| | | | | | | | | | | The `distinct` affects (reduces) rows of the result, so it is important part when both `distinct` and `offset` are given. Replacing SELECT clause to `1 AS one` and removing `distinct` and `order` is just optimization for the `exists?`, we should not apply the optimization for that case. Fixes #35191.
* activerecord: Fix where nil condition on composed_of attributeDylan Thacker-Smith2019-01-181-0/+18
|
* All of queries should return correct result even if including large numberRyuta Kamizono2019-01-181-0/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently several queries cannot return correct result due to incorrect `RangeError` handling. First example: ```ruby assert_equal true, Topic.where(id: [1, 9223372036854775808]).exists? assert_equal true, Topic.where.not(id: 9223372036854775808).exists? ``` The first example is obviously to be true, but currently it returns false. Second example: ```ruby assert_equal topics(:first), Topic.where(id: 1..9223372036854775808).find(1) ``` The second example also should return the object, but currently it raises `RecordNotFound`. It can be seen from the examples, the queries including large number assuming empty result is not always correct. Therefore, This change handles `RangeError` to generate executable SQL instead of raising `RangeError` to users to always return correct result. By this change, it is no longer raised `RangeError` to users.
* Merge pull request #34963 from ↵Rafael França2019-01-171-0/+1
|\ | | | | | | | | dylanahsmith/better-composed-of-single-field-query activerecord: Use a simpler query condition for aggregates with one mapping
| * activerecord: Use a simpler query condition for aggregates with one mappingDylan Thacker-Smith2019-01-171-0/+1
| |
* | Ensure that AR::Relation#exists? allows only permitted paramsbogdanvlviv2019-01-171-2/+6
|/ | | | | Clarify changelog entry Related to #34891
* Allow strong params in ActiveRecord::Base#exists?Gannon McGibbon2019-01-071-0/+9
| | | | | Allow `ActionController::Params` as argument of `ActiveRecord::Base#exists?`
* Module#{define_method,alias_method,undef_method,remove_method} become public ↵Ryuta Kamizono2018-12-211-1/+1
| | | | | | since Ruby 2.5 https://bugs.ruby-lang.org/issues/14133
* Make implicit order column configurableTekin Suleyman2018-11-261-0/+10
| | | | | | | | | | | | | | When calling ordered finder methods such as +first+ or +last+ without an explicit order clause, ActiveRecord sorts records by primary key. This can result in unpredictable and surprising behaviour when the primary key is not an auto-incrementing integer, for example when it's a UUID. This change makes it possible to override the column used for implicit ordering such that +first+ and +last+ will return more predictable results. For Example: class Project < ActiveRecord::Base self.implicit_order_column = "created_at" end
* `exists?` with string argument is not invalid typeRyuta Kamizono2018-10-271-5/+13
| | | | | | Any type can be a primary key, so blank string is also valid value. Closes #26356.
* Ignore empty condition on #construct_relation_for_existsr7kamura2018-10-271-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | At https://github.com/rails/rails/commit/fc0e3354af7e7878bdd905a95ce4c1491113af9a, ```rb relation = relation.where(conditions) ``` was rewritten to: ```rb relation.where!(condition) ``` This change accidentally changed the result of `Topic.exists?({})` from true to false. To fix this regression, first I moved the blank check logic (`opts.blank?`) from `#where` to `#where!`, because I thought `#where!` should be identical to `#where`, except that instead of returning a new relation, it adds the condition to the existing relation. But on second thought after some discussion on https://github.com/rails/rails/pull/34329, I started to think that just fixing `#construct_relation_for_exists` is more preferable than changing `#where` and `#where!`.
* Don't return the same object when using find with an empty arrayRafael Mendonça França2018-09-191-1/+4
| | | | | | When you pass an empty array to find we know we shoudl return an empty array but it is surprising that we are returning the original empty array instead of a new one.
* Revert "Merge pull request #24131 from brchristian/limit_and_primary_key"Ryuta Kamizono2018-08-011-15/+0
| | | | | | | | | | This reverts commit d162188dd662a7d9f62ba8431474f50bc35e3e93, reversing changes made to 3576782888c307e3e192c44e332b957cd1174128. Reason: #24131 conflicts the #5153's default order contract, it means that existing apps would be broken by that change. We don't want to break existing apps without a deprecation cycle.
* Add test case for the #5153's default order contractRyuta Kamizono2018-08-011-0/+13
|
* tests for use of primary_key with limitBrian Christian2018-07-191-0/+15
|
* Add missing test case for `find` with a large numberRyuta Kamizono2018-06-221-0/+6
|
* Address CI failure due to non-deterministic query resultRyuta Kamizono2018-05-061-1/+1
| | | | https://travis-ci.org/rails/rails/jobs/375326992#L1160-L1166
* Replace `assert !` with `assert_not`Daniel Colson2018-04-191-2/+2
| | | | | This autocorrects the violations after adding a custom cop in 3305c78dcd.
* Fix `#columsn_for_distinct` of MySQL and PostgreSQLkg8m2018-02-271-0/+5
| | | | | | | Prevent `ActiveRecord::FinderMethods#limited_ids_for` from using correct primary key values even if `ORDER BY` columns include other table's primary key. Fixes #28364.
* More exercise range predicate builderRyuta Kamizono2018-02-231-0/+9
| | | | | * Add test case for open-ended range. * Add test case for numeric range for string column.
* Fix expanding an array of `composed_of` objects which have multiple mappingsRyuta Kamizono2018-01-291-4/+5
| | | | | | | | | Follow up of #31724. If `composed_of` objects have multiple mappings, array predicate handler can not correctly handle the expanded condition. We need to handle it like polymorphic association objects.
* Merge pull request #31724 from orekyuu/fix-expand-composed-object-arrayRyuta Kamizono2018-01-291-0/+18
|\ | | | | | | Fix not expanded problem when passing an Array object as argument to the where method using composed_of column.
| * Allow expanding an array of `composed_of` objectsRyuta Kamizono2018-01-291-3/+2
| |
| * Fix not expanded problem when passing an Array object as argument to the ↵orekyuu2018-01-261-0/+19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | where method using composed_of column. Fixes #31723 ``` david_balance = customers(:david).balance Customer.where(balance: [david_balance]).to_sql # Before: WHERE `customers`.`balance` = NULL # After : WHERE `customers`.`balance` = 50 ```
* | Use assert_predicate and assert_not_predicateDaniel Colson2018-01-251-2/+2
|/
* Make `relation.exists?` more performant when using eager loadingRyuta Kamizono2018-01-111-10/+12
| | | | | | `relation.exists?` just wants to know if there is a result or not, does not need the exact records matched. Therefore, an intermediate SELECT query for eager loading is not necessary.
* resolve inconsistencies between first and to_a.first with limitBrian Christian2018-01-091-0/+18
|
* Fix `last` with `offset` to behave consistently with loaded relationRyuta Kamizono2018-01-071-8/+4
| | | | | | Currently `last` with `offset` behaves incorrectly because `offset` can not be reversed like `limit`. Therefore, `offset` should also be handled like `limit`.
* assert_nothing_raised not required here, we can assert directly for the ↵Prathamesh Sonpatki2017-12-191-4/+2
| | | | actual result
* Enable `Layout/LeadingCommentSpace` to not allow cosmetic changes in the futureRyuta Kamizono2017-12-141-1/+1
| | | | Follow up of #31432.
* Enable `Layout/SpaceBeforeComma` rubocop rule, and fixed moreRyuta Kamizono2017-12-121-1/+1
| | | | Follow up of #31390.
* Revert "Merge pull request #31006 from ↵eileencodes2017-11-261-16/+0
| | | | | | | | | | | rails/kamipo/ordinal_methods_should_respect_loaded_records" This reverts commit 0f79ab91150b4cdb6c018530978a3395962c7a02, reversing changes made to d575f7f2e737739302a0e8210d01c10f5d4e2c35. This PR philosophically conflicts with #30800 and Matthew thinks we should hold off merging this until we find concensus. Reverting since we're about to cut a release for 5.2.
* Merge pull request #31184 from TheSmartnik/fix_record_not_found_on_reloadRafael França2017-11-251-0/+15
|\ | | | | Provide arguments to RecordNotFound
| * Provide arguments to RecordNotFoundNikita Misharin2017-11-251-0/+15
| |
* | Merge pull request #31006 from ↵Eileen M. Uchitelle2017-11-251-0/+16
|\ \ | |/ |/| | | | | rails/kamipo/ordinal_methods_should_respect_loaded_records Ordinal methods should respect loaded records
| * Ordinal methods should respect loaded recordsRyuta Kamizono2017-10-281-0/+16
| | | | | | | | | | | | We should reset partially loaded `@offsets` cache when latest records has loaded because the cache has been staled and it may not be consistent with latest records.
* | try using regexesBen Toews2017-11-091-7/+7
| |
* | allow table name and direction in string order argBen Toews2017-11-091-11/+11
| |
* | work around deprecation warnings in a bunch of testsBen Toews2017-11-091-20/+20
|/
* All test cases for `exists?` places in `finder_test.rb` to ease to find the ↵Ryuta Kamizono2017-10-091-0/+26
| | | | test cases
* Fix `relation.exists?` with has_many through associationsRyuta Kamizono2017-10-091-0/+8
| | | | | `relation.exists?` should reference correct aliases while joining tables of has_many through associations.
* Merge pull request #29720 from gaurish/ar_find_error_message_improvementRafael França2017-08-111-1/+1
|\ | | | | Return Not found Ids in ActiveRecord::NotFound
| * Return Not found Ids in ActiveRecord::NotFoundGaurish Sharma2017-07-291-1/+1
| | | | | | | | | | This builds on top of 15e2da656f41af0124f7577858536f3b65462ad5. now it also returns exact Ids which were not found which will be debugging simple.
* | Merge pull request #29842 from kamipo/fix_find_by_with_rangeMatthew Draper2017-08-021-0/+4
|\ \ | |/ |/| Fix `find_by` with range conditions
| * Fix `find_by` with range conditionsRyuta Kamizono2017-07-201-0/+4
| | | | | | | | | | `StatementCache` doesn't support range conditions. So we need to through the args to `FinderMethods#find_by` if range value is passed.