aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
Commit message (Collapse)AuthorAgeFilesLines
...
| * | | | 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
* | | default scopes should break the cache on has_many.Aaron Patterson2014-11-072-1/+28
| | | | | | | | | | | | | | | | | | if you specify a default scope on a model, it will break caching. We cannot predict what will happen inside the scope, so play it safe for now. fixes #17495
* | | pg tests, get rid of `sql_types_test.rb`.Yves Senn2014-11-073-18/+14
| | |
* | | pg tests, only execute what's necessary.Yves Senn2014-11-072-27/+26
| | |
* | | remove the last traces of OpenBase from our codebase. [ci skip]Yves Senn2014-11-071-6/+0
| | |
* | | docs, the abstract data type `:timestamp` was removed. See #15184 [ci skip]Yves Senn2014-11-071-2/+2
| | |
* | | Merge pull request #17541 from OpenSourceProjects/meaninful_messageYves Senn2014-11-073-5/+15
|\ \ \ | | | | | | | | | | | | Print out a meaningful error when ActiveRecord::ReadOnlyRecord is raised
| * | | Print out a meaningful error when ActiveRecord::ReadOnlyRecord is raisedFranky W2014-11-062-5/+8
|/ / / | | | | | | | | | | | | | | | | | | Currently, there is no messages which get printed out. Convoluted system may have hooks that create other objects in which case we only fail with no messages. This commit changes this information allowing you to know which object is the one that actually raised the error.
* | | tests, remove unneeded requires.Yves Senn2014-11-064-11/+0
| | |
* | | tests, use SchemaDumpingHelper to dump a specific table.Yves Senn2014-11-061-12/+12
| | | | | | | | | | | | | | | This makes debugging the generated schema output much easier. As a side effect it also shaves off 2.5 seconds of test runtime.
* | | Remove unneccesary default parametersSean Griffin2014-11-051-1/+1
| | |
* | | Improve performance of AR object instantiationSean Griffin2014-11-055-11/+61
| | | | | | | | | | | | | | | | | | | | | We introduced a performance hit by adding an additional iteration through a model's attributes on creation. We don't actually need the values from `Result` to be a hash, we can separate the columns and values and zip them up ourself during the iteration that we have to do.