forked from rails/rails
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathCHANGELOG
6005 lines (3463 loc) · 298 KB
/
CHANGELOG
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
*Rails 3.0.0 [beta 4/release candidate] (unreleased)*
* New callbacks: after_commit and after_rollback. Do expensive operations like image thumbnailing after_commit instead of after_save. #2991 [Brian Durand]
* Serialized attributes are not converted to YAML if they are any of the formats that can be serialized to XML (like Hash, Array and Strings). [José Valim]
* Destroy uses optimistic locking. If lock_version on the record you're destroying doesn't match lock_version in the database, a StaleObjectError is raised. #1966 [Curtis Hawthorne]
* PostgreSQL: drop support for old postgres driver. Use pg 0.9.0 or later. [Jeremy Kemper]
* Observers can prevent records from saving by returning false, just like before_save and friends. #4087 [Mislav Marohnić]
*Rails 3.0.0 [beta 3] (April 13th, 2010)*
* Add Relation extensions. [Pratik Naik]
users = User.where(:admin => true).extending(User::AdminPowers)
latest_users = User.order('created_at DESC') do
def posts_count
Post.count(:user_id => to_a.map(&:id))
end
end
* To prefix the table names of all models in a module, define self.table_name_prefix on the module. #4032 [Andrew White]
* Silenced "SHOW FIELDS" and "SET SQL_AUTO_IS_NULL=0" statements from the MySQL driver to improve log signal to noise ration in development [DHH]
*Rails 3.0.0 [Beta 1] (February 4th, 2010)*
* PostgreSQLAdapter: set time_zone to UTC when Base.default_timezone == :utc so that Postgres doesn't incorrectly offset-adjust values inserted into TIMESTAMP WITH TIME ZONE columns. #3777 [Jack Christensen]
* Allow relations to be used as scope.
class Item
scope :red, where(:colour => 'red')
end
Item.red.limit(10) # Ten red items
* Rename named_scope to scope. [Pratik Naik]
* Changed ActiveRecord::Base.store_full_sti_class to be true by default reflecting the previously announced Rails 3 default [DHH]
* Add Relation#except. [Pratik Naik]
one_red_item = Item.where(:colour => 'red').limit(1)
all_items = one_red_item.except(:where, :limit)
* Add Relation#delete_all. [Pratik Naik]
Item.where(:colour => 'red').delete_all
* Add Model.having and Relation#having. [Pratik Naik]
Developer.group("salary").having("sum(salary) > 10000").select("salary")
* Add Relation#count. [Pratik Naik]
legends = People.where("age > 100")
legends.count
legends.count(:age, :distinct => true)
legends.select('id').count
* Add Model.readonly and association_collection#readonly finder method. [Pratik Naik]
Post.readonly.to_a # Load all posts in readonly mode
@user.items.readonly(false).to_a # Load all the user items in writable mode
* Add .lock finder method [Pratik Naik]
User.lock.where(:name => 'lifo').to_a
old_items = Item.where("age > 100")
old_items.lock.each {|i| .. }
* Add Model.from and association_collection#from finder methods [Pratik Naik]
user = User.scoped
user.select('*').from('users, items')
* Add relation.destroy_all [Pratik Naik]
old_items = Item.where("age > 100")
old_items.destroy_all
* Add relation.exists? [Pratik Naik]
red_items = Item.where(:colours => 'red')
red_items.exists?
red_items.exists?(1)
* Add find(ids) to relations. [Pratik Naik]
old_users = User.order("age DESC")
old_users.find(1)
old_users.find(1, 2, 3)
* Add new finder methods to association collection. [Pratik Naik]
class User < ActiveRecord::Base
has_many :items
end
user = User.first
user.items.where(:items => {:colour => 'red'})
user.items.select('items.id')
* Add relation.reload to force reloading the records. [Pratik Naik]
topics = Topic.scoped
topics.to_a # force load
topics.first # returns a cached record
topics.reload
topics.first # Fetches a new record from the database
* Rename Model.conditions and relation.conditions to .where. [Pratik Naik]
Before :
User.conditions(:name => 'lifo')
User.select('id').conditions(["age > ?", 21])
Now :
User.where(:name => 'lifo')
User.select('id').where(["age > ?", 21])
* Add Model.select/group/order/limit/joins/conditions/preload/eager_load class methods returning a lazy relation. [Pratik Naik]
Examples :
posts = Post.select('id).order('name') # Returns a lazy relation
posts.each {|p| puts p.id } # Fires "select id from posts order by name"
* Model.scoped now returns a relation if invoked without any arguments. [Pratik Naik]
Example :
posts = Post.scoped
posts.size # Fires "select count(*) from posts" and returns the count
posts.each {|p| puts p.name } # Fires "select * from posts" and loads post objects
* Association inverses for belongs_to, has_one, and has_many. Optimization to reduce database queries. #3533 [Murray Steele]
# post.comments sets each comment's post without needing to :include
class Post < ActiveRecord::Base
has_many :comments, :inverse_of => :post
end
* MySQL: add_ and change_column support positioning. #3286 [Ben Marini]
* Reset your Active Record counter caches with the reset_counter_cache class method. #1211 [Mike Breen, Gabe da Silveira]
* Remove support for SQLite 2. Please upgrade to SQLite 3+ or install the plugin from git://github.com/rails/sqlite2_adapter.git [Pratik Naik]
* PostgreSQL: XML datatype support. #1874 [Leonardo Borges]
* quoted_date converts time-like objects to ActiveRecord::Base.default_timezone before serialization. This allows you to use Time.now in find conditions and have it correctly be serialized as the current time in UTC when default_timezone == :utc. #2946 [Geoff Buesing]
* SQLite: drop support for 'dbfile' option in favor of 'database.' #2363 [Paul Hinze, Jeremy Kemper]
* Added :primary_key option to belongs_to associations. #765 [Szymon Nowak, Philip Hallstrom, Noel Rocha]
# employees.company_name references companies.name
Employee.belongs_to :company, :primary_key => 'name', :foreign_key => 'company_name'
* Implement #many? for NamedScope and AssociationCollection using #size. #1500 [Chris Kampmeier]
* Added :touch option to belongs_to associations that will touch the parent record when the current record is saved or destroyed [DHH]
* Added ActiveRecord::Base#touch to update the updated_at/on attributes (or another specified timestamp) with the current time [DHH]
*2.3.2 [Final] (March 15, 2009)*
* Added ActiveRecord::Base.find_each and ActiveRecord::Base.find_in_batches for batch processing [DHH/Jamis Buck]
* Added that ActiveRecord::Base.exists? can be called with no arguments #1817 [Scott Taylor]
* Add Support for updating deeply nested models from a single form. #1202 [Eloy Duran]
class Book < ActiveRecord::Base
has_one :author
has_many :pages
accepts_nested_attributes_for :author, :pages
end
* Make after_save callbacks fire only if the record was successfully saved. #1735 [Michael Lovitt]
Previously the callbacks would fire if a before_save cancelled saving.
* Support nested transactions using database savepoints. #383 [Jonathan Viney, Hongli Lai]
* Added dynamic scopes ala dynamic finders #1648 [Yaroslav Markin]
* Fixed that ActiveRecord::Base#new_record? should return false (not nil) for existing records #1219 [Yaroslav Markin]
* I18n the word separator for error messages. Introduces the activerecord.errors.format.separator translation key. #1294 [Akira Matsuda]
* Add :having as a key to find and the relevant associations. [Emilio Tagua]
* Added default_scope to Base #1381 [Paweł Kondzior]. Example:
class Person < ActiveRecord::Base
default_scope :order => 'last_name, first_name'
end
class Company < ActiveRecord::Base
has_many :people
end
Person.all # => Person.find(:all, :order => 'last_name, first_name')
Company.find(1).people # => Person.find(:all, :order => 'last_name, first_name', :conditions => { :company_id => 1 })
*2.2.1 [RC2] (November 14th, 2008)*
* Ensure indices don't flip order in schema.rb #1266 [Jordi Bunster]
* Fixed that serialized strings should never be type-casted (i.e. turning "Yes" to a boolean) #857 [Andreas Korth]
*2.2.0 [RC1] (October 24th, 2008)*
* Skip collection ids reader optimization if using :finder_sql [Jeremy Kemper]
* Add Model#delete instance method, similar to Model.delete class method. #1086 [Hongli Lai (Phusion)]
* MySQL: cope with quirky default values for not-null text columns. #1043 [Frederick Cheung]
* Multiparameter attributes skip time zone conversion for time-only columns [#1030 state:resolved] [Geoff Buesing]
* Base.skip_time_zone_conversion_for_attributes uses class_inheritable_accessor, so that subclasses don't overwrite Base [#346 state:resolved] [Emilio Tagua]
* Added find_last_by dynamic finder #762 [Emilio Tagua]
* Internal API: configurable association options and build_association method for reflections so plugins may extend and override. #985 [Hongli Lai (Phusion)]
* Changed benchmarks to be reported in milliseconds [David Heinemeier Hansson]
* Connection pooling. #936 [Nick Sieger]
* Merge scoped :joins together instead of overwriting them. May expose scoping bugs in your code! #501 [Andrew White]
* before_save, before_validation and before_destroy callbacks that return false will now ROLLBACK the transaction. Previously this would have been committed before the processing was aborted. #891 [Xavier Noria]
* Transactional migrations for databases which support them. #834 [divoxx, Adam Wiggins, Tarmo Tänav]
* Set config.active_record.timestamped_migrations = false to have migrations with numeric prefix instead of UTC timestamp. #446. [Andrew Stone, Nik Wakelin]
* change_column_default preserves the not-null constraint. #617 [Tarmo Tänav]
* Fixed that create database statements would always include "DEFAULT NULL" (Nick Sieger) [#334]
* Add :tokenizer option to validates_length_of to specify how to split up the attribute string. #507. [David Lowenfels] Example :
# Ensure essay contains at least 100 words.
validates_length_of :essay, :minimum => 100, :too_short => "Your essay must be at least %d words."), :tokenizer => lambda {|str| str.scan(/\w+/) }
* Allow conditions on multiple tables to be specified using hash. [Pratik Naik]. Example:
User.all :joins => :items, :conditions => { :age => 10, :items => { :color => 'black' } }
Item.first :conditions => { :items => { :color => 'red' } }
* Always treat integer :limit as byte length. #420 [Tarmo Tänav]
* Partial updates don't update lock_version if nothing changed. #426 [Daniel Morrison]
* Fix column collision with named_scope and :joins. #46 [Duncan Beevers, Mark Catley]
* db:migrate:down and :up update schema_migrations. #369 [Michael Raidel, RaceCondition]
* PostgreSQL: support :conditions => [':foo::integer', { :foo => 1 }] without treating the ::integer typecast as a bind variable. [Tarmo Tänav]
* MySQL: rename_column preserves column defaults. #466 [Diego Algorta]
* Add :from option to calculations. #397 [Ben Munat]
* Add :validate option to associations to enable/disable the automatic validation of associated models. Resolves #301. [Jan De Poorter]
* PostgreSQL: use 'INSERT ... RETURNING id' for 8.2 and later. [Jeremy Kemper]
* Added SQL escaping for :limit and :offset in MySQL [Jonathan Wiess]
*2.1.0 (May 31st, 2008)*
* Add ActiveRecord::Base.sti_name that checks ActiveRecord::Base#store_full_sti_class? and returns either the full or demodulized name. [Rick Olson]
* Add first/last methods to associations/named_scope. Resolved #226. [Ryan Bates]
* Added SQL escaping for :limit and :offset #288 [Aaron Bedra, Steven Bristol, Jonathan Wiess]
* Added first/last methods to associations/named_scope. Resolved #226. [Ryan Bates]
* Ensure hm:t preloading honours reflection options. Resolves #137. [Frederick Cheung]
* Added protection against duplicate migration names (Aslak Hellesøy) [#112]
* Base#instantiate_time_object: eliminate check for Time.zone, since we can assume this is set if time_zone_aware_attributes is set to true [Geoff Buesing]
* Time zone aware attribute methods use Time.zone.parse instead of #to_time for String arguments, so that offset information in String is respected. Resolves #105. [Scott Fleckenstein, Geoff Buesing]
* Added change_table for migrations (Jeff Dean) [#71]. Example:
change_table :videos do |t|
t.timestamps # adds created_at, updated_at
t.belongs_to :goat # adds goat_id integer
t.string :name, :email, :limit => 20 # adds name and email both with a 20 char limit
t.remove :name, :email # removes the name and email columns
end
* Fixed has_many :through .create with no parameters caused a "can't dup NilClass" error (Steven Soroka) [#85]
* Added block-setting of attributes for Base.create like Base.new already has (Adam Meehan) [#39]
* Fixed that pessimistic locking you reference the quoted table name (Josh Susser) [#67]
* Fixed that change_column should be able to use :null => true on a field that formerly had false [Nate Wiger] [#26]
* Added that the MySQL adapter should map integer to either smallint, int, or bigint depending on the :limit just like PostgreSQL [David Heinemeier Hansson]
* Change validates_uniqueness_of :case_sensitive option default back to true (from [9160]). Love your database columns, don't LOWER them. [Rick Olson]
* Add support for interleaving migrations by storing which migrations have run in the new schema_migrations table. Closes #11493 [Jordi Bunster]
* ActiveRecord::Base#sum defaults to 0 if no rows are returned. Closes #11550 [Kamal Fariz Mahyuddin]
* Ensure that respond_to? considers dynamic finder methods. Closes #11538. [James Mead]
* Ensure that save on parent object fails for invalid has_one association. Closes #10518. [Pratik Naik]
* Remove duplicate code from associations. [Pratik Naik]
* Refactor HasManyThroughAssociation to inherit from HasManyAssociation. Association callbacks and <association>_ids= now work with hm:t. #11516 [Ruy Asan]
* Ensure HABTM#create and HABTM#build do not load entire association. [Pratik Naik]
* Improve documentation. [Xavier Noria, Jack Danger Canty, leethal]
* Tweak ActiveRecord::Base#to_json to include a root value in the returned hash: {"post": {"title": ...}} [Rick Olson]
Post.find(1).to_json # => {"title": ...}
config.active_record.include_root_in_json = true
Post.find(1).to_json # => {"post": {"title": ...}}
* Add efficient #include? to AssociationCollection (for has_many/has_many :through/habtm). [stopdropandrew]
* PostgreSQL: create_ and drop_database support. #9042 [ez, pedz, Nick Sieger]
* Ensure that validates_uniqueness_of works with with_scope. Closes #9235. [Nik Wakelin, cavalle]
* Partial updates include only unsaved attributes. Off by default; set YourClass.partial_updates = true to enable. [Jeremy Kemper]
* Removing unnecessary uses_tzinfo helper from tests, given that TZInfo is now bundled [Geoff Buesing]
* Fixed that validates_size_of :within works in associations #11295, #10019 [cavalle]
* Track changes to unsaved attributes. [Jeremy Kemper]
* Switched to UTC-timebased version numbers for migrations and the schema. This will as good as eliminate the problem of multiple migrations getting the same version assigned in different branches. Also added rake db:migrate:up/down to apply individual migrations that may need to be run when you merge branches #11458 [John Barnette]
* Fixed that has_many :through would ignore the hash conditions #11447 [Emilio Tagua]
* Fix issue where the :uniq option of a has_many :through association is ignored when find(:all) is called. Closes #9407 [cavalle]
* Fix duplicate table alias error when including an association with a has_many :through association on the same join table. Closes #7310 [cavalle]
* More efficient association preloading code that compacts a through_records array in a central location. Closes #11427 [Jack Danger Canty]
* Improve documentation. [Ryan Bigg, Jan De Poorter, Cheah Chu Yeow, Xavier Shay, Jack Danger Canty, Emilio Tagua, Xavier Noria, Sunny Ripert]
* Fixed that ActiveRecord#Base.find_or_create/initialize would not honor attr_protected/accessible when used with a hash #11422 [Emilio Tagua]
* Added ActiveRecord#Base.all/first/last as aliases for find(:all/:first/:last) #11413 [nkallen, Chris O'Sullivan]
* Merge the has_finder gem, renamed as 'named_scope'. #11404 [nkallen]
class Article < ActiveRecord::Base
named_scope :published, :conditions => {:published => true}
named_scope :popular, :conditions => ...
end
Article.published.paginate(:page => 1)
Article.published.popular.count
Article.popular.find(:first)
Article.popular.find(:all, :conditions => {...})
See http://pivots.pivotallabs.com/users/nick/blog/articles/284-hasfinder-it-s-now-easier-than-ever-to-create-complex-re-usable-sql-queries
* Add has_one :through support. #4756 [Chris O'Sullivan]
* Migrations: create_table supports primary_key_prefix_type. #10314 [student, Chris O'Sullivan]
* Added logging for dependency load errors with fixtures #11056 [stuthulhu]
* Time zone aware attributes use Time#in_time_zone [Geoff Buesing]
* Fixed that scoped joins would not always be respected #6821 [Theory/Jack Danger Canty]
* Ensure that ActiveRecord::Calculations disambiguates field names with the table name. #11027 [cavalle]
* Added add/remove_timestamps to the schema statements for adding the created_at/updated_at columns on existing tables #11129 [jramirez]
* Added ActiveRecord::Base.find(:last) #11338 [Emilio Tagua]
* test_native_types expects DateTime.local_offset instead of DateTime.now.offset; fixes test breakage due to dst transition [Geoff Buesing]
* Add :readonly option to HasManyThrough associations. #11156 [Emilio Tagua]
* Improve performance on :include/:conditions/:limit queries by selectively joining in the pre-query. #9560 [dasil003]
* Perf fix: Avoid the use of named block arguments. Closes #11109 [adymo]
* PostgreSQL: support server versions 7.4 through 8.0 and the ruby-pg driver. #11127 [jdavis]
* Ensure association preloading doesn't break when an association returns nil. ##11145 [GMFlash]
* Make dynamic finders respect the :include on HasManyThrough associations. #10998. [cpytel]
* Base#instantiate_time_object only uses Time.zone when Base.time_zone_aware_attributes is true; leverages Time#time_with_datetime_fallback for readability [Geoff Buesing]
* Refactor ConnectionAdapters::Column.new_time: leverage DateTime failover behavior of Time#time_with_datetime_fallback [Geoff Buesing]
* Improve associations performance by using symbol callbacks instead of string callbacks. #11108 [adymo]
* Optimise the BigDecimal conversion code. #11110 [adymo]
* Introduce the :readonly option to all associations. Records from the association cannot be saved. #11084 [Emilio Tagua]
* Multiparameter attributes for time columns fail over to DateTime when out of range of Time [Geoff Buesing]
* Base#instantiate_time_object uses Time.zone.local() [Geoff Buesing]
* Add timezone-aware attribute readers and writers. #10982 [Geoff Buesing]
* Instantiating time objects in multiparameter attributes uses Time.zone if available. #10982 [Rick Olson]
* Add note about how ActiveRecord::Observer classes are initialized in a Rails app. #10980 [Xavier Noria]
* MySQL: omit text/blob defaults from the schema instead of using an empty string. #10963 [mdeiters]
* belongs_to supports :dependent => :destroy and :delete. #10592 [Jonathan Viney]
* Introduce preload query strategy for eager :includes. #9640 [Frederick Cheung, Aliaksey Kandratsenka, codafoo]
* Support aggregations in finder conditions. #10572 [Ryan Kinderman]
* Organize and clean up the Active Record test suite. #10742 [John Barnette]
* Ensure that modifying has_and_belongs_to_many actions clear the query cache. Closes #10840 [john.andrews]
* Fix issue where Table#references doesn't pass a :null option to a *_type attribute for polymorphic associations. Closes #10753 [railsjitsu]
* Fixtures: removed support for the ancient pre-YAML file format. #10736 [John Barnette]
* More thoroughly quote table names. #10698 [dimdenis, lotswholetime, Jeremy Kemper]
* update_all ignores scoped :order and :limit, so post.comments.update_all doesn't try to include the comment order in the update statement. #10686 [Brendan Ribera]
* Added ActiveRecord::Base.cache_key to make it easier to cache Active Records in combination with the new ActiveSupport::Cache::* libraries [David Heinemeier Hansson]
* Make sure CSV fixtures are compatible with ruby 1.9's new csv implementation. [JEG2]
* Added by parameter to increment, decrement, and their bang varieties so you can do player1.increment!(:points, 5) #10542 [Sam]
* Optimize ActiveRecord::Base#exists? to use #select_all instead of #find. Closes #10605 [jamesh, Frederick Cheung, protocool]
* Don't unnecessarily load has_many associations in after_update callbacks. Closes #6822 [stopdropandrew, canadaduane]
* Eager belongs_to :include infers the foreign key from the association name rather than the class name. #10517 [Jonathan Viney]
* SQLite: fix rename_ and remove_column for columns with unique indexes. #10576 [Brandon Keepers]
* Ruby 1.9 compatibility. #10655 [Jeremy Kemper, Dirkjan Bussink]
*2.0.2* (December 16th, 2007)
* Ensure optimistic locking handles nil #lock_version values properly. Closes #10510 [Rick Olson]
* Make the Fixtures Test::Unit enhancements more supporting for double-loaded test cases. Closes #10379 [brynary]
* Fix that validates_acceptance_of still works for non-existent tables (useful for bootstrapping new databases). Closes #10474 [Josh Susser]
* Ensure that the :uniq option for has_many :through associations retains the order. #10463 [remvee]
* Base.exists? doesn't rescue exceptions to avoid hiding SQL errors. #10458 [Michael Klishin]
* Documentation: Active Record exceptions, destroy_all and delete_all. #10444, #10447 [Michael Klishin]
*2.0.1* (December 7th, 2007)
* Removed query cache rescue as it could cause code to be run twice (closes #10408) [David Heinemeier Hansson]
*2.0.0* (December 6th, 2007)
* Anchor DateTimeTest to fixed DateTime instead of a variable value based on Time.now#advance#to_datetime, so that this test passes on 64-bit platforms running Ruby 1.8.6+ [Geoff Buesing]
* Fixed that the Query Cache should just be ignored if the database is misconfigured (so that the "About your applications environment" works even before the database has been created) [David Heinemeier Hansson]
* Fixed that the truncation of strings longer than 50 chars should use inspect
so newlines etc are escaped #10385 [Norbert Crombach]
* Fixed that habtm associations should be able to set :select as part of their definition and have that honored [David Heinemeier Hansson]
* Document how the :include option can be used in Calculations::calculate. Closes #7446 [adamwiggins, ultimoamore]
* Fix typo in documentation for polymorphic associations w/STI. Closes #7461 [johnjosephbachir]
* Reveal that the type option in migrations can be any supported column type for your database but also include caveat about agnosticism. Closes #7531 [adamwiggins, mikong]
* More complete documentation for find_by_sql. Closes #7912 [fearoffish]
* Added ActiveRecord::Base#becomes to turn a record into one of another class (mostly relevant for STIs) [David Heinemeier Hansson]. Example:
render :partial => @client.becomes(Company) # renders companies/company instead of clients/client
* Fixed that to_xml should not automatically pass :procs to associations included with :include #10162 [Cheah Chu Yeow]
* Fix documentation typo introduced in [8250]. Closes #10339 [Henrik N]
* Foxy fixtures: support single-table inheritance. #10234 [tom]
* Foxy fixtures: allow mixed usage to make migration easier and more attractive. #10004 [lotswholetime]
* Make the record_timestamps class-inheritable so it can be set per model. #10004 [tmacedo]
* Allow validates_acceptance_of to use a real attribute instead of only virtual (so you can record that the acceptance occured) #7457 [ambethia]
* DateTimes use Ruby's default calendar reform setting. #10201 [Geoff Buesing]
* Dynamic finders on association collections respect association :order and :limit. #10211, #10227 [Patrick Joyce, Rick Olson, Jack Danger Canty]
* Add 'foxy' support for fixtures of polymorphic associations. #10183 [John Barnette, David Lowenfels]
* validates_inclusion_of and validates_exclusion_of allow formatted :message strings. #8132 [devrieda, Mike Naberezny]
* attr_readonly behaves well with optimistic locking. #10188 [Nick Bugajski]
* Base#to_xml supports the nil="true" attribute like Hash#to_xml. #8268 [Jonathan del Strother]
* Change plings to the more conventional quotes in the documentation. Closes #10104 [Jack Danger Canty]
* Fix HasManyThrough Association so it uses :conditions on the HasMany Association. Closes #9729 [Jack Danger Canty]
* Ensure that column names are quoted. Closes #10134 [wesley.moxam]
* Smattering of grammatical fixes to documentation. Closes #10083 [Bob Silva]
* Enhance explanation with more examples for attr_accessible macro. Closes #8095 [fearoffish, Marcel Molina Jr.]
* Update association/method mapping table to refected latest collection methods for has_many :through. Closes #8772 [Pratik Naik]
* Explain semantics of having several different AR instances in a transaction block. Closes #9036 [jacobat, Marcel Molina Jr.]
* Update Schema documentation to use updated sexy migration notation. Closes #10086 [Sam Granieri]
* Make fixtures work with the new test subclasses. [Tarmo Tänav, Michael Koziarski]
* Introduce finder :joins with associations. Same :include syntax but with inner rather than outer joins. #10012 [RubyRedRick]
# Find users with an avatar
User.find(:all, :joins => :avatar)
# Find posts with a high-rated comment.
Post.find(:all, :joins => :comments, :conditions => 'comments.rating > 3')
* Associations: speedup duplicate record check. #10011 [Pratik Naik]
* Make sure that << works on has_many associations on unsaved records. Closes #9989 [Josh Susser]
* Allow association redefinition in subclasses. #9346 [wildchild]
* Fix has_many :through delete with custom foreign keys. #6466 [naffis]
* Foxy fixtures, from rathole (http://svn.geeksomnia.com/rathole/trunk/README)
- stable, autogenerated IDs
- specify associations (belongs_to, has_one, has_many) by label, not ID
- specify HABTM associations as inline lists
- autofill timestamp columns
- support YAML defaults
- fixture label interpolation
Enabled for fixtures that correspond to a model class and don't specify a primary key value. #9981 [John Barnette]
* Add docs explaining how to protect all attributes using attr_accessible with no arguments. Closes #9631 [boone, rmm5t]
* Update add_index documentation to use new options api. Closes #9787 [Kamal Fariz Mahyuddin]
* Allow find on a has_many association defined with :finder_sql to accept id arguments as strings like regular find does. Closes #9916 [krishna]
* Use VALID_FIND_OPTIONS when resolving :find scoping rather than hard coding the list of valid find options. Closes #9443 [sur]
* Limited eager loading no longer ignores scoped :order. Closes #9561 [Jack Danger Canty, Josh Peek]
* Assigning an instance of a foreign class to a composed_of aggregate calls an optional conversion block. Refactor and simplify composed_of implementation. #6322 [brandon, Chris Cruft]
* Assigning nil to a composed_of aggregate also sets its immediate value to nil. #9843 [Chris Cruft]
* Ensure that mysql quotes table names with database names correctly. Closes #9911 [crayz]
"foo.bar" => "`foo`.`bar`"
* Complete the assimilation of Sexy Migrations from ErrFree [Chris Wanstrath, PJ Hyett]
http://errtheblog.com/post/2381
* Qualified column names work in hash conditions, like :conditions => { 'comments.created_at' => ... }. #9733 [Jack Danger Canty]
* Fix regression where the association would not construct new finder SQL on save causing bogus queries for "WHERE owner_id = NULL" even after owner was saved. #8713 [Bryan Helmkamp]
* Refactor association create and build so before & after callbacks behave consistently. #8854 [Pratik Naik, mortent]
* Quote table names. Defaults to column quoting. #4593 [Justin Lynn, gwcoffey, eadz, Dmitry V. Sabanin, Jeremy Kemper]
* Alias association #build to #new so it behaves predictably. #8787 [Pratik Naik]
* Add notes to documentation regarding attr_readonly behavior with counter caches and polymorphic associations. Closes #9835 [saimonmoore, Rick Olson]
* Observers can observe model names as symbols properly now. Closes #9869 [queso]
* find_and_(initialize|create)_by methods can now properly initialize protected attributes [Tobias Lütke]
* belongs_to infers the foreign key from the association name instead of from the class name. [Jeremy Kemper]
* PostgreSQL: support multiline default values. #7533 [Carl Lerche, aguynamedryan, Rein Henrichs, Tarmo Tänav]
* MySQL: fix change_column on not-null columns that don't accept dfeault values of ''. #6663 [Jonathan Viney, Tarmo Tänav]
* validates_uniqueness_of behaves well with abstract superclasses and
single-table inheritance. #3833, #9886 [Gabriel Gironda, rramdas, François Beausoleil, Josh Peek, Tarmo Tänav, pat]
* Warn about protected attribute assigments in development and test environments when mass-assigning to an attr_protected attribute. #9802 [Henrik N]
* Speedup database date/time parsing. [Jeremy Kemper, Tarmo Tänav]
* Fix calling .clear on a has_many :dependent=>:delete_all association. [Tarmo Tänav]
* Allow change_column to set NOT NULL in the PostgreSQL adapter [Tarmo Tänav]
* Fix that ActiveRecord would create attribute methods and override custom attribute getters if the method is also defined in Kernel.methods. [Rick Olson]
* Don't call attr_readonly on polymorphic belongs_to associations, in case it matches the name of some other non-ActiveRecord class/module. [Rick Olson]
* Try loading activerecord-<adaptername>-adapter gem before trying a plain require so you can use custom gems for the bundled adapters. Also stops gems from requiring an adapter from an old Active Record gem. [Jeremy Kemper, Derrick Spell]
*2.0.0 [Preview Release]* (September 29th, 2007) [Includes duplicates of changes from 1.14.2 - 1.15.3]
* Add attr_readonly to specify columns that are skipped during a normal ActiveRecord #save operation. Closes #6896 [Dan Manges]
class Comment < ActiveRecord::Base
# Automatically sets Article#comments_count as readonly.
belongs_to :article, :counter_cache => :comments_count
end
class Article < ActiveRecord::Base
attr_readonly :approved_comments_count
end
* Make size for has_many :through use counter cache if it exists. Closes #9734 [Xavier Shay]
* Remove DB2 adapter since IBM chooses to maintain their own adapter instead. [Jeremy Kemper]
* Extract Oracle, SQLServer, and Sybase adapters into gems. [Jeremy Kemper]
* Added fixture caching that'll speed up a normal fixture-powered test suite between 50% and 100% #9682 [Frederick Cheung]
* Correctly quote id list for limited eager loading. #7482 [tmacedo]
* Fixed that using version-targetted migrates would fail on loggers other than the default one #7430 [valeksenko]
* Fixed rename_column for SQLite when using symbols for the column names #8616 [drodriguez]
* Added the possibility of using symbols in addition to concrete classes with ActiveRecord::Observer#observe. #3998 [Robby Russell, Tarmo Tänav]
* Added ActiveRecord::Base#to_json/from_json [David Heinemeier Hansson, Cheah Chu Yeow]
* Added ActiveRecord::Base#from_xml [David Heinemeier Hansson]. Example:
xml = "<person><name>David</name></person>"
Person.new.from_xml(xml).name # => "David"
* Define dynamic finders as real methods after first usage. [bscofield]
* Deprecation: remove deprecated threaded_connections methods. Use allow_concurrency instead. [Jeremy Kemper]
* Associations macros accept extension blocks alongside modules. #9346 [Josh Peek]
* Speed up and simplify query caching. [Jeremy Kemper]
* connection.select_rows 'sql' returns an array (rows) of arrays (field values). #2329 [Michael Schuerig]
* Eager loading respects explicit :joins. #9496 [dasil003]
* Extract Firebird, FrontBase, and OpenBase adapters into gems. #9508, #9509, #9510 [Jeremy Kemper]
* RubyGem database adapters: expects a gem named activerecord-<database>-adapter with active_record/connection_adapters/<database>_adapter.rb in its load path. [Jeremy Kemper]
* Fixed that altering join tables in migrations would fail w/ sqlite3 #7453 [TimoMihaljov/brandon]
* Fix association writer with :dependent => :nullify. #7314 [Jonathan Viney]
* OpenBase: update for new lib and latest Rails. Support migrations. #8748 [dcsesq]
* Moved acts_as_tree into a plugin of the same name on the official Rails svn. #9514 [Pratik Naik]
* Moved acts_as_nested_set into a plugin of the same name on the official Rails svn. #9516 [Josh Peek]
* Moved acts_as_list into a plugin of the same name on the official Rails svn. [Josh Peek]
* Explicitly require active_record/query_cache before using it. [Jeremy Kemper]
* Fix bug where unserializing an attribute attempts to modify a frozen @attributes hash for a deleted record. [Rick Olson, marclove]
* Performance: absorb instantiate and initialize_with_callbacks into the Base methods. [Jeremy Kemper]
* Fixed that eager loading queries and with_scope should respect the :group option [David Heinemeier Hansson]
* Improve performance and functionality of the postgresql adapter. Closes #8049 [roderickvd]
For more information see: http://dev.rubyonrails.org/ticket/8049
* Don't clobber includes passed to has_many.count [Jack Danger Canty]
* Make sure has_many uses :include when counting [Jack Danger Canty]
* Change the implementation of ActiveRecord's attribute reader and writer methods [Michael Koziarski]
- Generate Reader and Writer methods which cache attribute values in hashes. This is to avoid repeatedly parsing the same date or integer columns.
- Change exception raised when users use find with :select then try to access a skipped column. Plugins could override missing_attribute() to lazily load the columns.
- Move method definition to the class, instead of the instance
- Always generate the readers, writers and predicate methods.
* Perform a deep #dup on query cache results so that modifying activerecord attributes does not modify the cached attributes. [Rick Olson]
# Ensure that has_many :through associations use a count query instead of loading the target when #size is called. Closes #8800 [Pratik Naik]
* Added :unless clause to validations #8003 [monki]. Example:
def using_open_id?
!identity_url.blank?
end
validates_presence_of :identity_url, :if => using_open_id?
validates_presence_of :username, :unless => using_open_id?
validates_presence_of :password, :unless => using_open_id?
* Fix #count on a has_many :through association so that it recognizes the :uniq option. Closes #8801 [Pratik Naik]
* Fix and properly document/test count(column_name) usage. Closes #8999 [Pratik Naik]
* Remove deprecated count(conditions=nil, joins=nil) usage. Closes #8993 [Pratik Naik]
* Change belongs_to so that the foreign_key assumption is taken from the association name, not the class name. Closes #8992 [Josh Susser]
OLD
belongs_to :visitor, :class_name => 'User' # => inferred foreign_key is user_id
NEW
belongs_to :visitor, :class_name => 'User' # => inferred foreign_key is visitor_id
* Remove spurious tests from deprecated_associations_test, most of these aren't deprecated, and are duplicated in associations_test. Closes #8987 [Pratik Naik]
* Make create! on a has_many :through association return the association object. Not the collection. Closes #8786 [Pratik Naik]
* Move from select * to select tablename.* to avoid clobbering IDs. Closes #8889 [dasil003]
* Don't call unsupported methods on associated objects when using :include, :method with to_xml #7307, [Manfred Stienstra, jwilger]
* Define collection singular ids method for has_many :through associations. #8763 [Pratik Naik]
* Array attribute conditions work with proxied association collections. #8318 [Kamal Fariz Mahyuddin, theamazingrando]
* Fix polymorphic has_one associations declared in an abstract class. #8638 [Pratik Naik, Dax Huiberts]
* Fixed validates_associated should not stop on the first error. #4276 [mrj, Manfred Stienstra, Josh Peek]
* Rollback if commit raises an exception. #8642 [kik, Jeremy Kemper]
* Update tests' use of fixtures for the new collections api. #8726 [Kamal Fariz Mahyuddin]
* Save associated records only if the association is already loaded. #8713 [Blaine]
* MySQL: fix show_variable. #8448 [matt, Jeremy Kemper]
* Fixtures: correctly delete and insert fixtures in a single transaction. #8553 [Michael Schuerig]
* Fixtures: people(:technomancy, :josh) returns both fixtures. #7880 [technomancy, Josh Peek]
* Calculations support non-numeric foreign keys. #8154 [Kamal Fariz Mahyuddin]
* with_scope is protected. #8524 [Josh Peek]
* Quickref for association methods. #7723 [marclove, Mindsweeper]
* Calculations: return nil average instead of 0 when there are no rows to average. #8298 [davidw]
* acts_as_nested_set: direct_children is sorted correctly. #4761 [Josh Peek, rails@33lc0.net]
* Raise an exception if both attr_protected and attr_accessible are declared. #8507 [stellsmi]
* SQLite, MySQL, PostgreSQL, Oracle: quote column names in column migration SQL statements. #8466 [marclove, lorenjohnson]
* Allow nil serialized attributes with a set class constraint. #7293 [sandofsky]
* Oracle: support binary fixtures. #7987 [Michael Schoen]
* Fixtures: pull fixture insertion into the database adapters. #7987 [Michael Schoen]
* Announce migration versions as they're performed. [Jeremy Kemper]
* find gracefully copes with blank :conditions. #7599 [Dan Manges, johnnyb]
* validates_numericality_of takes :greater_than, :greater_than_or_equal_to, :equal_to, :less_than, :less_than_or_equal_to, :odd, and :even options. #3952 [Bob Silva, Dan Kubb, Josh Peek]
* MySQL: create_database takes :charset and :collation options. Charset defaults to utf8. #8448 [matt]
* Find with a list of ids supports limit/offset. #8437 [hrudududu]
* Optimistic locking: revert the lock version when an update fails. #7840 [plang]
* Migrations: add_column supports custom column types. #7742 [jsgarvin, Theory]
* Load database adapters on demand. Eliminates config.connection_adapters and RAILS_CONNECTION_ADAPTERS. Add your lib directory to the $LOAD_PATH and put your custom adapter in lib/active_record/connection_adapters/adaptername_adapter.rb. This way you can provide custom adapters as plugins or gems without modifying Rails. [Jeremy Kemper]
* Ensure that associations with :dependent => :delete_all respect :conditions option. Closes #8034 [Jack Danger Canty, Josh Peek, Rick Olson]
* belongs_to assignment creates a new proxy rather than modifying its target in-place. #8412 [mmangino@elevatedrails.com]
* Fix column type detection while loading fixtures. Closes #7987 [roderickvd]
* Document deep eager includes. #6267 [Josh Susser, Dan Manges]
* Document warning that associations names shouldn't be reserved words. #4378 [murphy@cYcnus.de, Josh Susser]
* Sanitize Base#inspect. #8392, #8623 [Nik Wakelin, jnoon]
* Replace the transaction {|transaction|..} semantics with a new Exception ActiveRecord::Rollback. [Michael Koziarski]
* Oracle: extract column length for CHAR also. #7866 [ymendel]
* Document :allow_nil option for validates_acceptance_of since it defaults to true. [tzaharia]
* Update documentation for :dependent declaration so that it explicitly uses the non-deprecated API. [Jack Danger Canty]
* Add documentation caveat about when to use count_by_sql. [fearoffish]
* Enhance documentation for increment_counter and decrement_counter. [fearoffish]
* Provide brief introduction to what optimistic locking is. [fearoffish]
* Add documentation for :encoding option to mysql adapter. [marclove]
* Added short-hand declaration style to migrations (inspiration from Sexy Migrations, http://errtheblog.com/post/2381) [David Heinemeier Hansson]. Example:
create_table "products" do |t|
t.column "shop_id", :integer
t.column "creator_id", :integer
t.column "name", :string, :default => "Untitled"
t.column "value", :string, :default => "Untitled"
t.column "created_at", :datetime
t.column "updated_at", :datetime
end
...can now be written as:
create_table :products do |t|
t.integer :shop_id, :creator_id
t.string :name, :value, :default => "Untitled"
t.timestamps
end
* Use association name for the wrapper element when using .to_xml. Previous behavior lead to non-deterministic situations with STI and polymorphic associations. [Michael Koziarski, jstrachan]
* Improve performance of calling .create on has_many :through associations. [evan]
* Improved cloning performance by relying less on exception raising #8159 [Blaine]
* Added ActiveRecord::Base.inspect to return a column-view like #<Post id:integer, title:string, body:text> [David Heinemeier Hansson]
* Added yielding of Builder instance for ActiveRecord::Base#to_xml calls [David Heinemeier Hansson]
* Small additions and fixes for ActiveRecord documentation. Closes #7342 [Jeremy McAnally]
* Add helpful debugging info to the ActiveRecord::StatementInvalid exception in ActiveRecord::ConnectionAdapters::SqliteAdapter#table_structure. Closes #7925. [court3nay]
* SQLite: binary escaping works with $KCODE='u'. #7862 [tsuka]
* Base#to_xml supports serialized attributes. #7502 [jonathan]
* Base.update_all :order and :limit options. Useful for MySQL updates that must be ordered to avoid violating unique constraints. [Jeremy Kemper]
* Remove deprecated object transactions. People relying on this functionality should install the object_transactions plugin at http://code.bitsweat.net/svn/object_transactions. Closes #5637 [Michael Koziarski, Jeremy Kemper]
* PostgreSQL: remove DateTime -> Time downcast. Warning: do not enable translate_results for the C bindings if you have timestamps outside Time's domain. [Jeremy Kemper]
* find_or_create_by_* takes a hash so you can create with more attributes than are in the method name. For example, Person.find_or_create_by_name(:name => 'Henry', :comments => 'Hi new user!') is equivalent to Person.find_by_name('Henry') || Person.create(:name => 'Henry', :comments => 'Hi new user!'). #7368 [Josh Susser]
* Make sure with_scope takes both :select and :joins into account when setting :readonly. Allows you to save records you retrieve using method_missing on a has_many :through associations. [Michael Koziarski]
* Allow a polymorphic :source for has_many :through associations. Closes #7143 [protocool]
* Consistent public/protected/private visibility for chained methods. #7813 [Dan Manges]
* Oracle: fix quoted primary keys and datetime overflow. #7798 [Michael Schoen]
* Consistently quote primary key column names. #7763 [toolmantim]
* Fixtures: fix YAML ordered map support. #2665 [Manuel Holtgrewe, nfbuckley]
* DateTimes assume the default timezone. #7764 [Geoff Buesing]
* Sybase: hide timestamp columns since they're inherently read-only. #7716 [Mike Joyce]
* Oracle: overflow Time to DateTime. #7718 [Michael Schoen]
* PostgreSQL: don't use async_exec and async_query with postgres-pr. #7727, #7762 [flowdelic, toolmantim]
* Fix has_many :through << with custom foreign keys. #6466, #7153 [naffis, Rich Collins]
* Test DateTime native type in migrations, including an edge case with dates
during calendar reform. #7649, #7724 [fedot, Geoff Buesing]
* SQLServer: correctly schema-dump tables with no indexes or descending indexes. #7333, #7703 [Jakob Skjerning, Tom Ward]
* SQLServer: recognize real column type as Ruby float. #7057 [sethladd, Tom Ward]
* Added fixtures :all as a way of loading all fixtures in the fixture directory at once #7214 [Manfred Stienstra]
* Added database connection as a yield parameter to ActiveRecord::Base.transaction so you can manually rollback [David Heinemeier Hansson]. Example:
transaction do |transaction|
david.withdrawal(100)
mary.deposit(100)
transaction.rollback! # rolls back the transaction that was otherwise going to be successful
end
* Made increment_counter/decrement_counter play nicely with optimistic locking, and added a more general update_counters method [Jamis Buck]
* Reworked David's query cache to be available as Model.cache {...}. For the duration of the block no select query should be run more then once. Any inserts/deletes/executes will flush the whole cache however [Tobias Lütke]
Task.cache { Task.find(1); Task.find(1) } #=> 1 query
* When dealing with SQLite3, use the table_info pragma helper, so that the bindings can do some translation for when sqlite3 breaks incompatibly between point releases. [Jamis Buck]
* Oracle: fix lob and text default handling. #7344 [gfriedrich, Michael Schoen]
* SQLServer: don't choke on strings containing 'null'. #7083 [Jakob Skjerning]
* MySQL: blob and text columns may not have defaults in 5.x. Update fixtures schema for strict mode. #6695 [Dan Kubb]
* update_all can take a Hash argument. sanitize_sql splits into two methods for conditions and assignment since NULL values and delimiters are handled differently. #6583, #7365 [sandofsky, Assaf]
* MySQL: SET SQL_AUTO_IS_NULL=0 so 'where id is null' doesn't select the last inserted id. #6778 [Jonathan Viney, timc]
* Use Date#to_s(:db) for quoted dates. #7411 [Michael Schoen]
* Don't create instance writer methods for class attributes. Closes #7401 [Rick Olson]
* Docs: validations examples. #7343 [zackchandler]
* Add missing tests ensuring callbacks work with class inheritance. Closes #7339 [sandofsky]
* Fixtures use the table name and connection from set_fixture_class. #7330 [Anthony Eden]
* Remove useless code in #attribute_present? since 0 != blank?. Closes #7249 [Josh Susser]
* Fix minor doc typos. Closes #7157 [Josh Susser]
* Fix incorrect usage of #classify when creating the eager loading join statement. Closes #7044 [Josh Susser]
* SQLServer: quote table name in indexes query. #2928 [keithm@infused.org]
* Subclasses of an abstract class work with single-table inheritance. #5704, #7284 [BertG, nick+rails@ag.arizona.edu]
* Make sure sqlite3 driver closes open connections on disconnect [Rob Rasmussen]
* [DOC] clear up some ambiguity with the way has_and_belongs_to_many creates the default join table name. #7072 [Jeremy McAnally]
* change_column accepts :default => nil. Skip column options for primary keys. #6956, #7048 [Dan Manges, Jeremy Kemper]
* MySQL, PostgreSQL: change_column_default quotes the default value and doesn't lose column type information. #3987, #6664 [Jonathan Viney, Manfred Stienstra, altano@bigfoot.com]
* Oracle: create_table takes a :sequence_name option to override the 'tablename_seq' default. #7000 [Michael Schoen]
* MySQL: retain SSL settings on reconnect. #6976 [randyv2]
* Apply scoping during initialize instead of create. Fixes setting of foreign key when using find_or_initialize_by with scoping. [Cody Fauser]
* SQLServer: handle [quoted] table names. #6635 [rrich]
* acts_as_nested_set works with single-table inheritance. #6030 [Josh Susser]
* PostgreSQL, Oracle: correctly perform eager finds with :limit and :order. #4668, #7021 [eventualbuddha, Michael Schoen]
* Pass a range in :conditions to use the SQL BETWEEN operator. #6974 [Dan Manges]
Student.find(:all, :conditions => { :grade => 9..12 })
* Fix the Oracle adapter for serialized attributes stored in CLOBs. Closes #6825 [mschoen, tdfowler]