From 69cb942d9b72d9a18f8d00c5887f2532bdda0a0f Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sun, 19 Dec 2004 16:21:55 +0000 Subject: Changed the interface on AbstractAdapter to require that adapters return the number of affected rows on delete and update operations. Added that Base.update_all and Base.delete_all return an integer of the number of affected rows #341 git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@228 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- .../active_record/connection_adapters/abstract_adapter.rb | 4 ++-- .../lib/active_record/connection_adapters/mysql_adapter.rb | 8 ++++++-- .../active_record/connection_adapters/postgresql_adapter.rb | 9 +++++++-- .../lib/active_record/connection_adapters/sqlite_adapter.rb | 12 ++++++++++-- 4 files changed, 25 insertions(+), 8 deletions(-) (limited to 'activerecord/lib/active_record/connection_adapters') diff --git a/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb b/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb index 66b5962b18..b521a0fdf8 100755 --- a/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb @@ -285,10 +285,10 @@ module ActiveRecord # Returns the last auto-generated ID from the affected table. def insert(sql, name = nil, pk = nil, id_value = nil) end - # Executes the update statement. + # Executes the update statement and returns the number of rows affected. def update(sql, name = nil) end - # Executes the delete statement. + # Executes the delete statement and returns the number of rows affected. def delete(sql, name = nil) end def reset_runtime # :nodoc: diff --git a/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb b/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb index 55c15c6823..f9c38470aa 100755 --- a/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb @@ -67,8 +67,12 @@ module ActiveRecord log(sql, name, @connection) { |connection| connection.query(sql) } end - alias_method :update, :execute - alias_method :delete, :execute + def update(sql, name = nil) + execute(sql, name) + @connection.affected_rows + end + + alias_method :delete, :update def begin_db_transaction begin diff --git a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb index fb54642d3a..359cb067a2 100644 --- a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb @@ -64,8 +64,13 @@ module ActiveRecord log(sql, name, @connection) { |connection| connection.query(sql) } end - alias_method :update, :execute - alias_method :delete, :execute + def update(sql, name = nil) + result = nil + log(sql, name, @connection) { |connection| result = connection.exec(sql) } + result.cmdtuples + end + + alias_method :delete, :update def begin_db_transaction() execute "BEGIN" end def commit_db_transaction() execute "COMMIT" end diff --git a/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb b/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb index 8a77cb0ce7..604fc960aa 100644 --- a/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb @@ -62,8 +62,16 @@ module ActiveRecord end end - alias_method :update, :execute - alias_method :delete, :execute + def update(sql, name = nil) + execute(sql, name) + @connection.changes + end + + def delete(sql, name = nil) + sql += " WHERE 1=1" unless sql =~ /WHERE/i + execute(sql, name) + @connection.changes + end def begin_db_transaction() execute "BEGIN" end def commit_db_transaction() execute "COMMIT" end -- cgit v1.2.3