aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
Commit message (Collapse)AuthorAgeFilesLines
...
| * | | | Remove mass assignment security from ActiveRecordGuillermo Iguaran2012-09-1620-1170/+18
| | | | |
* | | | | ActiveRecord -> Active RecordXavier Noria2012-09-181-1/+1
| | | | |
* | | | | Use the CHANGELOG convention [ci skip]Rafael Mendonça França2012-09-171-3/+5
| | | | |
* | | | | Merge pull request #7661 from ernie/build-join-records-on-unsaved-hmtRafael Mendonça França2012-09-173-0/+24
|\ \ \ \ \ | | | | | | | | | | | | Fix collection= on hm:t join models when unsaved
| * | | | | Fix collection= on hm:t join models when unsavedErnie Miller2012-09-173-0/+24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If assigning to a has_many :through collection against an unsaved object using the collection=[<array_of_items>] syntax, the join models were not properly created, previously.
* | | | | | Fix warning: method redefine. Testcase name are duplicated.kennyj2012-09-171-1/+1
| |/ / / / |/| | | |
* | | | | improve AR/CHANGELOG [ci skip]Francesco Rodriguez2012-09-161-44/+68
| | | | |
* | | | | Merge pull request #7547 from danmcclain/pg-arraysRafael Mendonça França2012-09-1612-53/+435
|\ \ \ \ \ | | | | | | | | | | | | Adds migration and type casting support for PostgreSQL Array datatype
| * | | | | Moves column dump specific code to a module included in AbstractAdapterDan McClain2012-09-1412-53/+435
| | |/ / / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Having column related schema dumper code in the AbstractAdapter. The code remains the same, but by placing it in the AbstractAdapter, we can then overwrite it with Adapter specific methods that will help with Adapter specific data types. The goal of moving this code here is to create a new migration key for PostgreSQL's array type. Since any datatype can be an array, the goal is to have ':array => true' as a migration option, turning the datatype into an array. I've implemented this in postgres_ext, the syntax is shown here: https://github.com/dockyard/postgres_ext#arrays Adds array migration support Adds array_test.rb outlining the test cases for array data type Adds pg_array_parser to Gemfile for testing Adds pg_array_parser to postgresql_adapter (unused in this commit) Adds schema dump support for arrays Adds postgres array type casting support Updates changelog, adds note for inet and cidr support, which I forgot to add before Removing debugger, Adds pg_array_parser to JRuby platform Removes pg_array_parser requirement, creates ArrayParser module used by PostgreSQLAdapter
* | | | | Remove debug code :bomb:Rafael Mendonça França2012-09-161-1/+0
| | | | |
* | | | | Merge pull request #7651 from steveklabnik/issue_3956Rafael Mendonça França2012-09-162-2/+33
|\ \ \ \ \ | |_|/ / / |/| | | | | | | | | | | | | | | | | | | Don't preserve SELECT columns on COUNT Closes #7651
| * | | | Don't preserve SELECT columns on COUNTSteve Klabnik2012-09-162-2/+33
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The COUNT clause of a finder_sql relationship is being rewritten from COUNT(*) to COUNT(table_name.*). This does not appear to be valid syntax in MySQL: ``` mysql> SELECT COUNT( table_name.* ) FROM `table_name`; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '* ) FROM `table_name`' at line 1 ``` This fixes the bug, as well as adding tests so we don't re-introduce it in the future. Fixes #3956.
* | | | | Don't explain except normal CRUD sql.kennyj2012-09-173-1/+14
| | | | |
* | | | | Fix find_in_batches with customized primary_keyToshiyuki Kawanishi2012-09-164-6/+38
| | | | |
* | | | | Query for sequence info also should be markd as SCHEMA.kennyj2012-09-151-3/+3
| | | | |
* | | | | Query for loading index info should be marked as SCHEMA.kennyj2012-09-152-2/+2
| | | | |
* | | | | Merge pull request #7643 from steveklabnik/deprecate_silenceRafael Mendonça França2012-09-151-12/+18
|\ \ \ \ \ | | | | | | | | | | | | Deprecate ActiveSupport::Benchmarkable#silence.
| * | | | | Deprecate ActiveSupport::Benchmarkable#silence.Steve Klabnik2012-09-151-12/+18
| | |/ / / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | Due to its lack of thread safety, we're deprecating this, and it will be removed in Rails 4.1. Fixes #4060.
* | | | | simplify rescueJon Leighton2012-09-151-3/+3
| |/ / / |/| | |
* | | | Fix testJon Leighton2012-09-152-15/+21
| | | | | | | | | | | | | | | | Accidentally checked in commented test code. Fail. >_<
* | | | Ensure disconnecting or reconnecting resets the transaction stateJon Leighton2012-09-157-9/+55
| | | |
* | | | Remove our use of #outside_transaction?Jon Leighton2012-09-153-61/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This method was first seen in 045713ee240fff815edb5962b25d668512649478, and subsequently reimplemented in fb2325e35855d62abd2c76ce03feaa3ca7992e4f. According to @jeremy, this is okay to remove. He thinks it was added because at the time we didn't have much transaction state to keep track of, and he viewed it as a hack for us to track it internally, thinking it was better to ask the connection for the transaction state. Over the years we have added more and more state to track, a lot of which is impossible to ask the connection for. So it seems that this is just a relic of the passed and we will just track the state internally only.
* | | | Remove the transaction_open variableJon Leighton2012-09-152-21/+33
| | | |
* | | | Move transaction joinability into the transaction objectJon Leighton2012-09-155-20/+36
| | | |
* | | | Alter the naming structure a bitJon Leighton2012-09-153-108/+111
| | | |
* | | | Split Open into Real and SavepointJon Leighton2012-09-151-25/+38
| | | |
* | | | DRYJon Leighton2012-09-151-4/+8
| | | |
* | | | Don't do the rollback in #commitJon Leighton2012-09-152-18/+7
| | | | | | | | | | | | | | | | | | | | The caller needs to have knowledge of the rollback either way, so do it all in the caller (#transaction)
* | | | Store the transaction number in the transaction objectJon Leighton2012-09-155-13/+30
| | | | | | | | | | | | | | | | This avoids us having to manually increment and decrement it.
* | | | Start to tease out transaction handling into a state machineJon Leighton2012-09-156-87/+158
| | | |
* | | | Revert "create a transaction object and point AR objects at that object ↵Jon Leighton2012-09-154-55/+12
|/ / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | during a" This reverts commit c24c885209ac2334dc6f798c394a821ee270bec6. Here's the explanation I just sent to @tenderlove: Hey, I've been thinking about about the transaction memory leak thing that we were discussing. Example code: post = nil Post.transaction do N.times { post = Post.create } end Post.transaction is going to create a real transaction and there will also be a (savepoint) transaction inside each Post.create. In an idea world, we'd like all but the last Post instance to be GC'd, and for the last Post instance to receive its after_commit callback when Post.transaction returns. I can't see how this can work using your solution where the Post itself holds a reference to the transaction it is in; when Post.transaction returns, control does not switch to any of Post's instance methods, so it can't trigger the callbacks itself. What we really want is for the transaction itself to hold weak references to the objects within the transaction. So those objects can be GC'd, but if they are not GC'd then the transaction can iterate them and execute their callbacks. I've looked into WeakRef implementations that are available. On 1.9.3, the stdlib weakref library is broken and we shouldn't use it. There is a better implementation here: https://github.com/bdurand/ref/blob/master/lib/ref/weak_reference/pure_ruby.rb We could use that, either by pulling in the gem or just copying the code in, but it still suffers from the limitation that it uses ObjectSpace finalizers. In my testing, this finalizers make GC quite expensive: https://gist.github.com/3722432 Ruby 2.0 will have a native WeakRef implementation (via ObjectSpace::WeakMap), hence won't be reliant on finalizers: http://bugs.ruby-lang.org/issues/4168 So the ultimate solution will be for everyone to use Ruby 2.0, and for us to just use ObjectSpace::WeakMap. In the meantime, we have basically 3 options: The first is to leave it as it is. The second is to use a finalizer-based weakref implementation and take the GC perf hit. The final option is to store object ids rather than the actual objects. Then use ObjectSpace._id2ref to deference the objects at the end of the transaction, if they exist. This won't stop memory use growing within the transaction, but it'll grow more slowly. I benchmarked the performance of _id2ref this if the object does or does not exist: https://gist.github.com/3722550 If it does exist it seems decent, but it's hugely more expensive if it doesn't, probably because we have to do the rescue nil. Probably most of the time the objects will exist. However the point of doing this optimisation is to allow people to create a large number of objects inside a transaction and have them be GC'd. So for that use case, we'd be replacing one problem with another. I'm not sure which of the two problems is worse. My feeling is that we should just leave this for now and come back to it when Ruby 2.0 is out. I'm going to revert your commit because I can't see how it solves this. Hope you don't mind... if I've misunderstood then let me know! Jon
* | | refactor store_accessorMatt Jones2012-09-134-9/+67
| | |
* | | update ConnectionAdaptar::Column#type_cast_code to be compatible with 3.2 branchThiago Pradi2012-09-131-1/+1
| | |
* | | Pass in the model class rather than engineJon Leighton2012-09-133-8/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | In some circumstances engine was Arel::Table.engine which for separate reasons was an ActiveRecord::Model::DeprecationProxy, which caused a deprecation warning. In any case, we want the actual model class here, since we want to use it to infer information about associations.
* | | Refactor to remove some duplicationJon Leighton2012-09-122-37/+24
| | |
* | | Fix nested association referencesJon Leighton2012-09-123-41/+36
| | | | | | | | | | | | | | | Previously the reflection would be looked up on the wrong class. However the test passed because the examples referred back to themselves.
* | | Merge pull request #7273 from beerlington/foreign_key_model_queriesJon Leighton2012-09-126-5/+151
|\ \ \ | | | | | | | | Convert model name to foreign key in queries
| * | | Accept belongs_to assoc. keys in ActiveRecord queriesbeerlington2012-09-116-5/+151
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Allows you to specify the model association key in a belongs_to relationship instead of the foreign key. The following queries are now equivalent: Post.where(:author_id => Author.first) Post.where(:author => Author.first) PriceEstimate.where(:estimate_of_type => 'Treasure', :estimate_of_id => treasure) PriceEstimate.where(:estimate_of => treasure)
* | | | Update documentation for CollectionProxyMarc-Andre Lafortune2012-09-121-8/+2
| | | |
* | | | Merge pull request #7605 from revans/masterCarlos Antonio da Silva2012-09-121-1/+11
|\ \ \ \ | | | | | | | | | | | | | | | Add docs to inheritance_column method, explaining how to override it to be able to use the "type" column without STI [ci skip]
| * | | | Added additional comments on how to use the "type" column withoutRobert Evans2012-09-121-1/+11
| | | | | | | | | | | | | | | | | | | | | | | | | single-table inheritance by overriding it in your ActiveRecord Model.
* | | | | Merge pull request #7521 from graceliu/fix_database_url_supportRafael Mendonça França2012-09-124-32/+60
|\ \ \ \ \ | | | | | | | | | | | | Fixed support for DATABASE_URL for rake db tasks
| * | | | | fixed support for DATABASE_URL for rake db tasksGrace Liu2012-09-114-32/+60
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - added tests to confirm establish_connection uses DATABASE_URL and Rails.env correctly even when no arguments are passed in. - updated rake db tasks to support DATABASE_URL, and added tests to confirm correct behavior for these rake tasks. (Removed establish_connection call from some tasks since in those cases the :environment task already made sure the function would be called) - updated Resolver so that when it resolves the database url, it removes hash values with empty strings from the config spec (e.g. to support connection to postgresql when no username is specified).
* | | | | | warning removed.Arun Agrawal2012-09-121-1/+0
|/ / / / / | | | | | | | | | | | | | | | | | | | | 1. Unused variable 2. possibly useless use of a variable in void context
* | | | | Merge pull request #7601 from jrochkind/connection_pool_unify_exceptionsAaron Patterson2012-09-112-18/+12
|\ \ \ \ \ | |_|/ / / |/| | | | ConnectionPool, unify exceptions, ConnectionTimeoutError
| * | | | ConnectionPool, unify exceptions, ConnectionTimeoutErrorJonathan Rochkind2012-09-112-18/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | As a result of different commits, ConnectionPool had become of two minds about exceptions, sometimes using PoolFullError and sometimes using ConnectionTimeoutError. In fact, it was using ConnectionTimeoutError internally, but then recueing and re-raising as a PoolFullError. There's no reason for this bifurcation, standardize on ConnectionTimeoutError, which is the rails2 name and still accurately describes semantics at this point. History In Rails2, ConnectionPool raises a ConnectionTimeoutError if it can't get a connection within timeout. Originally in master/rails3, @tenderlove had planned on removing wait/blocking in connectionpool entirely, at that point he changed exception to PoolFullError. But then later wait/blocking came back, but exception remained PoolFullError. Then in 02b233556377 pmahoney introduced fair waiting logic, and brought back ConnectionTimeoutError, introducing the weird bifurcation. ConnectionTimeoutError accurately describes semantics as of this point, and is backwards compat with rails2, there's no reason for PoolFullError to be introduced, and no reason for two different exception types to be used internally, no reason to rescue one and re-raise as another. Unify!
* | | | | Use configuration['encoding'], because database configuration use not ↵kennyj2012-09-122-5/+5
| | | | | | | | | | | | | | | | | | | | charset but encoding.
* | | | | Use native mysqldump command for 'rake db:structure:dump'.kennyj2012-09-123-24/+26
|/ / / /
* | | | Merge pull request #7569 from ↵Carlos Antonio da Silva2012-09-111-1/+1
|\ \ \ \ | | | | | | | | | | | | | | | | | | | | skorfmann/improve-has-many-through-exception-message Improve exception message for HasManyThroughAssociationPolymorphicSourceError
| * | | | Improve exception message for HasManyThroughAssociationPolymorphicSourceErrorSebastian Korfmann2012-09-101-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | Exception message was misleading, as it is possible to have a polymorphic 'has_many :through' join model.