From 9870396ed13b720980957e848e4ce65582fd0d0b Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sun, 17 Jul 2005 09:52:00 +0000 Subject: Fixed incompatibility in DB2 adapter with the new limit/offset approach #1718 [Maik Schmidt] git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@1850 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- activerecord/CHANGELOG | 2 ++ .../associations/has_and_belongs_to_many_association.rb | 4 ++-- .../active_record/connection_adapters/abstract_adapter.rb | 2 ++ .../lib/active_record/connection_adapters/db2_adapter.rb | 13 +++++-------- activerecord/test/base_test.rb | 2 +- activerecord/test/fixtures/db_definitions/db2.drop.sql | 2 ++ 6 files changed, 14 insertions(+), 11 deletions(-) (limited to 'activerecord') diff --git a/activerecord/CHANGELOG b/activerecord/CHANGELOG index e15f0a042b..1eaa5517d0 100644 --- a/activerecord/CHANGELOG +++ b/activerecord/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Fixed incompatibility in DB2 adapter with the new limit/offset approach #1718 [Maik Schmidt] + * Added :select option to find which can specify a different value than the default *, like find(:all, :select => "first_name, last_name"), if you either only want to select part of the columns or exclude columns otherwise included from a join #1338 [Stefan Kaes] diff --git a/activerecord/lib/active_record/associations/has_and_belongs_to_many_association.rb b/activerecord/lib/active_record/associations/has_and_belongs_to_many_association.rb index 39a6a7ed5f..9183445d74 100644 --- a/activerecord/lib/active_record/associations/has_and_belongs_to_many_association.rb +++ b/activerecord/lib/active_record/associations/has_and_belongs_to_many_association.rb @@ -122,7 +122,7 @@ module ActiveRecord when @association_foreign_key attributes[column.name] = record.quoted_id else - value = record[column.name] + value = @owner.send(:quote, record[column.name], column) attributes[column.name] = value unless value.nil? end attributes @@ -130,7 +130,7 @@ module ActiveRecord sql = "INSERT INTO #{@join_table} (#{@owner.send(:quoted_column_names, attributes).join(', ')}) " + - "VALUES (#{attributes.values.collect { |value| @owner.send(:quote, value) }.join(', ')})" + "VALUES (#{attributes.values.join(', ')})" @owner.connection.execute(sql) end diff --git a/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb b/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb index 163925df42..6eda3c0624 100755 --- a/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb @@ -323,6 +323,8 @@ module ActiveRecord when String if column && column.type == :binary "'#{quote_string(column.string_to_binary(value))}'" # ' (for ruby-mode) + elsif column && [:integer, :float].include?(column.type) + value.to_s else "'#{quote_string(value)}'" # ' (for ruby-mode) end diff --git a/activerecord/lib/active_record/connection_adapters/db2_adapter.rb b/activerecord/lib/active_record/connection_adapters/db2_adapter.rb index 232764e37c..a80a227a6d 100644 --- a/activerecord/lib/active_record/connection_adapters/db2_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/db2_adapter.rb @@ -28,7 +28,7 @@ begin end module ConnectionAdapters - # The DB2 adapter works with the C-based CLI driver (http://raa.ruby-lang.org/project/ruby-db2/). + # The DB2 adapter works with the C-based CLI driver (http://rubyforge.org/projects/ruby-dbi/) # # Options: # @@ -91,12 +91,9 @@ begin string.gsub(/'/, "''") # ' (for ruby-mode) end - def add_limit_with_offset!(sql, limit, offset) - raise ArgumentError, 'add_limit_with_offset! not implemented' - end - - def add_limit_without_offset!(sql, limit) - sql << " FETCH FIRST #{limit} ROWS ONLY" + 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? end def columns(table_name, name = nil) @@ -128,7 +125,7 @@ begin stmt = nil log(sql, name) do stmt = DB2::Statement.new(@connection) - stmt.exec_direct("#{sql} with ur") + stmt.exec_direct("#{sql.gsub(/=\s*null/i, 'IS NULL')} with ur") end rows = [] diff --git a/activerecord/test/base_test.rb b/activerecord/test/base_test.rb index 8b316df190..d91a719f72 100755 --- a/activerecord/test/base_test.rb +++ b/activerecord/test/base_test.rb @@ -347,7 +347,7 @@ class BasicsTest < Test::Unit::TestCase end def test_update_many - topic_data = { "1" => { "content" => "1 updated" }, "2" => { "content" => "2 updated" } } + topic_data = { 1 => { "content" => "1 updated" }, 2 => { "content" => "2 updated" } } updated = Topic.update(topic_data.keys, topic_data.values) assert_equal 2, updated.size diff --git a/activerecord/test/fixtures/db_definitions/db2.drop.sql b/activerecord/test/fixtures/db_definitions/db2.drop.sql index 844bf3e2f8..65bd11e7fa 100644 --- a/activerecord/test/fixtures/db_definitions/db2.drop.sql +++ b/activerecord/test/fixtures/db_definitions/db2.drop.sql @@ -21,4 +21,6 @@ DROP TABLE authors; DROP TABLE tasks; DROP TABLE categories; DROP TABLE categories_posts; +DROP TABLE fk_test_has_pk; +DROP TABLE fk_test_has_fk; -- cgit v1.2.3