aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib
Commit message (Collapse)AuthorAgeFilesLines
* Fix out of range error messageRyuta Kamizono2014-11-251-1/+1
|
* allow types to be passed in for USING castsAaron Patterson2014-11-241-0/+3
| | | | | | | This allows us so abstract the migration from the type that is actually used by Rails. For example, ":string" may be a varchar or something, but the framework does that translation, and the app shouldn't need to know.
* allow the "USING" statement to be specified on change column callsAaron Patterson2014-11-241-1/+3
|
* Merge pull request #17682 from ReneB/docs/update_allRafael Mendonça França2014-11-241-5/+5
|\ | | | | Explain that default_scope also influences update_all
| * 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.
* | Mark comments that should not be in the docsclaudiob2014-11-244-0/+14
| | | | | | | | | | | | | | | | | | | | | | Some comments that are meant to separate blocks of code in a file show up on http://api.rubyonrails.org as though they were part of the documentation. This commit hides those comments from the documentation. Stems from the discussion with @zzak at https://github.com/voloko/sdoc/issues/79#issuecomment-64158738 [ci skip]
* | Ensure the type map's cache is thread safeSean Griffin2014-11-241-3/+7
| | | | | | | | | | Thanks to @thedarkone for pointing out that an instance of this object is used in a shared context.
* | Merge pull request #17678 from siddharth28/includes_with_scope_with_joinsSantiago Pastorino2014-11-242-12/+4
|\ \ | | | | | | Fix includes on association with a scope
| * | Fix includes on association with a scope containing joins along with conditionssiddharth@vinsol.com2014-11-212-12/+4
| | | | | | | | | | | | on the joined assoiciation
* | | cleanup, remove trailing whitespace [ci skip]Yves Senn2014-11-241-2/+2
| | |
* | | Update reflections public API docArthur Neves2014-11-221-1/+1
| | |
* | | Fix build failuresSean Griffin2014-11-221-1/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | For some reason changing `.find` to `.unscoped.find` in https://github.com/rails/rails/commit/f766abd4cf3eb75469d3646cfb6d85e668c619f3 caused `scoping` to leak in some tests when run in isolation (looks like a concurrency issue?). `relation_scoping_test.rb` is a case that failed. From what I can tell it should not be possible, but changing to the block form fixes it. There is a deeper issue that I can't seem to find. /cc @senny
* | | Rename the primary key index when renaming a table in pgSean Griffin2014-11-221-0/+3
| | | | | | | | | | | | | | | | | | | | | | | | Also checked to make sure this does not affect foreign key constraints. (It doesn't). Fixes #12856 Closes #14088
* | | ConnectionAdapter#substitute_at is technically public API...Sean Griffin2014-11-211-1/+1
|/ / | | | | | | We can't change the signature without a deprecation cycle.
* | make it possible to access fixtures excluded by a `default_scope`.Yves Senn2014-11-211-1/+1
| | | | | | | | | | | | | | | | Prior to this patch you'd end up with an error like: ``` ActiveRecord::RecordNotFound: Couldn't find <Model> with 'id'=<id> [WHERE (<default_scope condition>)] ```
* | Merge pull request #17695 from claudiob/replace-all-backticks-with-plusesYves Senn2014-11-214-6/+6
|\ \ | | | | | | Wrap code snippets in +, not backticks, in sdoc [ci skip]
| * | Wrap code snippets in +, not backticks, in sdocclaudiob2014-11-204-6/+6
| | | | | | | | | | | | | | | | | | | | | | | | I grepped the source code for code snippets wrapped in backticks in the comments and replaced the backticks with plus signs so they are correctly displayed in the Rails documentation. [ci skip]
* | | raise a better exception for renaming long indexesAaron Patterson2014-11-202-0/+6
|/ /
* | Merge pull request #17669 from SamSaffron/optimise_memorySean Griffin2014-11-201-1/+6
|\ \ | | | | | | PERF: avoid string allocations
| * | PERF: avoid string allocationsSam2014-11-201-1/+6
| | |
* | | synchronize code and docs for `timestamps` and `add_timestamps`.Yves Senn2014-11-203-8/+11
| |/ |/| | | | | | | | | | | | | This makes the following changes: * warn if `:null` is not passed to `add_timestamps` * `timestamps` method docs link to `add_timestamps` docs * explain where additional options go * adjust examples to include `null: false` (to prevent deprecation warnings)
* | Merge pull request #17575 from shikshachauhan/make-habtm-consistentRafael Mendonça França2014-11-191-1/+1
|\ \ | | | | | | Allow class_name option in habtm to be consistent with other association...
| * | Allow habtm class_name option to be consistent with other associationsshiksha2014-11-131-1/+1
| | |
* | | Reintroduce cache with testsSean Griffin2014-11-192-14/+24
| | |
* | | Add tests for `TypeMap#fetch` and push up to `TypeMap`Sean Griffin2014-11-192-5/+5
| | | | | | | | | | | | | | | | | | | | | 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
* | | Revert "PERF: optimise type lookup to avoid invoking procs"Sean Griffin2014-11-192-32/+8
| | | | | | | | | | | | This reverts commit da99a2a2982d35f670ad9647463e09bfe9032b70.
* | | Merge pull request #17662 from ↵Rafael Mendonça França2014-11-191-1/+1
|\ \ \ | | | | | | | | | | | | | | | | dtaniwaki/support-symbol-foreign-key-column-to-delete Support symbol foreign key to delete
| * | | Support symbol foreign key to deletedtaniwaki2014-11-191-1/+1
| | | |
| * | | 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-1811-17/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | 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-177-20/+7
| | | | | | | | Oh hey, we got to remove some code because of that!
* | rm `reorder_bind_params`Sean Griffin2014-11-174-16/+1
| | | | | | | | | | | | 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
* | 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-141-1/+1
| | | | | | | | | | | | | | 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-145-27/+70
| | | | | | | | | | | | | | | | | | | | 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
* | Use `DelegateClass` instead of `SimpleDelegator` for type decoratorsSean Griffin2014-11-142-2/+2
| | | | | | | | There is a significant performance difference between the two. Closes