- 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 5 次提交
-
-
由 Sean Griffin 提交于
For reads, we never need to construct this object. The double `defined?` check is to avoid errors in tests
-
由 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 提交于
-
由 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 5 次提交
-
-
由 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 提交于
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.
-
由 Sean Griffin 提交于
This moves a bit more of the logic required for dirty checking into the attribute objects. I had hoped to remove the `with_value_from_database` stuff, but unfortunately just calling `dup` on the attribute objects isn't enough, since the values might contain deeply nested data structures. I think this can be cleaned up further. This makes most dirty checking become lazy, and reduces the number of object allocations and amount of CPU time when assigning a value. This opens the door (but doesn't quite finish) to improving the performance of writes to a place comparable to 4.1
-
- 24 9月, 2015 4 次提交
-
-
由 Jean Boussier 提交于
-
由 Brandon Conway 提交于
It appears that as of version 4 the `db:test:prepare` task no longer depends on the `abort_if_pending_migrations` task, which leaves this comment out of sync.
-
由 amitkumarsuroliya 提交于
-
由 Mehmet Emin İNAÇ 提交于
-
- 23 9月, 2015 3 次提交
-
-
由 Bogdan Gusiev 提交于
Timestamp column can have less precision than ruby timestamp In result in how big a fraction of a second can be stored in the database. m = Model.create! m.created_at.usec == m.reload.created_at.usec # => false # due to different seconds precision in Time.now and database column If the precision is low enough, (mysql default is 0, so it is always low enough by default) the value changes when model is reloaded from the database. This patch fixes that issue ensuring that any timestamp assigned as an attribute is converted to column precision under the attribute.
-
由 yuuji.yaginuma 提交于
This removes the following warning. ``` activerecord/lib/active_record/relation/calculations.rb:74: warning: `&' interpreted as argument prefix ```
-
由 yui-knk 提交于
This argument was needen when `sanitize_sql_for_conditions` internally called `sanitize_sql_hash_for_conditions`. But `sanitize_sql_hash_for_conditions` was deprecated (https://github.com/rails/rails/commit/eb921000a11bc87a3b001164fc367b84aee584c5) and deleted (https://github.com/rails/rails/commit/3a59dd212315ebb9bae8338b98af259ac00bbef3) (https://github.com/rails/rails/commit/4bd089f1d93fa168b0ae17dd8c92a5157a2537d7).
-