Permalink
Browse files

Various fixes for sqlserver_adapter (odbc statement finishing, ado sc…

…hema dumper, drop index). Closes #4831. [kajism@yahoo.com]

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@4279 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
  • Loading branch information...
1 parent 94e3e22 commit 8df0dad4aca911ed89b3a3ed412ae631ca377da9 Marcel Molina committed Apr 26, 2006
Showing with 32 additions and 18 deletions.
  1. +2 −0 activerecord/CHANGELOG
  2. +30 −18 activerecord/lib/active_record/connection_adapters/sqlserver_adapter.rb
View
@@ -1,5 +1,7 @@
*SVN*
+* Various fixes for sqlserver_adapter (odbc statement finishing, ado schema dumper, drop index). Closes #4831. [kajism@yahoo.com]
+
* Add support for :order option to with_scope. Closes #3887. [eric.daspet@survol.net]
* Prettify output of schema_dumper by making things line up. Closes #4241 [Caio Chassot <caio@v2studio.com>]
@@ -90,9 +90,6 @@ def type_cast(value)
def cast_to_time(value)
return value if value.is_a?(Time)
time_array = ParseDate.parsedate(value)
- time_array[0] ||= 2000
- time_array[1] ||= 1
- time_array[2] ||= 1
Time.send(Base.default_timezone, *time_array) rescue nil
end
@@ -208,7 +205,7 @@ def supports_migrations? #:nodoc:
# Returns true if the connection is active.
def active?
- @connection.execute("SELECT 1") { }
+ @connection.execute("SELECT 1").finish
true
rescue DBI::DatabaseError, DBI::InterfaceError
false
@@ -277,7 +274,7 @@ def insert(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil)
end
end
log(sql, name) do
- @connection.execute(sql)
+ @connection.execute(sql).finish
id_value || select_one("SELECT @@IDENTITY AS Ident")["Ident"]
end
ensure
@@ -296,11 +293,19 @@ def execute(sql, name = nil)
insert(sql, name)
elsif sql =~ /^\s*UPDATE|^\s*DELETE/i
log(sql, name) do
- @connection.execute(sql)
+ ret = @connection.execute(sql).finish
retVal = select_one("SELECT @@ROWCOUNT AS AffectedRows")["AffectedRows"]
end
else
- log(sql, name) { @connection.execute(sql) }
+ log(sql, name) do
+ if block_given?
+ @connection.execute(sql) do |sth|
+ yield(sth)
+ end
+ else
+ @connection.execute(sql).finish
+ end
+ end
end
end
@@ -411,23 +416,30 @@ def current_database
end
def tables(name = nil)
- execute("SELECT table_name from information_schema.tables WHERE table_type = 'BASE TABLE'", name).inject([]) do |tables, field|
- table_name = field[0]
- tables << table_name unless table_name == 'dtproperties'
- tables
+ execute("SELECT table_name from information_schema.tables WHERE table_type = 'BASE TABLE'", name) do |sth|
+ sth.inject([]) do |tables, field|
+ table_name = field[0]
+ tables << table_name unless table_name == 'dtproperties'
+ tables
+ end
end
end
def indexes(table_name, name = nil)
- indexes = []
- execute("EXEC sp_helpindex #{table_name}", name).each do |index|
- unique = index[1] =~ /unique/
- primary = index[1] =~ /primary key/
- if !primary
- indexes << IndexDefinition.new(table_name, index[0], unique, index[2].split(", "))
+ ActiveRecord::Base.connection.instance_variable_get("@connection")["AutoCommit"] = false
+ indexes = []
+ execute("EXEC sp_helpindex #{table_name}", name) do |sth|
+ sth.each do |index|
+ unique = index[1] =~ /unique/
+ primary = index[1] =~ /primary key/
+ if !primary
+ indexes << IndexDefinition.new(table_name, index[0], unique, index[2].split(", "))
+ end
end
end
indexes
+ ensure
+ ActiveRecord::Base.connection.instance_variable_get("@connection")["AutoCommit"] = true
end
def rename_table(name, new_name)
@@ -466,7 +478,7 @@ def remove_default_constraint(table_name, column_name)
end
def remove_index(table_name, options = {})
- execute "DROP INDEX #{table_name}.#{index_name(table_name, options)}"
+ execute "DROP INDEX #{table_name}.#{quote_column_name(index_name(table_name, options))}"
end
def type_to_sql(type, limit = nil) #:nodoc:

0 comments on commit 8df0dad

Please sign in to comment.