- 07 10月, 2015 1 次提交
-
-
由 tanmay3011 提交于
-
- 06 10月, 2015 3 次提交
-
-
由 Sean Griffin 提交于
Any gems or libraries which do work with serialization or YAML will ultimately need to compare these objects (albeit indirectly) to ensure correctness. These will likely never get used internally (as they're slow), but we should still expose them for others.
-
由 amitkumarsuroliya 提交于
-
由 Kir Shatrov 提交于
-
- 05 10月, 2015 1 次提交
-
-
由 akihiro17 提交于
* before ``` people = Person.where(group: 'expert') people.update(group: 'masters') Note: Updating a large number of records will run a UPDATE query for each record, which may cause a performance issue. So if it is not needed to run callbacks for each update, it is preferred to use <tt>update_all</tt> for updating all records using a single query. ``` * after ``` people = Person.where(group: 'expert') people.update(group: 'masters') ``` Note: Updating a large number of records will run an UPDATE query for each record, which may cause a performance issue. So if it is not needed to run callbacks for each update, it is preferred to use <tt>update_all</tt> for updating all records using a single query.
-
- 04 10月, 2015 1 次提交
-
-
由 Mehmet Emin İNAÇ 提交于
-
- 03 10月, 2015 1 次提交
-
-
由 acapilleri 提交于
to reduce allocation of same object
-
- 02 10月, 2015 8 次提交
-
-
由 Sean Griffin 提交于
For reads, we never need to construct this object. The double `defined?` check is to avoid errors in tests
-
由 Sean Griffin 提交于
I misread this test in https://github.com/rails/rails/commit/1a693c79c32cba070256fdb7bd1990c3d07d554f
-
由 Sean Griffin 提交于
There were a few places where I missed a `create` vs `new` before_type_cast check, and the semantics of `reload` became wrong.
-
由 Sean Griffin 提交于
We can skip the allocation of a full `AttributeSet` by changing the semantics of how we structure things. Instead of comparing two separate `AttributeSet` objects, and `Attribute` is now a singly linked list of every change that has happened to it. Since the attribute objects are immutable, to apply the changes we simply need to copy the head of the list. It's worth noting that this causes one subtle change in the behavior of AR. When a record is saved successfully, the `before_type_cast` version of everything will be what was sent to the database. I honestly think these semantics make more sense, as we could have just as easily had the DB do `RETURNING *` and updated the record with those if we had things like timestamps implemented at the DB layer. This brings our performance closer to 4.2, but we're still not quite there.
-
由 Guo Xiang Tan 提交于
-
由 Andy Atkinson 提交于
-
由 Roque Pinel 提交于
Move from `AS::Callbacks::CallbackChain.halt_and_display_warning_on_return_false` to `AS::Callbacks.halt_and_display_warning_on_return_false` base on [this discussion](https://github.com/rails/rails/pull/21218#discussion_r39354580) Fix the documentation broken by 0a120a81
-
由 yui-knk 提交于
`alias :migrations_path= :migrations_paths=`, so `migrations_path = some_string` is correct.
-
- 29 9月, 2015 5 次提交
-
-
由 Prakash Laxkar 提交于
-
由 Gaurav Sharma 提交于
-
由 Sean Griffin 提交于
I'm looking to move towards a tree-like structure for dirty checking that involves an attribute holding onto the attribute that it was created from. This means that `changed?` can be fully encapsulated on that object. Since the objects are immutable, in `changes_applied`, we can simply perform a shallow dup, instead of a deep one. I'm not sure if that will actually end up in a performance boost, but I'd like to semantically separate these concepts regardless
-
由 Sean Griffin 提交于
The external uses of this method have been removed, and I'd like to internally re-use that name, as I'm planning to encapsulate `changed?` into the attribute object itself.
-
由 Gaurav Sharma 提交于
`ActiveRecord::Associations::JoinDependency` now it’s own class` and `ActiveRecord::Associations::ThroughAssociationScope` doesn’t exists
-
- 28 9月, 2015 1 次提交
-
-
由 amitkumarsuroliya 提交于
-
- 27 9月, 2015 3 次提交
-
-
由 amitkumarsuroliya 提交于
-
由 eileencodes 提交于
`inverse_of` on through associations was accidently removed/caused to stop working in commit f8d2899d which was part of a refactoring on `ThroughReflection`. To fix we moved `inverse_of` and `check_validity_of_inverse!` to the `AbstractReflection` so it's available to the `ThroughReflection` without having to dup any methods. We then need to delegate `inverse_name` method in `ThroughReflection`. `inverse_name` can't be moved to `AbstractReflection` without moving methods that set the instance variable `@automatic_inverse_of`. This adds a test that ensures that `inverse_of` on a `ThroughReflection` returns the correct class name, and the correct record for the inverse relationship. Fixes #21692
-
由 amitkumarsuroliya 提交于
-
- 26 9月, 2015 7 次提交
-
-
由 yui-knk 提交于
* add % style prepared statement and string examples for `sanitize_sql_for_conditions` * add array and string examples for `sanitize_sql_for_assignment` * add examples for `sanitize_sql_like` * add % style prepared statement example for `sanitize_sql_array` * align spaces of exampl code
-
由 amitkumarsuroliya 提交于
-
由 amitkumarsuroliya 提交于
-
由 amitkumarsuroliya 提交于
Fix `ActiveRecord::PredicateBuilder` docs. as `register_handler` no more ClassMethod, Since commit https://github.com/rails/rails/commit/a3936bbe21f4bff8247f890cacfd0fc882921003 [ci skip]
-
由 Rafael Mendonça França 提交于
-
由 amitkumarsuroliya 提交于
-
由 amitkumarsuroliya 提交于
-
- 25 9月, 2015 9 次提交
-
-
由 Sean Griffin 提交于
The implementation of `attribute_method?` on Active Record requires establishing a database connection and querying the schema. As a general rule, we don't want to require database connections for any class macro, as the class should be able to be loaded without a database (e.g. for things like compiling assets). Instead of eagerly defining these methods, we do it lazily the first time they are accessed via `method_missing`. This should not cause any performance hits, as it will only hit `method_missing` once for the entire class.
-
由 yui-knk 提交于
Sure unquoted SQL code pass test, but this % style prepared statements are dangerous. Test codes and code examples are also "Rails" codes, so quote placeholder of prepared statements.
-
由 Sean Griffin 提交于
This was passing prior to 20b177b7, because we were not properly applying our contract that `model.attr == model.tap(&:save).reload.attr` for this case. Now that that has been resolved, this test is invalid on some adapters
-
由 Sean Griffin 提交于
When a time object was assigned to a datetime column, the decorator for TZ aware attributes wouldn't call super, so when using a database without support for subsecond precision, the nanosecond would not be truncated, leading to the value being marked as changed. Interestingly, this also shows our new implementation of dirty checking to be more robust than the old one (with less code and better performance!
🎉 !!!) -
由 Sean Griffin 提交于
They didn't help.
-
由 Sean Griffin 提交于
Nobody can replicate locally and the failure makes no sense
-
由 Sean Griffin 提交于
When I removed the call to `super` to avoid the setting of `@previous_changes`, I forgot to duplicate the other part of that behavior, which led to failing tests
-
由 Sean Griffin 提交于
The biggest source of the performance regression in these methods occurred because dirty tracking required eagerly materializing and type casting the assigned values. In the previous commits, I've changed dirty tracking to perform the comparisons lazily. However, all of this is moot when calling `save`, since `changes_applied` will be called, which just ends up eagerly materializing everything, anyway. With the new mutation tracker, it's easy to just compare the previous two hashes in the same lazy fashion. We will not have aliasing issues with this setup, which is proven by the fact that we're able to detect nested mutation. Before: User.create! 2.007k (± 7.1%) i/s - 10.098k After: User.create! 2.557k (± 3.5%) i/s - 12.789k Fixes #19859
-
由 Sean Griffin 提交于
In order to improve the performance of dirty checking, we're going to need to duplicate all of the `previous_` methods in Active Model. However, these methods are basically the same as their non-previous counterparts, but comparing `@original_attributes` to `@previous_original_attributes` instead of `@attributes` and `@original_attributes`. This will help reduce that duplication.
-