Changes:
* Pass a range in :conditions to use the SQL BETWEEN operator. #6974
[dcmanges] Student.find(:all, :conditions => { :grade => 9..12 })
* Don't create instance writer methods for class attributes. [Rick]
* 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]
* SQLServer: don't choke on strings containing 'null'. #7083 [Jakob S]
* Consistently use LOWER() for uniqueness validations (rather than mixing with
UPPER()) so the database can always use a functional index on the lowercased
column. #6495 [Si]
* MySQL: SET SQL_AUTO_IS_NULL=0 so 'where id is null' doesn't select the last
inserted id. #6778 [Jonathan Viney, timc]
* Fixtures use the table name and connection from set_fixture_class. #7330
[Anthony Eden]
* SQLServer: quote table name in indexes query. #2928 [keithm@infused.org]
Active Record connects business objects and database tables to create
a persistable domain model where logic and data is presented in one
wrapping. It is an implementation of the object-relational mapping
(ORM) pattern by the same name as described by Martin Fowler:
"An object that wraps a row in a database table or view, encapsulates
the database access, and adds domain logic on that data."
Active Records main contribution to the pattern is to relieve the
original of two stunting problems: lack of associations and
inheritance. By adding a simple domain language-like set of macros to
describe the former and integrating the Single Table Inheritance
pattern for the latter, Active Record narrows the gap of functionality
between the data mapper and active record approach.