aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
authorDavid Heinemeier Hansson <david@loudthinking.com>2005-07-17 09:52:00 +0000
committerDavid Heinemeier Hansson <david@loudthinking.com>2005-07-17 09:52:00 +0000
commit9870396ed13b720980957e848e4ce65582fd0d0b (patch)
tree7bbf760cea6582dc8199bd299917e07c98e7e5bb /activerecord
parentbb62568cc36399ba1b6f5d6e9db9f7a71072ad1b (diff)
downloadrails-9870396ed13b720980957e848e4ce65582fd0d0b.tar.gz
rails-9870396ed13b720980957e848e4ce65582fd0d0b.tar.bz2
rails-9870396ed13b720980957e848e4ce65582fd0d0b.zip
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
Diffstat (limited to 'activerecord')
-rw-r--r--activerecord/CHANGELOG2
-rw-r--r--activerecord/lib/active_record/associations/has_and_belongs_to_many_association.rb4
-rwxr-xr-xactiverecord/lib/active_record/connection_adapters/abstract_adapter.rb2
-rw-r--r--activerecord/lib/active_record/connection_adapters/db2_adapter.rb13
-rwxr-xr-xactiverecord/test/base_test.rb2
-rw-r--r--activerecord/test/fixtures/db_definitions/db2.drop.sql2
6 files changed, 14 insertions, 11 deletions
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;