aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
Commit message (Collapse)AuthorAgeFilesLines
* Reword documentation for update_allRené van den Berg2014-11-241-8/+1
| | | It now contains a carefully formulated reference to the "current relation" which might help clarify that the receiving will generate its own scope, escaping the need for explicitly referencing `default_scope` which is, after all, just another way of specifying a scope and nothing special.
* Explain that default_scope also influences update_allRené van den Berg2014-11-201-5/+12
| | | | | This was not explicitly stated before and I needed to try it out to be certain. A little explicit statement in the API docs might help here.
* Merge pull request #17575 from shikshachauhan/make-habtm-consistentRafael Mendonça França2014-11-192-1/+11
|\ | | | | Allow class_name option in habtm to be consistent with other association...
| * Allow habtm class_name option to be consistent with other associationsshiksha2014-11-132-1/+11
| |
* | Reintroduce cache with testsSean Griffin2014-11-193-14/+56
| |
* | Add tests for `TypeMap#fetch` and push up to `TypeMap`Sean Griffin2014-11-193-5/+20
| | | | | | | | | | | | | | It doesn't make sense for the subclass to implement this method, and not have it on the parent. We can also DRY up the implementation of `#lookup` to be defined in terms of fetch, which will give us a single point of entry
* | That last test was incorrect... ☕Sean Griffin2014-11-191-10/+0
| |
* | Revert "PERF: optimise type lookup to avoid invoking procs"Sean Griffin2014-11-192-32/+8
| | | | | | | | This reverts commit da99a2a2982d35f670ad9647463e09bfe9032b70.
* | Introduce test to demonstrate regression caused by da99a2a2Sean Griffin2014-11-191-0/+10
| |
* | Merge pull request #17662 from ↵Rafael Mendonça França2014-11-192-1/+9
|\ \ | | | | | | | | | | | | dtaniwaki/support-symbol-foreign-key-column-to-delete Support symbol foreign key to delete
| * | Support symbol foreign key to deletedtaniwaki2014-11-192-1/+9
| | |
| * | Revert "[PERF] Speed up integer type casting from DB"Godfrey Chan2014-11-171-4/+1
| | | | | | | | | | | | | | | | | | This reverts commit 6f7910a and 52c70d4. Query params are type cased through the same method, so this approach doesn't work.
| * | :nail_care: Put escape clause first, keeps @sgrif happy :grin:Godfrey Chan2014-11-171-1/+2
| | | | | | | | | | | | See comment on 6f7910a
| * | [PERF] Speed up integer type casting from DBGodfrey Chan2014-11-171-1/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We don't have the check the range when the value is coming from the DB, so override type_cast_from_database to short-circuit the extra work. type_cast_from_database (small) 3437507.5 (±29.2%) i/s - 14223135 in 4.996973s type_cast_from_database (large) 3158588.7 (±28.3%) i/s - 13265628 in 4.992121s type_cast (small) 481984.8 (±14.2%) i/s - 2352012 in 5.005694s type_cast (large) 477331.8 (±14.2%) i/s - 2332824 in 5.012365s Comparison: type_cast_from_database (small): 3437507.5 i/s type_cast_from_database (large): 3158588.7 i/s - 1.09x slower type_cast (small): 481984.8 i/s - 7.13x slower type_cast (large): 477331.8 i/s - 7.20x slower The difference is huge but the absolute gain is quite small. That being said this is a hotspot and it showed up on the radar when benchmarking discourse.
* | | Improve the performance of reading attributesSean Griffin2014-11-1812-18/+24
| | | | | | | | | | | | | | | | | | | | | We added a comparison to "id", and call to `self.class.primary_key` a *lot*. We also have performance hits from `&block` all over the place. We skip the check in a new method, in order to avoid breaking the behavior of `read_attribute`
* | | pull the preloader allocation in to a factory methodAaron Patterson2014-11-181-1/+5
| | |
* | | Speed up integer casting from DBSean Griffin2014-11-181-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | We don't have the check the range when the value is coming from the DB, so override type_cast_from_database to short-circuit the extra work. The difference is huge but the absolute gain is quite small. That being said this is a hotspot and it showed up on the radar when benchmarking discourse.
* | | Remove needless call to `key?` when building attributesSean Griffin2014-11-181-2/+4
| | | | | | | | | | | | This appears to be a performance hotspot, see #17655.
* | | LazyAttributeHash is privateSean Griffin2014-11-181-1/+1
| | |
* | | Remove call to `key?` in `LazyAttributeHash#[]`Sean Griffin2014-11-181-5/+1
| | | | | | | | | | | | Performance improvement, as well as improved code clarity
* | | PERF: stop allocating the string "id" over and overSam2014-11-181-1/+3
|/ /
* | Remove the unused second argument to `substitute_at`Sean Griffin2014-11-1711-25/+12
| | | | | | | | Oh hey, we got to remove some code because of that!
* | rm `reorder_bind_params`Sean Griffin2014-11-179-25/+7
| | | | | | | | | | | | Arel handles this for us automatically. Updated tests, as BindParam is no longer a subclass of SqlLiteral. We should remove the second argument to substitute_at entirely, as it's no longer used
* | Force table creation in testsSean Griffin2014-11-171-2/+2
| | | | | | | | | | | | If something causes the teardown block to not get run (errors, interrupting test runs), we have to manually delete them, which is a pain.
* | Improve the performance of quoting table names on PGSean Griffin2014-11-171-4/+15
| | | | | | | | | | | | This caused a pretty major performance regression for 4.2, as this is a hotspot for query construction. We're still slightly slower than 4.1, but it's much less significant.
* | Remove pointless `private`Sean Griffin2014-11-171-2/+0
| | | | | | | | This class no longer has any private methods
* | PERF: optimise type lookup to avoid invoking procsSam2014-11-172-8/+32
| |
* | Don't freeze the same hash we use for memoizationSean Griffin2014-11-141-6/+7
| |
* | Allow `LazyAttributeHash` to be marshalledSean Griffin2014-11-141-13/+17
| | | | | | | | | | | | | | | | `default_proc` makes a hash unmarshallable, and adds unneccessary overhead. Since we control all access to the hash, let's just handle it in that method. This has the side effect of improving performance on initialization (but not neccessarily on access). We'll need to profile further once the tests are passing.
* | Correctly determine if an attribute is uninitializedSean Griffin2014-11-142-2/+10
| | | | | | | | | | | | | | In real usage, we give the builder a types hash with a default value of `Type::Value.new`. This means we need to explicitly check for the key, rather than the truthiness of the type to determine if it's a known but uninitialized attribute
* | Reduce the amount of work performed when instantiating AR modelsSean Griffin2014-11-146-27/+79
| | | | | | | | | | | | | | | | | | | | We don't know which attributes will or won't be used, and we don't want to create massive bottlenecks at instantiation. Rather than doing *any* iteration over types and values, we can lazily instantiate the object. The lazy attribute hash should not fully implement hash, or subclass hash at any point in the future. It is not meant to be a replacement, but instead implement its own interface which happens to overlap.
* | Revert "Improve performance of AR object instantiation"Sean Griffin2014-11-145-61/+11
| | | | | | | | | | | | | | | | | | | | This reverts commit 8fee923888192a658d8823b31e77ed0683dfd665. Conflicts: activerecord/lib/active_record/attribute_set/builder.rb This solution sucks, and is hard to actually apply across the board. Going to try other solutions
* | Merge pull request #17620 from arunagw/aa-build-fix-isolatedSean Griffin2014-11-1430-0/+31
|\ \ | | | | | | Build fix when running in isolation
| * | Build fix when running in isolationArun Agrawal2014-11-1430-0/+31
| | | | | | | | | | | | | | | `Computer` class needs to be require See #17217 for more details
* | | Use `DelegateClass` instead of `SimpleDelegator` for type decoratorsSean Griffin2014-11-142-2/+2
|/ / | | | | | | There is a significant performance difference between the two. Closes
* | exec_prepared is GVL friendly, so lets use it.Aaron Patterson2014-11-131-4/+2
| | | | | | | | | | also increase the version of pg required so that people will get the GVL friendly version
* | Follow the coding conventionsAndrey Deryabin2014-11-121-1/+1
| |
* | Merge pull request #17580 from ccutrer/change_table_nameYves Senn2014-11-113-17/+29
|\ \ | | | | | | | | | add a Table#name accessor like TableDefinition#name
| * | add a Table#name accessor like TableDefinition#nameCody Cutrer2014-11-103-17/+29
| | |
* | | Merge pull request #17585 from aderyabin/remove_limited_update_conditionsRafael Mendonça França2014-11-102-8/+0
|\ \ \ | |/ / |/| | remove never called method `limited_update_conditions`
| * | remove never called method `limited_update_conditions`Andrey Deryabin2014-11-112-8/+0
| |/
* | Merge pull request #17579 from aderyabin/cleanup_sqliteRafael Mendonça França2014-11-101-6/+2
|\ \ | | | | | | Tiny improvement in sqlite3 adapter
| * | tiny code improvement in sqlite3 adapter:Andrey Deryabin2014-11-101-6/+2
| |/ | | | | | | | | - remove unused method `supports_add_column?` - change additional restriction method to `valid_alter_table_type?` - fix code style
* | Merge pull request #17578 from codeodor/fix-17217-test-bugRafael Mendonça França2014-11-101-1/+1
|\ \ | | | | | | Fix bug found when running individual tests against #17217 after merging
| * | Fixes a bug found when running individual tests against #17217 after mergingSammy Larbi2014-11-101-1/+1
| |/
* | Merge pull request #11694 from ↵Rafael Mendonça França2014-11-103-1/+20
|\ \ | |/ |/| | | | | | | | | | | | | Empact/association-bind-values-not-updated-on-save Fix that a collection proxy could be cached before the save of the owner, resulting in an invalid proxy lacking the owner’s id Conflicts: activerecord/CHANGELOG.md
| * Fix that a collection proxy could be cached before the save of the owner, ↵Ben Woosley2014-10-033-1/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | resulting in an invalid proxy lacking the owner’s id. Absent this fix calls like: owner.association.update_all to behave unexpectedly because they try to act on association objects where owner_id is null. more evidence here: https://gist.github.com/Empact/5865555 ``` Active Record 3.2.13 -- create_table(:firms, {:force=>true}) -> 0.1371s -- create_table(:clients, {:force=>true}) -> 0.0005s 1 clients. 1 expected. 1 clients updated. 1 expected. ``` ``` Active Record 4.0.0 -- create_table(:firms, {:force=>true}) -> 0.1606s -- create_table(:clients, {:force=>true}) -> 0.0004s 1 clients. 1 expected. 0 clients updated. 1 expected. ```
* | Revert the behavior of booleans in string columns to that of 4.1Sean Griffin2014-11-093-7/+29
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Why are people assigning booleans to string columns? >_> We unintentionally changed the behavior on Sqlite3 and PostgreSQL. Boolean values should cast to the database's representation of true and false. This is 't' and 'f' by default, and "1" and "0" on Mysql. The implementation to make the connection adapter specific behavior is hacky at best, and should be re-visted once we decide how we actually want to separate the concerns related to things that should change based on the database adapter. That said, this isn't something I'd expect to change based on my database adapter. We're storing a string, so the way the database represents a boolean should be irrelevant. It also seems strange for us to give booleans special behavior at all in string columns. Why is `to_s` not sufficient? It's inconsistent and confusing. Perhaps we should consider deprecating in the future. Fixes #17571
* | Ensure HABTM relationships produce valid class names (Fixes #17119)Sammy Larbi2014-11-097-3/+25
| |
* | default scopes should break the cache on singulur_association.alfa-jpn2014-11-082-1/+31
| | | | | | | | fixes #17495