aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record
Commit message (Collapse)AuthorAgeFilesLines
* 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
* 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-111-17/+19
|\ | | | | | | add a Table#name accessor like TableDefinition#name
| * add a Table#name accessor like TableDefinition#nameCody Cutrer2014-11-101-17/+19
| |
* | 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 #11694 from ↵Rafael Mendonça França2014-11-101-1/+7
|\ \ | |/ |/| | | | | | | | | | | | | 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-031-1/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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-092-5/+27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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-092-2/+2
| |
* | default scopes should break the cache on singulur_association.alfa-jpn2014-11-081-1/+2
| | | | | | | | fixes #17495
* | default scopes should break the cache on has_many.Aaron Patterson2014-11-071-1/+2
| | | | | | | | | | | | 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
* | docs, the abstract data type `:timestamp` was removed. See #15184 [ci skip]Yves Senn2014-11-071-2/+2
| |
* | Print out a meaningful error when ActiveRecord::ReadOnlyRecord is raisedFranky W2014-11-061-2/+2
| | | | | | | | | | | | | | 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.
* | 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.
* | Merge pull request #17360 from bronzle/includes_and_unscopedYves Senn2014-11-051-0/+1
|\ \ | | | | | | | | | copy reflection_scopes’s unscoped value when building scope for preloading
| * | copy reflection_scopes’s unscoped value when building scope for ↵Byron Bischoff2014-10-221-0/+4
| | | | | | | | | | | | preloading, fixes #11036
* | | Merge pull request #17510 from pda/ar-create-database-error-messageCarlos Antonio da Silva2014-11-051-0/+1
|\ \ \ | | | | | | | | rake db:create shows underlying error message.
| * | | activerecord: rake db:create shows underlying error message.Paul Annesley2014-11-041-0/+1
| | | |
* | | | Merge pull request #17473 from vipulnsward/rm-unused-methodYves Senn2014-11-051-8/+0
|\ \ \ \ | |/ / / |/| | | Remove unused duplicated method `add_column_position` from AbstractMysqlAdapter.
| * | | - Remove unused duplicated method `add_column_position` from ↵Vipul A M2014-11-011-8/+0
| | | | | | | | | | | | | | | | AbstractMysqlAdapter
* | | | Added SchemaDumper support for tables with jsonb columns.Ted O'Meara2014-11-041-0/+1
| | | |
* | | | Remove unneeded autoloadRafael Mendonça França2014-11-031-4/+1
| | | |
* | | | Merge pull request #17487 from pabloh/avoid_allocationsRafael Mendonça França2014-11-034-4/+4
|\ \ \ \ | | | | | | | | | | Avoid unnecessary allocations and method calls
| * | | | Avoid unnecessary allocations/callsPablo Herrero2014-11-024-4/+4
| | | | |
* | | | | Add comment to point out String#[] is intentionalAndrew White2014-11-021-0/+1
| | | | |
* | | | | Revert "Replace String index juggling with Pathname goodness in ↵yuuji.yaginuma2014-11-021-1/+1
|/ / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | db:fixtures:load" This reverts commit 482fdad5ef8a73688b50bba3991dd4ef6f286edd. Fixes #17237.
* | | | Handle `RangeError` from casting in `find_by` and `find_by!` on RelationSean Griffin2014-11-021-0/+4
| | | | | | | | | | | | | | | | | | | | We should not behave differently just because a class has a default scope.
* | | | Revert deprecation of `sanitize_sql_hash_for_assignment`Sean Griffin2014-11-021-3/+0
| | | | | | | | | | | | | | | | This method is still used by `update_all`
* | | | Deprecate `sanitize_sql_hash_` methods on ActiveRecordSean Griffin2014-11-021-0/+6
| | | | | | | | | | | | | | | | | | | | These appear to be implementation relics of times past. They duplicate the logic in Relation, and are no longer used internally.
* | | | Pass the `SelectManager`, rather than the AST when querying w/ RelationSean Griffin2014-11-021-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | Arel specifically handles `SelectManager`, with the same logic we're currently performing. The AST is `Enumerable`, which Arel looks for separately now.
* | | | Merge pull request #17483 from pabloh/optimize_gsub_callsSean Griffin2014-11-011-1/+1
|\ \ \ \ | | | | | | | | | | Call gsub with a Regexp instead of a String for better performance
| * | | | Call gsub with a Regexp instead of a String for better performancePablo Herrero2014-11-011-1/+1
| | | | |
* | | | | Don't duplicate predicate building logic in Relation findersSean Griffin2014-11-011-5/+2
| | | | |
* | | | | Use a bound parameter for the "id = " portion of update statementsSean Griffin2014-11-012-5/+14
|/ / / / | | | | | | | | | | | | | | | | | | | | We need to re-order the bind parameters since the AST returned by the relation will have the where statement as the first bp, which breaks on PG.
* | | | Correctly cast calculation results on PGSean Griffin2014-11-013-1/+16
| | | | | | | | | | | | | | | | | | | | MySQL reports the column name as `"MAX(developer_id)"`. PG will report it as `"max"`
* | | | [ci skip] `Relation#bind` is not public APISean Griffin2014-11-011-1/+1
| | | |
* | | | Use bind values for joined tables in where statementsSean Griffin2014-11-013-1/+19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In practical terms, this allows serialized columns and tz aware columns to be used in wheres that go through joins, where they previously would not behave correctly. Internally, this removes 1/3 of the cases where we rely on Arel to perform type casting for us. There were two non-obvious changes required for this. `update_all` on relation was merging its bind values with arel's in the wrong order. Additionally, through associations were assuming there would be no bind parameters in the preloader (presumably because the where would always be part of a join) [Melanie Gilman & Sean Griffin]
* | | | Merge pull request #17463 from mrgilman/remove-index-from-substitute-atSean Griffin2014-11-013-7/+6
|\ \ \ \ | | | | | | | | | | Remove redundant substitute index when constructing bind values
| * | | | Remove redundant substitute index when constructing bind valuesMelanie Gilman2014-10-313-7/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We end up re-ordering them either way when we construct the Arel AST (in order to deal with rewhere, etc), so we shouldn't bother giving it a number in the first place beforehand.
* | | | | Don't needlessly alphabetize columns for insert/updateSean Griffin2014-11-011-4/+3
| |/ / / |/| | | | | | | | | | | | | | | This slightly simplifies the code, and reduces the number of times we need to iterate over the attributes by one.
* | | | remove unused and untested APIAaron Patterson2014-10-311-6/+2
| | | |