aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib
Commit message (Collapse)AuthorAgeFilesLines
...
* | | | Fix `attributes_before_type_cast` for serialised attributes.Nikita Afanasenko2012-10-311-0/+10
| | | | | | | | | | | | | | | | Public method `attributes_before_type_cast` used to return internal AR structure (ActiveRecord::AttributeMethods::Serialization::Attribute), patch fixes this. Now behaves like `read_attribute_before_type_cast` and returns unserialised values.
* | | | Fix #6951. Use query cache/uncache, when using not only database.yml but ↵kennyj2012-10-311-6/+6
| | | | | | | | | | | | | | | | also DATABASE_URL.
* | | | include_root_in_json allows inheritance.kennyj2012-10-311-1/+0
| | | |
* | | | Make caller attribute in deprecation methods optionalAlexey Gaziev2012-10-309-14/+12
| | | |
* | | | Fix bug when Column is trying to type cast boolean values to integer.Rafael Mendonça França2012-10-291-2/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This can occur if the user is using :integer columns to store boolean values. Now we are handling the boolean values but it still raises if the value can't type cast to integer and is not a boolean. See #7509. Fixes #8067. Conflicts: activerecord/CHANGELOG.md
* | | | Provide a call stack for deprecation warnings where needed.Nikita Afanasenko2012-10-299-17/+21
| | | | | | | | | | | | | | | | It's sometimes hard to quickly find where deprecated call was performed, especially in case of migrating between Rails versions. So this is an attempt to improve the call stack part of the warning message by providing caller explicitly.
* | | | SQLite3Adapter#type_cast should not mutate argumentsStefan Rusterholz2012-10-281-1/+1
| | | |
* | | | ActiveRecord::Relation#none! method.Juanjo Bazán2012-10-281-0/+5
| | | |
* | | | Enable update_column(s) for the primary key attribute.Henrik N2012-10-281-1/+3
| | | | | | | | | | | | | | | | Didn't work before because it updated the model-in-memory first, so the DB query couldn't find the record.
* | | | raise `ArgumentError` when redefining the primary key column. Closes #6378Yves Senn2012-10-281-0/+9
| | | |
* | | | refactor `SQLite3Adapter#copy_table` to prevent primary key redefinitions. #6378Yves Senn2012-10-281-5/+3
| | | |
* | | | AR::AttributeMethods#[] raises AM::AttributeMissingError for missing attributes.Francesco Rodriguez2012-10-281-2/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This fixes the following behaviour: class Person < ActiveRecord::Base belongs_to :company end # Before: person = Person.select('id').first person[:name] # => nil person.name # => ActiveModel::MissingAttributeError: missing_attribute: name person[:company_id] # => nil person.company # => nil # After: person = Person.select('id').first person[:name] # => ActiveModel::MissingAttributeError: missing_attribute: name person.name # => ActiveModel::MissingAttributeError: missing_attribute: name person[:company_id] # => ActiveModel::MissingAttributeError: missing_attribute: company_id person.company # => ActiveModel::MissingAttributeError: missing_attribute: company_id Fixes #5433.
* | | | Don't log on pending migration check schneems2012-10-281-1/+3
| | | | | | | | | | | | | | | | | | | | Conversation from: #6665 cc/ @rafaelfranca
* | | | Use the MySQL varbinary type when appropriate in migrations.Victor Costan2012-10-271-0/+7
| | | |
* | | | Decode attributes pulled from URI.parseShawn Veader2012-10-261-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | The RFC indicates that username and passwords may be encoded. http://tools.ietf.org/html/rfc2396#section-3.2.2 Found this trying to use the mysql://username:password@host:port/db and having special characters in the password which needed to be URI encoded.
* | | | remove unused config optionJon Leighton2012-10-261-3/+0
| | | |
* | | | Remove ActiveRecord::ModelJon Leighton2012-10-2623-369/+186
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In the end I think the pain of implementing this seamlessly was not worth the gain provided. The intention was that it would allow plain ruby objects that might not live in your main application to be subclassed and have persistence mixed in. But I've decided that the benefit of doing that is not worth the amount of complexity that the implementation introduced.
* | | | frozen state should be restored after txn is abortedAaron Patterson2012-10-221-2/+3
| |/ / |/| |
* | | Merge branch 'master' of github.com:lifo/docrailsVijay Dev2012-10-216-33/+170
|\ \ \ | | | | | | | | | | | | | | | | | | | | Conflicts: activesupport/lib/active_support/core_ext/hash/slice.rb guides/source/active_support_core_extensions.md
| * | | copy edits [ci skip]Vijay Dev2012-10-211-14/+7
| | | |
| * | | update AR::AttributeMethods documentation [ci skip]Francesco Rodriguez2012-10-211-23/+124
| | | |
| * | | nodoc AR::Generators [ci skip]Francesco Rodriguez2012-10-204-10/+10
| |/ /
| * | ActiveRecord Callbacks ordering examplesPablo Ifran2012-10-191-0/+43
| | |
* | | Revert "Get rid of the ActiveRecord::Model::DeprecationProxy thing."Jeremy Kemper2012-10-2013-20/+51
| | | | | | | | | | | | This reverts commit 83846838252397b3781eed165ca301e05db39293.
* | | Merge pull request #7951 from Grandrath/patch-1Carlos Antonio da Silva2012-10-201-1/+1
|\ \ \ | | | | | | | | | | | | Use `Rails.env` instead of `ENV['RAILS_ENV']`. Fix behavior of `rake db:structure:load`.
| * | | Don't use test environment by default when running rake db:structure:load; #7951Martin Grandrath2012-10-181-1/+1
| | | | | | | | | | | | | | | | | | | | `ENV['RAILS_ENV']` is not defined unless explicitly specified on the command line when running `rake db:structure:load`.
* | | | Changed scope for "taken" error message translation to decrease precedenceAndrew DiMichele2012-10-191-1/+5
| | | | | | | | | | | | | | | | | | | | | | | | Moved activerecord.errors.messages.taken to errors.messages.taken so that translations for, e.g., errors.attributes.email.taken don't get overridden. Test that the translation for 'taken' can be overridden
* | | | Get rid of the ActiveRecord::Model::DeprecationProxy thing.Jon Leighton2012-10-1913-51/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I think it's going to be too much pain to try to transition the :active_record load hook from executing against Base to executing against Model. For example, after Model is included in Base, and modules included in Model will no longer get added to the ancestors of Base. So plugins which wish to be compatible with both Model and Base should use the :active_record_model load hook which executes *before* Base gets loaded. In general, ActiveRecord::Model is an advanced feature at the moment and probably most people will continue to inherit from ActiveRecord::Base for the time being.
* | | | Rename the partial_updates config to partial_writesJon Leighton2012-10-192-7/+19
| | | | | | | | | | | | | | | | This reflects the fact that it now impact inserts as well as updates.
* | | | nodoc the first_or_create methods and document alternativesJon Leighton2012-10-191-37/+18
| | | |
* | | | The default value of a text/blob in mysql strict mode should be nilJon Leighton2012-10-195-31/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In non-strict mode it is '', but if someone is in strict mode then we should honour the strict semantics. Also, this removes the need for a completely horrible hack in dirty.rb. Closes #7780
* | | | Add Relation#find_or_create_by and friendsJon Leighton2012-10-192-0/+27
|/ / / | | | | | | | | | | | | | | | | | | This is similar to #first_or_create, but slightly different and a nicer API. See the CHANGELOG/docs in the commit. Fixes #7853
* | | Typecast to string and array are not supported in multiparameterRafael Mendonça França2012-10-181-3/+2
| | | | | | | | | | | | attributes
* | | use columns hash to look up the column for the count fieldAaron Patterson2012-10-171-1/+1
| | |
* | | Fix bug with presence validation of associations.Scott Willson2012-10-161-2/+4
| | | | | | | | | | | | Would incorrectly add duplicated errors when the association was blank. Bug introduced in 1fab518c6a75dac5773654646eb724a59741bc13.
* | | Merge pull request #7371 from csmuc/fix_dup_validation_errorsSantiago Pastorino2012-10-161-0/+1
|\ \ \ | | | | | | | | Dup'ed ActiveRecord objects may not share the errors object
| * | | Call super to nullify the reference to the original errors object in the ↵Christian Seiler2012-10-161-0/+1
| | | | | | | | | | | | | | | | dup'ed object (call ActiveModel::Validations#initialize_dup). Closes #7291
* | | | ActiveRecord: sum expression returns string '0' for no records, fixedTim Macfarlane2012-10-151-1/+1
| | | |
* | | | buckets hash isn't public, so use symbol keys to avoid stringAaron Patterson2012-10-151-8/+8
| | | | | | | | | | | | | | | | allocations
* | | | Move two hotspots to use Hash[] rather than Hash#dupAaron Patterson2012-10-151-3/+5
| | | | | | | | | | | | | | | | https://bugs.ruby-lang.org/issues/7166
* | | | refactoring of uniqueness validate_eachAngelo Capilleri2012-10-141-1/+2
| | | | | | | | | | | | | | | | get scope_value only one time dependig on reflection
* | | | Fix typo in inet and cidr savingMiguel Herranz2012-10-141-1/+1
| | | |
* | | | #7914 Remove code for unsupported postgreSQL version.Arturo Pie2012-10-132-6/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Remove parsing of character type default values for 8.1 formatting since Rails doesn't support postgreSQL 8.1 anymore. Remove misleading comment unrelated to code.
* | | | #7914 Using a better way to get the defaults from db.Arturo Pie2012-10-132-6/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | According to postgreSQL documentation: (http://www.postgresql.org/docs/8.2/static/catalog-pg-attrdef.html) we should not be using 'adsrc' field because this field is unaware of outside changes that could affect the way that default values are represented. Thus, I changed the queries to use "pg_get_expr(adbin, adrelid)" instead of the historical "adsrc" field.
* | | | #7914 get default value when type uses schema nameArturo Pie2012-10-131-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | PostgreSQL adapter properly parses default values when using multiple schemas and domains. When using domains across schemas, PostgresSQL prefixes the type of the default value with the name of the schema where that type (or domain) is. For example, this query: ``` SELECT a.attname, d.adsrc FROM pg_attribute a LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum WHERE a.attrelid = "defaults"'::regclass AND a.attnum > 0 AND NOT a.attisdropped ORDER BY a.attnum; ``` could return something like "'<default_value>'::pg_catalog.text" or "(''<default_value>'::pg_catalog.text)::text" for the text columns with defaults. I modified the regexp used to parse this value so that it ignores anything between ':: and \b(?:character varying|bpchar|text), and it allows to have optional parens like in the above second example.
* | | | performance improvements to joins!Aaron Patterson2012-10-122-5/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Before: Calculating ------------------------------------- ar 87 i/100ms ------------------------------------------------- ar 823.4 (±11.8%) i/s - 4089 in 5.070234s After: Calculating ------------------------------------- ar 88 i/100ms ------------------------------------------------- ar 894.1 (±3.9%) i/s - 4488 in 5.028161s Same test as 3a6dfca7f5f5bd45cea2f6ac348178e72423e1d5
* | | | Speed up relation merging by reducing calls to Array#-Aaron Patterson2012-10-121-3/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | before: Calculating ------------------------------------- ar 83 i/100ms ------------------------------------------------- ar 832.1 (±4.0%) i/s - 4233 in 5.096611s after: Calculating ------------------------------------- ar 87 i/100ms ------------------------------------------------- ar 839.0 (±9.3%) i/s - 4176 in 5.032782s Benchmark: require 'config/environment' require 'benchmark/ips' GC.disable unless User.find_by_login('tater') u = User.new u.login = 'tater' u.save! end def active_record user = User.find_by_login('tater') starred = user.starred_items.count end active_record Benchmark.ips do |x| x.report("ar") { active_record } end
* | | | trailling whitespace cleanup in query_methods.rbYves Senn2012-10-121-12/+12
| | | |
* | | | learn ActiveRecord::QueryMethods#order work with hash argumentsTima Maslyuchenko2012-10-121-4/+47
| | | |
* | | | Don't allocate new strings in compiled attribute methodsJon Leighton2012-10-122-20/+39
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This improves memory and performance without having to use symbols which present DoS problems. Thanks @headius and @tenderlove for the suggestion. Benchmark --------- require 'active_record' require 'benchmark/ips' ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: ':memory:') class Post < ActiveRecord::Base connection.create_table :posts, force: true do |t| t.string :name end end post = Post.create name: 'omg' Benchmark.ips do |r| r.report('Post.new') { Post.new name: 'omg' } r.report('post.name') { post.name } r.report('post.name=') { post.name = 'omg' } r.report('Post.find(1).name') { Post.find(1).name } end Before ------ Calculating ------------------------------------- Post.new 1419 i/100ms post.name 7538 i/100ms post.name= 3024 i/100ms Post.find(1).name 243 i/100ms ------------------------------------------------- Post.new 20637.6 (±12.7%) i/s - 102168 in 5.039578s post.name 1167897.7 (±18.2%) i/s - 5186144 in 4.983077s post.name= 64305.6 (±9.6%) i/s - 317520 in 4.998720s Post.find(1).name 2678.8 (±10.8%) i/s - 13365 in 5.051265s After ----- Calculating ------------------------------------- Post.new 1431 i/100ms post.name 7790 i/100ms post.name= 3181 i/100ms Post.find(1).name 245 i/100ms ------------------------------------------------- Post.new 21308.8 (±12.2%) i/s - 105894 in 5.053879s post.name 1534103.8 (±2.1%) i/s - 7634200 in 4.979405s post.name= 67441.0 (±7.5%) i/s - 337186 in 5.037871s Post.find(1).name 2681.9 (±10.6%) i/s - 13475 in 5.084511s