aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib
Commit message (Collapse)AuthorAgeFilesLines
...
| * | | | | | | | `eager_load` preserves readonly flag for associationsTakashi Kokubun2014-12-301-0/+1
| |/ / / / / / /
* / / / / / / / Add nodoc to touch at no_touching.rbRafael Mendonça França2014-12-291-1/+1
|/ / / / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It is already docummented at persistence.rb. [ci skip]
* | | | | | | Minor documentation edits [ci skip]Robin Dupret2014-12-281-6/+5
| | | | | | |
* | | | | | | Fix warning: `*' interpreted as argument prefixRyuta Kamizono2014-12-281-1/+1
| | | | | | |
* | | | | | | Provide :touch option to save() to accommodate saving without updating ↵Dan Olson2014-12-273-10/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | timestamps. [#18202]
* | | | | | | Provide a better error message for unsupported classes in `serialize`Sean Griffin2014-12-271-0/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We only support classes which provide a no-args constructor to use as a default value. We can provide a more helpful error message if we catch this when `serialize` is called, rather than letting it error when you try to assign the attribute. Fixes #18224
* | | | | | | Add bigint primary key support for MySQL.Ryuta Kamizono2014-12-283-1/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Example: create_table :foos, id: :bigint do |t| end
* | | | | | | Support for any type primary key.Ryuta Kamizono2014-12-282-10/+5
| | | | | | |
* | | | | | | add autoload for `ForeignKeyDefinition`.Yves Senn2014-12-271-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | /cc @sgrif
* | | | | | | reduce duplication in `ConnectionAdapters::Table` docs. [ci skip]Yves Senn2014-12-271-27/+38
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Most of the documentation very closely mirrors the matching docs from `SchemaStatements`. I reduced duplicated copy and added links to the underlying methods for the user to follow.
* | | | | | | Refactor `PostgreSQL::TableDefinition#primary_key`Ryuta Kamizono2014-12-271-4/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Because call the `column` method and set the `options[:primary_key]` is handled at `super`, here need only treat the `options[:default]`.
* | | | | | | Inform Arel we don't need additional type casting in batchesSean Griffin2014-12-261-1/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Part of the larger refactoring to remove type casting from Arel. We can inform it that we already have the right type by wrapping the value in an `Arel::Nodes::Quoted`. This commit can be reverted when we have removed type casting from Arel in Rail 5.1
* | | | | | | Inform Arel that we don't need additional type casting in batchingSean Griffin2014-12-261-2/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Part of the larger refactoring to remove type casting from Arel. We can inform it that we already have the right type by wrapping the value in an `Arel::Nodes::Quoted`. This commit can be reverted when we have removed type casting from Arel in Rail 5.1
* | | | | | | Go through normal `update_all` logic when updating lock columnsSean Griffin2014-12-261-17/+7
| | | | | | |
* | | | | | | Go through normal `update_all` logic when updating counter cachesSean Griffin2014-12-261-4/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Part of a larger refactoring to remove type casting behavior from Arel
* | | | | | | We don't need additional type casting for locking updatesSean Griffin2014-12-261-3/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Part of the larger refactoring to remove type casting from Arel. We can inform it that we already have the right type by wrapping the value in an `Arel::Nodes::Quoted`. This commit can be reverted when we have removed type casting from Arel in Rail 5.1
* | | | | | | Go through normal where logic in `apply_join_dependency`Sean Griffin2014-12-261-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Part of the larger refactoring to remove type casting from Arel.
* | | | | | | We don't need to type cast the offset in `find_in_batches`Sean Griffin2014-12-261-1/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Part of the larger refactoring to remove type casting from Arel. We can inform it that we already have the right type by wrapping the value in an `Arel::Nodes::Quoted`. This commit can be reverted when we have removed type casting from Arel in Rail 5.1
* | | | | | | Fall back to type casting from the connection adapterSean Griffin2014-12-261-2/+70
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There are several valid cases where right now we can't determine the association's class in a call to `where`. In these cases, we can fall back to casting by looking up the column from the connection adapter (which is what happens right now when we fall through to Arel) This is ugly, and since we're trying to separate the concept of a type from a column, I'd like to remove it in the future. The problem basically comes down to this: Liquid.joins(molecules: :electrons) .where("molecules.name" => "something", "electrons.name" => "something") The hash in this case will turn into: { molecules: { name: "something" }, electrons: { name: "something" }, } What we actually need is: { molecules: { name: "something", electrons: { name: "something" }, } } /cc @mrgilman
* | | | | | | Go through normal `where` logic in uniqueness validationSean Griffin2014-12-261-4/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This code could use some much heavier refactoring. It looks like `build_relation` duplicates most of the logic of `Relation#where` and `PredicateBuilder` with regards to handling associations and attribute aliases
* | | | | | | We don't need to cast the value a second time in uniqueness validationsSean Griffin2014-12-261-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Part of the larger refactoring to remove type casting from Arel. Since we've already cast the value a few lines above, we don't need to re-cast it later. We can inform Arel of this by wrapping it in an `Arel::Nodes::Quoted`, which will no longer be required in Rails 5.1
* | | | | | | We don't need to perform type casting on the STI conditionSean Griffin2014-12-261-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We will always have the correct type for this query, so no casting is needed. We inform Arel that we already have the right type by wrapping it in an `Arel::Nodes::Quoted` (which we will no longer need to do in Rails 5.1)
* | | | | | | Go through normal `where` logic when preloading associationsSean Griffin2014-12-261-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This will allow eager type casting to take place as needed. There doesn't seem to be any particular reason that the `in` statement was forced for single values, and the commit message where it was introduced gives no context. See https://github.com/rails/rails/commit/d90b4e2615e8048fdeffc6dffe3246704adee01f
* | | | | | | Eagerly cast array values passed to the predicate builderSean Griffin2014-12-261-1/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Part of a larger refactoring to remove type casting from Arel. /cc @mrgilman [Sean Griffin & Melanie Gilman]
* | | | | | | Eagerly cast range values in the predicate builderSean Griffin2014-12-262-1/+25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A custom object is required for this, as you cannot build a range object out of `Arel::Nodes::Quoted` objects. Depends on the changes introduced in https://github.com/rails/arel/commit/cf03bd45e39def057a2f63e42a3391b7d750dece /cc @mrgilman
* | | | | | | Perform casting of single values within the predicate builderSean Griffin2014-12-265-6/+37
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | As part of the larger refactoring to remove type casting from Arel, we need to do the casting of values eagerly. The predicate builder is the closest place that knows about the Active Record class, and can therefore have the type information. /cc @mrgilman [Sean Griffin & Melanie Gilman]
* | | | | | | Remove `klass` and `arel_table` as a dependency of `PredicateBuilder`Sean Griffin2014-12-267-30/+70
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This class cares far too much about the internals of other parts of Active Record. This is an attempt to break out a meaningful object which represents the needs of the predicate builder. I'm not fully satisfied with the name, but the general concept is an object which represents a table, the associations to/from that table, and the types associated with it. Many of these exist at the `ActiveRecord::Base` class level, not as properties of the table itself, hence the need for another object. Currently it provides these by holding a reference to the class, but that will likely change in the future. This allows the predicate builder to remain wholy concerned with building predicates. /cc @mrgilman
* | | | | | | Refactor association handling in `PredicateBuilder`Sean Griffin2014-12-262-21/+61
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I'm attempting to remove `klass` as a dependency of the predicate builder, in favor of an object that better represents what we're using it for. The only part of this which doesn't fit nicely into that picture is the check for an association being polymorphic. Since I'm not yet sure what that is going to look like, I've moved this logic into another class in an attempt to separate things that will change from things that won't.
* | | | | | | Re-use the predicate builder in the `ArrayHandler`Sean Griffin2014-12-262-8/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This reduces the number of places which will need to care about single value or range specific logic as we introduce type casting. The array handler is only responsible for producing `in` statements. /cc @mrgilman [Sean Griffin & Melanie Gilman]
* | | | | | | Change `PredicateBuilder` handler methods to instance methodsSean Griffin2014-12-265-30/+71
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This will allow us to pass the predicate builder into the constructor of these handlers. The procs had to be changed to objects, because the `PredicateBuilder` needs to be marshalable. If we ever decide to make `register_handler` part of the public API, we should come up with a better solution which allows procs. /cc @mrgilman [Sean Griffin & Melanie Gilman]
* | | | | | | Add missing `:nodoc:`Sean Griffin2014-12-261-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We're accidentally documenting `PredicateBuilder` and `ArrayHandler` since there's a constant which is missing `# :nodoc:`
* | | | | | | Inject the `PredicateBuilder` into the `Relation` instanceSean Griffin2014-12-269-16/+24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Construction of relations can be a hotspot, we don't want to create one of these in the constructor. This also allows us to do more expensive things in the predicate builder's constructor, since it's created once per AR::Base subclass
* | | | | | | Remove unused `@relation` instance variableSean Griffin2014-12-261-2/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | We don't memoize the relation instance
* | | | | | | Merge branch 'brainopia-remember_frozen_state_in_transaction'Sean Griffin2014-12-261-7/+5
|\ \ \ \ \ \ \
| * | | | | | | Propagate frozen state during transaction changesbrainopia2014-12-261-7/+5
|/ / / / / / /
* | | | | | | Correctly ignore `case_sensitive` for UUID uniqueness validationSean Griffin2014-12-265-2/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I think we should deprecate this behavior and just error if you tell us to do a case insensitive comparison for types which are not case sensitive. Partially reverts 35592307 Fixes #18195
* | | | | | | Dump the default `nil` for PostgreSQL UUID primary key.Ryuta Kamizono2014-12-261-1/+1
| | | | | | |
* | | | | | | - Changed `target` to `target_reflection` to avoid warning `possible ↵Vipul A M2014-12-251-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | reference to past scope`
* | | | | | | Check for Rails.env instead of RailsPavel Penkov2014-12-251-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `Rails` constant is added by rails-html-sanitizer leading to bugs in non-Rails apps using ActiveRecord and ActionMailer
* | | | | | | Correct grammar to fix #18182 [ci skip]Zachary Scott2014-12-241-1/+1
| | | | | | |
* | | | | | | Merge pull request #18159 from ↵Sean Griffin2014-12-231-1/+1
|\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | M7/docs-active_record-update_query_method_docs_with_full_description Describe full behaviour of Active Record's attribute query methods
| * | | | | | | Clarify that query methods have a custom definition of whether a numeric ↵Michael D.W. Prendergast2014-12-231-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | value is present. [ci skip] The way Active Record query methods handle numeric values is a special case, and is not part of Rails's standard definition of present. This update attempts to make this more clear in the docs, so that people don't expect Object#present? to return false if used on a number that is zero.
| * | | | | | | Clarify that the word present refers to Object#present?. [ci skip]Michael D.W. Prendergast2014-12-231-36/+2
| | | | | | | | | | | | | | | | | | | | | | | | Update Active Record's attribute query methods documentation to clarify that whether an attribute is present is based on Object#present?. This gives people a place to go see what the exact definition of presence is. [ci skip]
| * | | | | | | Update Active Record's attribute query methods documentation to describe its ↵Michael D.W. Prendergast2014-12-221-2/+36
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | full behaviour. [ci skip]
* | | | | | | | Merge pull request #18174 from bogdan/cleanup_has_many_though_association_countSean Griffin2014-12-231-15/+0
|\ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | Remove unneeded special case to calculate size for has_many :through
| * | | | | | | | Remove unneeded special case to calculate size for has_many :throughBogdan Gusiev2014-12-231-15/+0
| |/ / / / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | All cases are properly handled in CollectionAssociation for all subclasses of this association
* | | | | | | | Don't treat `nil` as changed in serialized typesSean Griffin2014-12-231-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We were ignoring the `default_value?` escape clause in the serialized type, which caused the default value to always be treated as changed. Fixes #18169
* | | | | | | | Refactor a common class to reduce the duplication for `references`Sean Griffin2014-12-232-59/+86
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The code for `TableDefinition#references` and `SchemaStatements#add_reference` were almost identical both structurally, and in terms of domain knowledge. This removes that duplication into a common class, using the `Table` API as the expected interface of its collaborator.
* | | | | | | | Fix syntax warningSean Griffin2014-12-231-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This isn't Seattle.rb, @senny. ;)
* | | | | | | | Merge pull request #18167 from al2o3cr/checkin_connection_leakSean Griffin2014-12-231-4/+6
|\ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | Fix connection leak when a thread checks in additional connections.