January 05, 2011
I just released Oracle enhanced adapter version 1.3.2 with latest bug fixes and enhancements.
Bug fixes and improvements
Main fixes and improvements are the following:
- Previous version 1.3.1 was checking if environment variable TNS_NAME is set and only then used provided
databaseconnection parameter (in
database.yml) as TNS connection alias and otherwise defaulted to connection to
localhostwith provided database name. This was causing issues in many setups.
Therefore now it is simplified that if you provide only
database.ymlthen it by default will be used as TNS connection alias or TNS connection string.
- Numeric username and/or password in
database.ymlwill be automatically converted to string (previously you needed to quote them using
- Database connection pool and JNDI connections are now better supported for JRuby on Tomcat and JBoss application servers.
- NLS connection parameters are supported via environment variables or in
database.yml. For example, if you need to have
NLS_DATE_FORMATin your database session to be
DD-MON-YYYYthen either you specify
database.ymlfor particular database connection or set
ENV['NLS_DATE_FORMAT'] = 'DD-MON-YYYY'in e.g.
config/initializers/oracle.rb. You can see the list of all NLS parameters in source code.
It might be necessary to specify these NLS session parameters only if you work with some existing legacy database which has, for example, some stored procedures that require particular NLS settings. If this is new database just for Rails purposes then there is no need to change any settings.
- If you have defined foreign key constraints then they are now correctly dumped in
db/schema.rbafter all table definitions. Previously they were dumped after corresponding table which sometimes caused that schema could not be recreated from schema dump because it tried to load constraint which referenced table which has not yet been defined.
- If you are using
NVARCHAR2data types then now
NVARCHAR2type values are correctly quoted with
N'...'in SQL statements.
Upcoming changes in Rails 3.1
Meanwhile Oracle enhanced adapter is updated to pass all ActiveRecord unit tests in Rails development master branch and also updated according to Arel changes. Arel library is responsible for all SQL statement generation in Rails 3.0.
Rails 3.0.3 is using Arel version 2.0 which was full rewrite of Arel 1.0 (that was used initial Rails 3.0 version) and as a result of this rewrite it is much faster and now Rails 3.0.3 ActiveRecord is already little bit faster than in ActiveRecord in Rails 2.3.
There are several improvements in Rails master branch which are planned for Rails 3.1 version which are already supported by Oracle enhanced adapter. One improvement is that ActiveRecord will support prepared statement caching (initially for standard simple queries like
find by primary key) which will reduce SQL statement parsing time and memory usage (and probably Oracle DBAs will complain less about Rails dynamic SQL generation :)). The other improvement is that ActiveRecord will correctly load included associations with more than 1000 records (which currently fails with ORA-01795 error).
But I will write more about these improvements sometime later when Rails 3.1 will be released :)
As always you can install Oracle enhanced adapter on any Ruby platform (Ruby 1.8.7 or Ruby 1.9.2 or JRuby 1.5) with
gem install activerecord-oracle_enhanced-adapter
If you have any questions please use discussion group or report issues at GitHub or post comments here. And the best way how to contribute is to fix some issue or create some enhancement and send me pull request at GitHub.