diff options
Diffstat (limited to 'activerecord/lib/active_record/connection_adapters')
-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 |