diff options
author | Marcel Molina <marcel@vernix.org> | 2005-10-12 23:42:54 +0000 |
---|---|---|
committer | Marcel Molina <marcel@vernix.org> | 2005-10-12 23:42:54 +0000 |
commit | af0df03fd3bd020edbdeb00a18d11129fef1a60b (patch) | |
tree | c6b0d202652c5b210e4b80ff307efde0dcf8e5c1 /activerecord/lib | |
parent | f175547e585923420a0ce1c550f6a595755aca22 (diff) | |
download | rails-af0df03fd3bd020edbdeb00a18d11129fef1a60b.tar.gz rails-af0df03fd3bd020edbdeb00a18d11129fef1a60b.tar.bz2 rails-af0df03fd3bd020edbdeb00a18d11129fef1a60b.zip |
Update DB2 adapter. Closes #2206.
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@2546 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'activerecord/lib')
-rw-r--r-- | activerecord/lib/active_record/connection_adapters/db2_adapter.rb | 37 |
1 files changed, 35 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/db2_adapter.rb b/activerecord/lib/active_record/connection_adapters/db2_adapter.rb index 58dd04a784..ab13494153 100644 --- a/activerecord/lib/active_record/connection_adapters/db2_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/db2_adapter.rb @@ -92,8 +92,25 @@ begin end def add_limit_offset!(sql, options) - sql << " FETCH FIRST #{options[:limit]} ROWS ONLY" if options[:limit] and !options[:limit].nil? - raise ArgumentError, 'add_limit_offset! not implemented.' if options[:offset] and !options[:offset].nil? + if options[:limit] and !options[:limit].nil? + # "FETCH FIRST 0 ROWS ONLY" is not allowed, so we have + # to use a cheap trick. + if options[:limit] == 0 + if sql =~ /WHERE/i + sql.sub!(/WHERE/i, 'WHERE 1 = 2 AND ') + elsif + sql =~ /ORDER\s+BY/i + sql.sub!(/ORDER\s+BY/i, 'WHERE 1 = 2 ORDER BY') + else + sql << 'WHERE 1 = 2' + end + else + sql << " FETCH FIRST #{options[:limit]} ROWS ONLY" + end + end + if options[:offset] and !options[:offset].nil? + raise ArgumentError, ':offset option is not yet supported!' + end end def columns(table_name, name = nil) @@ -112,6 +129,22 @@ begin result end + def native_database_types + { + :primary_key => "int generated by default as identity primary key", + :string => { :name => "varchar", :limit => 255 }, + :text => { :name => "clob", :limit => 32768 }, + :integer => { :name => "int" }, + :float => { :name => "float" }, + :datetime => { :name => "timestamp" }, + :timestamp => { :name => "timestamp" }, + :time => { :name => "time" }, + :date => { :name => "date" }, + :binary => { :name => "blob", :limit => 32768 }, + :boolean => { :name => "decimal", :limit => 1 } + } + end + private def last_insert_id |